[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:
SkyratBot
2023-07-27 18:41:43 -04:00
committed by GitHub
co-authored by Ghom Bloop
parent 3984180d5e
commit 60df7291ce
89 changed files with 2657 additions and 578 deletions
+9 -2
View File
@@ -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