mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 20:48:56 +01:00
[MIRROR] [READY] Fishing and aquarium expansion. [MDB IGNORE] (#22731)
* [READY] Fishing and aquarium expansion. * Update general.dm * Update production_skill.dm * Merge conflict * Merge branch 'upstream-merge-76531' of https://github.com/Skyrat-SS13/Skyrat-tg into upstream-merge-76531 --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com>
This commit is contained in:
@@ -449,20 +449,27 @@
|
||||
* Reagent takes a PATH to a reagent.
|
||||
* Amount checks for having a specific amount of that chemical.
|
||||
* Needs matabolizing takes into consideration if the chemical is matabolizing when it's checked.
|
||||
* Check subtypes controls whether it should it should also include subtypes: ispath(type, reagent) versus type == reagent.
|
||||
*/
|
||||
/datum/reagents/proc/has_reagent(reagent, amount = -1, needs_metabolizing = FALSE)
|
||||
/datum/reagents/proc/has_reagent(reagent, amount = -1, needs_metabolizing = FALSE, check_subtypes = FALSE)
|
||||
var/list/cached_reagents = reagent_list
|
||||
for(var/datum/reagent/holder_reagent as anything in cached_reagents)
|
||||
if (holder_reagent.type == reagent)
|
||||
if (check_subtypes ? ispath(holder_reagent.type, reagent) : holder_reagent.type == reagent)
|
||||
if(!amount)
|
||||
if(needs_metabolizing && !holder_reagent.metabolizing)
|
||||
if(check_subtypes)
|
||||
continue
|
||||
return FALSE
|
||||
return holder_reagent
|
||||
else
|
||||
if(round(holder_reagent.volume, CHEMICAL_QUANTISATION_LEVEL) >= amount)
|
||||
if(needs_metabolizing && !holder_reagent.metabolizing)
|
||||
if(check_subtypes)
|
||||
continue
|
||||
return FALSE
|
||||
return holder_reagent
|
||||
else if(!check_subtypes)
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
/**
|
||||
|
||||
@@ -1264,3 +1264,106 @@
|
||||
/datum/reagent/toxin/viperspider/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
affected_mob.adjust_hallucinations(10 SECONDS * REM * seconds_per_tick)
|
||||
return ..()
|
||||
|
||||
/datum/reagent/toxin/tetrodotoxin
|
||||
name = "Tetrodotoxin"
|
||||
description = "A colorless, oderless, tasteless neurotoxin usually carried by livers of animals of the Tetraodontiformes order."
|
||||
silent_toxin = TRUE
|
||||
reagent_state = SOLID
|
||||
color = "#EEEEEE"
|
||||
metabolization_rate = 0.1 * REAGENTS_METABOLISM
|
||||
toxpwr = 0
|
||||
taste_mult = 0
|
||||
chemical_flags = REAGENT_NO_RANDOM_RECIPE
|
||||
var/list/traits_not_applied = list(
|
||||
TRAIT_PARALYSIS_L_ARM = BODY_ZONE_L_ARM,
|
||||
TRAIT_PARALYSIS_R_ARM = BODY_ZONE_R_ARM,
|
||||
TRAIT_PARALYSIS_L_LEG = BODY_ZONE_L_LEG,
|
||||
TRAIT_PARALYSIS_R_LEG = BODY_ZONE_R_LEG,
|
||||
)
|
||||
|
||||
/datum/reagent/toxin/tetrodotoxin/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, times_fired)
|
||||
//be ready for a cocktail of symptoms, including:
|
||||
//numbness, nausea, vomit, breath loss, weakness, paralysis and nerve damage/impairment and eventually a heart attack if enough time passes.
|
||||
switch(current_cycle)
|
||||
if(6 to 12)
|
||||
if(SPT_PROB(20, seconds_per_tick))
|
||||
affected_mob.set_jitter_if_lower(rand(2 SECONDS, 3 SECONDS) * REM * seconds_per_tick)
|
||||
if(SPT_PROB(5, seconds_per_tick))
|
||||
var/obj/item/organ/internal/tongue/tongue = affected_mob.get_organ_slot(ORGAN_SLOT_TONGUE)
|
||||
if(tongue)
|
||||
to_chat(affected_mob, span_warning("your [tongue.name] feels numb..."))
|
||||
affected_mob.set_slurring_if_lower(5 SECONDS * REM * seconds_per_tick)
|
||||
affected_mob.adjust_disgust(3.5 * REM * seconds_per_tick)
|
||||
if(12 to 20)
|
||||
silent_toxin = FALSE
|
||||
toxpwr = 0.5
|
||||
affected_mob.adjustStaminaLoss(2.5 * REM * seconds_per_tick, 0)
|
||||
if(SPT_PROB(20, seconds_per_tick))
|
||||
affected_mob.losebreath += 1 * REM * seconds_per_tick
|
||||
if(SPT_PROB(40, seconds_per_tick))
|
||||
affected_mob.set_jitter_if_lower(rand(2 SECONDS, 3 SECONDS) * REM * seconds_per_tick)
|
||||
affected_mob.adjust_disgust(3 * REM * seconds_per_tick)
|
||||
affected_mob.set_slurring_if_lower(1 SECONDS * REM * seconds_per_tick)
|
||||
affected_mob.adjustStaminaLoss(2 * REM * seconds_per_tick, 0)
|
||||
if(SPT_PROB(4, seconds_per_tick))
|
||||
paralyze_limb(affected_mob)
|
||||
if(SPT_PROB(10, seconds_per_tick))
|
||||
affected_mob.adjust_confusion(rand(6 SECONDS, 8 SECONDS))
|
||||
if(20 to 28)
|
||||
toxpwr = 1
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 0.5)
|
||||
if(SPT_PROB(40, seconds_per_tick))
|
||||
affected_mob.losebreath += 2 * REM * seconds_per_tick
|
||||
affected_mob.adjust_disgust(3 * REM * seconds_per_tick)
|
||||
affected_mob.set_slurring_if_lower(3 SECONDS * REM * seconds_per_tick)
|
||||
if(SPT_PROB(5, seconds_per_tick))
|
||||
to_chat(affected_mob, span_danger("you feel horribly weak."))
|
||||
affected_mob.adjustStaminaLoss(5 * REM * seconds_per_tick, 0)
|
||||
if(SPT_PROB(8, seconds_per_tick))
|
||||
paralyze_limb(affected_mob)
|
||||
if(SPT_PROB(10, seconds_per_tick))
|
||||
affected_mob.adjust_confusion(rand(6 SECONDS, 8 SECONDS))
|
||||
if(28 to INFINITY)
|
||||
toxpwr = 1.5
|
||||
affected_mob.adjustOrganLoss(ORGAN_SLOT_BRAIN, 1, BRAIN_DAMAGE_DEATH)
|
||||
affected_mob.set_silence_if_lower(3 SECONDS * REM * seconds_per_tick)
|
||||
affected_mob.adjustStaminaLoss(5 * REM * seconds_per_tick, 0)
|
||||
affected_mob.adjust_disgust(2 * REM * seconds_per_tick)
|
||||
if(SPT_PROB(15, seconds_per_tick))
|
||||
paralyze_limb(affected_mob)
|
||||
if(SPT_PROB(10, seconds_per_tick))
|
||||
affected_mob.adjust_confusion(rand(6 SECONDS, 8 SECONDS))
|
||||
|
||||
if(current_cycle >= 38 && !length(traits_not_applied) && SPT_PROB(5, seconds_per_tick) && !affected_mob.undergoing_cardiac_arrest())
|
||||
affected_mob.set_heartattack(TRUE)
|
||||
to_chat(affected_mob, span_danger("you feel a burning pain spread throughout your chest, oh no..."))
|
||||
|
||||
return ..()
|
||||
|
||||
/datum/reagent/toxin/tetrodotoxin/proc/paralyze_limb(mob/living/affected_mob)
|
||||
if(!length(traits_not_applied))
|
||||
return
|
||||
var/added_trait = pick(traits_not_applied)
|
||||
ADD_TRAIT(affected_mob, added_trait, REF(src))
|
||||
traits_not_applied -= added_trait
|
||||
|
||||
/datum/reagent/toxin/tetrodotoxin/on_mob_metabolize(mob/living/affected_mob)
|
||||
RegisterSignal(affected_mob, COMSIG_CARBON_ATTEMPT_BREATHE, PROC_REF(block_breath))
|
||||
|
||||
/datum/reagent/toxin/tetrodotoxin/on_mob_end_metabolize(mob/living/affected_mob)
|
||||
UnregisterSignal(affected_mob, COMSIG_CARBON_ATTEMPT_BREATHE, PROC_REF(block_breath))
|
||||
// the initial() proc doesn't work for lists.
|
||||
var/list/initial_list = list(
|
||||
TRAIT_PARALYSIS_L_ARM = BODY_ZONE_L_ARM,
|
||||
TRAIT_PARALYSIS_R_ARM = BODY_ZONE_R_ARM,
|
||||
TRAIT_PARALYSIS_L_LEG = BODY_ZONE_L_LEG,
|
||||
TRAIT_PARALYSIS_R_LEG = BODY_ZONE_R_LEG,
|
||||
)
|
||||
affected_mob.remove_traits(initial_list, REF(src))
|
||||
traits_not_applied = initial_list
|
||||
|
||||
/datum/reagent/toxin/tetrodotoxin/proc/block_breath(mob/living/source)
|
||||
SIGNAL_HANDLER
|
||||
if(current_cycle >= 28)
|
||||
return COMSIG_CARBON_BLOCK_BREATH
|
||||
|
||||
Reference in New Issue
Block a user