From 67c8d706dc84112dfd86fe85a1a477ef8314d865 Mon Sep 17 00:00:00 2001 From: Screemonster Date: Tue, 20 Feb 2018 23:22:04 +0000 Subject: [PATCH] more sanity checks and sensible syntax --- .../station/station_special_abilities_vr.dm | 159 ++++++++---------- code/modules/reagents/Chemistry-Recipes_vr.dm | 6 +- 2 files changed, 76 insertions(+), 89 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index 7386b92ba0..e1f8e977da 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -12,60 +12,56 @@ chimera_regenerate() /mob/living/carbon/human/proc/chimera_regenerate() - var/mob/living/carbon/human/C = src - var/nutrition_used = C.nutrition/2 + var/nutrition_used = nutrition/2 - if(C.reviving == 1) //If they're already unable to - C << "You are already reconstructing, or your body is currently recovering from the intense process of your previous reconstitution." + if(reviving == TRUE) //If they're already unable to + to_chat(src, "You are already reconstructing, or your body is currently recovering from the intense process of your previous reconstitution.") return - if(C.stat == DEAD) //Uh oh, you died! - if(C.hasnutriment()) //Let's hope you have nutriment in you.... If not + if(stat == DEAD) //Uh oh, you died! + if(hasnutriment()) //Let's hope you have nutriment in you.... If not var/time = (240+960/(1 + nutrition_used/75)) - C.weakened = 10000 //Since it takes 1 tick to lose one weaken. Due to prior rounding errors, you'd sometimes unweaken before regenning. This fixes that. - C.reviving = 1 - C.canmove = 0 //Make them unable to move. In case they somehow get up before the delay. - C << "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds." - C.does_not_breathe = 1 //effectively makes them spaceworthy while regenning - - for(var/obj/item/organ/E in C.bad_external_organs) - var/obj/item/organ/external/affected = E - for(var/datum/wound/W in affected.wounds) // Fix internal bleeds at the start of the rejuv process. - if(istype(W, /datum/wound/internal_bleeding)) - affected.wounds -= W - affected.update_damages() + reviving = TRUE + to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.") + //don't need all the weakened, does_not_breathe, canmove, heal IB crap here like you do for live ones'cause they're DEAD. spawn(time SECONDS) - if(C) //Runtime prevention. - C << "Consciousness begins to stir as your new body awakens, ready to hatch.." - C.verbs += /mob/living/carbon/human/proc/hatch - return + if(src) //Runtime prevention. + if (stat == DEAD) // let's make sure they've not been defibbed or whatever + to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch.") + verbs += /mob/living/carbon/human/proc/hatch + return + else // their revive got aborted by being made not-dead. Remove their cooldown. + to_chat(src, "Your body has recovered from its ordeal, ready to regenerate itself again.") + reviving = FALSE + return else return //Something went wrong. else //Dead until nutrition injected. - C << "Your body is too damaged to regenerate without additional nutrients to feed what few living cells remain." + to_chat(src, "Your body is too damaged to regenerate without additional nutrients to feed what few living cells remain.") return - else if(C.stat != DEAD) //If they're alive at the time of reviving. + else if(stat != DEAD) //If they're alive at the time of regenerating. var/time = (240+960/(1 + nutrition_used/75)) - C.weakened = 10000 //Since it takes 1 tick to lose one weaken. Due to prior rounding errors, you'd sometimes unweaken before regenning. This fixes that. - C.reviving = 1 - C.canmove = 0 //Make them unable to move. In case they somehow get up before the delay. - C << "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds." - C.does_not_breathe = 1 //effectively makes them spaceworthy while regenning + weakened = 10000 //Since it takes 1 tick to lose one weaken. Due to prior rounding errors, you'd sometimes unweaken before regenning. This fixes that. + reviving = TRUE + canmove = 0 //Make them unable to move. In case they somehow get up before the delay. + to_chat(src, "You begin to reconstruct your form. You will not be able to move during this time. It should take aproximately [round(time)] seconds.") + does_not_breathe = 1 //effectively makes them spaceworthy while regenning spawn(time SECONDS) - if(C.stat != DEAD) //If they're still alive after regenning. - C << "Consciousness begins to stir as your new body awakens, ready to hatch.." - C.verbs += /mob/living/carbon/human/proc/hatch + if(stat != DEAD) //If they're still alive after regenning. + to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch..") + verbs += /mob/living/carbon/human/proc/hatch return - else if(C.stat == DEAD) - if(C.hasnutriment()) //Let's hope you have nutriment in you.... If not - C << "Consciousness begins to stir as your new body awakens, ready to hatch.." - C.verbs += /mob/living/carbon/human/proc/hatch + else if(stat == DEAD) + if(hasnutriment()) //Let's hope you have nutriment in you.... If not + to_chat(src, "Consciousness begins to stir as your new body awakens, ready to hatch..") + verbs += /mob/living/carbon/human/proc/hatch + return else //Dead until nutrition injected. - C << "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process." - C.reviving = 0 // so they can try again when they're given a kickstart + to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.") + reviving = FALSE // so they can try again when they're given a kickstart return else return //Something went wrong @@ -73,9 +69,9 @@ return //Something went wrong /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. + if (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 - else if (src.ingested.has_reagent("nutriment", 60) || src.ingested.has_reagent("protein", 30)) //try forcefeeding them, why not. Less effective. + else if (ingested.has_reagent("nutriment", 60) || src.ingested.has_reagent("protein", 30)) //try forcefeeding them, why not. Less effective. return 1 else return 0 @@ -91,59 +87,49 @@ var/confirm = alert(usr, "Are you sure you want to hatch right now? This will be very obvious to anyone in view.", "Confirm Regeneration", "Yes", "No") if(confirm == "Yes") - var/mob/living/carbon/human/C = src - if(C.stat == DEAD) //Uh oh, you died! - if(C.hasnutriment()) //Let's hope you have nutriment in you.... If not - if(C) //Runtime prevention. - C.nutrition -= C.nutrition/2 //Cut their nutrition in half. - var/old_nutrition = C.nutrition //Since the game is being annoying. - C << "Your new body awakens, bursting free from your old skin." - viewers(C) << "

The lifeless husk of [C] bursts open, revealing a new, intact copy in the pool of viscera.

" //Bloody hell... - var/T = get_turf(src) - new /obj/effect/gibspawner/human/scree(T) - var/braindamage = C.brainloss/2 //If you have 100 brainloss, it gives you 50. - C.does_not_breathe = 0 //start breathing again - C.revive() // I did have special snowflake code, but this is easier. - C.weakened = 2 //Not going to let you get up immediately. 2 ticks before you get up. Overrides the above 10000 weaken. - C.mutations.Remove(HUSK) - C.nutrition = old_nutrition - C.brainloss = (braindamage+10) //Gives them half their prior brain damage plus ten more. - C.update_canmove() - for(var/obj/item/W in C) - C.drop_from_inventory(W) - spawn(3600 SECONDS) //1 hour wait until you can revive. - C.reviving = 0 - C.verbs -= /mob/living/carbon/human/proc/hatch + if(stat == DEAD) //Uh oh, you died! + if(hasnutriment()) //Let's hope you have nutriment in you.... If not + if(src) //Runtime prevention. + chimera_hatch() + visible_message("

The lifeless husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

") //Bloody hell... + brainloss += 10 //Reviving from dead means you take a lil' brainloss on top of whatever was healed in the revive. return else - return //Ruuntime prevention - else - return //Something went wrong. + return //Runtime prevention + else //don't have nutriment to hatch! Or you somehow died in between completing your revive and hitting hatch. + to_chat(src, "Your body was unable to regenerate, what few living cells remain require additional nutrients to complete the process.") + reviving = FALSE // so they can try again when they're given a kickstart + return - else if(C.stat != DEAD) //If they're alive at the time of reviving. - C.nutrition -= C.nutrition/2 //Cut their nutrition in half. - var/old_nutrition = C.nutrition //Since the game is being annoying. - C << "Your new body awakens, bursting free from your old skin." - viewers(C) << "

The dormant husk of [C] bursts open, revealing a new, intact copy in the pool of viscera.

" //Bloody hell... - var/T = get_turf(src) - new /obj/effect/gibspawner/human/scree(T) - var/braindamage = C.brainloss/2 //If you have 100 brainloss, it gives you 50. - C.revive() // I did have special snowflake code, but this is easier. - C.weakened = 2 //Not going to let you get up immediately. 2 ticks before you get up. Overrides the above 10000 weaken. - C.mutations.Remove(HUSK) - C.nutrition = old_nutrition - C.brainloss = (braindamage) //Gives them half their prior brain damage plus ten more. - C.update_canmove() - for(var/obj/item/W in C) - C.drop_from_inventory(W) - spawn(3600 SECONDS) //1 hour wait until you can revive again. - C.reviving = 0 - C.does_not_breathe = 0 //start breathing again - C.verbs -= /mob/living/carbon/human/proc/hatch + else if(stat != DEAD) //If they're alive at the time of regenerating. + chimera_hatch() + visible_message("

The dormant husk of [src] bursts open, revealing a new, intact copy in the pool of viscera.

") //Bloody hell... return else return //Runtime prevention. +/mob/living/carbon/human/proc/chimera_hatch() + nutrition -= nutrition/2 //Cut their nutrition in half. + var/old_nutrition = nutrition //Since the game is being annoying. + to_chat(src, "Your new body awakens, bursting free from your old skin.") + var/T = get_turf(src) + new /obj/effect/gibspawner/human/scree(T) + var/braindamage = brainloss/2 //If you have 100 brainloss, it gives you 50. + does_not_breathe = 0 //start breathing again + revive() // I did have special snowflake code, but this is easier. + weakened = 2 //Not going to let you get up immediately. 2 ticks before you get up. Overrides the above 10000 weaken. + mutations.Remove(HUSK) + nutrition = old_nutrition + brainloss = braindamage //Gives them half their prior brain damage. + update_canmove() + for(var/obj/item/W in src) + drop_from_inventory(W) + spawn(3600 SECONDS) //1 hour wait until you can revive. + reviving = FALSE + to_chat(src, "Your body has recovered from the strenuous effort of rebuilding itself.") + verbs -= /mob/living/carbon/human/proc/hatch + return + /obj/effect/gibspawner/human/scree fleshcolor = "#14AD8B" //Scree blood. bloodcolor = "#14AD8B" @@ -160,6 +146,7 @@ if(client && feral >= 10) // largely a copy of handle_hallucinations() without the fake attackers. Unlike hallucinations, only fires once - if they're still feral they'll get hit again anyway. spawn(rand(200,500)/(feral/10)) + if(!feral) return //just to avoid fuckery in the event that they un-feral in the time it takes for the spawn to proc var/halpick = rand(1,100) switch(halpick) if(0 to 15) //15% chance diff --git a/code/modules/reagents/Chemistry-Recipes_vr.dm b/code/modules/reagents/Chemistry-Recipes_vr.dm index 7288a2fc5a..ed94d5a05b 100644 --- a/code/modules/reagents/Chemistry-Recipes_vr.dm +++ b/code/modules/reagents/Chemistry-Recipes_vr.dm @@ -48,8 +48,8 @@ holder.clear_reagents() /datum/chemical_reaction/xenolazarus - name = "Discount Lazarus Injector" - id = "discountlazarusinjector" + name = "Discount Lazarus" + id = "discountlazarus" result = null required_reagents = list("monstertamer" = 5, "clonexadone" = 5) @@ -105,7 +105,7 @@ result = "grubshake" required_reagents = list("shockchem" = 5, "water" = 25) result_amount = 30 - + /datum/chemical_reaction/drinks/deathbell name = "Deathbell" id = "deathbell"