Removes limits on eating, centralizes nutrition changing.

This commit is contained in:
Atermonera
2020-04-29 14:14:11 -07:00
committed by VirgoBot
parent 8c5c0a7cfb
commit f1cabd6742
38 changed files with 434 additions and 81 deletions

View File

@@ -427,3 +427,5 @@
#define EXAMINE_SKIPHANDS 0x0040 #define EXAMINE_SKIPHANDS 0x0040
#define EXAMINE_SKIPLEGS 0x0080 #define EXAMINE_SKIPLEGS 0x0080
#define EXAMINE_SKIPFEET 0x0100 #define EXAMINE_SKIPFEET 0x0100
#define MAX_NUTRITION 500

View File

@@ -3,11 +3,11 @@
desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger if they were of our kind." desc = "Permits us to syphon the DNA from a human. They become one with us, and we become stronger if they were of our kind."
ability_icon_state = "ling_absorb_dna" ability_icon_state = "ling_absorb_dna"
genomecost = 0 genomecost = 0
verbpath = /mob/proc/changeling_absorb_dna verbpath = /mob/living/proc/changeling_absorb_dna
//Absorbs the victim's DNA. Requires a strong grip on the victim. //Absorbs the victim's DNA. Requires a strong grip on the victim.
//Doesn't cost anything as it's the most basic ability. //Doesn't cost anything as it's the most basic ability.
/mob/proc/changeling_absorb_dna() /mob/living/proc/changeling_absorb_dna()
set category = "Changeling" set category = "Changeling"
set name = "Absorb DNA" set name = "Absorb DNA"
@@ -67,8 +67,7 @@
to_chat(src, "<span class='notice'>We have absorbed [T]!</span>") to_chat(src, "<span class='notice'>We have absorbed [T]!</span>")
src.visible_message("<span class='danger'>[src] sucks the fluids from [T]!</span>") src.visible_message("<span class='danger'>[src] sucks the fluids from [T]!</span>")
to_chat(T, "<span class='danger'>You have been absorbed by the changeling!</span>") to_chat(T, "<span class='danger'>You have been absorbed by the changeling!</span>")
if(src.nutrition < 400) adjust_nutrition(T.nutrition)
src.nutrition = min((src.nutrition + T.nutrition), 400)
changeling.chem_charges += 10 changeling.chem_charges += 10
if(changeling.readapts <= 0) if(changeling.readapts <= 0)
changeling.readapts = 0 //SANITYYYYYY changeling.readapts = 0 //SANITYYYYYY

View File

@@ -83,7 +83,7 @@
#define SIPHON_CORE_TO_ENERGY 0.5 #define SIPHON_CORE_TO_ENERGY 0.5
// This is called every tick, so long as a link exists between the target and the Technomancer. // This is called every tick, so long as a link exists between the target and the Technomancer.
/obj/item/weapon/spell/energy_siphon/proc/siphon(atom/movable/siphoning, mob/user) /obj/item/weapon/spell/energy_siphon/proc/siphon(atom/movable/siphoning, mob/living/user)
var/list/things_to_drain = things_to_siphon // Temporary list copy of what we're gonna steal from. var/list/things_to_drain = things_to_siphon // Temporary list copy of what we're gonna steal from.
var/charge_to_give = 0 // How much energy to give to the Technomancer at the end. var/charge_to_give = 0 // How much energy to give to the Technomancer at the end.
var/flow_remaining = calculate_spell_power(flow_rate) var/flow_remaining = calculate_spell_power(flow_rate)
@@ -141,7 +141,7 @@
if( (core.max_energy - core.energy) < charge_to_give ) // We have some overflow, if this is true. if( (core.max_energy - core.energy) < charge_to_give ) // We have some overflow, if this is true.
if(user.isSynthetic()) // Let's do something with it, if we're a robot. if(user.isSynthetic()) // Let's do something with it, if we're a robot.
charge_to_give = charge_to_give - (core.max_energy - core.energy) charge_to_give = charge_to_give - (core.max_energy - core.energy)
user.nutrition = min(user.nutrition + (charge_to_give / SIPHON_FBP_TO_ENERGY), 400) user.adjust_nutrition(charge_to_give / SIPHON_FBP_TO_ENERGY)
to_chat(user, "<span class='notice'>Redirected energy to internal microcell.</span>") to_chat(user, "<span class='notice'>Redirected energy to internal microcell.</span>")
else else
to_chat(user, "<span class='notice'>Stolen [charge_to_give * CELLRATE] kJ.</span>") to_chat(user, "<span class='notice'>Stolen [charge_to_give * CELLRATE] kJ.</span>")

View File

@@ -384,7 +384,7 @@
spaceport_freebie = 0 spaceport_freebie = 0
last_spaceport_action = "" last_spaceport_action = ""
/obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user) /obj/machinery/computer/arcade/orion_trail/attack_hand(mob/living/user)
if(..()) if(..())
return return
if(fuel <= 0 || food <=0 || settlers.len == 0) if(fuel <= 0 || food <=0 || settlers.len == 0)

View File

@@ -105,8 +105,8 @@
H.adjustBrainLoss(-(rand(1,3))) H.adjustBrainLoss(-(rand(1,3)))
// Also recharge their internal battery. // Also recharge their internal battery.
if(H.isSynthetic() && H.nutrition < 450) if(H.isSynthetic() && H.nutrition < MAX_NUTRITION)
H.nutrition = min(H.nutrition+10, 450) H.nutrition = min(H.nutrition+10, MAX_NUTRITION)
cell.use(7000/450*10) cell.use(7000/450*10)
// And clear up radiation // And clear up radiation

View File

@@ -109,7 +109,7 @@
qdel(src) qdel(src)
return return
/obj/item/weapon/pen/crayon/attack(mob/M as mob, mob/user as mob) /obj/item/weapon/pen/crayon/attack(mob/living/M as mob, mob/living/user as mob)
if(M == user) if(M == user)
to_chat(user, "You take a bite of the crayon and swallow it.") to_chat(user, "You take a bite of the crayon and swallow it.")
user.nutrition += 1 user.nutrition += 1
@@ -195,7 +195,7 @@
shadeColour = input(user, "Please select the shade colour.", "Marker colour") as color shadeColour = input(user, "Please select the shade colour.", "Marker colour") as color
return return
/obj/item/weapon/pen/crayon/marker/attack(mob/M as mob, mob/user as mob) /obj/item/weapon/pen/crayon/marker/attack(mob/living/M as mob, mob/living/user as mob)
if(M == user) if(M == user)
to_chat(user, "You take a bite of the marker and swallow it.") to_chat(user, "You take a bite of the marker and swallow it.")
user.nutrition += 1 user.nutrition += 1

View File

@@ -492,7 +492,7 @@ HALOGEN COUNTER - Radcount on mobs
for(var/potential_color in S.slime_mutation) for(var/potential_color in S.slime_mutation)
var/mob/living/simple_mob/slime/xenobio/slime = potential_color var/mob/living/simple_mob/slime/xenobio/slime = potential_color
mutations.Add(initial(slime.slime_color)) mutations.Add(initial(slime.slime_color))
user.show_message("Potental to mutate into [english_list(mutations)] colors.<br>Extract potential: [S.cores]<br>Nutrition: [S.nutrition]/[S.get_max_nutrition()]") user.show_message("Potental to mutate into [english_list(mutations)] colors.<br>Extract potential: [S.cores]<br>Nutrition: [S.nutrition]/[S.max_nutrition]")
if (S.nutrition < S.get_starve_nutrition()) if (S.nutrition < S.get_starve_nutrition())
user.show_message("<span class='alert'>Warning: Subject is starving!</span>") user.show_message("<span class='alert'>Warning: Subject is starving!</span>")

View File

@@ -43,7 +43,7 @@
/obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob) /obj/item/weapon/reagent_containers/food/snacks/attack_self(mob/user as mob)
return return
/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone) /obj/item/weapon/reagent_containers/food/snacks/attack(mob/living/M as mob, mob/user as mob, def_zone)
if(reagents && !reagents.total_volume) if(reagents && !reagents.total_volume)
to_chat(user, "<span class='danger'>None of [src] left!</span>") to_chat(user, "<span class='danger'>None of [src] left!</span>")
user.drop_from_inventory(src) user.drop_from_inventory(src)
@@ -79,6 +79,7 @@
to_chat(M, "<span class='notice'>You take a bite of [src].</span>") to_chat(M, "<span class='notice'>You take a bite of [src].</span>")
if (fullness > 350 && fullness <= 550) if (fullness > 350 && fullness <= 550)
to_chat(M, "<span class='notice'>You unwillingly chew a bit of [src].</span>") to_chat(M, "<span class='notice'>You unwillingly chew a bit of [src].</span>")
<<<<<<< HEAD
if (fullness > 550 && fullness <= 650) if (fullness > 550 && fullness <= 650)
to_chat(M, "<span class='notice'>You swallow some more of the [src], causing your belly to swell out a little.</span>") to_chat(M, "<span class='notice'>You swallow some more of the [src], causing your belly to swell out a little.</span>")
if (fullness > 650 && fullness <= 1000) if (fullness > 650 && fullness <= 1000)
@@ -96,6 +97,8 @@
to_chat(M, "<span class='danger'>You cannot force any more of [src] to go down your throat.</span>") to_chat(M, "<span class='danger'>You cannot force any more of [src] to go down your throat.</span>")
return 0*/ return 0*/
//VOREStation Edit End //VOREStation Edit End
=======
>>>>>>> 61c4929... Merge pull request #7045 from Neerti/let_them_eat_all_the_cake
else if(user.a_intent == I_HURT) else if(user.a_intent == I_HURT)
return ..() return ..()
@@ -123,12 +126,16 @@
to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>") to_chat(user, "<span class='warning'>\The [blocked] is in the way!</span>")
return return
<<<<<<< HEAD
/*if (fullness <= (550 * (1 + M.overeatduration / 1000))) // Vorestation edit /*if (fullness <= (550 * (1 + M.overeatduration / 1000))) // Vorestation edit
user.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>") user.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>")
else else
user.visible_message("<span class='danger'>[user] cannot force anymore of [src] down [M]'s throat.</span>") user.visible_message("<span class='danger'>[user] cannot force anymore of [src] down [M]'s throat.</span>")
return 0*/ return 0*/
user.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>") // Vorestation edit user.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>") // Vorestation edit
=======
user.visible_message("<span class='danger'>[user] attempts to feed [M] [src].</span>")
>>>>>>> 61c4929... Merge pull request #7045 from Neerti/let_them_eat_all_the_cake
user.setClickCooldown(user.get_attack_speed(src)) user.setClickCooldown(user.get_attack_speed(src))
if(!do_mob(user, M)) return if(!do_mob(user, M)) return

View File

@@ -83,7 +83,7 @@ the artifact triggers the rage.
/datum/modifier/berserk/on_applied() /datum/modifier/berserk/on_applied()
if(ishuman(holder)) // Most other mobs don't really use nutrition and can't get it back. 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>") holder.visible_message("<span class='critical'>\The [holder] descends into an all consuming rage!</span>")
// End all stuns. // End all stuns.

View File

@@ -184,7 +184,7 @@
if(ishuman(holder)) if(ishuman(holder))
var/mob/living/carbon/human/H = holder var/mob/living/carbon/human/H = holder
var/starting_nutrition = H.nutrition var/starting_nutrition = H.nutrition
H.nutrition = max(0, H.nutrition - 10) H.adjust_nutrition(-10)
var/healing_amount = starting_nutrition - H.nutrition 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. 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 healing_amount *= -2

View File

@@ -6,10 +6,8 @@
var/turf/T = loc var/turf/T = loc
light_amount = T.get_lumcount() * 5 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 if(light_amount > 2) //if there's enough light, heal
adjustBruteLoss(-1) adjustBruteLoss(-1)
adjustFireLoss(-1) adjustFireLoss(-1)

View File

@@ -28,7 +28,7 @@
var/rads = radiation/25 var/rads = radiation/25
radiation -= rads radiation -= rads
nutrition += rads adjust_nutrition(rads)
heal_overall_damage(rads,rads) heal_overall_damage(rads,rads)
adjustOxyLoss(-(rads)) adjustOxyLoss(-(rads))
adjustToxLoss(-(rads)) adjustToxLoss(-(rads))

View File

@@ -36,12 +36,23 @@
/* VOREStation Edit - Duplicated in our code /* VOREStation Edit - Duplicated in our code
/mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE) /mob/living/carbon/Moved(atom/old_loc, direction, forced = FALSE)
. = ..() . = ..()
<<<<<<< HEAD
if(src.nutrition && src.stat != 2) if(src.nutrition && src.stat != 2)
src.nutrition -= DEFAULT_HUNGER_FACTOR/10 src.nutrition -= DEFAULT_HUNGER_FACTOR/10
if(src.m_intent == "run") if(src.m_intent == "run")
src.nutrition -= DEFAULT_HUNGER_FACTOR/10 src.nutrition -= DEFAULT_HUNGER_FACTOR/10
if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360) if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
src.bodytemperature += 2 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
>>>>>>> 61c4929... Merge pull request #7045 from Neerti/let_them_eat_all_the_cake
// Moving around increases germ_level faster // Moving around increases germ_level faster
if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8)) if(germ_level < GERM_LEVEL_MOVE_CAP && prob(8))

View File

@@ -27,7 +27,7 @@
if(can_feel_pain()) if(can_feel_pain())
if(halloss >= 10) tally += (halloss / 10) //halloss shouldn't slow you down if you can't even feel it 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 if (hungry >= 70) tally += hungry/50
//VOREstation start //VOREstation start

View File

@@ -302,7 +302,7 @@
var/delay_length = round(active_regen_delay * species.active_regen_mult) var/delay_length = round(active_regen_delay * species.active_regen_mult)
if(do_after(src,delay_length)) if(do_after(src,delay_length))
nutrition -= 200 adjust_nutrition(-200)
for(var/obj/item/organ/I in internal_organs) for(var/obj/item/organ/I in internal_organs)
if(I.robotic >= ORGAN_ROBOT) // No free robofix. if(I.robotic >= ORGAN_ROBOT) // No free robofix.
@@ -345,5 +345,5 @@
active_regen = FALSE active_regen = FALSE
else else
to_chat(src, "<span class='critical'>Your regeneration is interrupted!</span>") to_chat(src, "<span class='critical'>Your regeneration is interrupted!</span>")
nutrition -= 75 adjust_nutrition(-75)
active_regen = FALSE active_regen = FALSE

View File

@@ -275,7 +275,7 @@
if(rad_organ && !rad_organ.is_broken()) if(rad_organ && !rad_organ.is_broken())
var/rads = radiation/25 var/rads = radiation/25
radiation -= rads radiation -= rads
nutrition += rads adjust_nutrition(rads)
adjustBruteLoss(-(rads)) adjustBruteLoss(-(rads))
adjustFireLoss(-(rads)) adjustFireLoss(-(rads))
adjustOxyLoss(-(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(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. 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) var/recovery_amt = max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM)
//to_world("Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]") //to_world("Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]")
// log_debug("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) for(var/datum/modifier/mod in modifiers)
if(!isnull(mod.metabolism_percent)) if(!isnull(mod.metabolism_percent))
nutrition_reduction *= mod.metabolism_percent nutrition_reduction *= mod.metabolism_percent
adjust_nutrition(-nutrition_reduction)
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
if(noisy == TRUE && nutrition < 250 && prob(10)) //VOREStation edit for hunger noises. if(noisy == TRUE && nutrition < 250 && prob(10)) //VOREStation edit for hunger noises.
var/sound/growlsound = sound(get_sfx("hunger_sounds")) var/sound/growlsound = sound(get_sfx("hunger_sounds"))
@@ -1469,7 +1461,7 @@
if(air_master.current_cycle%3==1) if(air_master.current_cycle%3==1)
if(!(M.status_flags & GODMODE)) if(!(M.status_flags & GODMODE))
M.adjustBruteLoss(5) M.adjustBruteLoss(5)
nutrition += 10 adjust_nutrition(10)
/mob/living/carbon/human/proc/handle_changeling() /mob/living/carbon/human/proc/handle_changeling()
if(mind && mind.changeling) if(mind && mind.changeling)

View File

@@ -189,11 +189,12 @@ var/datum/species/shapeshifter/promethean/prometheans
if(!(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET)))) if(!(H.shoes || (H.wear_suit && (H.wear_suit.body_parts_covered & FEET))))
for(var/obj/O in T) for(var/obj/O in T)
O.clean_blood() 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)) if (istype(T, /turf/simulated))
var/turf/simulated/S = T var/turf/simulated/S = T
T.clean_blood() T.clean_blood()
S.dirt = 0 S.dirt = 0
<<<<<<< HEAD
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.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
if(H.clean_blood(1)) 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.nutrition = max(H.nutrition, min(500, H.nutrition + rand(15, 30))) //VOREStation Edit: Gives nutrition up to a point instead of being capped
@@ -215,6 +216,29 @@ var/datum/species/shapeshifter/promethean/prometheans
if(H.w_uniform.clean_blood()) if(H.w_uniform.clean_blood())
H.update_inv_w_uniform(0) 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.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(rand(10, 20))
if(H.clean_blood(1))
H.adjust_nutrition(rand(5, 15))
if(H.r_hand)
if(H.r_hand.clean_blood())
H.adjust_nutrition(rand(5, 15))
if(H.l_hand)
if(H.l_hand.clean_blood())
H.adjust_nutrition(rand(5, 15))
if(H.head)
if(H.head.clean_blood())
H.update_inv_head(0)
H.adjust_nutrition(rand(5, 15))
if(H.wear_suit)
if(H.wear_suit.clean_blood())
H.update_inv_wear_suit(0)
H.adjust_nutrition(rand(5, 15))
if(H.w_uniform)
if(H.w_uniform.clean_blood())
H.update_inv_w_uniform(0)
H.adjust_nutrition(rand(5, 15))
>>>>>>> 61c4929... Merge pull request #7045 from Neerti/let_them_eat_all_the_cake
//End cleaning code. //End cleaning code.
var/datum/gas_mixture/environment = T.return_air() var/datum/gas_mixture/environment = T.return_air()
@@ -297,8 +321,7 @@ var/datum/species/shapeshifter/promethean/prometheans
if(ToxReg) if(ToxReg)
strain_negation += to_pay * max(0, (1 - ToxReg.get_strain_percent())) 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.adjust_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.
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. 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.

View File

@@ -586,11 +586,9 @@
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 = T.get_lumcount() * 10 light_amount = T.get_lumcount() * 10
H.nutrition += light_amount H.adjust_nutrition(light_amount)
H.shock_stage -= light_amount H.shock_stage -= light_amount
if(H.nutrition > 450)
H.nutrition = 450
if(light_amount >= 3) //if there's enough light, heal if(light_amount >= 3) //if there's enough light, heal
H.adjustBruteLoss(-(round(light_amount/2))) H.adjustBruteLoss(-(round(light_amount/2)))
H.adjustFireLoss(-(round(light_amount/2))) H.adjustFireLoss(-(round(light_amount/2)))

View File

@@ -1086,7 +1086,7 @@ default behaviour is:
if(getBruteLoss() < 50) if(getBruteLoss() < 50)
adjustBruteLoss(3) adjustBruteLoss(3)
else else
nutrition -= 40 adjust_nutrition(-40)
adjustToxLoss(-3) adjustToxLoss(-3)
spawn(350) spawn(350)
@@ -1362,6 +1362,9 @@ default behaviour is:
/mob/living/proc/needs_to_breathe() /mob/living/proc/needs_to_breathe()
return !isSynthetic() return !isSynthetic()
/mob/living/proc/adjust_nutrition(amount)
nutrition = between(0, nutrition + amount, max_nutrition)
/mob/living/vv_get_header() /mob/living/vv_get_header()
. = ..() . = ..()
. += {" . += {"

View File

@@ -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/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/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/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 var/list/atom/hallucinations = list() //A list of hallucinated people that try to attack the mob. See /obj/effect/fake_attacker in hallucinations.dm

View File

@@ -1,8 +1,7 @@
// Handles hunger, starvation, growth, and eatting humans. // 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/adjust_nutrition(input, var/heal = 1)
/mob/living/simple_mob/slime/xenobio/proc/adjust_nutrition(input, var/heal = 1) ..(input)
nutrition = between(0, nutrition + input, get_max_nutrition())
if(input > 0) if(input > 0)
// Gain around one level per 50 nutrition. // Gain around one level per 50 nutrition.
@@ -19,10 +18,6 @@
adjustOxyLoss(-input * 0.2) adjustOxyLoss(-input * 0.2)
adjustCloneLoss(-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 /mob/living/simple_mob/slime/xenobio/proc/get_grow_nutrition() // Above it we grow, below it we can eat
return is_adult ? 1000 : 800 return is_adult ? 1000 : 800

View File

@@ -1,3 +1,4 @@
<<<<<<< HEAD
// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear. // These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
/mob/living/simple_mob/slime/xenobio /mob/living/simple_mob/slime/xenobio
@@ -276,3 +277,285 @@
lines.Add(description_info) lines.Add(description_info)
return lines.Join("\n") return lines.Join("\n")
=======
// These slimes have the mechanics xenobiologists care about, such as reproduction, mutating into new colors, and being able to submit through fear.
/mob/living/simple_mob/slime/xenobio
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.
var/mob/living/victim = null // the person the slime is currently feeding on
var/rainbow_core_candidate = TRUE // If false, rainbow cores cannot make this type randomly.
var/mutation_chance = 25 // Odds of spawning as a new color when reproducing. Can be modified by certain xenobio products. Carried across generations of slimes.
var/list/slime_mutation = list(
/mob/living/simple_mob/slime/xenobio/orange,
/mob/living/simple_mob/slime/xenobio/metal,
/mob/living/simple_mob/slime/xenobio/blue,
/mob/living/simple_mob/slime/xenobio/purple
)
var/amount_grown = 0 // controls how long the slime has been overfed, if 10, grows or reproduces
var/number = 0 // This is used to make the slime semi-unique for indentification.
var/harmless = FALSE // Set to true when pacified. Makes the slime harmless, not get hungry, and not be able to grow/reproduce.
/mob/living/simple_mob/slime/xenobio/Initialize(mapload, var/mob/living/simple_mob/slime/xenobio/my_predecessor)
ASSERT(ispath(ai_holder_type, /datum/ai_holder/simple_mob/xenobio_slime))
number = rand(1, 1000)
update_name()
. = ..() // This will make the AI and do the other mob constructor things. It will also return the default hint at the end.
if(my_predecessor)
inherit_information(my_predecessor)
/mob/living/simple_mob/slime/xenobio/Destroy()
if(victim)
stop_consumption() // Unbuckle us from our victim.
return ..()
// Called when a slime makes another slime by splitting. The predecessor slime will be deleted shortly afterwards.
/mob/living/simple_mob/slime/xenobio/proc/inherit_information(var/mob/living/simple_mob/slime/xenobio/predecessor)
if(!predecessor)
return
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
var/datum/ai_holder/simple_mob/xenobio_slime/previous_AI = predecessor.ai_holder
ASSERT(istype(AI))
ASSERT(istype(previous_AI))
// Now to transfer the information.
// Newly made slimes are bit more rebellious than their predecessors, but they also somewhat forget the atrocities the xenobiologist may have done.
AI.discipline = max(previous_AI.discipline - 1, 0)
AI.obedience = max(previous_AI.obedience - 1, 0)
AI.resentment = max(previous_AI.resentment - 1, 0)
AI.rabid = previous_AI.rabid
/mob/living/simple_mob/slime/xenobio/update_icon()
icon_living = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"][victim ? " eating" : ""]"
icon_dead = "[icon_state_override ? "[icon_state_override] slime" : "slime"] [is_adult ? "adult" : "baby"] dead"
icon_rest = icon_dead
..() // This will apply the correct icon_state and do the other overlay-related things.
/mob/living/simple_mob/slime/xenobio/handle_special()
if(stat != DEAD)
handle_nutrition()
if(victim)
handle_consumption()
handle_stuttering() // ??
..()
/mob/living/simple_mob/slime/xenobio/examine(mob/user)
. = ..()
if(hat)
. += "It is wearing \a [hat]."
if(stat == DEAD)
. += "It appears to be dead."
else if(incapacitated(INCAPACITATION_DISABLED))
. += "It appears to be incapacitated."
else if(harmless)
. += "It appears to have been pacified."
else
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
. += "It seems very, very angry and upset."
else if(AI.obedience >= 5)
. += "It looks rather obedient."
else if(AI.discipline)
. += "It has been subjugated by force, at least for now."
/mob/living/simple_mob/slime/xenobio/proc/make_adult()
if(is_adult)
return
is_adult = TRUE
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()
/mob/living/simple_mob/slime/xenobio/proc/update_name()
if(harmless) // Docile slimes are generally named, so we shouldn't mess with it.
return
name = "[slime_color] [is_adult ? "adult" : "baby"] [initial(name)] ([number])"
real_name = name
/mob/living/simple_mob/slime/xenobio/update_mood()
var/old_mood = mood
if(incapacitated(INCAPACITATION_DISABLED))
mood = "sad"
else if(harmless)
mood = ":33"
else if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
if(AI.rabid)
mood = "angry"
else if(AI.target)
mood = "mischevous"
else if(AI.discipline)
mood = "pout"
else
mood = ":3"
else
mood = ":3"
if(old_mood != mood)
update_icon()
/mob/living/simple_mob/slime/xenobio/proc/enrage()
if(harmless)
return
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.enrage()
/mob/living/simple_mob/slime/xenobio/proc/pacify()
harmless = TRUE
if(has_AI())
var/datum/ai_holder/simple_mob/xenobio_slime/AI = ai_holder
AI.pacify()
faction = "neutral"
// If for whatever reason the mob AI (or player) decides to try to attack something anyways.
melee_damage_upper = 0
melee_damage_lower = 0
update_mood()
// These are verbs so that player slimes can evolve/split.
/mob/living/simple_mob/slime/xenobio/verb/evolve()
set category = "Slime"
set desc = "This will let you evolve from baby to adult slime."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot evolve..."))
return
if(!is_adult)
if(amount_grown >= 10)
make_adult()
else
to_chat(src, span("warning", "I am not ready to evolve yet..."))
else
to_chat(src, span("warning", "I have already evolved..."))
/mob/living/simple_mob/slime/xenobio/verb/reproduce()
set category = "Slime"
set desc = "This will make you split into four new slimes."
if(stat)
to_chat(src, span("warning", "I must be conscious to do this..."))
return
if(harmless)
to_chat(src, span("warning", "I have been pacified. I cannot reproduce..."))
return
if(is_adult)
if(amount_grown >= 10)
// Check if there's enough 'room' to split.
var/list/nearby_things = orange(1, src)
var/free_tiles = 0
for(var/turf/T in nearby_things)
var/free = TRUE
if(T.density) // No walls.
continue
for(var/atom/movable/AM in T)
if(AM.density)
free = FALSE
break
if(free)
free_tiles++
if(free_tiles < 3) // Three free tiles are needed, as four slimes are made and the 4th tile is from the center tile that the current slime occupies.
to_chat(src, span("warning", "It is too cramped here to reproduce..."))
return
var/list/babies = list()
for(var/i = 1 to 4)
babies.Add(make_new_slime())
var/mob/living/simple_mob/slime/new_slime = pick(babies)
new_slime.universal_speak = universal_speak
if(src.mind)
src.mind.transfer_to(new_slime)
else
new_slime.key = src.key
qdel(src)
else
to_chat(src, span("warning", "I am not ready to reproduce yet..."))
else
to_chat(src, span("warning", "I have not evolved enough to reproduce yet..."))
// Used when reproducing or dying.
/mob/living/simple_mob/slime/xenobio/proc/make_new_slime(var/desired_type)
var/t = src.type
if(desired_type)
t = desired_type
if(prob(mutation_chance / 10))
t = /mob/living/simple_mob/slime/xenobio/rainbow
else if(prob(mutation_chance) && slime_mutation.len)
t = slime_mutation[rand(1, slime_mutation.len)]
var/mob/living/simple_mob/slime/xenobio/baby = new t(loc, src)
// Handle 'inheriting' from parent slime.
baby.mutation_chance = mutation_chance
baby.power_charge = round(power_charge / 4)
if(!istype(baby, /mob/living/simple_mob/slime/xenobio/rainbow))
baby.unity = unity
baby.faction = faction
baby.friends = friends.Copy()
step_away(baby, src)
return baby
/mob/living/simple_mob/slime/xenobio/get_description_interaction()
var/list/results = list()
if(!stat)
results += "[desc_panel_image("slimebaton")]to stun the slime, if it's being bad."
results += ..()
return results
/mob/living/simple_mob/slime/xenobio/get_description_info()
var/list/lines = list()
var/intro_line = "Slimes are generally the test subjects of Xenobiology, with different colors having different properties. \
They can be extremely dangerous if not handled properly."
lines.Add(intro_line)
lines.Add(null) // To pad the line breaks.
var/list/rewards = list()
for(var/potential_color in slime_mutation)
var/mob/living/simple_mob/slime/S = potential_color
rewards.Add(initial(S.slime_color))
var/reward_line = "This color of slime can mutate into [english_list(rewards)] colors, when it reproduces. It will do so when it has eatten enough."
lines.Add(reward_line)
lines.Add(null)
lines.Add(description_info)
return lines.Join("\n")
>>>>>>> 61c4929... Merge pull request #7045 from Neerti/let_them_eat_all_the_cake

View File

@@ -112,9 +112,7 @@
var/bodytemperature = 310.055 //98.7 F var/bodytemperature = 310.055 //98.7 F
var/drowsyness = 0.0//Carbon var/drowsyness = 0.0//Carbon
var/charges = 0.0 var/charges = 0.0
var/nutrition = 400.0//Carbon
var/overeatduration = 0 // How long this guy is overeating //Carbon
var/paralysis = 0.0 var/paralysis = 0.0
var/stunned = 0.0 var/stunned = 0.0
var/weakened = 0.0 var/weakened = 0.0

View File

@@ -133,9 +133,9 @@ var/const/CE_STABLE_THRESHOLD = 0.5
// Without enough blood you slowly go hungry. // Without enough blood you slowly go hungry.
if(blood_volume < BLOOD_VOLUME_SAFE) if(blood_volume < BLOOD_VOLUME_SAFE)
if(nutrition >= 300) if(nutrition >= 300)
nutrition -= 10 adjust_nutrition(-10)
else if(nutrition >= 200) else if(nutrition >= 200)
nutrition -= 3 adjust_nutrition(-3)
//Bleeding out //Bleeding out
var/blood_max = 0 var/blood_max = 0

View File

@@ -18,8 +18,13 @@
owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>") owner.visible_message("<span class='danger'>\The [owner] twitches visibly!</span>")
/obj/item/organ/internal/cell/emp_act(severity) /obj/item/organ/internal/cell/emp_act(severity)
<<<<<<< HEAD
// ..() // VOREStation Edit - Don't take damage // ..() // VOREStation Edit - Don't take damage
owner.nutrition = max(0, owner.nutrition - rand(10/severity, 50/severity)) owner.nutrition = max(0, owner.nutrition - rand(10/severity, 50/severity))
=======
..()
owner.adjust_nutrition(-rand(10 / severity, 50 / severity))
>>>>>>> 61c4929... Merge pull request #7045 from Neerti/let_them_eat_all_the_cake
// Used for an MMI or posibrain being installed into a human. // Used for an MMI or posibrain being installed into a human.
/obj/item/organ/internal/mmi_holder /obj/item/organ/internal/mmi_holder

View File

@@ -130,7 +130,7 @@
used = TRUE used = TRUE
desc += " This one has already been used." desc += " This one has already been used."
overlays.Cut() overlays.Cut()
target.nutrition += amount target.adjust_nutrition(amount)
user.custom_emote(message = "connects \the [src] to [user == target ? "their" : "[target]'s"] charging port, expending it.") user.custom_emote(message = "connects \the [src] to [user == target ? "their" : "[target]'s"] charging port, expending it.")
/obj/item/weapon/cell/emergency_light /obj/item/weapon/cell/emergency_light

View File

@@ -76,7 +76,7 @@
var/start_nutrition = H.nutrition var/start_nutrition = H.nutrition
var/end_nutrition = 0 var/end_nutrition = 0
H.nutrition -= rechargeamt / 15 H.adjust_nutrition(-rechargeamt / 15)
end_nutrition = H.nutrition end_nutrition = H.nutrition

View File

@@ -197,11 +197,11 @@
impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser
/obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0) /obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0)
var/mob/M = target var/mob/living/M = target
if(ishuman(target)) //These rays make plantmen fat. if(ishuman(target)) //These rays make plantmen fat.
var/mob/living/carbon/human/H = M var/mob/living/carbon/human/H = M
if((H.species.flags & IS_PLANT) && (M.nutrition < 500)) if((H.species.flags & IS_PLANT) && (M.nutrition < 500))
M.nutrition += 30 M.adjust_nutrition(30)
else if (istype(target, /mob/living/carbon/)) else if (istype(target, /mob/living/carbon/))
M.show_message("<font color='blue'>The radiation beam dissipates harmlessly through your body.</font>") M.show_message("<font color='blue'>The radiation beam dissipates harmlessly through your body.</font>")
else else

View File

@@ -50,7 +50,7 @@
is_vampire = 1 //VOREStation Edit END is_vampire = 1 //VOREStation Edit END
if(alien == IS_SLIME) // Treat it like nutriment for the jello, but not equivalent. if(alien == IS_SLIME) // Treat it like nutriment for the jello, but not equivalent.
M.heal_organ_damage(0.2 * removed * volume_mod, 0) // More 'effective' blood means more usable material. M.heal_organ_damage(0.2 * removed * volume_mod, 0) // More 'effective' blood means more usable material.
M.nutrition += 20 * removed * volume_mod M.adjust_nutrition(20 * removed * volume_mod)
M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed)
M.adjustToxLoss(removed / 2) // Still has some water in the form of plasma. M.adjustToxLoss(removed / 2) // Still has some water in the form of plasma.
return return

View File

@@ -138,7 +138,7 @@
/datum/reagent/ethanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/ethanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(issmall(M)) removed *= 2 if(issmall(M)) removed *= 2
M.nutrition += nutriment_factor * removed M.adjust_nutrition(nutriment_factor * removed)
var/strength_mod = 1 var/strength_mod = 1
if(alien == IS_SKRELL) if(alien == IS_SKRELL)
strength_mod *= 5 strength_mod *= 5
@@ -448,7 +448,7 @@
glass_icon = DRINK_ICON_NOISY glass_icon = DRINK_ICON_NOISY
/datum/reagent/sugar/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/sugar/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.nutrition += removed * 3 M.adjust_nutrition(removed * 3)
var/effective_dose = dose var/effective_dose = dose
if(issmall(M)) if(issmall(M))

View File

@@ -46,8 +46,12 @@
if(IS_CHIMERA) removed *= 0.25 //VOREStation Edit if(IS_CHIMERA) removed *= 0.25 //VOREStation Edit
if(issmall(M)) removed *= 2 // Small bodymass, more effect from lower volume. if(issmall(M)) removed *= 2 // Small bodymass, more effect from lower volume.
M.heal_organ_damage(0.5 * removed, 0) M.heal_organ_damage(0.5 * removed, 0)
<<<<<<< HEAD
if(M.species.gets_food_nutrition) //VOREStation edit. If this is set to 0, they don't get nutrition from food. if(M.species.gets_food_nutrition) //VOREStation edit. If this is set to 0, they don't get nutrition from food.
M.nutrition += nutriment_factor * removed // For hunger and fatness M.nutrition += nutriment_factor * removed // For hunger and fatness
=======
M.adjust_nutrition(nutriment_factor * removed)
>>>>>>> 61c4929... Merge pull request #7045 from Neerti/let_them_eat_all_the_cake
M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed)
/datum/reagent/nutriment/glucose /datum/reagent/nutriment/glucose
@@ -388,10 +392,7 @@
overdose = REAGENTS_OVERDOSE overdose = REAGENTS_OVERDOSE
/datum/reagent/lipozine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/lipozine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.nutrition = max(M.nutrition - 10 * removed, 0) M.adjust_nutrition(-10 * removed)
M.overeatduration = 0
if(M.nutrition < 0)
M.nutrition = 0
/* Non-food stuff like condiments */ /* Non-food stuff like condiments */
@@ -659,7 +660,7 @@
return return
/datum/reagent/drink/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/drink/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
M.nutrition += nutrition * removed M.adjust_nutrition(nutrition * removed)
M.dizziness = max(0, M.dizziness + adj_dizzy) M.dizziness = max(0, M.dizziness + adj_dizzy)
M.drowsyness = max(0, M.drowsyness + adj_drowsy) M.drowsyness = max(0, M.drowsyness + adj_drowsy)
M.sleeping = max(0, M.sleeping + adj_sleepy) M.sleeping = max(0, M.sleeping + adj_sleepy)

View File

@@ -520,7 +520,7 @@
return return
if(alien == IS_SLIME) if(alien == IS_SLIME)
if(dose >= 5) //Not effective in small doses, though it causes toxloss at higher ones, it will make the regeneration for brute and burn more 'efficient' at the cost of more nutrition. if(dose >= 5) //Not effective in small doses, though it causes toxloss at higher ones, it will make the regeneration for brute and burn more 'efficient' at the cost of more nutrition.
M.nutrition -= removed * 2 M.adjust_nutrition(removed * 2)
M.adjustBruteLoss(-2 * removed) M.adjustBruteLoss(-2 * removed)
M.adjustFireLoss(-1 * removed) M.adjustFireLoss(-1 * removed)
chem_effective = 0.5 chem_effective = 0.5
@@ -548,7 +548,7 @@
if(alien == IS_SLIME) if(alien == IS_SLIME)
M.make_jittery(4) //Hyperactive fluid pumping results in unstable 'skeleton', resulting in vibration. M.make_jittery(4) //Hyperactive fluid pumping results in unstable 'skeleton', resulting in vibration.
if(dose >= 5) if(dose >= 5)
M.nutrition = (M.nutrition - (removed * 2)) //Sadly this movement starts burning food in higher doses. M.adjust_nutrition(-removed * 2) // Sadly this movement starts burning food in higher doses.
..() ..()
if(prob(5)) if(prob(5))
M.emote(pick("twitch", "blink_r", "shiver")) M.emote(pick("twitch", "blink_r", "shiver"))
@@ -738,7 +738,7 @@
if(prob(10)) if(prob(10))
H.vomit(1) H.vomit(1)
else if(H.nutrition > 30) else if(H.nutrition > 30)
H.nutrition = max(0, H.nutrition - round(30 * removed)) M.adjust_nutrition(-removed * 30)
else else
H.adjustToxLoss(-10 * removed) // Carthatoline based, considering cost. H.adjustToxLoss(-10 * removed) // Carthatoline based, considering cost.
@@ -1092,7 +1092,7 @@
M.make_jittery(5) M.make_jittery(5)
if(dose >= 20 || M.toxloss >= 60) //Core disentigration, cellular mass begins treating itself as an enemy, while maintaining regeneration. Slime-cancer. if(dose >= 20 || M.toxloss >= 60) //Core disentigration, cellular mass begins treating itself as an enemy, while maintaining regeneration. Slime-cancer.
M.adjustBrainLoss(2 * removed) M.adjustBrainLoss(2 * removed)
M.nutrition = max(H.nutrition - 20, 0) M.adjust_nutrition(-20)
if(M.bruteloss >= 60 && M.toxloss >= 60 && M.brainloss >= 30) //Total Structural Failure. Limbs start splattering. if(M.bruteloss >= 60 && M.toxloss >= 60 && M.brainloss >= 30) //Total Structural Failure. Limbs start splattering.
var/obj/item/organ/external/O = pick(H.organs) var/obj/item/organ/external/O = pick(H.organs)
if(prob(20) && !istype(O, /obj/item/organ/external/chest/unbreakable/slime) && !istype(O, /obj/item/organ/external/groin/unbreakable/slime)) if(prob(20) && !istype(O, /obj/item/organ/external/chest/unbreakable/slime) && !istype(O, /obj/item/organ/external/groin/unbreakable/slime))

View File

@@ -19,7 +19,7 @@
if(alien == IS_SLIME) if(alien == IS_SLIME)
removed *= 0.25 // Results in half the standard tox as normal. Prometheans are 'Small' for flaps. removed *= 0.25 // Results in half the standard tox as normal. Prometheans are 'Small' for flaps.
if(dose >= 10) if(dose >= 10)
M.nutrition += strength * removed //Body has to deal with the massive influx of toxins, rather than try using them to repair. M.adjust_nutrition(strength * removed) // Body has to deal with the massive influx of toxins, rather than try using them to repair.
else else
M.heal_organ_damage((10/strength) * removed, (10/strength) * removed) //Doses of toxins below 10 units, and 10 strength, are capable of providing useful compounds for repair. M.heal_organ_damage((10/strength) * removed, (10/strength) * removed) //Doses of toxins below 10 units, and 10 strength, are capable of providing useful compounds for repair.
M.adjustToxLoss(strength * removed) M.adjustToxLoss(strength * removed)
@@ -396,7 +396,7 @@
/datum/reagent/toxin/sifslurry/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) /datum/reagent/toxin/sifslurry/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_DIONA) // Symbiotic bacteria. if(alien == IS_DIONA) // Symbiotic bacteria.
M.nutrition += strength * removed M.adjust_nutrition(strength * removed)
return return
else else
M.add_modifier(/datum/modifier/slow_pulse, 30 SECONDS) M.add_modifier(/datum/modifier/slow_pulse, 30 SECONDS)

View File

@@ -300,13 +300,11 @@
icon_state ="booksmoke" icon_state ="booksmoke"
desc = "This book is overflowing with the dank arts." desc = "This book is overflowing with the dank arts."
/obj/item/weapon/spellbook/oneuse/smoke/recoil(mob/user as mob) /obj/item/weapon/spellbook/oneuse/smoke/recoil(mob/living/user as mob)
..() ..()
to_chat(user, "<span class='caution'>Your stomach rumbles...</span>") to_chat(user, "<span class='caution'>Your stomach rumbles...</span>")
if(user.nutrition) if(user.nutrition)
user.nutrition -= 200 user.adjust_nutrition(-200)
if(user.nutrition <= 0)
user.nutrition = 0
/obj/item/weapon/spellbook/oneuse/blind /obj/item/weapon/spellbook/oneuse/blind
spell = /spell/targeted/genetic/blind spell = /spell/targeted/genetic/blind

View File

@@ -424,7 +424,7 @@
stage = 2 stage = 2
/datum/disease2/effect/hungry/activate(var/mob/living/carbon/mob,var/multiplier) /datum/disease2/effect/hungry/activate(var/mob/living/carbon/mob,var/multiplier)
mob.nutrition = max(0, mob.nutrition - 200) mob.adjust_nutrition(-200)
/datum/disease2/effect/fridge /datum/disease2/effect/fridge
name = "Reduced Circulation" name = "Reduced Circulation"

View File

@@ -17,7 +17,7 @@
affecting.heal_damage(25 * weakness, 25 * weakness) affecting.heal_damage(25 * weakness, 25 * weakness)
//H:heal_organ_damage(25, 25) //H:heal_organ_damage(25, 25)
H.vessel.add_reagent("blood",5) H.vessel.add_reagent("blood",5)
H.nutrition += 50 * weakness H.adjust_nutrition(50 * weakness)
H.adjustBrainLoss(-25 * weakness) H.adjustBrainLoss(-25 * weakness)
H.radiation -= min(H.radiation, 25 * weakness) H.radiation -= min(H.radiation, 25 * weakness)
H.bodytemperature = initial(H.bodytemperature) H.bodytemperature = initial(H.bodytemperature)

View File

@@ -14,6 +14,7 @@
C.adjustFireLoss(rand(5,25) * weakness) C.adjustFireLoss(rand(5,25) * weakness)
C.adjustBrainLoss(rand(1,5) * weakness) C.adjustBrainLoss(rand(1,5) * weakness)
C.apply_effect(25 * weakness, IRRADIATE) C.apply_effect(25 * weakness, IRRADIATE)
C.adjust_nutrition(-50 * weakness)
C.nutrition -= min(50 * weakness, C.nutrition) C.nutrition -= min(50 * weakness, C.nutrition)
C.make_dizzy(6 * weakness) C.make_dizzy(6 * weakness)
C.weakened += 6 * weakness C.weakened += 6 * weakness

View File

@@ -0,0 +1,36 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: Neerti
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "You can now eat as much food as you want, even while 'full'."