mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Removes limits on eating, centralizes nutrition changing.
This commit is contained in:
@@ -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
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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>")
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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>")
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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)))
|
||||||
|
|||||||
@@ -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()
|
||||||
. = ..()
|
. = ..()
|
||||||
. += {"
|
. += {"
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
36
html/changelogs/neerti_all_the_food.yml
Normal file
36
html/changelogs/neerti_all_the_food.yml
Normal 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'."
|
||||||
Reference in New Issue
Block a user