Adds "monster tamer".

This commit is contained in:
Screemonster
2018-02-19 14:03:34 +00:00
parent 3512c8d6bd
commit 635bbb7a73
4 changed files with 98 additions and 101 deletions

View File

@@ -1,5 +1,5 @@
/mob/living/carbon/human/proc/begin_reconstitute_form() //Scree's race ability.in exchange for: No cloning.
set name = "Begin Reconstitute Form"
set name = "Reconstitute Form"
set category = "Abilities"
if(world.time < last_special)
@@ -9,6 +9,9 @@
var/confirm = alert(usr, "Are you sure you want to completely reconstruct your form? This process can take up to twenty minutes, depending on how hungry you are, and you will be unable to move.", "Confirm Regeneration", "Yes", "No")
if(confirm == "Yes")
chimera_regenerate()
/mob/living/carbon/human/proc/chimera_regenerate()
var/mob/living/carbon/human/C = src
var/nutrition_used = C.nutrition/2
@@ -69,60 +72,6 @@
else
return //Something went wrong
/mob/living/carbon/human/proc/purge_impurities() //a lesser regeneration that just purges toxin/infections without healing. Does NOT clear reagents.
set name = "Purge Impurities"
set category = "Abilities"
if(world.time < last_special)
return
last_special = world.time + 50 //To prevent button spam.
var/mob/living/carbon/human/C = src
if(C.reviving == 1) //If they're already unable to
C << "Your body is currently still recovering from the last time you healed."
return
C.reviving = 1 // apply cooldown, this also locks out their main regen.
C << "<span class='notice'>You start to purge your body of poisons and intruders...</span>"
var/grossness = min(100, toxloss*5)
for(var/i = 0, i<10,i++) // tick some tox down. This'll clear 20 toxloss in total.
if(C)
C.adjustToxLoss(-2)
sleep(10)
for(var/obj/item/organ/external/E in C.organs) //half the germ_level of everything. If they're anything short of outright necrotic they'll be fine.
var/obj/item/organ/external/G = E
if(G.germ_level)
grossness += G.germ_level/10
G.germ_level = min(0, (G.germ_level/2) - 100)
for(var/obj/item/organ/internal/I in C.internal_organs)
var/obj/item/organ/internal/G = I
if(G.germ_level)
grossness += G.germ_level/5
G.germ_level = min(0, (G.germ_level/2) - 100)
//and now comes the fun part because they're gross
for (var/i = 0, i< grossness/10,i++)
if (prob(min(100, grossness)))
C << "<span class='warning'>You feel nauseous...</span>"
sleep(30)
if(prob(min(100, grossness/2))) // relatively small chance unless they really let themselves go to shit
C << "<span class='warning'>You double over, gagging!</span>"
C.Stun(3)
C.vomit()
sleep(50)
C << "<span class='notice'>You have finished purging your body of impurities.</span>"
spawn(300 SECONDS) //5 minute wait until you can purge or regenerate again.
C.reviving = 0
/mob/living/carbon/human/proc/hasnutriment()
if (src.bloodstr.has_reagent("nutriment", 30) || src.bloodstr.has_reagent("protein", 15)) //protein needs half as much. For reference, a steak contains 9u protein.
return 1

View File

@@ -24,7 +24,6 @@
inherent_verbs = list(
/mob/living/carbon/human/proc/begin_reconstitute_form,
/mob/living/carbon/human/proc/sonar_ping,
/mob/living/carbon/human/proc/purge_impurities,
/mob/living/carbon/human/proc/succubus_drain,
/mob/living/carbon/human/proc/succubus_drain_finalize,
/mob/living/carbon/human/proc/succubus_drain_lethal,
@@ -48,7 +47,7 @@
//primitive_form = "Farwa"
spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED //Whitelisted as restricted is broken.
flags = NO_SCAN //Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is.
flags = NO_SCAN | NO_INFECT //Dying as a chimera is, quite literally, a death sentence. Well, if it wasn't for their revive, that is.
appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR
flesh_color = "#AFA59E"
@@ -145,10 +144,10 @@
H << "<span class='danger'> Every movement, every flick, every sight and sound has your full attention, your hunting instincts on high alert... In fact, [M] looks extremely appetizing...</span>"
if(H.stat == CONSCIOUS)
H.emote("twitch")
if(!H.handling_hal)
spawn(0)
H.handle_feral()
else // nobody around
if(!H.handling_hal)
spawn(0)
H.handle_feral()
if(prob(2)) //periodic nagmessages
if(H.nutrition <= 100) //If hungry, nag them to go and find someone or something to eat.

View File

@@ -28,3 +28,29 @@
M.make_dizzy(24) // Intentionally higher than normal to compensate for it's previous effects.
if(dose * strength >= strength * 2.5) // Slurring takes longer. Again, intentional.
M.slurring = max(M.slurring, 30)
/datum/reagent/ethanol/monstertamer
name = "Monster Tamer"
id = "monstertamer"
description = "A questionably-delicious blend of a carnivore's favorite food and a potent neural depressant."
taste_description = "the gross yet satisfying combination of chewing on a raw steak while downing a shot of whiskey"
strength = 50
color = "#d3785d"
metabolism = REM * 2.5 // about right for mixing nutriment and ethanol.
glass_name = "Monster Tamer"
glass_desc = "This looks like a vaguely-alcoholic slurry of meat. Gross."
/datum/reagent/ethanol/monstertamer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
if(M.species.gets_food_nutrition) //it's still food!
M.nutrition += (nutriment_factor * removed)/2 // For hunger and fatness
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.feral > 0 && H.nutrition > 100 && H.traumatic_shock < min(60, H.nutrition/10) && H.jitteriness < 100) // same check as feral triggers to stop them immediately re-feralling
H.feral -= removed * 3 // should calm them down quick, provided they're actually in a state to STAY calm.
if (H.feral <=0) //check if they're unferalled
H.feral = 0
H << "<span class='info'>Your mind starts to clear, soothed into a state of clarity as your senses return.</span>"
log_and_message_admins("is no longer feral.", H)

View File

@@ -47,6 +47,22 @@
s.start()
holder.clear_reagents()
/datum/chemical_reaction/xenolazarus
name = "Discount Lazarus Injector"
id = "discountlazarusinjector"
result = null
required_reagents = list("monstertamer" = 5, "clonexadone" = 5)
/datum/chemical_reaction/xenolazarus/on_reaction(var/datum/reagents/holder, var/created_volume) //literally all this does is mash the regenerate button
if(ishuman(holder.my_atom))
var/mob/living/carbon/human/H = holder.my_atom
if(H.stat == DEAD && (/mob/living/carbon/human/proc/begin_reconstitute_form in H.verbs)) //no magical regen for non-regenners, and can't force the reaction on live ones
if(H.hasnutriment() && !H.reviving) // make sure it actually has the conditions to revive
H.visible_message("<span class='info'>[H] shudders briefly, then relaxes, faint movements stirring within.</span>")
H.chimera_regenerate()
else
H.visible_message("<span class='info'>[H] twitches for a moment, but remains still.</span>")
///////////////////////////////////////////////////////////////////////////////////
/// Vore Drugs
@@ -97,6 +113,13 @@
required_reagents = list("antifreeze" = 1, "gargleblaster" = 1, "syndicatebomb" =1)
result_amount = 3
/datum/chemical_reaction/drinks/monstertamer
name = "Monster Tamer"
id = "monstertamer"
result = "monstertamer"
required_reagents = list("whiskey" = 1, "protein" = 1)
result_amount = 2
///////////////////////////////
//SLIME CORES BELOW HERE///////
///////////////////////////////