The math

Yield & Luck

Ore is multiplicative. Luck is compressed. Forgemaster bonuses skip the squeeze. That is the whole personality of Yearn’s numbers.

One smash

Player, gold block, some cavernore = 1 × Forge × reagent.overall_yield × guild.yield × reagent.gold_yield × guild.goldYield × roomYield

A miner smash multiplies that by the miner’s own gold yield (stats × gear). Hardness is not in this product. Luck is not in this product.

Worked example. Forge 15, reagent overall 1.30, guild yield 1.08, reagent gold 1.05, guild gold 1.02, room 2.4. Player gold yield = 15 × 1.30 × 1.08 × 1.05 × 1.02 ≈ 22.54. Times room 2.4 ≈ 54.1 gold for a 1-ore block.

Player yield

Gospel writeplayerBase = Forgemaster level + generation_count (legacy, no Forge: 1 + 2 × powerUpgrades) afterReagents = playerBase × reagent.overall_yield afterGuild = afterReagents × guild.yield copper = afterGuild × reagent.copper_yield × guild.copperYield silver = afterGuild × reagent.silver_yield × guild.silverYield gold = afterGuild × reagent.gold_yield × guild.goldYield

Missing boosts default to 1.0. Generation is 0 for your first Forgemaster (shown as Gen 1 in the UI), so Forge Lv 12 Gen 1 → base 12. After one succession, generation_count is 1 → Lv 12 is base 13.

Apprentice vs Gospel. Live ore uses the Forgemaster’s level plus generation. A helper used by some UI uses the apprentice’s level while one is assigned. Trust the Gospel / character-sheet “effective per smash” for what the cavern actually pays.

Miner yield

Gospel does not bake player yield into the miner. The batcher applies player yield at payout time, so miners are not double-dipped.

Per ore, then every equipped item multipliesoreYield = attributes.copperYield | silverYield | goldYield || attributes.yield || 1.0 then for each item: stats.copper/silver/goldYield → that ore stats.yield → all three ores stats.speed / power|strength / luck additive: baseDamageBonus, critical, carrySpeed, lobDistance, seekDistance

If a miner has both a generic yield and a copperYield, copper’s base is the copper one (not both multiplied). Equipment yield still multiplies after.

Reagent bag

Every copy you have ever found (total_found, not current inventory) feeds a passive. Raw bonuses are summed, then log10-compressed so a thousand copies do not explode the game.

Per boost typerawBoost[type] += (passive_boost_value − 1) × total_found multiplier = round6( 1 + log10(1 + rawBoost) )

Types: luck, overall_yield, strength, speed, gold_yield, silver_yield, copper_yield. power is an alias of strength. yield is an alias of overall_yield.

Raw bonusDisplayed multiplier
01.000000
+1.00 (100% raw)1.301030
+101.414973

Typical passives are tiny on purpose: T1 often 1.0001 (0.01% per copy before the log), T4 often 1.0003, T5 around 1.0004–1.0005. You collect hundreds. The log keeps that a curve, not a cliff. Details: Reagents.

Guild formula

Jewelers, crew, Forgemaster, and apprentice sit in the pool. Blacksmiths do not. Assigned miners stop mining in the cavern.

Member, then poolmemberStat = baseStat × (1 + Σ(equipStat − 1)) // equipment is additive here bonus = memberStat − 1 guildStat = 1 + (Σ member bonuses / 10) + forgemasterDirect // 100%, not /10 + moratorium + retiredForge // 100%, not /10 rounded to 4 decimals

The Forgemaster is in the /10 pool and added again at 100%. They contribute twice. That is intentional. Ore-specific yield on gear only adds (equipOreYield − 1) into the ore buckets.

Forgemaster direct uses attributes plus equipped rings (pickaxes cannot go on guild members). Moratorium is permanent salvage residue plus 1/10 of each retired Forgemaster’s (stat − 1).

Effective luck

Luck changes whether a reagent drops and, via √luck, tunnel chance. It never changes which reagent drops. Ceiling 15.0, floor 1.0.

CompressionreagentLuckBonus = reagent.luck − 1 guildMemberBonus = (1 + totalLuckBonus/10) − 1 // members only earnedBonus = reagentLuckBonus + guildMemberBonus compressed = earnedBonus ≤ 0 ? 0 : log10(1 + earnedBonus × 10) luck = 1 + compressed + forgemasterDirectLuck + moratoriumLuck if a miner is mining: luck += (minerBaseLuck × minerEquipLuck − 1) / 10 luck = clamp(luck, 1, 15)

Forge and moratorium bypass the log10 squeeze. Reagent bag and guild members do not. That is why a stacked Forgemaster still matters for drops after the bag has flattened.

Block / cluster drop roll

Two-phasefor each eligible reagent for that ore (plus source_ore = any): rate = base_drop_rate if cluster: × 2.0 if miner: × 0.25 rate ×= effectiveLuck totalChance += rate totalChance = min(totalChance, 0.85) if random() > totalChance → nothing else pick weighted by raw base_drop_rate (no luck, no cluster/miner)

Miners find reagents at a quarter the rate. Clusters are twice as generous. The cap is 85% per smash. Phase 2 ignores luck on purpose so luck cannot bias you toward legendaries.

Vein drop roll

Union of gold+silver+copper lists. 3 rolls, max 5 drops per node.

Phase 1 per reagentrate = base_drop_rate × 3.0 × luck if prismatic vein: × 2.0 if tier ≥ 5: × 2.0 else if tier ≥ 4: × 1.5 else if tags include the vein’s affinity: × 5.0 sum capped at 0.85 per roll

Phase 2 weights: raw drop rate, ×5 if affinity, or prismatic T5 ×4 / T4 ×2. Gem veins want gem, ore veins metal_source, iron iron_source, salt salt, mineral mineral.

The Gospel

Server-side yield cache. Recalc about every 60s. Invalidation cooldown 20s (marks stale, skips an immediate rebuild). Inactive players evict after 10 minutes. The client looks this map up; it does not recompute.

Sync packet includes player copper/silver/gold/base, per-miner yields + speed/power/luck/damage, reagent boosts, and guild bonuses.