XIPROZ-HowToFishExtended icon

HowToFishExtended

Weapon upgrades past the cap, six fish size variants, a Lucky Charm luck system, a New Game+ ascension loop, catch trophies, health bars and a storage panel. Fully configurable.

CHANGELOG

Changelog

v3.0.3

A HEALTH BARS SETTINGS PAGE AND CREDITS

  • A HEALTH BARS TAB. The main-menu settings panel now has a dedicated tab for the bar: toggle it, set its width, thickness, height above the fish and opacity, and hide it until a fish is damaged. A live preview on the page shows the bar change as you edit it.

  • CREDITS. The Credits tab now thanks the Discord moderators, helpers and the bug finder who helped with this build.

  • No config or save changes beyond the new health-bar keys, which take their defaults; everything else carries over untouched.

v3.0.2

HEALTH BARS CLEAN UP, AND THEY'RE IN THE MENU

A small bug-fix release for the health bars added in 3.0.1.

  • HEALTH BARS NO LONGER LINGER. A bar stayed floating above the water when a fish escaped and despawned - the bar's canvas was a separate object the fish never took down with it. It is now destroyed on despawn and hidden when pooled, so no orphan bars are left behind.

  • THE SWITCH IS IN THE SETTINGS PANEL. EnableFishHealthBars had no row on the main-menu settings page, so the only way to turn bars off was to edit the config file. It is now a toggle under Features, next to "Fish drawn to size".

  • No config or save changes. Nothing was rebalanced, so no settings are reset and existing files carry over untouched.

v3.0.1

STORAGE KEEPS VARIANTS, FISH KEEP THEIR SIZE, AND HEALTH BARS

A bug-fix and polish release. The three things players notice most - a stored fish coming back ordinary, a big fish shrinking in your hands, and having no way to read a fish's health - are all addressed.

  • STORAGE KEEPS ITS VARIANTS. A Mythic put into storage came back out ordinary. The weight that decides the variant was written before the fish spawned, the network reset it, and the game then rolled a fresh, ordinary weight. The saved weight is now recorded and re-applied after the spawn, so a fish keeps the exact name, size and value it had when it went in.

  • FISH KEEP THEIR SIZE IN YOUR HANDS. A big fish snapped back to default size the moment it was picked up - the game resets a fish's scale to one on pickup, and the mod only sized it once at spawn. The size is now re-applied after every pickup and drop, so a Mythic stays Mythic-sized on the ground, in your hand, and on the deck.

  • HEALTH BARS. Every fish now has a small bar above it that drains green to red as it is fought. On by default, switched with EnableFishHealthBars.

  • A NEW LUCKY CHARM STAND. The stand is a pedestal with a faceted green gem instead of the boxy placeholder, and the buy prompt sits at the gem rather than at the stand's feet.

  • EXTRA HOOKS ARE OFF. The experimental multi-fish-on-the-line feature now ships switched off and reset to a single hook, because it was still unproven. It can be re-enabled in the config, but the default is off.

  • No other config or save changes. EnableFishHealthBars is a new setting and takes its default; everything else carries over untouched.

v3.0.0

SETTINGS ON THE MAIN MENU, AND BIGGER FISH

A new major version because the mod is now configurable without ever opening a text file, and because fish are drawn noticeably larger than they were.

  • THE SETTINGS BUTTON. There is now a "How To Fish - Extended" button on the game's main menu, under Quit. It opens a settings panel with 41 of the mod's options across five tabs: Features, Fish size, Luck, Ascension, and Storage and upgrades. Every toggle and number is edited in game, with a line of plain English saying what it does.

    It is on the main menu deliberately, and only there. Every setting the mod has is read at the moment the thing it configures comes into existence - the upgrade ladders when a weapon spawns, luck when you use a stand, fish size when a fish appears. None of that has happened while you are looking at the boat, so a change made here is picked up in full by the next game you load. No restart, and no "requires a restart" against half the rows.

    The config file still works exactly as it did, for anything not on the panel and for anyone who prefers it.

  • FISH ARE DRAWN BIGGER. The size curve was physically honest and read as too small: a Mythic at two and a half times length is barely a different fish across the width of a boat. The exponent moves from 0.33 to 0.5, so a 15x Mythic now draws at 3.9x rather than 2.5x, and the size ceiling goes from 2.75x to 5x. Everything below Mythic scales up with it.

    If you had already tuned any of these yourself, your values are KEPT. The upgrade only takes the new defaults for settings you had left alone

    • see below.
  • YOUR TUNING SURVIVES A REBALANCE. Until now, when a shipped default changed, that setting was reset for everyone, including people who had deliberately chosen a different value. The upgrade now checks: if your file still holds the old default, it takes the new one; if you had changed it, your value stays. The log says which settings it kept and why.

  • Bosses can be scaled too, though this only does anything with "Variants from bosses" also switched on - without it the game pins a boss to a flat weight, and a flat weight scales to no change at all. Both are on the Fish size tab.

v2.8.3

NOW CALLED "HOW TO FISH - EXTENDED"

The mod is named Extended everywhere now, matching the Nexus page and the Discord. Nothing about how it plays has changed since 2.8.1.

  • The name BepInEx shows, and the tag in the log, is now "How To Fish - Extended". If you are reading a log, that is what to search for.
  • Your config and saved progress are untouched. They still live in HowToFishExpanded.cfg and the HowToFishExpanded folder, deliberately: renaming those would have orphaned everyone's luck, ascension, catch records and stored items.
  • The DLL is still HTFExpanded.dll, so updating by hand overwrites the old one cleanly rather than leaving two copies loaded at once.

v2.8.2

THUNDERSTORE RELEASE

First Thunderstore publication. Same mod as 2.8.1, no gameplay changes.

v2.8.1

THE LUCKY CHARM STAND'S MODEL IS NOW ACTUALLY IN THE MOD

If you could not find the Lucky Charm stand, this is why: the stand was there and working the whole time, but it was wearing the look of the ordinary bait stall it is cloned from, so there was nothing to pick it out from the rest of the shop furniture.

The model was never reaching anyone. The mod has always been able to carry it inside the plugin, but the build never actually put it there, so the only copy was the models folder in the zip - which had to be hand-copied into an AppData path that the main README never mentioned. Nobody did that, so nobody has ever seen the real stand unless they were told about it.

  • The model, its materials and its textures are now built into the plugin. Nothing to install, nothing to copy.
  • Models on disk are still found first, so your own edits keep overriding the built-in one, and there are now three places to put them: the AppData models folder, <game>\models, or <game>\BepInEx\plugins\models. The zip's models folder now lands somewhere the mod actually reads.
  • The log now always says which model each stand ended up wearing and where it came from, and warns in plain words when a stand is going to look like a stall. It only used to mention this when both models were missing, which is why the common case was invisible.
  • The "placed the ... stand" line now also says what it looks like and whether it has anything to outline.

Nothing about the stand's placement, behaviour or price changed, and this is not new in 2.8.0 - it has been true since custom stand models were added. 2.8.0 just brought enough new players for it to surface.

Also in this version: the build now fails outright if the model is not embedded, and a new check reads the model back out of the built plugin to prove it is really there.

v2.8.0

A STORAGE PANEL, AND THE END OF THE NINE-SLOT WALL

Press B for a new inventory window with room that grows as you ascend, plus your Trophies moved in as a second tab.

The reason it exists: the game's hotbar physically cannot hold more than nine things. PlayerInventory seeds its item store with exactly nine keys and then indexes straight into a fixed list of nine slot objects, so asking for a tenth is an error rather than more room. The ascension slot bonus added in this release therefore takes you from seven slots to nine and stops - that is the ceiling, not a bug - and everything above it lives in storage instead.

  • 30 storage slots to start, +5 per ascension tier. A full 25-tier run reaches 155.
  • Click a pocket to store it, click a stored item to take it back. "Stow everything" empties your pockets in one go.
  • Trophies is now a tab in this window. F2 still opens the old standalone view, so nothing was taken away.
  • Stored items keep everything: a fish keeps its exact size and its variant, a weapon keeps its scope, barrel, ammo, mag and laser.
  • Storage lives in the mod's sidecar folder as <world>.backpack.dat, never in the game's Saves folder.
  • New config keys EnableBackpack (true), BackpackKey (B), BackpackSlots (30), BackpackSlotsPerAscension (5) and BackpackMaxSlots (300), plus EnableAscensionSlots and AscensionSlotsPerTier for the hotbar bonus. Config version 25 only adds keys, so nothing you have tuned is reset.
  • /storage (or /backpack) prints what is in it.

Three things it deliberately refuses to do, because the alternative could cost you an item:

  • It will not store what is in your hand. Removing the object the game is currently drawing there leaves a ghost, so put it away first.
  • It writes the stored record to disk before it removes the real object. If the game dies mid-move you end up with a duplicate, which you can throw away; the other order leaves you with nothing.
  • If it cannot describe an item completely, it refuses to store it and you keep it. A description missing one field is a weapon that comes back without its scope.

Not in this version: no 3D previews, no drag and drop, and no selling straight from storage - take it out and sell it at the stall. Guests in a multiplayer game can open the panel but only the host can move things; that needs a proper network call and is next.

v2.7.2

FIXED THE RAINBOW LUCK STAND

The custom stand model could come out as a rainbow. It inherits its material from the stall it replaces, and that stall's material uses the game's 'Shader Graphs/DefaultShader', which ignores the model's wood/gold textures and renders rainbow.

The mod now only clones a stall material when it is a known plain lit shader (URP Lit / Standard / Diffuse). Otherwise it builds the model's material from a plain shader, so the wood/gold/charm textures show. It also strips any normal/metallic/specular maps the stall's material carried.

v2.7.1

LUCK CAP LOWERED, PRICES MUCH STEEPER

Luck was topping out too early once ascension was handing out free luck, and the prices were too cheap for a 99.9% Mythic chance. The ladder is now shorter and steeper:

  • LuckMaxLevel is 125 instead of 250 (LuckCurveKnee moved with it, 100 -> 50, so the odds curve keeps its shape).
  • Charm price = LuckBaseCost * Growth^level * 2^(level/25), and 5x from level 10 onwards. The first charm is $250 and the first ten stay cheap, then prices jump 5x and keep climbing - level 25 is about $8.5k, level 100 about $2.6M, the last charm about $8.6M, and maxing out costs roughly $147M.
  • New config keys LuckCostStepInterval (25), LuckCostEarlyLevels (10) and LuckCostLateMultiplier (5). Set the step interval or the late multiplier to remove their effect.
  • Migration v22 resets only LuckMaxLevel and LuckCurveKnee, whose shipped defaults moved; v23 only adds the new keys.

v2.7.0

CATCH STATS AND TROPHIES

Every fish you catch is now recorded - species, size variant, weight and value - into a per-save ledger and a lifetime ledger. A Trophies menu (press F2) lists every species you have caught with its per-tier counts and best weights, and a "new best" toast pops up when you beat a record.

  • Data lives in the mod's HowToFishExpanded sidecar folder as <world>.catches.dat and lifetime.catches.dat, never in the game's Saves folder, so the save list can never be taken down by it.
  • Catch stats are world-shared: the host records everyone's catches, matching how luck and ascension are shared.
  • /catches (or /stats) prints the current save and lifetime totals.
  • EnableCatchStats=true (default), CatchToastDuration=3 and TrophiesMenuKey=F2 are the new config keys; set EnableCatchStats=false to switch the whole feature off.

v2.6.3

BUILD TOOLS NO LONGER SHIP INSIDE THE PLUGIN

The 2.6.2 plugin referenced Mono.Cecil, an assembly the game does not load. CheckTargets and VerifyPlugin are Cecil programs that sit beside the plugin sources, so a build that compiles everything in the source folder swept them in. The shipped DLL was 15 KB of build tooling heavier for it.

It loaded anyway, because Mono resolves types lazily - which is what made it worth fixing rather than shrugging at. Patches.ApplyAll enumerates every type in the assembly at startup, and a stricter runtime would have thrown there and taken the whole mod down.

  • The build tools now live in source/tools/ so a glob of source/*.cs cannot pick them up, whatever toolchain is used.
  • VerifyPlugin fails the build if the plugin references anything the game does not already load, or if a build tool ends up compiled into it. The mistake cannot ship again quietly.

v2.6.2

LUCK PRICES REFITTED TO THE 250 CAP

LuckCostGrowth 1.0309 -> 1.05, so the ladder actually gets expensive as it climbs. The first charm stays $250; reaching the knee (level 100) costs about $650k; the last charm (level 250) is about $47M, and maxing luck out costs roughly $991M - an endgame investment on the scale of the other ladders rather than pocket change.

Migration v20 resets only LuckCostGrowth, whose shipped default moved.

v2.6.1

LUCK PRICES UP 5X, CAP AT 250

Charm prices are multiplied by five: LuckBaseCost 50 -> 250, so the first charm is $250 and every tier after it scales the same way. LuckMaxLevel is now 250 instead of 500, making 250 the highest luck level a player can reach (still 99.9% Mythic at the top).

Because the cap moved down from 500, the expensive 250-500 tail is gone: the last charm is about $490k and the whole ladder costs about $16M to max out.

Migration v19 resets only LuckMaxLevel and LuckBaseCost, whose shipped defaults moved.

v2.6.0

LUCK SCALES PAST THE CAP, ON A CURVE

Luck is back on a curve. Below level 100 (the "knee") it is exactly the shipped table, so existing tuning is untouched. Above the knee each tier's weight is multiplied by g^rank and the whole table - ordinary fish included - is renormalised, so the odds slide up the ladder and the rarest tier converges on certainty.

LuckMaxLevel is now 500 and the rarest tier lands on LuckTopShare (99.9% Mythic) exactly at the top, solved rather than hard-coded. LuckCostGrowth is refitted to the longer ladder (x1.0309): the first charm stays $50 and the last is about $200M instead of a price no wallet can hold.

luck        ordinary     Mythic
100         5.0%          5.0%    <- unchanged
131                       25%
158                       50%
247                       90%
374                       99%
500         ~0%          99.9%

Ascension's luck bonus now matters even after bought luck is maxed, because the ceiling sits far above what ascension can grant. The debug menu odds table shows bought / effective / ascension columns, and says outright when bought luck is already at the cap so the bonus has nowhere to go.

New config keys LuckCurveKnee (100) and LuckTopShare (0.999). Migration v18 resets only LuckMaxLevel and LuckCostGrowth, whose shipped defaults moved.

v2.5.1

CUSTOM STAND MODELS, AND WHERE THE STANDS GO

The Lucky Charm and Ascension stands can now wear a model of your own, and stand exactly where you want them.

MODELS Plain Wavefront OBJ with a companion MTL and PNG textures - the formats any modeller exports. Nothing is compiled into a Unity AssetBundle, which matters more than it sounds: an AssetBundle is tied to the exact Unity version the game was built with, so a game update can invalidate it. OBJ and PNG are text and images, and cannot go stale.

Drop luckstand.obj, its .mtl and its textures into <persistentDataPath>/HowToFishExpanded/models and the Lucky Charm stand wears it. ascensionstand.obj does the same for the Ascension stand. Files are read fresh each time a world loads, so a model can be reshaped and checked without rebuilding anything. A .obj.gz is read too - OBJ text compresses about six to one. A sample lectern is included to start from.

- Positions, normals, texture coordinates, n-gons of any size,
  and one submesh per material. Negative indices, missing uv or
  normal channels and malformed faces are all handled; a bad
  face is dropped rather than taking the model with it.
- Normals are recalculated when the file does not supply one for
  every vertex, which is most exports. A zero normal is not
  merely unlit, it renders solid black.
- Materials are copied from the stall the stand replaced, so
  they suit whatever render pipeline the game uses - a shader
  looked up by name and not found renders bright magenta. A
  plain material is preferred over the game's shiny and animated
  ones, which would otherwise turn a model into a rainbow.
- A texture with transparent pixels gets a cutout material, so
  leaves and grates have holes rather than boxes.
- Only the appearance changes. The collider, hover text and
  outline are untouched, so a model that fails to load costs you
  the look and nothing else - the stand still works.

WHERE THEY GO The mod now ships with a stand position for every island, recorded in game rather than guessed, so a fresh install gets a sensible stand everywhere instead of whatever the automatic placement lands on. Automatic placement is now only the fallback for an island the mod does not have a position for.

A new Stands tab in the debug menu saves where you are standing, and which way you are facing, to HowToFishExpanded/standspots.txt. The stands rebuild immediately so you can see the result and nudge it. Automatic placement still applies to any island you have not saved a spot for.

- The file is plain text and meant to be edited by hand:
    kind  island  x y z  yaw  [note]
  Delete a line to go back to automatic placement for it.
- A saved spot is dropped onto whatever is under it. The game's
  player position is not at your feet, so a stand placed exactly
  there would float at about chest height. Slopes, jetties and
  steps are handled; players, creatures and dropped items are
  never mistaken for the floor.
- A spot at the world origin is refused. That reading only means
  the position could not be read, and saving it dragged both
  stands to the middle of the map.
- Your own spot always beats the shipped one, and forgetting it
  hands the island back to the shipped position rather than to a
  guess. UseBuiltInStandSpots=false ignores the shipped table.

StandModelScale, StandModelYaw and StandModelHeight sit a model on the counter; ModelPointFilter keeps a small hand-drawn texture crisp; EnableCustomStandModels and StandGroundSnap turn the two halves off.

v2.3.1

  • One unsupported hook no longer takes the whole mod down. Harmony's PatchAll stops at the first patch group that fails and abandons the rest of the batch, so a single method this mod could not find on a player's build threw during startup and left the mod half applied. A log from a user running 2.2.5 showed exactly that: their build has no DazedCommands.IsServerCommand, the chat-command hook could not be made, and startup died there.
  • Patch groups are now applied one at a time. A hook the game cannot support costs that one feature and nothing else, and the log names the feature in plain English rather than a class name: "could not hook the /luck and /ascend chat commands on this build of the game. The rest of the mod is unaffected."
  • Startup reports how many groups applied and lists anything that did not, so a log sent back from a player is diagnosable at a glance.
  • The build-time verifier now fails if any patch group is missing its plain-English name, so that log line cannot silently degrade into class names later.

v2.3.0

ASCENSION REBALANCE

The loop used to dead-end at tier 10, and this is why: money is a 32-bit number, so the whole ladder only ever has 2,147,483,647 / 250,000 = about 8,590x of cost growth to spend. At x2.5 per tier that is used up in ten steps, and tier 11 was priced above anything a wallet can physically hold. The growth rate decides the tier count outright - raising it makes the ladder shorter, not longer.

Two things were wrong beyond the tier count. Cost grew faster than income (x2.5 against x2.0), so the price ran out of room while the payout still had plenty - wasting the top of the ladder. And a single catch at tier 10 was worth a fifth of every dollar the game can represent, which is what made money stop meaning anything before it overflowed.

- cost growth   x2.5 -> x1.43
- health growth x2.0 -> x1.45
- value growth  x2.0 -> x1.25
- luck per tier   10 -> 4
- tiers            10 -> 25

The ladder now runs 25 tiers, the top one costs $1.9bn rather than a price no wallet can hold, and the biggest single catch is 5.5% of a full wallet instead of 21.5%. Health leads value by 16% a tier, so the climb steepens gently: about one catch to afford the first tier and eleven for the last. The hardest boss ends at 54 million health against a one billion damage ceiling, so it stays killable. Ascension 25 grants exactly 100 luck, which is the luck cap.

  • AscensionMaxLevel sets where the ladder ends. Leave it at 0 and it is worked out from the wallet ceiling instead. The stand and the debug menu now show "tier N of 25" and stop advertising a tier that cannot be bought.
  • Existing saves keep their tier. The multipliers attached to it are smaller now, so a tier-10 world becomes considerably easier and less lucrative - and has fifteen more tiers to climb.

v2.2.8

  • Your balance can no longer wrap round to minus two billion. Money is a 32-bit number, so $2,147,483,647 is as high as it goes, and the game adds to it without checking. Ascension doubles fish value per tier, so a good late catch can now be worth more than that on its own - and one dollar past the limit flips the balance negative, which then fails every price check, so nothing can be bought and the save cannot recover on its own. Payouts are trimmed to land on the limit instead.
  • A balance that already wrapped is repaired to the limit on load.
  • MaxItemWorth optionally caps what any single item can be worth. Off by default: the balance is safe either way, and capping payouts is a balance decision rather than a correctness one. Past roughly Ascension 15 one good catch can otherwise fill your balance to the limit by itself.

v2.2.7

  • Anglerfish, blobfish, stonefish, goblin sharks, blue sharks, piranhas, pufferfish and spidercrabs can finally be variants. This one was a bug in the game, not in the mod: those species override OnStartServer and never call the base, so the vanilla weight roll that lives there never runs for them. Every one of them was pinned to exactly average weight forever - which is why a blobfish always weighed the same 80 kg no matter how many you caught. The mod now rolls for them.
  • Patching the base class alone had missed all of them, because the override is a different method and the hook never fired. Every OnStartServer declared on a creature subclass is now hooked, so a species added by a future update is covered without a code change.
  • A creature is only ever rolled once, even when two hooks reach it, so a subclass that does call its base is unaffected.
  • New name logging (NameLogCount) records what the variant prefix sees when the UI asks for a name. This is what pinned the bug down: the spawn log showed the rolls were fine while the name log showed every AttackingFish sitting at exactly 1.000x.

v2.2.5

  • The remaining species that never rolled a variant now do. 2.2.4 caught creatures flagged _skipRandomizedWeight, but the game's roll is guarded on TWO things: that flag and the weight still being exactly 1. A prefab shipping a deliberate weight is never rolled either, which is why blobfish, stonefish and the rest of the late-island catches stayed ordinary. The mod now works out exactly which creatures the game rolled for and rolls for the ones it did not, whichever reason it skipped them.
  • Creatures restored from a save keep the size they were caught at. Without this a saved fish could be re-rolled on every load.
  • Kill score popups no longer crawl. The game counts the score up with an exponential ease at a fixed rate, so the time it stays on screen grows with the size of the number, and kills queue up behind it. Ascension values made that painful. The count-up now speeds up in proportion to the score, so it takes about as long as it always did whatever the number. Scores under 500 keep the exact vanilla timing. CapKillScoreAnimation=false to turn it off.
  • The Lucky Charm and Ascension stands buy directly when you are the host rather than going through a network message. The old path rode the game's bait-buying call with a reserved index, which any other mod that patches bait buying could intercept or reject first - that is why some players with a stack of other mods could see the stand but never buy from it. Remote clients still use the message, and it now runs ahead of other mods' patches.
  • A refused purchase now says why in the log (cannot afford, at max level, game not finished yet) instead of failing silently.
  • SpawnLogCount controls how many spawns are logged at startup, up from a hardcoded 40, so what rolled what can be checked.

v2.2.4

  • Whole species can now be variants that never could before. The game only rolls a random weight for creatures whose prefab does not set _skipRandomizedWeight; everything flagged that way is pinned to a flat 1.0, and since the variant tier is worked out from weight, those species were locked to ordinary at any luck level. Clams, snails, crab meat and the late-island catches were all in that group - no amount of fishing would ever have produced a variant from them.
  • The mod now rolls for those species too. The roll only ever raises a weight, never lowers one, so a creature that ships at a deliberate size keeps it unless the roll beats it.
  • Bosses are left out of it by default; Ascension is the dial meant for those. VariantsFromBosses=true includes them.
  • Set VariantsForFixedWeightCreatures=false for the old behaviour. The spawn log marks these rolls, so you can see in BepInEx/LogOutput.log which species were affected.

v2.2.3

  • Weapon upgrades no longer flatline a third of the way up the ladder. Damage and price are whole numbers and cannot pass about 2.1 billion, so a fixed 25% step per tier ran out of range long before the ladder ran out of tiers: price stopped moving around tier 68 and damage around tier 81. Every tier above that charged the same two billion dollars for no extra damage at all - roughly 170 of the 242 added tiers were dead.
  • Each weapon's curve is now fitted to its own length, so it lands on the ceiling at tier 254 instead of tier 81. All 255 tiers are genuine upgrades, and no two tiers share a damage value or a price.
  • GunDamageGrowth and GunCostGrowth are now an upper bound on the per-tier rate rather than the rate itself. A short ladder still steps at the full 25%; a 255-tier one spreads the same climb across its whole length. Two new settings, GunDamageCeiling and GunCostCeiling, decide where the top tier lands.
  • The climb is also cheaper than it was. Reaching Ascension-10 health on the assault rifle used to want tier +38 at $27.9m; it is now tier +107 at $1.2m.

v2.2.2

  • Seagulls and other birds roll variants again, on by default. 2.2.1 switched them off alongside the dynamite fix; dynamite was the actual exploit, since it one-shots what it spawns. Birds have to be shot down like anything else. Set VariantsFromBirds=false if you would rather they did not.
  • Upgrading the mod no longer rebuilds your config from scratch. Only the settings whose shipped default actually changed are reset; anything you have tuned yourself is carried across. The previous file is still kept as a .bak, and the log names which settings were reset.

v2.2.1

  • Dynamite no longer produces variant fish. It conjures fish out of nothing and kills them instantly, so every blast was a pile of free jackpots. Set VariantsFromDynamite=true to allow it.
  • Seagulls and other birds no longer roll variants either. They are creatures like any other, so they were quietly sharing the fish variant table. VariantsFromBirds=true restores it.
  • The debug menu's odds table now uses your effective luck, so it reflects the levels ascension grants. It previously showed the odds for bought luck only, which made ascension look like it did nothing. The menu now breaks out bought, ascension bonus and effective luck separately.
  • Ordinary fish keep their spread at high luck. The weight bonus used to multiply and then clamp, so at luck 100 every ordinary catch weighed exactly the cap.
  • Creature spawns are now logged with their source, so where a fish came from can be checked against what it rolled.

v2.2.0

Weapon upgrades no longer run out.

The ladder now runs to 255 tiers, the most the game's upgrade index can address, instead of stopping at 25 added tiers.

More importantly, damage now grows at the same rate as price. Previously each tier cost 25% more but added only 6% more damage, so over 25 tiers price grew 264x while damage grew about 4x. Against Ascension health, which doubles per tier, that gap made enemies effectively unkillable. Damage growth now defaults to 1.25 to match cost growth.

Reaching the damage needed for Ascension tier 10 (x1024 health) now costs roughly $7-28 million per weapon, which is well within reach at that point since fish are worth x1024 too.

Also fixed: the ladder is capped at 255 rather than 256 tiers. The game casts the upgrade index to a byte before clamping it, so a 256-entry ladder could have wrapped the index round to zero and silently reset a fully upgraded weapon.

Your config will be regenerated because the defaults changed; the old one is kept as a .bak beside it.

v2.1.1

  • The Ascension stand now appears at the anvil by the knife sharpening stand, rather than wherever the nearest purchasable happened to be. On one island that was a hot dog stand on a cliff edge, which put the stand out over the water where nobody would ever find it.
  • Stall picking now scores by how many other stalls are nearby, so the mod's stands always land in the actual shop instead of next to an isolated food stand.
  • Both mod stands stay outlined so they are easy to spot. HighlightModStands=false turns this off.
  • The debug menu's Stats tab now shows where each mod stand is, with distance and direction.
  • Corrected the documented Ascension prices, which were listed one tier out. Tier 1 costs $250,000, not $625,000.

v2.1.0

Added Ascension, a New Game+ loop.

Once you have finished the game, a stand appears on the first island. Each tier doubles the health of every fish and boss, doubles what fish are worth, and grants 10 luck levels. Tiers stack without limit; the practical ceiling is the game's own money cap, around tier 9.

Health scaling hooks the property everything else reads, so it covers ordinary fish, bosses and the boss health bar alike, and stacks on top of the game's difficulty setting rather than replacing it.

v2.0.0

Rebuilt as a BepInEx plugin using Harmony.

The previous release shipped a modified copy of the game's Assembly-CSharp.dll. That approach broke on every game update, could not coexist with other mods, and was undone by Steam's file verification. Nothing in the game install is modified now.

If you used v1, delete the old HowToFishExpanded folder from your game directory and verify your game files through Steam to undo the old patch before installing this.

Also in this release:

  • Luck now runs to level 100, starting at $50 per charm.
  • Ordinary fish fall to 5% at max luck; Mythic rises to 5%.
  • Upgrade prices continue smoothly from each weapon's own last vanilla price instead of jumping roughly 4x at the handover.
  • Fixed an off-by-one that left the extra upgrade tiers broken.
  • Fixed the charm stand anchoring to food stands on cliff edges.
  • Mod progress files moved out of the game's Saves folder, where an unparsable file blanked the entire save list.
  • Debug menu is now off by default.