From 3b088ec9e9df5a283eb2bfffd81fbbbe32b0cb84 Mon Sep 17 00:00:00 2001 From: SkyratBot <59378654+SkyratBot@users.noreply.github.com> Date: Sun, 4 Sep 2022 04:31:49 +0200 Subject: [PATCH] [MIRROR] Chasm Fishing [MDB IGNORE] (#15855) * Chasm Fishing * Update code/datums/components/chasm.dm Co-authored-by: Jacquerel Co-authored-by: Tom <8881105+tf-4@users.noreply.github.com> --- code/__DEFINES/fishing.dm | 1 + code/datums/components/chasm.dm | 181 ++++++++++++++----- code/datums/elements/diggable.dm | 7 +- code/game/turfs/open/asteroid.dm | 7 + code/game/turfs/open/floor/fancy_floor.dm | 7 +- code/modules/fishing/fish/chasm_detritus.dm | 46 +++++ code/modules/fishing/fish/fish_types.dm | 15 ++ code/modules/fishing/fishing_equipment.dm | 25 +++ code/modules/fishing/fishing_rod.dm | 14 ++ code/modules/fishing/sources/_fish_source.dm | 5 +- code/modules/fishing/sources/source_types.dm | 11 ++ icons/obj/aquarium.dmi | Bin 15572 -> 16101 bytes icons/obj/fishing.dmi | Bin 2855 -> 3236 bytes tgstation.dme | 1 + 14 files changed, 267 insertions(+), 53 deletions(-) create mode 100644 code/modules/fishing/fish/chasm_detritus.dm diff --git a/code/__DEFINES/fishing.dm b/code/__DEFINES/fishing.dm index 40b4d21a9e8..8b1917f47af 100644 --- a/code/__DEFINES/fishing.dm +++ b/code/__DEFINES/fishing.dm @@ -35,6 +35,7 @@ #define FISHING_SPOT_PRESET_BEACH "beach" #define FISHING_SPOT_PRESET_LAVALAND_LAVA "lavaland lava" +#define FISHING_SPOT_PRESET_CHASM "chasm" #define FISHING_MINIGAME_RULE_HEAVY_FISH "heavy" #define FISHING_MINIGAME_RULE_WEIGHTED_BAIT "weighted" diff --git a/code/datums/components/chasm.dm b/code/datums/components/chasm.dm index c13f35ef004..dc44e40e693 100644 --- a/code/datums/components/chasm.dm +++ b/code/datums/components/chasm.dm @@ -1,6 +1,10 @@ +/// List of weakrefs to containers for things which have fallen into chasms +GLOBAL_LIST_INIT(chasm_storage, list()) + // Used by /turf/open/chasm and subtypes to implement the "dropping" mechanic /datum/component/chasm var/turf/target_turf + var/obj/effect/abstract/chasm_storage/storage var/fall_message = "GAH! Ah... where are you?" var/oblivion_message = "You stumble and stare into the abyss before you. It stares back, and you fall into the enveloping dark." @@ -26,12 +30,33 @@ /obj/effect/dummy/phased_mob, /obj/effect/mapping_helpers, /obj/effect/wisp, + /obj/effect/ebeam, + /obj/effect/fishing_lure, )) /datum/component/chasm/Initialize(turf/target) RegisterSignal(parent, COMSIG_ATOM_ENTERED, .proc/Entered) target_turf = target START_PROCESSING(SSobj, src) // process on create, in case stuff is still there + src.parent.AddElement(/datum/element/lazy_fishing_spot, FISHING_SPOT_PRESET_CHASM) + +/datum/component/chasm/UnregisterFromParent() + STOP_PROCESSING(SSobj, src) + remove_storage() + +/** + * Deletes the chasm storage object and removes empty weakrefs from global list + */ +/datum/component/chasm/proc/remove_storage() + if (!storage) + return + QDEL_NULL(storage) + var/list/chasm_storage = list() + for (var/datum/weakref/ref as anything in GLOB.chasm_storage) + if (!ref.resolve()) + continue + chasm_storage += ref + GLOB.chasm_storage = chasm_storage /datum/component/chasm/proc/Entered(datum/source, atom/movable/arrived, atom/old_loc, list/atom/old_locs) SIGNAL_HANDLER @@ -54,35 +79,36 @@ LAZYREMOVE(found_safeties, S) return LAZYLEN(found_safeties) -/datum/component/chasm/proc/drop_stuff(AM) +/datum/component/chasm/proc/drop_stuff(dropped_thing) if (is_safe()) return FALSE var/atom/parent = src.parent - var/to_check = AM ? list(AM) : parent.contents + var/to_check = dropped_thing ? list(dropped_thing) : parent.contents for (var/thing in to_check) if (droppable(thing)) . = TRUE INVOKE_ASYNC(src, .proc/drop, thing) -/datum/component/chasm/proc/droppable(atom/movable/AM) - var/datum/weakref/falling_ref = WEAKREF(AM) +/datum/component/chasm/proc/droppable(atom/movable/dropped_thing) + var/datum/weakref/falling_ref = WEAKREF(dropped_thing) // avoid an infinite loop, but allow falling a large distance if(falling_atoms[falling_ref] && falling_atoms[falling_ref] > 30) return FALSE - if(!isliving(AM) && !isobj(AM)) + if(!isliving(dropped_thing) && !isobj(dropped_thing)) return FALSE - if(is_type_in_typecache(AM, forbidden_types) || AM.throwing || (AM.movement_type & (FLOATING|FLYING))) + if(is_type_in_typecache(dropped_thing, forbidden_types) || dropped_thing.throwing || (dropped_thing.movement_type & (FLOATING|FLYING))) return FALSE + //Flies right over the chasm - if(ismob(AM)) - var/mob/M = AM + if(ismob(dropped_thing)) + var/mob/M = dropped_thing if(M.buckled) //middle statement to prevent infinite loops just in case! var/mob/buckled_to = M.buckled if((!ismob(M.buckled) || (buckled_to.buckled != M)) && !droppable(M.buckled)) return FALSE - if(ishuman(AM)) - var/mob/living/carbon/human/victim = AM + if(ishuman(dropped_thing)) + var/mob/living/carbon/human/victim = dropped_thing if(istype(victim.belt, /obj/item/wormhole_jaunter)) var/obj/item/wormhole_jaunter/jaunter = victim.belt var/turf/chasm = get_turf(victim) @@ -92,59 +118,118 @@ return fall_into_chasm return TRUE -/datum/component/chasm/proc/drop(atom/movable/AM) - var/datum/weakref/falling_ref = WEAKREF(AM) +/datum/component/chasm/proc/drop(atom/movable/dropped_thing) + var/datum/weakref/falling_ref = WEAKREF(dropped_thing) //Make sure the item is still there after our sleep - if(!AM || !falling_ref?.resolve()) + if(!dropped_thing || !falling_ref?.resolve()) falling_atoms -= falling_ref return falling_atoms[falling_ref] = (falling_atoms[falling_ref] || 0) + 1 var/turf/T = target_turf + var/atom/parent = src.parent if(T) // send to the turf below - AM.visible_message(span_boldwarning("[AM] falls into [parent]!"), span_userdanger("[fall_message]")) - T.visible_message(span_boldwarning("[AM] falls from above!")) - AM.forceMove(T) - if(isliving(AM)) - var/mob/living/L = AM + dropped_thing.visible_message(span_boldwarning("[dropped_thing] falls into [parent]!"), span_userdanger("[fall_message]")) + T.visible_message(span_boldwarning("[dropped_thing] falls from above!")) + dropped_thing.forceMove(T) + if(isliving(dropped_thing)) + var/mob/living/L = dropped_thing L.Paralyze(100) L.adjustBruteLoss(30) falling_atoms -= falling_ref + return - else - // send to oblivion - AM.visible_message(span_boldwarning("[AM] falls into [parent]!"), span_userdanger("[oblivion_message]")) - if (isliving(AM)) - var/mob/living/L = AM - L.notransform = TRUE - L.Paralyze(20 SECONDS) + // send to oblivion + dropped_thing.visible_message(span_boldwarning("[dropped_thing] falls into [parent]!"), span_userdanger("[oblivion_message]")) + if (isliving(dropped_thing)) + var/mob/living/falling_mob = dropped_thing + falling_mob.notransform = TRUE + falling_mob.Paralyze(20 SECONDS) - var/oldtransform = AM.transform - var/oldcolor = AM.color - var/oldalpha = AM.alpha - animate(AM, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10) - for(var/i in 1 to 5) - //Make sure the item is still there after our sleep - if(!AM || QDELETED(AM)) - return - AM.pixel_y-- - sleep(2) + var/oldtransform = dropped_thing.transform + var/oldcolor = dropped_thing.color + var/oldalpha = dropped_thing.alpha + animate(dropped_thing, transform = matrix() - matrix(), alpha = 0, color = rgb(0, 0, 0), time = 10) + for(var/i in 1 to 5) //Make sure the item is still there after our sleep - if(!AM || QDELETED(AM)) + if(!dropped_thing || QDELETED(dropped_thing)) return + dropped_thing.pixel_y-- + sleep(2) - if(iscyborg(AM)) - var/mob/living/silicon/robot/S = AM - qdel(S.mmi) + //Make sure the item is still there after our sleep + if(!dropped_thing || QDELETED(dropped_thing)) + return - falling_atoms -= falling_ref - qdel(AM) - if(AM && !QDELETED(AM)) //It's indestructible - var/atom/parent = src.parent - parent.visible_message(span_boldwarning("[parent] spits out [AM]!")) - AM.alpha = oldalpha - AM.color = oldcolor - AM.transform = oldtransform - AM.throw_at(get_edge_target_turf(parent,pick(GLOB.alldirs)),rand(1, 10),rand(1, 10)) + if (!storage) + storage = new(get_turf(parent)) + RegisterSignal(storage, COMSIG_ATOM_EXITED, .proc/left_chasm) + GLOB.chasm_storage += WEAKREF(storage) + + if (storage.contains(dropped_thing)) + return + + dropped_thing.alpha = oldalpha + dropped_thing.color = oldcolor + dropped_thing.transform = oldtransform + + if (dropped_thing.forceMove(storage)) + if (isliving(dropped_thing)) + RegisterSignal(dropped_thing, COMSIG_LIVING_REVIVE, .proc/on_revive) + SEND_SIGNAL(dropped_thing, COMSIG_MOVABLE_SECLUDED_LOCATION) + else + parent.visible_message(span_boldwarning("[parent] spits out [dropped_thing]!")) + dropped_thing.throw_at(get_edge_target_turf(parent, pick(GLOB.alldirs)), rand(1, 10), rand(1, 10)) + + if (isliving(dropped_thing)) + var/mob/living/fallen_mob = dropped_thing + if(fallen_mob.stat != DEAD) + fallen_mob.death(TRUE) + fallen_mob.notransform = FALSE + fallen_mob.apply_damage(300) + + falling_atoms -= falling_ref + +/** + * Called when something has left the chasm depths storage. + * Arguments + * + * * source - Chasm object holder. + * * gone - Item which has just left the chasm contents. + */ +/datum/component/chasm/proc/left_chasm(atom/source, atom/movable/gone) + SIGNAL_HANDLER + UnregisterSignal(gone, COMSIG_LIVING_REVIVE) + +#define CHASM_TRAIT "chasm trait" + +/** + * Called if something comes back to life inside the pit. Expected sources are badmins and changelings. + * Ethereals should take enough damage to be smashed and not revive. + * + * Arguments + * * escapee - Lucky guy who just came back to life at the bottom of a hole. + */ +/datum/component/chasm/proc/on_revive(mob/living/escapee) + SIGNAL_HANDLER + var/atom/parent = src.parent + parent.visible_message(span_boldwarning("After a long climb, [escapee] leaps out of [parent]!")) + ADD_TRAIT(escapee, TRAIT_MOVE_FLYING, CHASM_TRAIT) //Otherwise they instantly fall back in + escapee.forceMove(get_turf(parent)) + escapee.throw_at(get_edge_target_turf(parent, pick(GLOB.alldirs)), rand(1, 10), rand(1, 10)) + REMOVE_TRAIT(escapee, TRAIT_MOVE_FLYING, CHASM_TRAIT) + escapee.Paralyze(20 SECONDS, TRUE) + UnregisterSignal(escapee, COMSIG_LIVING_REVIVE) + +#undef CHASM_TRAIT + +/** + * An abstract object which is basically just a bag that the chasm puts people inside + */ +/obj/effect/abstract/chasm_storage + name = "chasm depths" + desc = "The bottom of a hole. You shouldn't be able to interact with this." + anchored = TRUE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT diff --git a/code/datums/elements/diggable.dm b/code/datums/elements/diggable.dm index e57b24fd250..d5a4811e005 100644 --- a/code/datums/elements/diggable.dm +++ b/code/datums/elements/diggable.dm @@ -10,8 +10,10 @@ var/action_text /// What should we tell other people what the user did? (Eg: "Guy digs up the turf.") var/action_text_third_person + /// Percentage chance of receiving a bonus worm + var/worm_chance -/datum/element/diggable/Attach(datum/target, to_spawn, amount = 1, action_text = "dig up", action_text_third_person = "digs up") +/datum/element/diggable/Attach(datum/target, to_spawn, amount = 1, worm_chance = 30, action_text = "dig up", action_text_third_person = "digs up") . = ..() if(!isturf(target)) return ELEMENT_INCOMPATIBLE @@ -21,6 +23,7 @@ src.to_spawn = to_spawn src.amount = amount + src.worm_chance = worm_chance src.action_text = action_text src.action_text_third_person = action_text_third_person @@ -36,6 +39,8 @@ for(var/i in 1 to amount) new to_spawn(source) + if (prob(worm_chance)) + new /obj/item/food/bait/worm(source) user.visible_message( span_notice("[user] [action_text_third_person] [source]."), diff --git a/code/game/turfs/open/asteroid.dm b/code/game/turfs/open/asteroid.dm index fdf21c7a293..5c5a357673f 100644 --- a/code/game/turfs/open/asteroid.dm +++ b/code/game/turfs/open/asteroid.dm @@ -24,6 +24,8 @@ var/dug = FALSE /// Icon state to use when broken var/broken_state = "asteroid_dug" + /// Percentage chance of receiving a bonus worm + var/worm_chance = 30 /turf/open/misc/asteroid/break_tile() icon_state = broken_state @@ -39,6 +41,8 @@ /turf/open/misc/asteroid/proc/getDug() dug = TRUE new digResult(src, 5) + if (prob(worm_chance)) + new /obj/item/food/bait/worm(src) icon_state = "[base_icon_state]_dug" /// If the user can dig the turf @@ -124,6 +128,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt) /turf/open/misc/asteroid/basalt/airless initial_gas_mix = AIRLESS_ATMOS + worm_chance = 0 /turf/open/misc/asteroid/basalt/Initialize(mapload) . = ..() @@ -152,6 +157,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt) initial_gas_mix = AIRLESS_ATMOS baseturfs = /turf/open/misc/asteroid/airless turf_type = /turf/open/misc/asteroid/airless + worm_chance = 0 /turf/open/misc/asteroid/snow gender = PLURAL @@ -217,6 +223,7 @@ GLOBAL_LIST_EMPTY(dug_up_basalt) /turf/open/misc/asteroid/snow/airless initial_gas_mix = AIRLESS_ATMOS + worm_chance = 0 /turf/open/misc/asteroid/snow/temperatre initial_gas_mix = "o2=22;n2=82;TEMP=255.37" diff --git a/code/game/turfs/open/floor/fancy_floor.dm b/code/game/turfs/open/floor/fancy_floor.dm index e52e46643f3..06ad9fa16e2 100644 --- a/code/game/turfs/open/floor/fancy_floor.dm +++ b/code/game/turfs/open/floor/fancy_floor.dm @@ -132,7 +132,8 @@ /turf/open/floor/grass/Initialize(mapload) . = ..() spawniconchange() - AddElement(/datum/element/diggable, /obj/item/stack/ore/glass, 2, "uproot", "uproots") + AddElement(/datum/element/diggable, /obj/item/stack/ore/glass, 2, worm_chance = 50, \ + action_text = "uproot", action_text_third_person = "uproots") /turf/open/floor/grass/proc/spawniconchange() icon_state = "grass[rand(0,3)]" @@ -170,7 +171,7 @@ /turf/open/floor/fake_snow/Initialize(mapload) . = ..() - AddElement(/datum/element/diggable, /obj/item/stack/tile/mineral/snow, 2) + AddElement(/datum/element/diggable, /obj/item/stack/tile/mineral/snow, 2, worm_chance = 0) /turf/open/floor/fake_snow/setup_broken_states() return list("snow_dug") @@ -197,7 +198,7 @@ /turf/open/floor/fakebasalt/Initialize(mapload) . = ..() - AddElement(/datum/element/diggable, /obj/item/stack/ore/glass/basalt, 2) + AddElement(/datum/element/diggable, /obj/item/stack/ore/glass/basalt, 2, worm_chance = 0) if(prob(15)) icon_state = "basalt[rand(0, 12)]" set_basalt_light(src) diff --git a/code/modules/fishing/fish/chasm_detritus.dm b/code/modules/fishing/fish/chasm_detritus.dm new file mode 100644 index 00000000000..a20ab5c42df --- /dev/null +++ b/code/modules/fishing/fish/chasm_detritus.dm @@ -0,0 +1,46 @@ +/// An object which should replace itself on initialisation with something which fell into a chasm. +/obj/item/chasm_detritus + name = "chasm detritus" + desc = "Abstract concept of an object which once fell into a deep hole." + icon_state = "skub" + /// Stuff which you can always fish up even if nothing fell into a hole. + var/static/list/default_contents = list(\ + /obj/item/stack/ore/slag = 2, \ + /obj/item/stack/sheet/bone = 3, \ + /obj/effect/mob_spawn/corpse/human/skeleton = 1, \ + /mob/living/simple_animal/hostile/asteroid/lobstrosity/lava = 1, \ + ) + +/obj/item/chasm_detritus/Initialize(mapload) + . = ..() + if (prob(25)) + create_default_object() + return + + var/list/chasm_stuff = find_chasm_contents() + if (!chasm_stuff.len) + create_default_object() + return + + var/atom/movable/detritus = pick(chasm_stuff) + detritus.forceMove(get_turf(src)) + qdel(src) + +/// Instantiates something from the default list. +/obj/item/chasm_detritus/proc/create_default_object() + var/contents_type = pick(default_contents) + new contents_type(get_turf(src)) + qdel(src) + +/// Returns a list of every object which is currently inside of a chasm. +/obj/item/chasm_detritus/proc/find_chasm_contents() + var/list/chasm_contents = list() + if (!GLOB.chasm_storage.len) + return chasm_contents + + var/list/chasm_storage_resolved = recursive_list_resolve(GLOB.chasm_storage) + for (var/obj/storage as anything in chasm_storage_resolved) + for (var/thing as anything in storage.contents) + chasm_contents += thing + + return chasm_contents diff --git a/code/modules/fishing/fish/fish_types.dm b/code/modules/fishing/fish/fish_types.dm index f6e99c73586..c96ff4221ba 100644 --- a/code/modules/fishing/fish/fish_types.dm +++ b/code/modules/fishing/fish/fish_types.dm @@ -181,6 +181,21 @@ fillet_type = /obj/item/food/fishmeat/armorfish fish_ai_type = FISH_AI_SLOW +//Chasm fish +/obj/item/fish/chasm_crab + name = "chasm chrab" + desc = "The young of the lobstrosity mature in pools below the earth, eating what falls in until large enough to clamber out. Those found near the station are well-fed." + icon_state = "chrab" + dedicated_in_aquarium_icon_state = "chrab_small" + sprite_height = 9 + sprite_width = 8 + source_height = 9 + source_width = 8 + stable_population = 4 + feeding_frequency = 15 MINUTES + random_case_rarity = FISH_RARITY_RARE + fillet_type = /obj/item/food/meat/slab/rawcrab + /obj/item/storage/box/fish_debug name = "box full of fish" diff --git a/code/modules/fishing/fishing_equipment.dm b/code/modules/fishing/fishing_equipment.dm index 84281601a12..385936e712e 100644 --- a/code/modules/fishing/fishing_equipment.dm +++ b/code/modules/fishing/fishing_equipment.dm @@ -30,6 +30,20 @@ fishing_line_traits = FISHING_LINE_BOUNCY line_color = "#99313f" +/obj/item/fishing_line/sinew + name = "fishing sinew" + desc = "an all-natural fishing line made of stretched out sinew" + icon = 'icons/obj/fishing.dmi' + icon_state = "reel_sinew" + line_color = "#d1cca3" + +/datum/crafting_recipe/sinew_line + name = "Sinew Fishing Line Reel" + result = /obj/item/fishing_line/sinew + reqs = list(/obj/item/stack/sheet/sinew = 2) + time = 2 SECONDS + category = CAT_PRIMAL + // Hooks /obj/item/fishing_hook @@ -62,6 +76,17 @@ fishing_hook_traits = FISHING_HOOK_WEIGHTED rod_overlay_icon_state = "hook_weighted_overlay" +/obj/item/fishing_hook/bone + name = "bone hook" + desc = "a simple hook carved from sharpened bone" + icon_state = "hook_bone" + +/datum/crafting_recipe/bone_hook + name = "Goliath Bone Hook" + result = /obj/item/fishing_hook/bone + reqs = list(/obj/item/stack/sheet/bone = 1) + time = 2 SECONDS + category = CAT_PRIMAL /obj/item/storage/toolbox/fishing name = "fishing toolbox" diff --git a/code/modules/fishing/fishing_rod.dm b/code/modules/fishing/fishing_rod.dm index 90d84a28467..d9900243ef7 100644 --- a/code/modules/fishing/fishing_rod.dm +++ b/code/modules/fishing/fishing_rod.dm @@ -362,6 +362,20 @@ if(gone == hook) hook = null +/obj/item/fishing_rod/bone + name = "bone fishing rod" + desc = "A humble rod, made with whatever happened to be on hand." + icon_state = "fishing_rod_bone" + +/datum/crafting_recipe/bone_rod + name = "Bone Fishing Rod" + result = /obj/item/fishing_rod/bone + time = 5 SECONDS + reqs = list(/obj/item/stack/sheet/leather = 1, + /obj/item/stack/sheet/sinew = 2, + /obj/item/stack/sheet/bone = 2) + category = CAT_PRIMAL + /obj/item/fishing_rod/master name = "master fishing rod" desc = "The mythical rod of a lost fisher king. Said to be imbued with un-paralleled fishing power. There's writing on the back of the pole. \"中国航天制造\"" diff --git a/code/modules/fishing/sources/_fish_source.dm b/code/modules/fishing/sources/_fish_source.dm index f27d4aed837..4e6d708c3a3 100644 --- a/code/modules/fishing/sources/_fish_source.dm +++ b/code/modules/fishing/sources/_fish_source.dm @@ -11,6 +11,9 @@ GLOBAL_LIST_INIT(preset_fish_sources,init_fishing_configurations()) var/datum/fish_source/lavaland/lava_preset = new .[FISHING_SPOT_PRESET_LAVALAND_LAVA] = lava_preset + var/datum/fish_source/chasm/chasm_preset = new + .[FISHING_SPOT_PRESET_CHASM] = chasm_preset + /// Where the fish actually come from - every fishing spot has one assigned but multiple fishing holes can share single source, ie single shared one for ocean/lavaland river /datum/fish_source /// Fish catch weight table - these are relative weights @@ -87,7 +90,7 @@ GLOBAL_LIST_INIT(preset_fish_sources,init_fishing_configurations()) reward_path = FISHING_DUD //Ran out of these since rolling (multiple fishermen on same source most likely) if(ispath(reward_path)) if(ispath(reward_path,/obj/item)) - var/obj/item/reward = new reward_path + var/obj/item/reward = new reward_path(get_turf(fisherman)) if(ispath(reward_path,/obj/item/fish)) var/obj/item/fish/caught_fish = reward caught_fish.randomize_weight_and_size() diff --git a/code/modules/fishing/sources/source_types.dm b/code/modules/fishing/sources/source_types.dm index 9b626de6956..d3a499d5ebd 100644 --- a/code/modules/fishing/sources/source_types.dm +++ b/code/modules/fishing/sources/source_types.dm @@ -21,6 +21,17 @@ ) catalog_description = "Fish dimension (Fishing portal generator)" +/datum/fish_source/chasm + catalog_description = "Chasm depths" + background = "fishing_background_lavaland" + fish_table = list( + FISHING_DUD = 5, + /obj/item/fish/chasm_crab = 15, + /obj/item/chasm_detritus = 30, + ) + + fishing_difficulty = FISHING_DEFAULT_DIFFICULTY + 5 + /datum/fish_source/lavaland catalog_description = "Lava vents" background = "fishing_background_lavaland" diff --git a/icons/obj/aquarium.dmi b/icons/obj/aquarium.dmi index fcb2c96bf58862c581f0089d5e3ee3ae197fa044..6927ca8104e15daa3dcb70414c9f49112f043ac3 100644 GIT binary patch literal 16101 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 literal 15572 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 Z(~S-~mVCHXgZx_=kdaiBs1P&q{~!E*{M7&e diff --git a/icons/obj/fishing.dmi b/icons/obj/fishing.dmi index 13b2409ed28fffb9400c35f3cf82bcdba027f854..dee9f7a5c29b80179a14e255c2e053642cfcd378 100644 GIT binary patch delta 2931 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 du_ZhKf55=N2MjBLhKvd(4Ga}Y5kD59 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