Nine par-3 holes played through a rotating cast of fantasy worlds. Each world is unique and has its own special trait. Shape your shots through the wind, read the greens, and drain the putt: the closer your tee shot, the more you score. String great shots and birdies together for higher combo multipliers. Chase the top spot on the leaderboard!
🔒 Your details are secure — passwords are encrypted with bcrypt and never stored in plain text. One free account keeps your streak, scores and career safe and in sync across every device.
Hole1Par 4
To Pin—
Elev—
Green—
Shot—
ScoreE
LOFT
POWER
—
Aim line—
Carry—
🧪 Alpha testing
Play this custom challenge?
Are you sure you'd like to restart the round?
Current score: 0
Profile
Guest
Create an account to view your high scores and achievements.
High score
0
Days played
0
Day streak
0
Daily scores
Play Daily Darts to start tracking your scores here.
Join the tour and finish a career event to start tracking your record here.
👤 Player Profile
Guest
Play the Daily or a Free Play round to start building your profile.
🏅 Achievements
New gameplay patch released
Nice round 🎯
0
You're playing as a guest, so this score never reaches the global leaderboard. Create a free account to publish it and keep everything you play.
🏆 Your scores on the Daily, Weekly and All-Time boards
📊 Every stat, achievement and hole-in-one, kept for good
🔥 Streak, scores and career synced across all your devices
This round still counts — it's claimed by your account the moment you make one.
Log in
Created an account on Grand Slam Challenge? Use your credentials here.
Create account
or use a username & password
🔒 Protected — passwords are encrypted with bcrypt and never stored in plain text, and Google sign-in uses secure OAuth (we never see your Google password). One account keeps your streak, scores and career in sync across every device.
Choose a username
You're signed in! Pick the name that shows on the leaderboards.
How to play
Play nine random par 3 holes and rack up the highest score you can. Every shot that finds the green scores points, and if you sink the birdie putt you get a bonus 500 on top. Daily Darts is the same nine holes for everyone that day.
The shot
Pick a club, then dial in your shot shape (draw or fade) and loft (high or low) if you want to work it.
Aim bar: stop it in the green zone for a straight shot. Anything off center pushes the ball off your line.
Power bar: stop it on your number. Read the wind, elevation and lie, then decide how you want to play it.
Green firmness
Every green plays Firm, Medium or Soft — check the Green box in the top bar before you swing. Firm turf releases the ball forward on landing, Medium gives a modest hop-and-roll, and Soft bites: a spinning wedge can even zip back. Flight matters too — a low, driven long iron runs out hardest, and a helping wind adds release while a headwind kills it. Blossom's petal-strewn greens are always Soft, storm-soaked Tempest never runs Firm, and every other world can roll any of the three.
Points
(Proximity + Made Putt) × Creativity × Difficulty × Combo
Proximity: the closer to the pin, the more you score. Miss the green and it's a zero, unless your recovery chip bails you out.
Putt: sink your one putt for a bonus on top.
Creativity: the more you shape the shot, the bigger the bonus. Just know the further you get from a stock swing, the faster the bars move.
Difficulty: longer holes, more wind, more elevation and more hazards all push this multiplier up.
Combo: a running multiplier that builds hole to hole. Birdies and great or elite approaches add to it. Hitting the green keeps it going, missing the green kills it (unless you chip in for birdie).
Combo multiplier
A running multiplier on your hole score. Every hole adds to it, and the only way to add a full +1.0 is an ace:
Hole in one 🎯
+1.0
Elite approach + birdie
+0.75
Made birdie
+0.5
Elite approach, no birdie
+0.5
Great approach, no birdie
+0.25
Hitting the green keeps your combo going, any quality works. Miss the green and it resets to ×1, unless you chip in for birdie to keep it alive.
Proximity score
Based on how close your approach ends up to the pin, before the multipliers. It fades down to 0 by 80 ft:
Hole in one
5000
Inside 2.5 ft
2500
5 ft
2000
10 ft
1500
20 ft
1000
40 ft
500
Shot rating
The label a hole gets, based on its total (proximity + putt, times creativity and difficulty). The great and elite tiers also feed the combo, measured on the approach by itself before the putt:
Elite 🎯
6000+
Great ✅
4500 to 5999
Good
2500 to 4499
Decent
1000 to 2499
Mediocre
under 1000
Recovery chip
Miss the green but end up within 30 yards of the pin (and out of the water) and you get ONE chip to try to save the hole. Get it on the green and sink the putt to save par for +250 (a ☑️ on your card), or chip it straight in for the birdie and the full +500. If the chip misses the green, the hole's over. Missing a green always resets your combo, the one exception being a chip in birdie. Miss by more than 30 yards or splash it and the hole's lost, no recovery. The chip carries up to 50 yards no matter the lie.
The 9 hole types
Each round runs through all nine worlds, and every one bends a rule:
Frostreach ❄️: icy greens, so approach shots skip and run out and putts roll about 10% hot.
Blossom 🌸: soft petal covered turf that grabs approach shots. Short garden holes, 80 to 150 yds.
Starfall ☄️: low gravity, so putts break about 35% less than the slope looks.
Elysium 😇: calm and serene, with easy air and a bigger green to hit.
Tempest ⛈️: wind blows way harder, so club up and hold your line.
Aurora 🌌: night bonus, made putts pay +750 instead of +500.
Volcano 🌋: lava fields and extra hazards guarding the green.
Ocean 🌊: open water, no dry land past the tee and green, and 10 to 20 mph wind pushing every ball.
Skyworld ☁️: floating islands, thin air carries shots about 7% further, and anything off the green drops into the cloud sea.
Greens have their own personality too. Most are a simple two way slope, but every so often one gets wild with funnel pins that gather the ball, mounds that shed it, and ridges and swales to putt across.
Leaderboard
Every round you finish posts to the leaderboard. There's a Daily Darts board and a Free Play board, and you can flip between your own scores and the global boards. Chase the high score and keep your daily streak alive.
You're a pro grinding it out on the mini tour. Every event is 72 holes over four 9-hole rounds against a field of 144. Play well, cash checks, train up your ratings and climb the money list.
The tour
The cut: after two rounds only the top 65 and ties advance to the weekend. Miss it and you go home with nothing, so those first 18 holes matter.
Payouts: your finish decides your slice of the purse. The five events get richer as the season goes, from $220,000 at Red Rocks up to $950,000 in the desert.
Birdie cash: every birdie banks $250 on the spot, eagles and aces pay $500, and an albatross is worth $1,000. It adds up even on a rough week.
Your ratings
Six ratings shape every shot: Distance, Accuracy, Approach, Short game, Putting and Luck. Higher accuracy slows your swing bars down and shrinks your miss. Distance adds carry. Short game and Putting tighten your scoring shots, and Luck quietly helps in the bad spots, like a ball trickling out of a bunker or a putt catching the edge and dropping. Earn money, then spend it on training in the clubhouse to push them up.
Trouble
Rough: costs you carry, and the longer the club the worse it bites. Driver only carries about a third from the rough, a wedge keeps most of its number. Watch the lie readout.
Bunkers: real hazards now. Escaping the sand takes loft, and thin escapes can catch the lip.
Trees: pick your gap, then punch out safe or gamble at the green. Trunks are unforgiving.
Water: one penalty stroke, and you drop about 10 yards back on the line the ball crossed.
Blowups: 10 is the max on any hole. Hit it and you pick up and move on automatically.
Weather
Every round rolls its own conditions. Sun keeps things firm and fast, overcast softens the turf and adds a little wind, and rain makes it soft and gusty. Check the forecast line before you tee off and plan your rollout around it.
The pro shop
Spend your winnings on new balls and shot trails, or save up $100,000 for a caddie. The caddie reads every shot for you: the true playing number after wind, elevation and lie, plus a club that can actually get there.
Season stats
The clubhouse tracks your season: fairways and greens hit, driving distance, proximity, putts made, course records and the skill wheel that shows where your game is strong and where it leaks. Wins and top 10s build your legacy.
Custom challenges you've shared. 5 can be live at once, each open for 24 hours. Only one score per player.
Play custom challenge
⚔️ Challenge
What's new · v1.0.5
v1.0.5 (07/26/2026)
Putting, rebuilt. Plus a practice green and a fresh coat on every world.
🎯 Putting practice: a toggle on the range puts you on a green with a random 5-25 ft putt. Fresh green every stroke.
🎲 New green button deals another whenever you want.
📊 Practice stats: putts made, total feet holed, longest.
🕳️ The ball really falls in: the drop is simulated now. It arcs in, the rim catches an off-centre entry, a firm one rattles the wall, and it rolls to the middle.
🎥 Calmer camera: no zoom while it drops. It comes round to the hole after a make, and to the ball after a miss.
🏌️ Wedges check on every green: firm gives back 25% of the spin you get on soft, medium 50%.
🎨 All nine worlds redressed: new landmarks, weather and ground detail, and every landmark moved off the target line.
🌊 Ocean's diagram is all water: the phantom pond blob is gone. The sea is the hazard out there, so there was nothing for it to mark. Skyworld's cloud sea the same.
🏝️ Island holes are worth more: Ocean and Skyworld now start at a 1.3x multiplier before anything else counts. There is no bail-out on either, every miss is a penalty, so distance, wind and trouble build on top of that instead of from scratch.
📐 No more "level" putts: the slope row always names a direction now. It used to need 0.3 ft of climb before it said anything, so a putt creeping uphill read as flat and got left short. Anything that rounds to flat is called 0.1 ft uphill, because there is no cost to being told to hit it firm.
☢️ Spin-back hole-outs count: a shot that carried past the flag and ripped back into the cup was being denied the ace. The old test wanted the ball to land within a foot and a half of the hole, which a spin-back can never do, since it has to land past to come back.
⛰️ The slope behind the flag feeds the spin: contour used to shape a ball running forward and do nothing at all to one checking back. Now it works both ways. Ground behind the hole tilted back toward you deepens the zip, ground falling away kills it, and it bites on every surface — a wedge into a firm green will come back if the slope is feeding home.
🥅 Greens break a lot more: putting was reading nearly straight and playing too easy. Break now climbs smoothly with length instead of sitting in steps: the most a putt can move is 0.5 ft at 5 feet, 1 ft at 10, 2 ft at 20, 3 ft at 30 and 4 ft from 50 out, with the average read tracking underneath it (1.25 ft at 20, 2.5 ft at 30). A foot of break bends the putt exactly as much as it always did, so the reads are bigger, not the physics.
v1.0.4 (07/25/2026)
The hole became a real hole.
🕳️ A genuine opening is cut in the green now, with a shaft under it.
⛳ Short chips play in half the time they used to.
🌱 One-yard hops on soft greens stopped hanging in the air.
v1.0.3 (07/25/2026)
Wind, green firmness and break all retuned.
🌬️ Wind counts sooner: it maxes out at 14 mph instead of 32, and the hardest holes now really reach 3.0x.
🌱 Greens play their firmness: medium is lively again, soft is the only surface that grabs spin, firm runs.
🥅 Break is aimable: 9° of aim at 60 ft down to 2° at 6 ft, and uphill or downhill shapes the read.
🌾 The rough kills the ball: no rollout, just a smothered hop at 25%.
🔭 Heat map fills the whole green and works from the tee.
🎨 First world art pass: landmarks onto the sightline, swaying trees, night silhouettes.
v1.0.2 (07/24/2026)
Wind mix, break curve and chip tempo.
🌬️ New wind mix, and the rolled wind is final: difficulty fitting can't change it.
🥅 Putts break at most 4 ft, and less the closer you get.
🪁 Chips read the slope, and loft changes both tempo and rollout.
📅 Daily scores stay on the boards and follow you across devices.
📏 Average proximity fixed.
🏆 High score backfilled from the leaderboard.
This is where future patch notes will appear.
v1.0.0 (07/22/2026): full public release!
Alpha changelog — every patch note
v1.0.5 (07/26/2026)
🥅 Break retuned around a stated curve instead of an emergent one. The ceiling was distFt/15, which pinned a 5-footer to 0.33 ft and never let a 30-footer past 2 — measured over 900 reads, the old averages ran 0.22 / 0.92 / 1.27 / 1.90 ft at 5 / 20 / 30 / 50. The ceiling is now CONTINUOUS with no flat band anywhere — d/10 out to 30 ft (0.5 at 5, 1.0 at 10, 2.0 at 20, 3.0 at 30) then easing to the 4 ft ceiling by 50 — with a breakAvgFt target tracking under it at 0.30 / 0.60 / 1.25 / 2.5 / 4.0 for 5 / 10 / 20 / 30 / 50. A flat band meant a 5-footer and a 10-footer could draw the same worst-case read, which is what made short putts feel arbitrary. Generation divides the geometry (|perpComp| x greenLeanMag) by its measured mean of 0.246 to get a unit-mean factor, then multiplies by the target — so the average is the number the curve states rather than whatever a stack of multipliers produced. A breakTrim factor rising 1.00 to 1.90 with length makes up for the ceiling clipping the distribution, which it does harder the longer the putt; a flat factor overshot short putts and undershot long ones. Measured averages: 0.17 / 0.31 / 0.46 / 0.63 at 3 / 5 / 8 / 10 ft, 0.97 at 15, 1.26 at 20, 2.44 at 30, 3.38 at 50 and 3.56 at 60, with the observed maxima landing exactly on the cap curve at every distance sampled (0.3 / 0.5 / 0.8 / 1.0 / 1.5 / 2.0 / 2.5 / 3.0 / 3.5 / 4.0). The 50+ average sits near 3.5 rather than 4.0 because 75% of those reads are already pressed against the ceiling — a true 4.0 mean would require every long putt to read exactly 4 ft, which is no read at all. IMPACT IS UNCHANGED: the lateral used to be maxDeg x (break / cap), so widening the ceiling would have quietly made every existing read bend less; it now reads maxDeg / capV1 per foot, verified identical to the old formula across 18 distance-and-break pairs. Career keeps the old ceiling and its own generation, and dailies posted before BREAK_TUNE_DAILY_FROM keep the old read so a live board is never re-graded.
⛰️ Green contour now drives the approach's ground move in BOTH directions. The old term multiplied rollout only when it was positive, so a checking ball felt no slope whatsoever — the ground behind the flag could be pitched straight back at the hole and the spin-back would not change. One signed factor (dFwd x mag, saturating at ±0.32) is now computed at the pitch mark before anything else and feeds three places: the receptiveness FLOOR on medium/firm greens bends with it (x0.34 to x1.66), so the minimum release shrinks where the ground gives the ball somewhere to go; the shaping multiplier is applied along the direction of travel via Math.sign(rollout), which leaves a forward release exactly as it was while letting a back-feeding slope deepen a check; and an additive gravity creep of up to ±4.5 yd walks a stopped ball down the tilt, which is the only term that can carry a firm green's run back past its own pitch mark. The outer clamp widens to -9.5 yd because the soft-green zip is capped at 7.5 BEFORE the contour lands, and at the old bound a lob wedge into a soft green read identically on a slope feeding home and on a flat one. Measured net ground move, back-feeding / flat / falling-away: LW firm -3.1 / +4.9 / +15.5 ft, LW medium -3.5 / +3.1 / +11.4, PW soft -19.1 / -10.7 / -3.0, 7i firm +0.2 / +6.6 / +15.5, 5W firm +1.0 / +7.9 / +15.5 — monotonic in all twelve club-and-firmness combinations.
☢️ Ace detection accepted only balls that RAN forward into the cup. The predicate required landPastFt < ACE_CARRY_PAST_FT (1.5 ft), which no spin-back hole-out can satisfy — it has to carry past the flag to zip back into the hole — so a ball that sucked back in was scored as an ordinary tap-in instead of an ace. The carry test is now waived when the ball finished BEHIND where it landed, with the full backward reach allowed (the ground move floors at -4.2 yd, so 12.6 ft is as far as anything can come back). The line and dying-pace tests are untouched and still have to pass on their own: crossesCup, lateral within 0.6 ft at the moment it passes the cup, and resting within 2.5 ft of it. Checked against a replica of the predicate over nine outcomes — spin-backs landing 6, 10 and 12 ft past now score the ace, while a spin-back that is offline at the cup, one that stops 4 ft short, a ball that carries past and runs ON, and one that lands 30 ft past and only creeps back are all still correctly denied.
📐 The SLOPE row never reads "Level". puttGrade is stored to 0.1 ft but the readout needed |grade| > 0.3 before it named a direction OR printed a number, so 0.1, 0.2 and 0.3 ft of real climb all displayed as flat: over 160 generated putts, 57 of them (36%) fell in that band. It now prints the direction of whatever grade it has with the magnitude floored at 0.1 ft, and a grade that rounds to 0.0 is called 0.1 UPHILL rather than level — the true value is inside ±0.05 either way and being told to hit it firm costs nothing, while "level" on a putt creeping uphill leaves it short. Display only: puttGrade itself, and every use of it in resolvePutt, is untouched.
🏝️ Ocean and Skyworld carry a base difficulty of 1.3x through diffBaseFor(), and difficultyMult returns base + (3.0 - base) x composite rather than 1 + 2.0 x composite. Rescaling instead of adding a flat +0.3 with a hard cap keeps the ceiling at 3.0 with no dead zone at the hard end, where the last 15% of distance and wind would otherwise stop counting for anything. The band fit inverts the same curve, so needC and the band-floor clamp both read the world's own base. Holding the generated holes fixed and re-mapping only the multiplier, the change is worth +0.14 on an average ocean hole (2.03 -> 2.17) and +0.20 on Skyworld (1.71 -> 1.91), or +0.34 on the sum of a nine-hole round's multipliers. Verified 0 of 300 holes out of their difficulty band afterwards.
🌊 Ocean and Skyworld clear hole.par3.water at theme time. The generic par-3 pond is rolled before the theme lands, and on these two worlds it never reaches the island: measured over 32 ocean and 28 Skyworld holes, 15 of each carried a zone and NONE fell inside gN < 1.19. It could therefore never be built in 3D — the sample() ocean branch returns sea for everything off the island — while drawGreenPreview still drew it, putting a water-hazard blob on a diagram whose entire surround is already water. Both already cleared greenBunkers on the same reasoning; this finishes the job. Dropping it also frees the hazard budget it was consuming in the difficulty fit, which the fit now spends on yardage instead.
🎯 Range putting practice. A rangePutt flag re-rolls hole.greenLeanMag/Ang from the par-3 distribution (33% severe 0.48-0.80, then 60/40 moderate 0.28-0.50 / gentle 0.16-0.30), clears _undRolled so goToPutt re-rolls the contour, sets puttDist to 5-25 ft and stands the ball at a random angle on the clock face at 0.75-1.10x that radius, so the break is not always the same side of the line. A hole-out credits the putt's own length and a miss reports long/short off `reach - puttDist`, the finishing side off `latMiss`, and the straight-line leave off `remain`; either outcome then deals a fresh green. There are no comebackers: the drill is reps at fresh reads, and tapping leftovers in would pad putts-made with gimmes. Nothing is scored, saved or posted, matching the rest of the range. The tally rides the round card that was already on screen (Putts made, Length of Putts Made) rather than a second readout, and the GIR cell — meaningless on a practice green — retitles to the longest putt holed.
⛳ The made-putt drop is a rigid-body solve, not a curve. cupDropPath integrates the ball at 240 Hz through four contact regimes: free flight under g = 32.2 ft/s²; the rim, modelled as the true sphere-meets-circle surface y = CUP_DEPTH + sqrt(BALL_R² - (CUP_R - r)²), whose inward slope supplies a real tangential acceleration g·sinθ·cosθ (resolving the contact alone zeroes the fall every step and the ball loiters on the paint — that WAS the hover); the shaft wall at r = CUP_R - BALL_R with restitution 0.32 and tangential scrub 0.78; and a dished floor with restitution 0.28 and a spring to the axis. Entry velocity is the last roll segment's direction at v = sqrt(2·a·d) off the overrun (a = 2.2 ft/s²), scaled by 1 - 0.72·(r/CUP_R)² because a ball crossing the edge at pace lips out rather than dropping — without that cap a wide fast entry swung the liner for 300 ms before falling. The last 30% eases to dead centre on the floor so every putt finishes where a real one does. Measured over five entry cases: first motion 25-146 ms, below the lip 108-250 ms, on the floor 192-338 ms, ends at r = 0.0000 and sink = 1.0000 in every one, and the ball is never drawn below the green while outside the cup radius.
🎥 There is NO camera move during the drop at all: the ball falls on the camera the putt was played from, and puttDrop now only marks that a drop is running for renderPutt and the watchdog. All the camera work is in the settle, which orbits onto the cup on a make and behind the resting ball (framing the ball-to-cup midpoint) on a miss. Measured across a whole settle, 49% of the frame changes on a miss. It needs no head start because the ball spends its first ~165 ms toppling on the rim before it is low enough for the near edge to hide it. The focal length is left alone: tightening the FOV to 0.64 during the drop snapped back to 0.82 in a single frame when the camera released, and that snap plus the settle move was the end of a putt reading as two hard zooms. Filmed at the tee-to-cup transition, a 0.24 ft off-centre entry reads: 0 ms on the lip, 105 ms committed and falling, 208 ms nearly down, 320 ms resting on the floor, then 421 ms of the ball sitting in the hole before the settle takes over. The in-shaft dimming floor lifts 0.34 -> 0.52 so the ball at the bottom stays readable.
🎨 World art, 16 items from the environment review. Volcano: decorative lava pools pushed from 58 to 72 yd lateral, clear of the corridor; a second cinder cone (30 yd base radius, 38 tall) placed opposite the hero at pinZ+46..68 — a different depth, not just a different x. Ocean: the tee pad is an ellipse whose height lerps into baseH over its outer 37%, and the tee island now shelves through a sand apron to 1.1 yd below the sea surface out to 1.62× its radius, so there is no cliff left to read as a card edge; two isles of 4-6.5 yd radius added at |x| 10-18 and 34%/56% of the hole's length. Tempest: squall wall at pinZ+62 (inside the fog ramp on purpose — past the near plane everything mixes 90% to fog and a fogged band reads LIGHTER than the sky, which is what killed the first two attempts at pinZ+118 and +165), four value bands 0.09→0.26 over 31 yd plus 11 rain shafts; crags 1.6/0.9 → 3.4/2.0 radius and 4.0/2.5 → 8.6/5.4 height. Starfall: uRim adds vec3(0.34,0.24,0.62) over vGd 0.995→1.15; one meteor in three relocated to |x| 13-22 at 42-72% of the hole. Elysium: SUN swings to (-0.72,0.26,-0.64) for par-3 renders only (the daily course keeps the neutral key), uWarm tints ×(1.15,1.02,0.83) with a view-angle rim term, sky ramp re-graded to a late-afternoon gradient, and the repeated colonnade prop is replaced by three ruin variants. Frostreach: 9-15 spindrift ridges combed along hole.wdir — wound so both faces point up, since this renderer has no two-sided lighting and a down-facing normal falls to flat ambient (the first pass drew black arrowheads on white snow), and kept low and wide (0.22-0.38 tall over a 1.5-2.6 yd half-width) for the same reason; shards clustered at 1.55× scale, 5 cones per site. Blossom: uPetal speckles the green from two hashes at 2.7 and 5.3 cycles/yd, near-white against the rose-pink surface (a pink petal on a pink green is invisible), weighted toward the collar; trees 22-34 → 15-23. Aurora: frozen tarn of 11-17 yd radius in translucent ice with nine snow-capped boulders on its rim, at 34-64% of the hole and 30-46 yd lateral; conifers 15-23 → 8-12.
🏌️ Wedge spin-back is measured against its OWN soft-green figure through WEDGE_SPIN_SURFACE (Soft 1.00 / Medium 0.50 / Firm 0.25) rather than the general firmness table, which gave 62% and 42%. PW/SW/LW now check on a firm green at a quarter of the soft impact: PW 0.975/0.488/0.244, SW 1.950/0.975/0.488, LW 2.925/1.463/0.731 for soft/medium/firm. Longer clubs keep firmSpin0 and still need a soft surface to spin at all.
🎯 Hero landmarks moved off the target line: Frostreach's castle from ±4.5 to 27-42 yd lateral, Elysium's temple from ±5 to 30-46, Blossom's pagoda to 24-42, and the torii that stood on the corridor short of the green is removed with its lanterns relocated to the temple approach. Tempest's rain shafts are gone — tapered curtains standing proud of the squall band read as dark cones pasted on the skyline rather than as weather.
v1.0.4 (07/25/2026)
🕳️ The cup is real geometry. buildPuttMesh now carves a genuine circular opening: grid cells falling wholly inside a disc sized off the CELL DIAGONAL (at least 3.2·CUP_R) are dropped and a 40×5 polar collar is laid in from the cup's exact radius out to that disc, so the inner edge is a true circle at CUP_R and the outer edge overlaps the surviving cells (lifted 0.004) with no seam. Sizing the disc off the grid matters: the mesh footprint grows with the putt, so beyond ~35 ft a cell is wider than a fixed disc, no cell is ever wholly inside it, and the cup was never carved at all — verified across 10 worlds × 8 putt lengths from 4 to 80 ft, every one cut. The shaft — wall shaded from lip to floor, plus a floor — is drawn through that opening with ordinary depth testing, and a STENCIL pass masks it to the opening so the interior can never spill onto the green at a grazing angle. The context now requests stencil and verifies STENCIL_BITS before relying on it, falling back to a plain depth-tested shaft otherwise. This replaces two opaque discs laid on the surface, under which the ball simply slid out of sight.
⛳ Chip duration scales with the ground covered (carry + release) by square root, referenced at 18 yd, instead of a flat 1760 ms base. Off a fringe lie at stock loft: 3 yd 1408→732 ms, 6 yd →813, 10 yd →1049, 18 yd unchanged, 26 yd →1690.
🌱 The approach's ground clock had a flat 438 ms floor and then multiplied it by the soft-green and wedge settle factors, so a one-yard hop took 814 ms. The floor now scales with the run and those factors fade out on short ones: 1 yd 814→272 ms, 2 yd →375, 4 yd →663, 30 yd unchanged.
v1.0.3 (07/25/2026)
🎯 Wind's difficulty axis saturates at 14 mph on a concave curve (5 mph = 0.46, 10 mph = 0.78) instead of 32 mph linear; the greenside-hazard budget drops to 0.30, a figure the generator can actually place, and the band fit no longer insets off the top band's upper edge — so 3.0× is attainable. Verified over 3000 generated holes: max is exactly 3.00 and every hole still lands inside its slot's band.
🌱 Firmness rebalanced: base green run Soft 1.5→1.15 / Medium 4.5→6.0 / Firm 6.75, ground-bounce factor Soft 0.6→0.48 / Medium 1.0→1.18 / Firm 1.2→1.35, and spin-back corrected to a receptive-surface trait (Soft 1.3 / Medium 0.8 / Firm 0.55 — the old table had Firm checking hardest). Green landings on Medium/Firm floor at +1.4/+2.2 yd of release.
⛰️ Approach rollout scales with the green's contour along the roll line (±38%), and the landing's lateral kick now reads the full field rather than the hole's fixed lean. The heat map, the chip and the approach all share one green-anchored contour helper.
⚡ Made-putt drop rebuilt: the ball keeps its true size and descends 4.2 radii on a gravity curve (fully below the lip 48% through the sink), replacing a 40% shrink and a 1.6-radius dip that left it mostly above the surface when the draw cut out.
⚡ The hover is gone at its source. rollAlong's quadratic ease-out has zero velocity at t=1, so every putt decelerated to a dead stop on the lip before the drop began; a holed roll now uses a gentler exponent and is travelling 6.6x faster through its final frames (it has to be — a putt that stops short never falls in). The drop itself starts its fall on frame one instead of sliding sideways through a 14% dead lead-in, cutting the motionless frames from 3 to 1 at 60fps, and the ball pivots over the lip into the hole as it descends. The chip's hole-out sink was linear and now follows the same gravity curve.
🥅 Lip-in rim arcs spiral inward (radius x0.26 by the end, 14 samples) so the ball is over the cup's centre when it drops; lip-outs hold radius so they can still be spat out to the resting spot.
🎨 Heat-map alpha comes from the continuous normalized green radius (full to gN 0.96, ramping to 0 at 1.02) on a 0.5 yd lattice. The lattice is now sized off greenMultAt's 1.38 ceiling rather than gHalfW/gDepth — a shaped green bulges past those radii, so the old bounding box clipped the wash into a smaller shape inside the drawn outline (measured 1.35 on a sampled hole).
🔭 The overlay is built by one shared buildHeatMesh used by the tee/approach, greenside chip and top-down views, cached against the green's own signature so no view rebuilds a few thousand quads per frame. From the tee it is offered in Hole view only (the green is too distant to read from the shot view); the chip offers it on both of its screens.
🐛 Tapping the heat toggle in Hole view no longer snaps back to the shot — #stage's click handler treated the toggle's bubbled click as a stage tap, and now skips stage controls the same way the orbit handler already did. Leaving Hole view by any route (button, stage tap, phase change) clears the overlay, so it can't linger over a view that never offered it.
🥅 Break rebuilt around the aim it demands rather than a multiplier chain (the old form multiplied the read by putt length while the read already grew with length, double-counting distance). Anchored at 2° of hold at 6 ft rising to 9° at 60 ft on a max read, with a partial read taking a proportional slice. Measured on max reads: 2.00° / 2.78° / 3.81° / 5.11° / 7.06° / 9.00° at 6/12/20/30/45/60 ft. The 45 ft, 2.7 ft case drops from 13.3° to 6.35°. Pace is renormalized so stock pace is exactly the anchor. BREAK_K retired.
⛰️ Grade now feeds the break read: ×(1 − 0.08·puttGrade) clamped to 0.72–1.32, applied before the ceiling so the panel number is the number the ball obeys and the 4 ft maximum still holds. Uphill ×0.76 … downhill ×1.24 at full grade.
🌾 Rough landings drop their rolling segment entirely and play a hops-only bounce plan at exactly 25% of the clean green/collar height and distance, replacing a 25–50% per-landing roll plus a downhill trickle. Heights are measured against the full clean bounce-plus-roll length rather than sharing the hop scale, the first hop is always kept (a soft green's clean rebound falls under the cutoff and would otherwise leave a pure roll), and the on-screen bounce amplification is switched off so the muffle is not undone for readability. Verified at 0.250 on both axes across Soft/Medium/Firm.
v1.0.2 (07/24/2026)
🌬️ Wind bands retuned to 15% / 45% / 30% / 10% across 0–5, 5–10, 10–20 and 20–30 mph; the rolled wind now overrides the difficulty fit instead of being back-solved by it.
🎯 Distance, wind and greenside-hazard axes each saturate 10% sooner, so a hole reaches its multiplier with less wind and fewer yards. Cap stays 3.0×.
🥅 Putt break capped at 4 ft and scaled by distance (~4 ft at 60 ft, ~1.3 ft at 20 ft) on newly generated greens; existing Daily courses unchanged.
⛳ Slope heat map available during chip setup, and repainted as an interpolated wash across the whole green (no more tile mosaic).
🪁 Chip run-out now scales with the green's slope along the roll line (±38%), with the dashed release preview matching.
🎬 Chip animation tempo reads the loft slider: low runners up to 30% slower, high floaters up to 22% longer with a flatter apex, and the rollout easing tuned by loft.
⚡ Made-putt drop animation halved.
v1.0.1 (07/23/2026)
🎯 Difficulty multiplier reworked to 60% distance / 30% wind / 10% greenside hazards, hardest holes cap at 3.0×.
📅 Daily Challenge scores kept on the This Week / All-Time boards (per-mode cap) and surfaced under My Scores across devices.
📏 Average proximity now logs the tee shot's true distance on greens hit and a flat 100 ft on misses.
🏆 Profile high score backfills from your best leaderboard round.
v1.0.0 (07/22/2026): full public release!
🎯 Daily Darts welcome card — tapping Daily with no round going fades in the date and the live top-3 podium before dealing the nine.
📊 Profile: Birdie % and Average proximity (ft), tracked per hole and synced to your account.
🎨 Background colors in Settings — the default green plus dark red, blue, purple and gray, all tuned so text and lines keep their contrast.
🥅 Putting polish — the distance slider uses fixed bands by putt length (1–20 / 5–30 / 10–50 / 25–75 / 25–100), flat putts drop at stock pace with up to +1.5 ft free, pace execution is capped at ±5 ft, and Frostreach shows its icy overrun in the leave text (❄️ +0.6 ft).
⛳ Short game & lies — chips never squirt backwards, chip speed reads the lie (quicker from fairway/fringe, slower from rough), high chips keep a couple of bounces and a touch of rollout, and fringe landings muffle to 75–80% while rough muffles to 25–50%.
🚩 Red OB stakes line every career corridor 40 yards off the fairway, with the ruling moved to the stakes.
🌲 Tree escapes reworked — Risk It windows scale with Recovery, Luck and distance; Play It Safe spans 50–100% with distance-proportional advancement.
🖱️ Bars lock on finger-down, with a smoother sweep on older phones, a white stock-pace marker on the pace bar, and a true crossfade between scenes.
👋 The white dashed marker, centered labels, and dozens of alignment fixes across phones, iPads and laptops. Thanks for playing the alpha — welcome to 1.0.
v0.9.9 — your challenges, your pace
⚔️ Challenge boards are live — hit Custom challenges on your profile to see everyone who's played your links, best score per player, with a 🏆 on anyone who beat your number. You get 5 live at once and each link runs for 24 hours.
⏭ Skip any chip or putt — a Skip button now rides every short-game and putting animation in every mode. Tap it, ball's at the result.
⛳ Flops got twitchy — the further you bend a chip's loft either way, the hotter its bars sweep, up to 75% faster at the ends of the slider. Stock chips stay stock.
🎯 No more mystery misses from the rough — a loud lie badge (Rough · 65–75% lie), an amber tick on the carry bar marking the number that actually gets there with your club, and the stance called out when it bends your start line (◀ pulls left). Bounces in the rough are muffled now, not buried.
💨 Faster between shots — scene changes are a quick soft fade instead of a dip to black, drives hand off quicker, and the aim line on the mini-map finally points where you're actually aimed. Bigger swing button too.
v0.9.8 — hit the range
🏌️ Practice Range is open — tap Range up top (or Practice Range in the menu) and hit every club in the bag on a dead-flat field: a wide fairway down the middle, rough on the edges, and three outlined target greens at 90, 150 and 220 with floating yardage flags.
🎯 Pick your target — the switcher above Hole view cycles the three greens, auto-selects the right club, and swings the camera onto that flag. Hole view orbits whichever green you've picked.
⚪ Your balls stay where they land — the field fills up as you hit, every leave measured to the nearest flag. One tap on Reset range sweeps it clean.
🔁 The range never costs you a round — duck out mid-Daily or mid-Free-Play, hit a few, and come back to the exact hole and score you left.
⚛️ Real impact physics — landings now simulate restitution, turf friction and spin scrub against the actual terrain angle. Firm skids, soft sits, ice triple-skips, uphill kills the roll and downhill releases — all of it just physics. And the whole sim plays livelier now.
🥇 Red Rocks Classic now opens the tour season.
v0.9.7 — make it yours
👑 Player titles are here — earn them by how you play, lose them if you fall off. GIR Specialist, Elite Putter, Ice Veins, Worldwalker, Top Dog and more, right on your profile.
🥇 Top Dog goes to whoever holds the #1 all-time score — take it and it's yours until someone knocks you off.
📊 New stats on the profile page — longest putt holed, chips holed, water balls survived, recovery saves and long bombs, all synced to your account.
⏩ Way less waiting between holes — transitions are twice as fast, a splash cuts away even quicker, and an ace holds the moment longer with the popup to match.
🏆 Career mode got real fixes — approaches from the rough were freezing every bar in the game, and the drive's aim bar was going blank. Both dead. Bring on the tour.
🎯 Founding Member — if you were here before v1.0, you'll know it when you see the chip.
v0.9.6 — the landing update
⛳ Landings remodeled: a big leading bounce then shorter, decaying skips into the roll — taller, slower hops that read like a real ball, with drives on the same ground game.
🌱 Surfaces react honestly: soft greens bounce bigger and slower and grab 25% more spin-back; firm greens skid lower and quieter with less check; low punches stay flat and release.
⏱️ The ground clock is club- and flight-aware — wedges and low runners settle unhurried while long clubs stay brisk; chips play 25% quicker across the board.
💨 Wind grips tee and approach shots 10% harder at every flight and loft (chipping unaffected).
🥅 After a putt, both bars keep your exact tapped marks and pace band through the roll — no more reset carry box.
👤 The Player Profile is a full page now, its average score comes from your global-leaderboard rounds, and career badges are tucked away until the tour opens.
v0.9.5 — your player profile
👤 New Player Profile page — open it from the profile pop-up (next to Achievements): lifetime holes-in-one, birdies, GIR %, average score, best daily streak and high score across both par-3 modes.
☁️ Your profile now syncs to your account across every device — sign in and your totals follow you.
🏅 New hidden milestone badges for holes played and birdies (100 / 500 / 1,000 / 2,500) — they stay secret until you earn them.
🎯 Missing the center of the tee-shot bar is 25% more forgiving across the whole curve.
🌱 Soft greens are receptive again: a lofted wedge checks and spins back a few yards, scaled by club, loft and wind.
⛳ The greenside chip now starts right under the ball — no more flying in from off-screen — and lofted chips play 20% quicker.
❄️ Frostreach greens deepened to a glacial blue so the putt preview and slope read clearly on top.
v0.9.4 — the putting update
🥅 Rebalanced break: stock pace curls a touch under the read, a dying putt takes more, a firm strike holds its line — with a flatter pace curve behind it.
🔺 The slope readout shows 🔺 Uphill in orange / 🔻 Downhill in blue with the elevation in feet.
📏 Grade is linear and bites harder: 1 ft of uphill ≈ 1¼ ft more pace — a soft tap only rides part of the hill, with a ~1 ft minimum roll so downhill putts stay controllable.
⛰️ Greens can now tilt up to 3 ft of up/downhill and 3 ft of left/right break; putt bars sweep faster and the sweet spot shrinks with distance.
⛳ The recovery chip now shows your ball at its true resting spot — a fringe lie sits on the fringe, never teleported onto the green.
🎬 The hole orbit runs a beat longer, with the restart button and stale aim/carry boxes hidden during cinematics and reveals.
v0.9.3 — polish on the flair
🌋 The volcano looms half again as large, its lava anchored to the mountain — streams run crater-to-base into glowing pools (no more floating sky streaks).
☁️ Skyworld's cloud sea now rides ~20 ft below the islands and its diagram is pure white cloud; the pasted-on cloud puffs are gone.
🥅 Putting: the sweet spot shrinks with distance (15% at 5 ft → 2.5% at 40 ft) and both putt bars sweep 25% faster.
📊 After a swing, the meters keep your exact tapped marks and the club's true carry range through the flight.
v0.9.2 — worlds come alive
🌍 World flair — smoldering meteors on Starfall, seagulls over the Ocean, lava flows (and the odd diagonal river) on the Volcano, drifting clouds under Skyworld, storm-bent willows on Tempest, bigger blossoms with falling petals, olive groves and Greek colonnades in Elysium, glassy ice greens in Frostreach (always Firm).
🎯 Each world's bent rule now sits right under the game view.
⛳ Soft greens take a muffled bounce or two instead of plugging (a high ball into the wind still digs); ground bounces play ~15% calmer; your tapped aim/power marks stay up through the flight.
🥅 Putt pace inside the green band now plays EXACTLY the pace you set; the green view's incline reads true (was ~double); left/right break tops out at 2 ft.
v0.9.1 — meter retune
Club-scaled sweet spots (wedge 15% → driver 5%), a meaner miss curve capped at a true 75%, and putts with a 10% core that punish 25% harder.
v0.9 — the account update
The five big changes since v0.8
🔐 Accounts & Google sign-in — create a free account or continue with Google; your streak, scores and career sync across every device, protected by bcrypt and secure OAuth.
🎯 Daily Darts & sharing — the daily got its new name, shareable result cards linking FlagHunt.io, and custom challenge links with per-link leaderboards and one attempt each.
☢️ Hole-in-one tracker — a global "tee shots since the last ace" counter with a hall of fame, and perfectly flushed approaches now drop in for the ace.
⛳ Real rollout physics & green firmness — club-aware low flight, wind-shaped release, a true bounce-then-roll, and Firm/Medium/Soft greens (shown in the top bar; Blossom always soft, Tempest never firm).
🛡️ Rock-solid rounds — anti-save-scum, forced auto-updates on every deploy, and rounds that survive refreshes, phone calls and device switches.
v0.8.5 — challenge links & the ace tracker
Changes since v0.8.1
Custom challenge links
Post-round mini-leaderboard of everyone who's played that link, with a ⭐ next to whoever shared it.
Two separate buttons: Share result (your brag/lament + emoji recap + the site link) and Create custom challenge (the seeded link).
One attempt per link — reopening it shows the board instead of a replay.
Clear way back to Free Play from a challenge — no more getting stuck on someone's seed.
Hole-in-one tracker ☢️
New ⭐ button opens a tracker showing how many tee shots have been hit since the last ace anywhere…
…and a hall of fame logging every hole-in-one — player, world, the drought it broke, and the date.
A perfectly flushed approach that finishes over the cup now drops in for a hole-in-one.
Aces show a ☢️ on the scorecard and the hole-by-hole grid.
Shots & fixes
Lower-lofted shots and clubs run out more, with the rollout curving along the wind and your shot shape.
Anti-cheat: refreshing on the green (or mid-shot) no longer resets the hole.
New footer to send bug reports and feedback by email or Twitter/X.