From 5afa52813433fae62e8497980e9f14ee06d43060 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Mon, 8 Jul 2024 11:19:34 +0200 Subject: [PATCH] [MIRROR] Aquariums now influence area beauty based on their contents. (#28703) * Aquariums now influence area beauty based on their contents. (#84677) ## About The Pull Request Aquariums now have a beauty element based on their contents. Props give a fixed beauty value, while for fish it depends on whether they're alive or not. Some fishes have a better score than others. A few, like the ratfish, even have negative beauty. Mobs with the morbid trait now get a positive moodlet when admiring an aquarium full of dead fish, and a negative one when fish are alive. Also, this brings a few improvements to bits of aquarium code. Namely the removal of a GetComponent call and a few balloon alert calls. ## Why It's Good For The Game Aquariums can be quite decorative at times. ## Changelog :cl: add: Aquariums now influence the beauty score of an area based on their contents. add: Morbid people now get a positive moodlet when admiring an aquarium full of dead fish, and a negative one when fish are alive. /:cl: * Aquariums now influence area beauty based on their contents. --------- Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com> --- code/__DEFINES/dcs/signals/signals_fish.dm | 6 ++ code/__DEFINES/fish.dm | 9 +++ code/datums/components/aquarium_content.dm | 64 +++++++++++++++++-- code/datums/mood_events/morbid_events.dm | 9 +++ code/modules/fishing/aquarium/aquarium.dm | 64 ++++++++++++------- code/modules/fishing/aquarium/aquarium_kit.dm | 3 +- .../fishing/aquarium/aquarium_upgrades.dm | 2 + code/modules/fishing/fish/_fish.dm | 5 +- code/modules/fishing/fish/fish_types.dm | 33 +++++++--- code/modules/fishing/fish_catalog.dm | 19 ++++++ code/modules/fishing/fishing_equipment.dm | 7 ++ tgui/packages/tgui/interfaces/FishCatalog.tsx | 4 ++ 12 files changed, 186 insertions(+), 39 deletions(-) diff --git a/code/__DEFINES/dcs/signals/signals_fish.dm b/code/__DEFINES/dcs/signals/signals_fish.dm index c70cdfde1a3..5b01bd7d612 100644 --- a/code/__DEFINES/dcs/signals/signals_fish.dm +++ b/code/__DEFINES/dcs/signals/signals_fish.dm @@ -1,6 +1,12 @@ // Aquarium related signals #define COMSIG_AQUARIUM_SURFACE_CHANGED "aquarium_surface_changed" #define COMSIG_AQUARIUM_FLUID_CHANGED "aquarium_fluid_changed" +///Called on aquarium/attackby: (aquarium) +#define COMSIG_TRY_INSERTING_IN_AQUARIUM "item_try_inserting_in_aquarium" + ///The item will be inserted into the aquarium + #define COMSIG_CAN_INSERT_IN_AQUARIUM (1<<0) + ///The item won't be inserted into the aquarium, but will early return attackby anyway. + #define COMSIG_CANNOT_INSERT_IN_AQUARIUM (1<<1) // Fish signals #define COMSIG_FISH_STATUS_CHANGED "fish_status_changed" diff --git a/code/__DEFINES/fish.dm b/code/__DEFINES/fish.dm index 8e03c920d24..36903049e89 100644 --- a/code/__DEFINES/fish.dm +++ b/code/__DEFINES/fish.dm @@ -152,3 +152,12 @@ #define ELECTROGENESIS_DURATION 40 SECONDS /// a random range the electrogenesis cooldown varies by #define ELECTROGENESIS_VARIANCE (rand(-10 SECONDS, 10 SECONDS)) + +#define FISH_BEAUTY_DISGUSTING -500 +#define FISH_BEAUTY_UGLY -300 +#define FISH_BEAUTY_BAD -200 +#define FISH_BEAUTY_NULL 0 +#define FISH_BEAUTY_GENERIC 250 +#define FISH_BEAUTY_GOOD 450 +#define FISH_BEAUTY_GREAT 600 +#define FISH_BEAUTY_EXCELLENT 700 diff --git a/code/datums/components/aquarium_content.dm b/code/datums/components/aquarium_content.dm index 21e082399a8..21c6c75ca16 100644 --- a/code/datums/components/aquarium_content.dm +++ b/code/datums/components/aquarium_content.dm @@ -1,3 +1,14 @@ +///Malus to the beauty value if the fish content is dead +#define DEAD_FISH_BEAUTY -500 +///Prevents more impressive fishes from providing a positive beauty even when dead. +#define MAX_DEAD_FISH_BEAUTY -200 +///Some fish are already so ugly, they can't get much worse when dead +#define MIN_DEAD_FISH_BEAUTY -600 + +///Defines that clamp the beauty of the aquarium, to prevent it from making most areas great or horrid all by itself. +#define MIN_AQUARIUM_BEAUTY -3500 +#define MAX_AQUARIUM_BEAUTY 6000 + /// Allows movables to be inserted/displayed in aquariums. /datum/component/aquarium_content /// Keeps track of our current aquarium. @@ -60,13 +71,19 @@ /// Signals of the parent that will trigger animation update var/animation_update_signals + /// The current beauty this component gives to the aquarium it's in + var/beauty -/datum/component/aquarium_content/Initialize(icon, animation_getter, animation_update_signals) + /// The original value of the beauty this component had when initialized + var/original_beauty + +/datum/component/aquarium_content/Initialize(icon, animation_getter, animation_update_signals, beauty) if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE src.animation_getter = animation_getter src.animation_update_signals = animation_update_signals + src.beauty = original_beauty = beauty if(animation_update_signals) RegisterSignals(parent, animation_update_signals, PROC_REF(generate_animation)) @@ -78,6 +95,7 @@ InitializeOther() ADD_TRAIT(parent, TRAIT_FISH_CASE_COMPATIBILE, REF(src)) + RegisterSignal(parent, COMSIG_TRY_INSERTING_IN_AQUARIUM, PROC_REF(is_ready_to_insert)) RegisterSignal(parent, COMSIG_MOVABLE_MOVED, PROC_REF(enter_aquarium)) //If component is added to something already in aquarium at the time initialize it properly. @@ -109,6 +127,18 @@ randomize_position = TRUE + RegisterSignal(fish, COMSIG_FISH_STATUS_CHANGED, PROC_REF(on_fish_status_changed)) + +/datum/component/aquarium_content/proc/on_fish_status_changed(obj/item/fish/source) + SIGNAL_HANDLER + var/old_beauty = beauty + beauty = original_beauty + if(source.status == FISH_DEAD) + beauty = clamp(beauty + DEAD_FISH_BEAUTY, MIN_DEAD_FISH_BEAUTY, MAX_DEAD_FISH_BEAUTY) + if(current_aquarium) + change_aquarium_beauty(beauty - old_beauty) + generate_animation() + /// Sets visuals properties for fish /datum/component/aquarium_content/proc/InitializeFromProp() var/obj/item/aquarium_prop/prop = parent @@ -150,15 +180,16 @@ if(istype(movable_parent.loc, /obj/structure/aquarium)) on_inserted(movable_parent.loc) -/datum/component/aquarium_content/proc/is_ready_to_insert(obj/structure/aquarium/aquarium) +/datum/component/aquarium_content/proc/is_ready_to_insert(datum/source, obj/structure/aquarium/aquarium) + SIGNAL_HANDLER //This is kinda awful but we're unaware of other fish if(unique) for(var/atom/movable/fish_or_prop in aquarium) if(fish_or_prop == parent) continue if(fish_or_prop.type == parent.type) - return FALSE - return TRUE + return COMSIG_CANNOT_INSERT_IN_AQUARIUM + return COMSIG_CAN_INSERT_IN_AQUARIUM /datum/component/aquarium_content/proc/on_inserted(atom/aquarium) current_aquarium = aquarium @@ -180,6 +211,22 @@ //Finally add it to to objects vis_contents current_aquarium.vis_contents |= vc_obj + change_aquarium_beauty(beauty) + +///Modifies the beauty of the aquarium when content is added or removed, or when fishes die or live again somehow. +/datum/component/aquarium_content/proc/change_aquarium_beauty(change) + if(QDELETED(current_aquarium) || !change) + return + var/old_clamped_beauty = clamp(current_aquarium.current_beauty, MIN_AQUARIUM_BEAUTY, MAX_AQUARIUM_BEAUTY) + current_aquarium.current_beauty += change + var/new_clamped_beauty = clamp(current_aquarium.current_beauty, MIN_AQUARIUM_BEAUTY, MAX_AQUARIUM_BEAUTY) + if(new_clamped_beauty == old_clamped_beauty) + return + if(current_aquarium.current_beauty) + current_aquarium.RemoveElement(/datum/element/beauty, current_aquarium.current_beauty) + if(current_aquarium.current_beauty) + current_aquarium.AddElement(/datum/element/beauty, current_aquarium.current_beauty) + /// Aquarium surface changed in some way, we need to recalculate base position and aninmation /datum/component/aquarium_content/proc/on_surface_changed() SIGNAL_HANDLER @@ -293,13 +340,20 @@ vc_obj.pixel_x = base_px vc_obj.pixel_y = base_py -/datum/component/aquarium_content/proc/on_removed(datum/source, atom/movable/gone, direction) +/datum/component/aquarium_content/proc/on_removed(obj/structure/aquarium/source, atom/movable/gone, direction) SIGNAL_HANDLER if(parent != gone) return remove_from_aquarium() /datum/component/aquarium_content/proc/remove_from_aquarium() + change_aquarium_beauty(-beauty) UnregisterSignal(current_aquarium, list(COMSIG_AQUARIUM_SURFACE_CHANGED, COMSIG_AQUARIUM_FLUID_CHANGED, COMSIG_ATOM_ATTACKBY, COMSIG_ATOM_EXITED)) remove_visual_from_aquarium() current_aquarium = null + +#undef DEAD_FISH_BEAUTY +#undef MIN_DEAD_FISH_BEAUTY +#undef MAX_DEAD_FISH_BEAUTY +#undef MIN_AQUARIUM_BEAUTY +#undef MAX_AQUARIUM_BEAUTY diff --git a/code/datums/mood_events/morbid_events.dm b/code/datums/mood_events/morbid_events.dm index b21548c8122..27c5424ec5c 100644 --- a/code/datums/mood_events/morbid_events.dm +++ b/code/datums/mood_events/morbid_events.dm @@ -37,6 +37,11 @@ Intended to push a creepy, mad scientist/doctor vibe, or someone who is downrigh mood_change = 3 timeout = 6 MINUTES +/datum/mood_event/morbid_aquarium_good + description = "Eh eh, all the fish are sleeping..." + mood_change = 3 + timeout = 90 SECONDS + // Negative Events - We helped someone stay alive. /datum/mood_event/morbid_tend_wounds @@ -49,3 +54,7 @@ Intended to push a creepy, mad scientist/doctor vibe, or someone who is downrigh mood_change = -6 timeout = 2 MINUTES +/datum/mood_event/morbid_aquarium_bad + description = "Watching fish in an aquarium is lousy." + mood_change = -3 + timeout = 90 SECONDS diff --git a/code/modules/fishing/aquarium/aquarium.dm b/code/modules/fishing/aquarium/aquarium.dm index 0a836eadafd..cd05d0bd34b 100644 --- a/code/modules/fishing/aquarium/aquarium.dm +++ b/code/modules/fishing/aquarium/aquarium.dm @@ -53,6 +53,9 @@ /// /obj/item/fish in the aquarium, sorted by type - does not include things with aquarium visuals that are not fish var/list/tracked_fish_by_type + /// Var used to keep track of the current beauty of the aquarium, which can be throughfully changed by aquarium content. + var/current_beauty = 150 + /obj/structure/aquarium/Initialize(mapload) . = ..() update_appearance() @@ -62,6 +65,8 @@ create_reagents(6, SEALED_CONTAINER) RegisterSignal(reagents, COMSIG_REAGENTS_NEW_REAGENT, PROC_REF(start_autofeed)) AddComponent(/datum/component/plumbing/aquarium) + if(current_beauty) + AddElement(/datum/element/beauty, current_beauty) ADD_KEEP_TOGETHER(src, INNATE_TRAIT) /obj/structure/aquarium/proc/track_if_fish(atom/source, atom/initialized) @@ -192,9 +197,9 @@ var/obj/item/stack/sheet/glass/glass = item if(istype(glass)) if(glass.get_amount() < 2) - to_chat(user, span_warning("You need two glass sheets to fix the case!")) + balloon_alert(user, "it needs two sheets!") return - to_chat(user, span_notice("You start fixing [src]...")) + balloon_alert(user, "fixing the aquarium...") if(do_after(user, 2 SECONDS, target = src)) glass.use(2) broken = FALSE @@ -202,10 +207,18 @@ update_appearance() return TRUE else - var/datum/component/aquarium_content/content_component = item.GetComponent(/datum/component/aquarium_content) - if(content_component && content_component.is_ready_to_insert(src) && user.transferItemToLoc(item, src)) - update_appearance() - return TRUE + var/insert_attempt = SEND_SIGNAL(item, COMSIG_TRY_INSERTING_IN_AQUARIUM, src) + switch(insert_attempt) + if(COMSIG_CAN_INSERT_IN_AQUARIUM) + if(!user.transferItemToLoc(item, src)) + user.balloon_alert(user, "stuck to your hand!") + return TRUE + balloon_alert(user, "added to aquarium") + update_appearance() + return TRUE + if(COMSIG_CANNOT_INSERT_IN_AQUARIUM) + balloon_alert(user, "cannot add to aquarium!") + return TRUE if(istype(item, /obj/item/fish_feed) && !panel_open) if(!item.reagents.total_volume) @@ -270,24 +283,27 @@ ///Apply mood bonus depending on aquarium status /obj/structure/aquarium/proc/admire(mob/living/user) - to_chat(user,span_notice("You take a moment to watch [src].")) - if(do_after(user, 5 SECONDS, target = src)) - var/alive_fish = 0 - var/dead_fish = 0 - var/list/tracked_fish = get_fishes() - for(var/obj/item/fish/fish in tracked_fish) - if(fish.status == FISH_ALIVE) - alive_fish++ - else - dead_fish++ - //Check if there are live fish - good mood - //All fish dead - bad mood. - //No fish - nothing. - if(alive_fish > 0) - user.add_mood_event("aquarium", /datum/mood_event/aquarium_positive) - else if(dead_fish > 0) - user.add_mood_event("aquarium", /datum/mood_event/aquarium_negative) - // Could maybe scale power of this mood with number/types of fish + user.balloon_alert(user, "admiring aquarium...") + if(!do_after(user, 5 SECONDS, target = src)) + return + var/alive_fish = 0 + var/dead_fish = 0 + var/list/tracked_fish = get_fishes() + for(var/obj/item/fish/fish in tracked_fish) + if(fish.status == FISH_ALIVE) + alive_fish++ + else + dead_fish++ + + var/morb = HAS_TRAIT(user, TRAIT_MORBID) + //Check if there are live fish - good mood + //All fish dead - bad mood. + //No fish - nothing. + if(alive_fish > 0) + user.add_mood_event("aquarium", morb ? /datum/mood_event/morbid_aquarium_bad : /datum/mood_event/aquarium_positive) + else if(dead_fish > 0) + user.add_mood_event("aquarium", morb ? /datum/mood_event/morbid_aquarium_good : /datum/mood_event/aquarium_negative) + // Could maybe scale power of this mood with number/types of fish /obj/structure/aquarium/ui_data(mob/user) . = ..() diff --git a/code/modules/fishing/aquarium/aquarium_kit.dm b/code/modules/fishing/aquarium/aquarium_kit.dm index 9b1bf20e0e3..1161648f7d1 100644 --- a/code/modules/fishing/aquarium/aquarium_kit.dm +++ b/code/modules/fishing/aquarium/aquarium_kit.dm @@ -110,10 +110,11 @@ w_class = WEIGHT_CLASS_TINY var/layer_mode = AQUARIUM_LAYER_MODE_BOTTOM + var/beauty = 150 /obj/item/aquarium_prop/Initialize(mapload) . = ..() - AddComponent(/datum/component/aquarium_content, icon) + AddComponent(/datum/component/aquarium_content, icon, beauty = beauty) /obj/item/aquarium_prop/rocks name = "rocks" diff --git a/code/modules/fishing/aquarium/aquarium_upgrades.dm b/code/modules/fishing/aquarium/aquarium_upgrades.dm index 140777d34f0..c73e6e9d230 100644 --- a/code/modules/fishing/aquarium/aquarium_upgrades.dm +++ b/code/modules/fishing/aquarium/aquarium_upgrades.dm @@ -24,6 +24,8 @@ icon_state = "bioelec_map" icon_prefix = "bioelec" + current_beauty = 0 + /obj/structure/aquarium/bioelec_gen/zap_act(power, zap_flags) var/explosive = zap_flags & ZAP_MACHINE_EXPLOSIVE if(!explosive) diff --git a/code/modules/fishing/fish/_fish.dm b/code/modules/fishing/fish/_fish.dm index a12ae7e7397..c4be35817b7 100644 --- a/code/modules/fishing/fish/_fish.dm +++ b/code/modules/fishing/fish/_fish.dm @@ -143,9 +143,12 @@ /// power of the tesla zap created by the fish in a bioelectric generator var/electrogenesis_power = 10 MEGA JOULES + /// The beauty this fish provides to the aquarium it's inserted in. + var/beauty = FISH_BEAUTY_GENERIC + /obj/item/fish/Initialize(mapload, apply_qualities = TRUE) . = ..() - AddComponent(/datum/component/aquarium_content, icon, PROC_REF(get_aquarium_animation), list(COMSIG_FISH_STATUS_CHANGED,COMSIG_FISH_STIRRED)) + AddComponent(/datum/component/aquarium_content, icon, PROC_REF(get_aquarium_animation), list(COMSIG_FISH_STIRRED), beauty) RegisterSignal(src, COMSIG_ATOM_ON_LAZARUS_INJECTOR, PROC_REF(use_lazarus)) if(do_flop_animation) diff --git a/code/modules/fishing/fish/fish_types.dm b/code/modules/fishing/fish/fish_types.dm index f61cb43b224..cc001560ee0 100644 --- a/code/modules/fishing/fish/fish_types.dm +++ b/code/modules/fishing/fish/fish_types.dm @@ -19,6 +19,8 @@ desc = "A great rubber duck tool for Lawyers who can't get a grasp over their case." stable_population = 1 random_case_rarity = FISH_RARITY_NOPE + show_in_catalog = FALSE + beauty = FISH_BEAUTY_GOOD /obj/item/fish/angelfish name = "angelfish" @@ -77,6 +79,7 @@ ) required_temperature_min = MIN_AQUARIUM_TEMP+12 required_temperature_max = MIN_AQUARIUM_TEMP+30 + beauty = FISH_BEAUTY_GOOD // Saltwater fish below @@ -107,6 +110,7 @@ evolution_types = null compatible_types = list(/obj/item/fish/clownfish) food = /datum/reagent/lube + beauty = FISH_BEAUTY_GREAT /obj/item/fish/cardinal name = "cardinalfish" @@ -163,8 +167,9 @@ stable_population = 3 required_temperature_min = MIN_AQUARIUM_TEMP+23 required_temperature_max = MIN_AQUARIUM_TEMP+28 - fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/toxic) + beauty = FISH_BEAUTY_GOOD + /obj/item/fish/lanternfish name = "lanternfish" @@ -182,6 +187,7 @@ fish_traits = list(/datum/fish_trait/nocturnal) required_temperature_min = MIN_AQUARIUM_TEMP+2 //My source is that the water at a depth 6600 feet is pretty darn cold. required_temperature_max = MIN_AQUARIUM_TEMP+18 + beauty = FISH_BEAUTY_NULL //Tiziran Fish /obj/item/fish/dwarf_moonfish @@ -195,6 +201,7 @@ average_weight = 2000 required_temperature_min = MIN_AQUARIUM_TEMP+20 required_temperature_max = MIN_AQUARIUM_TEMP+30 + beauty = FISH_BEAUTY_GOOD /obj/item/fish/gunner_jellyfish name = "gunner jellyfish" @@ -205,6 +212,7 @@ fillet_type = /obj/item/food/fishmeat/gunner_jellyfish required_temperature_min = MIN_AQUARIUM_TEMP+24 required_temperature_max = MIN_AQUARIUM_TEMP+32 + beauty = FISH_BEAUTY_GOOD /obj/item/fish/needlefish name = "needlefish" @@ -261,6 +269,7 @@ ) evolution_types = list(/datum/fish_evolution/ice_chrab) compatible_types = list(/obj/item/fish/chasm_crab/ice) + beauty = FISH_BEAUTY_GOOD /obj/item/fish/chasm_crab/ice name = "arctic chrab" @@ -271,13 +280,7 @@ required_temperature_max = MIN_AQUARIUM_TEMP+15 evolution_types = list(/datum/fish_evolution/chasm_chrab) compatible_types = list(/obj/item/fish/chasm_crab) - -/obj/item/storage/box/fish_debug - name = "box full of fish" - -/obj/item/storage/box/fish_debug/PopulateContents() - for(var/fish_type in subtypesof(/obj/item/fish)) - new fish_type(src) + beauty = FISH_BEAUTY_GREAT /obj/item/fish/donkfish name = "donk co. company patent donkfish" @@ -290,6 +293,7 @@ fish_traits = list(/datum/fish_trait/yucky) required_temperature_min = MIN_AQUARIUM_TEMP+15 required_temperature_max = MIN_AQUARIUM_TEMP+28 + beauty = FISH_BEAUTY_EXCELLENT /obj/item/fish/emulsijack name = "toxic emulsijack" @@ -301,6 +305,7 @@ fish_traits = list(/datum/fish_trait/emulsijack) required_temperature_min = MIN_AQUARIUM_TEMP+5 required_temperature_max = MIN_AQUARIUM_TEMP+40 + beauty = FISH_BEAUTY_BAD /obj/item/fish/jumpercable name = "monocloning jumpercable" @@ -322,6 +327,7 @@ /datum/fish_trait/mixotroph, /datum/fish_trait/electrogenesis, ) + beauty = FISH_BEAUTY_UGLY /obj/item/fish/ratfish name = "ratfish" @@ -341,6 +347,7 @@ "Value" = DAIRY ) ) + beauty = FISH_BEAUTY_DISGUSTING /obj/item/fish/ratfish/Initialize(mapload) . = ..() @@ -364,6 +371,7 @@ required_temperature_min = MIN_AQUARIUM_TEMP+10 required_temperature_max = MIN_AQUARIUM_TEMP+40 evolution_types = list(/datum/fish_evolution/purple_sludgefish) + beauty = FISH_BEAUTY_NULL /obj/item/fish/sludgefish/purple name = "purple sludgefish" @@ -401,6 +409,7 @@ ), ) required_temperature_min = MIN_AQUARIUM_TEMP+20 + beauty = FISH_BEAUTY_GREAT /obj/item/fish/boned name = "unmarine bonemass" @@ -423,6 +432,7 @@ average_weight = 2000 death_text = "%SRC stops moving." //It's dead... or is it? evolution_types = list(/datum/fish_evolution/mastodon) + beauty = FISH_BEAUTY_UGLY /obj/item/fish/mastodon name = "unmarine mastodon" @@ -451,6 +461,7 @@ average_weight = 5000 death_text = "%SRC stops moving." fish_traits = list(/datum/fish_trait/heavy, /datum/fish_trait/amphibious, /datum/fish_trait/revival, /datum/fish_trait/carnivore, /datum/fish_trait/predator, /datum/fish_trait/aggressive) + beauty = FISH_BEAUTY_BAD /obj/item/fish/holo name = "holographic goldfish" @@ -501,6 +512,7 @@ sprite_height = 8 average_size = 60 average_weight = 1000 + beauty = FISH_BEAUTY_GOOD /obj/item/fish/holo/angel name = "holographic angelfish" @@ -524,6 +536,7 @@ icon_state = "checkered" //it's a meta joke, buddy. dedicated_in_aquarium_icon_state = "checkered_small" sprite_width = 4 + beauty = FISH_BEAUTY_NULL /obj/item/fish/holo/halffish name = "holographic half-fish" @@ -533,6 +546,7 @@ sprite_height = 4 sprite_width = 10 average_size = 50 + beauty = FISH_BEAUTY_UGLY /obj/item/fish/starfish name = "cosmostarfish" @@ -554,6 +568,7 @@ grind_results = list(/datum/reagent/bluespace = 10, /datum/reagent/consumable/liquidgibs = 5) fillet_type = null fish_traits = list(/datum/fish_trait/antigrav, /datum/fish_trait/mixotroph) + beauty = FISH_BEAUTY_GREAT /obj/item/fish/starfish/Initialize(mapload) . = ..() @@ -589,6 +604,7 @@ ) hitsound = null throwforce = 5 + beauty = FISH_BEAUTY_GOOD ///maximum bonus damage when winded up var/maximum_bonus = 25 @@ -662,3 +678,4 @@ ) //anxiety naturally limits the amount of zipzaps per tank, so they are stronger alone electrogenesis_power = 20 MEGA JOULES + beauty = FISH_BEAUTY_GOOD diff --git a/code/modules/fishing/fish_catalog.dm b/code/modules/fishing/fish_catalog.dm index 3e1cb6cfcfa..49a84413ded 100644 --- a/code/modules/fishing/fish_catalog.dm +++ b/code/modules/fishing/fish_catalog.dm @@ -37,6 +37,25 @@ else fish_data["feed"] = "[AQUARIUM_COMPANY] Fish Feed" fish_data["fishing_tips"] = build_fishing_tips(fish) + var/beauty_score = initial(fish.beauty) + switch(beauty_score) + if(-INFINITY to FISH_BEAUTY_DISGUSTING) + beauty_score = "OH HELL NAW!" + if(FISH_BEAUTY_DISGUSTING to FISH_BEAUTY_UGLY) + beauty_score = "☆☆☆☆☆" + if(FISH_BEAUTY_UGLY to FISH_BEAUTY_BAD) + beauty_score = "★☆☆☆☆" + if(FISH_BEAUTY_BAD to FISH_BEAUTY_NULL) + beauty_score = "★★☆☆☆" + if(FISH_BEAUTY_NULL to FISH_BEAUTY_GENERIC) + beauty_score = "★★★☆☆" + if(FISH_BEAUTY_GENERIC to FISH_BEAUTY_GOOD) + beauty_score = "★★★★☆" + if(FISH_BEAUTY_GOOD to FISH_BEAUTY_GREAT) + beauty_score = "★★★★★" + if(FISH_BEAUTY_GREAT to INFINITY) + beauty_score = "★★★★★★" + fish_data["beauty"] = beauty_score fish_info += list(fish_data) // TODO: Custom entries for unusual stuff diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm index df6c4eee9c2..f6b49a9b523 100644 --- a/code/modules/fishing/fishing_equipment.dm +++ b/code/modules/fishing/fishing_equipment.dm @@ -304,5 +304,12 @@ new /obj/item/fishing_line/reinforced(src) new /obj/item/fishing_line/cloaked(src) +/obj/item/storage/box/fish_debug + name = "box full of fish" + +/obj/item/storage/box/fish_debug/PopulateContents() + for(var/fish_type in subtypesof(/obj/item/fish)) + new fish_type(src) + #undef MAGNET_HOOK_BONUS_MULTIPLIER #undef RESCUE_HOOK_FISH_MULTIPLIER diff --git a/tgui/packages/tgui/interfaces/FishCatalog.tsx b/tgui/packages/tgui/interfaces/FishCatalog.tsx index 7bb85054fb0..34ee7a629b2 100644 --- a/tgui/packages/tgui/interfaces/FishCatalog.tsx +++ b/tgui/packages/tgui/interfaces/FishCatalog.tsx @@ -27,6 +27,7 @@ type FishInfo = { weight: string; size: string; icon: string; + beauty: string; }; type FishCatalogData = { @@ -93,6 +94,9 @@ export const FishCatalog = (props) => { {currentFish.weight} g + + {currentFish.beauty} +