Eyeball It

Room setup

Registered waiting rooms accept any number of players until the host starts. The host chooses one condition in the Game ends after box: 1–100 Rounds, selected by default at 10, 1–100 minutes of Time, which defaults to 10 when selected, or a 1–10,000 Point target, which defaults to 1,000 when selected. The selected input is highlighted, the others are faded, and using any input makes that condition active. The host also chooses a Game variant of Area estimation or Perimeter estimation, Target proportions of either 50% or 40%, 50%, or 60%, a Cut mode of Line — fixed point, Line — fixed angle, Line — Voronoi, Circle — fixed center, or Circle — fixed diameter endpoint, a Maximum cutter score from 1 to 100, a Cutter score deduction per percentage point of 5, 10, or 15, a Correct estimate score from 1 to 100, a 15, 30, or 60 second time per gameplay step, and a Perfect cut tolerance of 0.5%, 1%, or 2%. The respective defaults are Area estimation, 50%, Line — fixed point, 100 cutter points, a 10-point deduction per percentage point, 50 estimate points, 30 seconds, and a 1% tolerance. Naturally completed registered-player games are rated from each player's cumulative Score. The host may start as soon as every human player currently in the room is ready, even when the host is the only human player present. A guest room remains public to view, cannot be joined remotely, and is unrated. Only the selected value is visible; inactive boxes are blank, while all labels remain visible. Selecting a box reveals its saved value.

Game variant

Area estimation (default) measures the selected area as a percentage of the area before cutting. Perimeter estimation measures only the original boundary belonging to the selected part. The current cut line or circular arcs are excluded. If the starting perimeter is P and the retained original boundary has length L, the selected percentage is 100 × L / P. All parts' percentages sum to 100%.

For a 10-by-6 rectangle cut vertically at width 4, the left part retains boundary length 4 + 6 + 4 = 14 from an original perimeter of 32, so its perimeter percentage is 43.75% (its area percentage is 40%). The selected part expands into the next round's shape. Its complete outline, including the previous cut, becomes that round's starting boundary; only that round's new cut is excluded. Both variants share the same cut modes, targets, scoring, Perfect cut tolerance, More/Less estimates, bot settings, and ELO. Waiting-room practice uses the room's variant.

In Perimeter estimation, a gold outline highlights the boundary counted for the selected part, excluding the new cut edge. Hover over a part to preview its boundary. The highlight stays on the chosen part during estimation and follows its enlargement, then clears for the next cut. Waiting-room practice uses the same highlight, and Spotlight clips it along with the rest of the canvas.

Perfect cut celebration

A Perfect cut celebrates the cutter with gold Perfect cut! text, their name, and a brief sparkle burst inside the canvas for every player and spectator. The celebration lasts two seconds, even if the next round starts, and does not pause play or block your controls. It remains visible in Spotlight while the shape stays masked. Refreshing shows only the remaining time. With reduced motion enabled, the message is static and has no sparkles.

Past perfect cuts

Every player and spectator, including guests, can click Past perfect cuts during gameplay to review one saved cut at a time. Use Previous and Next to browse the shape, cut line, selected part, actual and target proportions, round, and cutter's name. The first opening shows the newest Perfect cut. New cuts do not interrupt the record you are viewing. Before the first Perfect cut, the modal shows No perfect cuts yet.

Past cuts show their complete saved shapes even in Spotlight rooms; the live board keeps its Spotlight setting. Gameplay and timers continue while you browse. Close the modal with Close, Escape, or an outside click. The review closes when gameplay completes so final results can appear, and remains available after the game.

Canvas visibility

Full view (default) shows the complete canvas. Spotlight reveals only a circle around your own pointer, with a radius of 20% of the canvas's shorter dimension. Everything outside it stays hidden, including during cutting, estimation, and enlargement into the next round. Move the mouse to explore; touch or pen contact reveals the area at that position. Leaving the canvas hides its contents. Waiting-room practice uses the same setting. Refreshing the page preserves Spotlight and provides no full-canvas preview. Finished games reveal their full result.

Optional bots

Create a room first, then use Add bot in the host-only actions row below the player list to add up to bots. Each addition opens a modal to choose Bot mode: Adaptive (default) or Fixed. Fixed shows Bot error tolerance, with 0%, 10%, and 20% slider markers, a 10% default, and 1-percentage-point steps. Switching modes remembers the slider value. Cancel adds nothing. Each bot has its own settings. Numbered bots show their mode and Automatic bot; the host can Remove any bot before starting.

Adding a bot keeps the room waiting. The host selects Start Game when all humans are ready; starting alone is allowed, and registered rooms have no human-player limit. New and recreated rooms contain only their ready creator. Guests can use either bot mode; their rooms remain unrated and cannot be joined remotely, even with zero bots. Human ELO stays visible when enabled. Joining policies, requests, and invitations keep their normal lifecycle while bots are present. Bots follow ordinary cutter rotation, scoring, and ranking.

Adaptive learns human cutting and estimation accuracy separately. It starts with an average absolute cutting error of 5 percentage points and a correct-estimate probability of 50%, each with weight 1. Like Five of a Kind, it uses a discount factor of 0.9 per completed round: S = 0.9 × previous S + sum of new observations and W = 0.9 × previous W + number of new observations, then uses S / W. Each human observation has weight 1, so one from k rounds ago has weight 0.9k. With no new observations, its value stays the same while its history loses weight. Learning takes effect after settlement, and each newly added bot starts learning afresh.

Submitted human cuts, including Perfect cuts, contribute their actual absolute error in percentage points. Cutting timeouts and cutter resignations provide no error observation. Correct human estimates contribute 1; incorrect answers and eligible players' timeouts contribute 0. A resigned player's missing answer is excluded, but an answer submitted before resignation still counts. Perfect cuts provide no estimate observations. Bot moves, rejected requests, and unfinished interrupted rounds do not contribute.

With learned mean cutting error E, Adaptive samples a uniform offset from [-2E, 2E]. This gives mean absolute error E before clipping and geometric constraints. Its learned tolerance can be fractional or exceed Fixed mode's 20-point limit. It estimates correctly with its learned probability, independently of the current cut's error, and chooses the opposite answer otherwise.

In Fixed mode, for tolerance X and required percentage M, the bot samples a uniform offset P from [-X, X]. During estimation, let Y be the absolute percentage-point difference between the selected part and M. It answers correctly with probability min(Y / X, 1), choosing the opposite answer otherwise. For a fixed positive tolerance, the more precise the proposed cut, the lower its chance of answering correctly. At 0% tolerance, it adds no cutting noise and always estimates correctly.

Both modes clip the offset target to 0%-100% and find the closest legal cut that leaves positive area. The shape and cut constraint can prevent an exact match; the actual cut is scored against M. Perfect cuts skip estimation and award other participants zero.

Registered rooms with the bot remain rated. The bot stays at ELO 1500; its hypothetical ELO change is shared equally among humans using the same model as Snake. One human versus the bot therefore has zero ELO change. Only human ratings and history are saved. If every human resigns, the game ends unrated.

On testing deployments (APP_ENV=testing), active games with a bot show a read-only Bot settings box below the action area in the game summary, leaving the first column for the cutting canvas. It shows the current mode, action delay, cutting tolerance, and correct-estimate probability. Adaptive values update after settled rounds. Fixed always shows Depends on cut error in the Correct estimate row, including during estimation and at zero tolerance. The display rounds delay to milliseconds, tolerance to at most two decimal places with a % suffix, and probability to whole percentages; calculations retain full precision. The box clears when gameplay ends or the viewer leaves.

Waiting-room practice

Entering a waiting room starts with a random convex hull for line modes or a unit circle for circle modes, and begins a timed Cutting turn. Move the pointer to preview a cut, click or tap to lock it, then select a shaded part before the same countdown expires. Select outside the current shape to change the locked cut. Your percentage and cutting score are revealed as the chosen part enlarges to fit the canvas.

Next, an Estimating turn shows a different simulated opponent cut. Choose More or Less than the displayed target within a fresh countdown. The actual percentage and your practice points are then revealed, the selected part expands, and another Cutting turn starts. Practice uses the room's variant, cut mode, visibility, targets, time per move, scoring, and Perfect cut tolerance. A Perfect simulated cut skips estimation.

A practice cut within the room's Perfect cut tolerance shows the same gold Perfect cut! congratulations and brief sparkles as live play. Your cuts have no owner label; simulated cuts are labelled Simulated opponent. The celebration lasts two seconds without pausing practice or changing points. Reduced motion shows static text; only the congratulations appear above Spotlight, while the shape stays masked.

Cutting timeout earns zero and keeps the shape unchanged before the opponent challenge; in a real game the other active players receive full estimate points automatically. An unanswered estimate earns zero. Practice survives waiting-room polling, starts fresh when you re-enter, stops when you leave or play begins, and never affects room scores, ELO, or gameplay.

Points progress

When the game ends, a chart replaces the cutting board. Each colored line shows one player's total points after each round, beginning at zero. Bots and resigned players are included. The legend shows final totals; hover over a point to see its round total. The scoreboard, Past perfect cuts, and final results remain available.

Starting shape

Line modes generate ten random canvas points when play begins and retain their convex hull. Circle modes begin with a unit circle.

Line — Voronoi

The polygon starts with two random interior points. Position a third point inside it; the three Voronoi regions update as the point moves. Without a valid third interior point, the diagram shows the two fixed points’ regions. Click or tap to lock the point, then select any region. Click outside the polygon to reposition the point. Each region contains the locations closest to its point.

Area estimation measures the selected region’s area. Perimeter estimation counts only its share of the polygon’s boundary before this cut, excluding all new Voronoi edges. Estimation, Perfect cuts, and scoring follow the ordinary rules. After settlement, the selected region enlarges together with its point. One new random point is added, leaving two fixed points for the next cutter to add the third. A cut timeout keeps the polygon and its fixed points unchanged.

Taking a turn

  1. The game tracks how many times each participant has been the cutter. If any eligible players are below the maximum count among eligible players, the cutter is selected uniformly from that group. If all eligible counts are tied, the cutter is selected uniformly from every eligible player. The count increases as soon as the cutter is assigned, including if that round later ends through a timeout or cutter resignation.
  2. The required area or perimeter proportion for the selected variant is shown. It is 50% in every round under the 50% option; under the 40%-50%-60% option, one of those three values is selected randomly for each round.
  3. Under Line — fixed point, the server randomizes one endpoint and the selected player positions the other endpoint. Under Line — fixed angle, the server randomizes an undirected angle from 0 degrees inclusive to 180 degrees exclusive, and the player translates a parallel line through the shape. Mouse movement previews the fixed-angle line until it is clicked, and that mode shows no representative endpoint markers. During Cutting, every viewer other than the cutter sees two muted-gold dashed support lines at that angle, touching opposite extremes of the polygon; the cutter sees only the solid position preview. The submitted position cannot change the server-owned endpoint or angle.
  4. Circle modes begin with a unit circle. In Circle — fixed center, the server fixes C anywhere on the canvas and the player places a circumference point. In Circle — fixed diameter endpoint, the server fixes A anywhere on the canvas and the player places B to make AB the diameter. Fixed points may be outside the current piece; the placed point must stay inside the canvas.
  5. The player selects exactly one connected part before time expires, including when a circle cut creates more than two parts. Arcs and holes survive enlargement. Perimeter counts inherited boundary, including holes and previous cuts. A piece entirely enclosed by the new circle has 0% inherited perimeter.
  6. A cut within the configured absolute percentage-point tolerance reveals Perfect cut and skips estimation. Otherwise, every other eligible player privately estimates whether the highlighted selected part is more or less than the target. The estimation heading and buttons name the actual requested percentage. The blue down-arrow Less than 50% button comes before the orange up-arrow More than 50% button. After a choice, that button stays highlighted and the other is dimmed. Their choices remain hidden until everyone answers or time expires. Estimation is also skipped when the cutter is the only eligible player.

If the required proportion is X%, the selected area or retained boundary proportion is Y%, the configured maximum cutter score is S, and the configured cutter score deduction per percentage point is M, the cutter gains max(0, S − M × |Y − X|) points. An exact selection earns S points, and each percentage-point difference deducts M points until the score reaches its lower bound of 0. Fractional percentage-point differences deduct the same fraction of M. A perfect cut retains this actual-percentage score, settles immediately, and gives every other player 0. For other cuts, every correct More or Less estimate earns the configured estimate score; an incorrect or unanswered estimate earns 0. If Y equals X exactly, neither estimate is correct. The selected percentage, cutter score, estimate answers, and estimate scores are revealed together at settlement, then the selected part expands to become the shape for the next round. A cutting timeout consumes the round and gives the cutter 0 points. Every other active player, including the bot, automatically receives the configured Correct estimate score as if they answered correctly. Already-resigned players receive no award. The shape stays unchanged and no estimate is required. Resigning before selecting a part has the same scoring result. These automatic awards count toward point targets and final rankings, but do not train the adaptive bot. If the last human resigns while cutting, these awards are settled before the game ends unrated.

Ending the game

A round-limited game ends after the selected final round. A point-target game ends when any player's cumulative score reaches or exceeds the selected target. A time-limited game uses one limit for the whole game. If the limit is reached during a round, that round continues through settlement before the game ends. If the limit has already been reached before a new round starts, the game ends immediately. The server checks the point target only after the complete round settlement, so every cutter and estimate score from that settlement is awarded together and no next round begins. The final results rank players by cumulative score. Tied scores share a rank and remain in room order. Each player's ELO result uses their exact Score divided by the total Score. An all-zero game gives every player an equal share; expected score uses the standard multiplayer ELO expectation, and K-factor 40 converts the difference into the rating change. ELO cannot fall below 1. A solo player's ELO is unchanged. All three natural endings are rated for registered-player rooms. Guest games are unrated. If every human player resigns, or an administrator ends the room, the game is also unrated.

During gameplay, the canvas appears beside an information panel showing the current Round, Time elapsed in MM:SS format, Leading score, rounded Progress percentage, Required proportion, Phase, and Time. Time uses whole seconds above 5 seconds, then switches to tenths at 5.0 seconds and retains one decimal place through 0.0 seconds. For a round limit, Progress is the current round divided by the configured maximum rounds. For a time limit, Progress is the elapsed whole-game time divided by the configured limit and capped at 100%. For a point target, Progress is the highest cumulative player score divided by the target and capped at 100%. The Scoreboard below shows Rank, Player, Total score, Last-round points, Cutter turns, and Cut / estimate. After settlement, Cut / estimate shows the cutter's selected proportion and every other player's More, Less, No answer, Not asked, or Automatic result. Automatic identifies a full estimate-score award because the cutter provided no part. It is a semantic table using the shared center-end, center-start, and center column alignments. The ELO changes dialog projects possible results from adjustable score shares without changing the game.

Leaving a game

Navigation and closing the page do not resign a player. During active play, the contextual departure control offers a confirmation with Resign to remain and watch or Resign & Exit to return to the lobby after the same resignation succeeds. The player's accumulated score remains in the ranking while the remaining eligible players continue, and it counts toward ELO if they complete every round.