Adds some Fish Content (#88213)

## About The Pull Request

Adds a new biotype, MOB_AQUATIC, indicating the mob is water-themed
somehow. Given to carp, lobstrosities, frogs, axolotls, penguins, fire
sharks.

Aquatic mobs can be hooked by fishing rods, even without a jawed fishing
hook installed.

The carp and fish infusion sets now give the infusee the aquatic
biotype. Added support for infusions adding a biotype.

You can check for a fish's pulse with a stethoscope, which will tell you
its status even without fishing skill.

Refined fish health status checks to be more precise.

Added 'Fishy' Reagent, a version of strange reagent that only works for
fish or aquatic biotype mobs. It's made with omnizine, saltwater, and
carpotoxin or tetrodotoxin.

Added a lifish chemical reaction that creates fish.
## Why It's Good For The Game

Fish content fish content fish content

> Adds a new biotype, MOB_AQUATIC, indicating the mob is water-themed
somehow. Given to carp, lobstrosities, frogs, axolotls, penguins, fire
sharks.

We were really missing this one by now.

> Aquatic mobs can be hooked by fishing rods, even without a jawed
fishing hook installed.

> The carp and fish infusion sets now give the infusee the aquatic
biotype. Added support for infusions adding a biotype.

I want to reel in fish people. This is going to be hilarious.

> You can check for a fish's pulse with a stethoscope, which will tell
you its status even without fishing skill.

Fish doctor content - also lets you see the exact status of a fish's
health even if you haven't interacted w/ fishing that shift.

> Added 'Fishy' Reagent, a version of strange reagent that only works
for fish or aquatic biotype mobs. It's made with omnizine, saltwater,
and carpotoxin or tetrodotoxin.

A somewhat easier to get version of strange reagent, purely for fish, as
they die very easily and the road to making SR is a large diversion. I
might add this to cargo, maybe?

> Added a lifish chemical reaction that creates fish.

Fish. fish fish fish fish fish.

@Ghommie 
## Changelog
🆑
add: Adds a new biotype, MOB_AQUATIC, indicating the mob is water-themed
somehow. Given to carp, lobstrosities, frogs, axolotls, penguins, fire
sharks.
add: Aquatic mobs can be hooked by fishing rods, even without a jawed
fishing hook installed.
add: The carp and fish infusion sets now give the infusee the aquatic
biotype. Added support for infusions adding a biotype.
add: You can check for a fish's pulse with a stethoscope, which will
tell you its status even without fishing skill.
qol: Refined fish health status checks to be more precise.
add: Added 'Fishy' Reagent, a version of strange reagent that only works
for fish or aquatic biotype mobs. It's made with omnizine, saltwater,
and carpotoxin or tetrodotoxin.
add: Added a lifish chemical reaction that creates fish.
/🆑

---------

Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com>
Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
This commit is contained in:
carlarctg
2024-11-29 00:42:04 +01:00
committed by GitHub
co-authored by _0Steven Ghom
parent a9fe2fe29d
commit fe7c8e1fde
20 changed files with 166 additions and 30 deletions
+53 -16
View File
@@ -219,8 +219,26 @@
if(istype(held_item, /obj/item/fish_analyzer))
context[SCREENTIP_CONTEXT_LMB] = "Scan"
return CONTEXTUAL_SCREENTIP_SET
if(istype(held_item, /obj/item/clothing/neck/stethoscope))
context[SCREENTIP_CONTEXT_LMB] = "Check Pulse"
return CONTEXTUAL_SCREENTIP_SET
return NONE
/obj/item/fish/item_interaction(mob/living/user, obj/item/tool, list/modifiers)
if(!istype(tool, /obj/item/clothing/neck/stethoscope))
return NONE
user.balloon_alert_to_viewers("checking pulse")
if(!do_after(user, 2.5 SECONDS, src))
return ITEM_INTERACT_FAILURE
// Sir... I'm afraid your fish is dying.
user.visible_message(span_notice("[user] checks the pulse of [src] with [tool]."), span_notice("You check the pulse of [src] with [tool]."))
var/warns = get_health_warnings(user, always_deep = TRUE)
if(!warns)
to_chat(user, span_notice("[src] appears to be perfectly healthy!"))
return ITEM_INTERACT_SUCCESS
to_chat(user, warns)
return ITEM_INTERACT_SUCCESS
/obj/item/fish/interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers)
if(!HAS_TRAIT(interacting_with, TRAIT_CATCH_AND_RELEASE))
return NONE
@@ -434,27 +452,46 @@
/obj/item/fish/examine(mob/user)
. = ..()
if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_DEEPER_FISH))
if(status == FISH_DEAD)
. += span_deadsay("It's [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "taking the big snooze" : "dead"].")
else
var/list/warnings = list()
if(is_starving())
warnings += "starving"
if(!HAS_TRAIT(src, TRAIT_FISH_STASIS) && !proper_environment())
warnings += "drowning"
if(health < initial(health) * 0.6)
warnings += "sick"
if(length(warnings))
. += span_warning("It's [english_list(warnings)].")
if(HAS_MIND_TRAIT(user, TRAIT_EXAMINE_FISH))
. += span_notice("It's [size] cm long.")
. += span_notice("It weighs [weight] g.")
if(HAS_TRAIT(src, TRAIT_FISHING_BAIT))
. += span_smallnoticeital("It can be used as a fishing bait.")
. += get_health_warnings(user, always_deep = FALSE)
if(HAS_TRAIT(src, TRAIT_FISHING_BAIT))
. += span_smallnoticeital("It can be used as a fishing bait.")
if(bites_amount)
. += span_warning("It's been bitten by someone.")
/obj/item/fish/proc/get_health_warnings(mob/user, always_deep = FALSE)
if(!HAS_MIND_TRAIT(user, TRAIT_EXAMINE_DEEPER_FISH) && !always_deep)
return
if(status == FISH_DEAD)
return span_deadsay("It's [HAS_MIND_TRAIT(user, TRAIT_NAIVE) ? "taking the big snooze" : "dead"].")
var/list/warnings = list()
if(is_starving())
warnings += "starving"
if(!HAS_TRAIT(src, TRAIT_FISH_STASIS) && !proper_environment())
warnings += "drowning"
var/health_ratio = health / initial(health)
switch(health_ratio)
if(0 to 0.25)
warnings += "dying"
if(0.25 to 0.5)
warnings += "very unhealthy"
if(0.5 to 0.75)
warnings += "unhealthy"
if(0.75 to 0.9)
warnings += "mostly healthy"
if(length(warnings))
. += span_warning("It's [english_list(warnings)].")
return .
/**
* This proc takes a base size, base weight and deviation arguments to generate new size and weight through a gaussian distribution (bell curve)
* Mainly used to determinate the size and weight of caught fish.
@@ -961,7 +998,7 @@
var/datum/reagent/medicine/strange_reagent/revival = locate() in reagents
if(!revival)
return
if(reagents[revival] >= 2 * w_class)
if(reagents[revival] >= 2 * w_class && revival.pre_rez_check(src))
set_status(FISH_ALIVE)
else
balloon_alert_to_viewers("twitches for a moment!")