Early on, Bloom Valley had a pacing problem I couldn't ignore: a player could reach the equivalent of day 144 in about an hour, and coins piled up faster than there was anything to spend them on. The garden looked cozy, but the economy underneath it was leaking. This devlog walks through the rebalance I shipped — every number here is pulled straight from the game's source, not from memory or old marketing copy. If you want the player-facing version, there's a companion money guide; this piece is about the design underneath it.
The clock: real time, not an arcade timer
Bloom Valley runs on a fixed tick. The game loop fires every 500 ms, so two ticks equal one real second. Everything in the economy is measured in ticks, which keeps growth honest — the clock can't be sped up by a faster frame rate or slowed by a laggy tab.
The single most impactful change was the length of a day. A day is defined as TICKS_PER_DAY = 1200. At two ticks per second that's 600 seconds — ten real minutes per in-game day. The original build ran a day in 60 ticks, or 30 seconds, which is why the day counter sprinted into the triple digits so quickly. A season is DAYS_PER_SEASON = 10, so one season lasts roughly 100 minutes — about 1.7 hours of play — and the year cycles through four of them: Spring, Summer, Autumn, and Winter.
Slowing the day did more than fix a number on the HUD. The day boundary is where a lot of the game's "faucets" fire — the weather re-rolls, the daily challenge resets, the traveling trader arrives every fifth day, and rain-catcher upgrades top up your water. When a day was 30 seconds, all of that gushed. Stretching the day to ten minutes de-spammed those systems for free, without touching each one individually.
Grow-time tiers: from snack crops to overnight crops
Each crop's base grow time is multiplied by a rarity-tier factor, TIER_GROW_MULT = [4, 15, 40, 110, 260], indexed by the crop's rarity from common (0) to legendary (4). I kept these tiers because they were already genre-correct — they spread the roster across real-time "buckets" so there's always something short to plant and something long to commit to.
The spread is deliberate. A Carrot has a base grow time of 8, so 8 × 4 = 32 ticks — about 16 seconds, a true snack crop for onboarding. At the other end, Void Bloom's base grow time of 150 against the tier-4 multiplier of 260 works out to 39,000 ticks, or roughly five and a half hours: a "plant it before you log off" appointment crop. The common tiers stay snappy so new players get constant feedback; the rare tiers ask for patience and reward it.
The margin fix: profit that falls with rarity
The deeper problem wasn't the clock — it was the crop margins. In the old numbers, sell price was 2–3× seed cost, and worse, that ratio rose with tier, so rarer crops printed money. That's backwards. In the genres I looked to for reference, top-tier staples sit closer to break-even on raw margin and earn their keep through convenience, not markup.
So I re-cut every crop's sell price by hand to a target band: roughly 1.8× seed cost on commons, falling toward 1.5× on legendaries. A rare crop is still worth more coins in absolute terms — it just isn't a better multiplier on your money. Void Bloom, for example, was cut from a sell price of 3,500 down to 1,200 against its 800 seed cost, landing it at exactly 1.5×. Rarity now pays off through less micromanagement and a much higher mutation chance, not through a fatter margin.
| Crop | Rarity | Seed | Sell | Ratio |
|---|---|---|---|---|
| 🥕 Carrot | Common | 5 | 9 | 1.8× |
| 🍅 Tomato | Common | 10 | 18 | 1.8× |
| 🍓 Strawberry | Uncommon | 20 | 34 | 1.7× |
| 🎃 Pumpkin | Rare | 45 | 74 | 1.64× |
| 🍇 Grape | Epic | 90 | 144 | 1.6× |
| 🐉 Dragon Fruit | Legendary | 200 | 300 | 1.5× |
| 🍎 Golden Apple | Legendary | 350 | 525 | 1.5× |
| 🌑 Void Bloom | Legendary | 800 | 1,200 | 1.5× |
Read that table top to bottom and you can see the whole philosophy: the multiplier shrinks as the crops get grander. The absolute coins go up, so progress still feels like progress, but you can't shortcut the economy by rushing to the shiniest seed.
Capping the multiplier stack
Selling a crop isn't just base price. The getSellPrice() function layers on soil upgrades, the seasonal price multiplier, soil-type bonuses, a butterfly companion bonus, seasonal-event bonuses, and prestige perks. Multiply all of those together on an already-generous base and prices could balloon without limit. So I clamped the product of those non-mutation multipliers to at most 2.5× the base price. It reads, in effect, as Math.min(2.5, base × season × soil × butterfly × event × prestige).
Crucially, mutations are deliberately excluded from that cap. A Giant, Golden, Prismatic, or Rainbow mutation is applied separately, downstream of the clamp, and stays uncapped — because those are the rare, exciting jackpots the game is built around. The cap tames the everyday compounding without flattening the moments that make a harvest memorable.
Field costs that scale with your wallet
An economy needs a sink that keeps pace with income, or coins pool up meaningless. In an idle-style game the standard answer is exponential costs against roughly linear income, so I made new fields geometric. When you place a detached field, its price is its base cost multiplied by 1.6 raised to the number of fields you already own: cost = base × 1.6^(fieldsOwned).
The four field types have their own base prices and level gates — Meadow Plot at 300 (level 3), River Field at 650 (level 6), Mystic Field at 1,100 (level 9), and Golden Field at 1,700 (level 12). The geometric factor then rides on top of whichever you buy next. To show the curve in isolation, here's what a single base price of 300 looks like as you keep expanding:
| Fields already owned | Multiplier (1.6ⁿ) | Cost at base 300 |
|---|---|---|
| 0 (your first field) | 1.00× | 300 |
| 1 | 1.60× | 480 |
| 2 | 2.56× | 768 |
| 3 | 4.10× | 1,229 |
| 4 | 6.55× | 1,966 |
The point isn't the exact figures — it's the shape. Every field you add makes the next one meaningfully more expensive, so expansion stays a real decision the whole way up. Decorations, by contrast, stay pure cosmetic sinks; the field ladder is where the money actually goes.
Save versioning: the honest cost of a rebalance
All of this created a hard problem. Existing players had coin balances and day counts tuned to the old, leaky numbers. Dropping the new economy on top of an old save would have produced nonsense — a player sitting on a fortune that was never meant to exist under the new rules.
The clean fix was a save-version bump. The storage key is SAVE_KEY = 'bv_garden_v2', raised from the previous v1. Because the game loads progress from that key, changing it means old saves are no longer read, and every player starts fresh on the rebalanced economy. I don't pretend that's painless — it wiped live progress — but a global fresh start was the honest choice. A half-migrated economy that quietly contradicts itself is worse than a clean slate everyone shares.
Bloom Valley runs free in your browser — no download, no login, and your farm saves automatically.
How to play well under the new economy
If you're coming to the rebalanced game, a few habits fall out naturally from the design:
- Keep commons in the ground. With margins highest on Carrots and Tomatoes and grow times measured in seconds, a bed of commons is a steady, low-attention income floor.
- Treat legendaries as appointments. A five-hour Void Bloom is worth planting before a break, not while you're actively farming. Its payoff is the high mutation chance, not the base sale.
- Chase mutations, not markup. The 2.5× cap means stacking ordinary bonuses hits a ceiling fast, but mutations sit outside that cap. A single Golden or Prismatic roll can outvalue a whole tray of clean harvests.
- Buy fields early, then pace them. Because each field costs 1.6× more than the last, the cheap early expansions are the best value you'll ever get. Grab them when the level gate opens.
- Let seasons work for you. Autumn's price multiplier and Winter's stronger mutation odds shift the math — plan your biggest sales and riskiest plantings around the calendar.
There was no single lever that fixed Bloom Valley's pacing — it was the day length, the falling margins, the multiplier cap, and the geometric sink all pulling in the same direction. The goal was never to slow players down for its own sake. It was to make a coin mean something, so that a full field, a rare mutation, and a new plot of land all feel like they were earned over real time and real effort.