Appearance
Goal

Pick your odds and take the shot.
- Designer
- player1
- RTP
- 97.00%
- State
- polishing
Opens 97 Plus in demo mode: virtual credits, no sign-up.
How it plays
Details to come.
Original Design document
Created 15 July 2026 · Last modified 26 September 2026
Game design may differ from the content below.
Let's call the game "Goal"
In this game a soccer goal is represented with a goalie in the main game play area. The player places a bet by kicking a ball. The goalie dives for the ball and catches it or misses. Round based like Mines: successive kicks climb a cash-out ladder; a save ends the round at 0.
RTP 97% (tile rtp "97.0"). Big win at bigWinMultiplier 2 (tiles.json). Scene bg GOAL_SCENE_BG, alt colour GOAL_ALT (aim dot + goal flash).
FIELD (GoalField.ts, a fixed 460×340 design space scaled into the play area): The goal is near the top centre ("assets/goal_assets/goal.png"), the goalie (multi-frame sprites) stands in front of it. Near the bottom are 5 small white circles, evenly spaced. Each is a toggle: circle (the ball may roam here) or cross (skipped). Circles can only be toggled in IDLE, and at least one circle must remain. The pattern is cosmetic - it is stored in the round's start config for history replay and does not affect the maths. The ball is hidden until a prompt begins.
IDLE: The playButton shows the bet and is enabled. The message reads "kick for <first-rung win>", the small message "goal odds: 7 in 10". The goalie sways a few px left/right.
GAME PLAY (two-step arm):
- Press play to arm. The play button disables, the message says "tap the goal to shoot". The prompt begins: the ball (200% scale) snaps between the active circles every 0.5 s and the goal flashes red twice every 2 s.
- Tap the goal mouth. A red dot appears on the touch point immediately and the ball stops. After the client-server exchange (requestPlay deducts the bet, then the kick) the ball flies on a curved path to the red dot, scaling down to mimic 3D. The goalie dives - a save lands its hands on the ball, a goal dives the wrong way. The aim point is sent with the kick but is cosmetic. Auto-Kick (Options switch, off by default, persisted): pressing play skips step 1's prompt and takes the first kick at a random aim point straight away. Later kicks in the round are still tapped. On a save: "SAVED!", round over. On a goal: "GOAL!". The playButton turns into the green CASH button showing the current cash-out value, and the prompt starts again. The player can tap the goal to kick again (no arm step mid-round) or press CASH. The small message shows "kick for <next-rung win>". The ladder has 15 rungs; scoring all 15 auto-wins ("MAX WIN!"). If the next rung would pay more than the max-win limit, the round is cashed out automatically ("max win limit reached").
Maths (GoalEngine.ts):
- The player picks per-kick score odds in Options ("Score Odds": 1 in 10 ... 9 in 10, default 7 in 10; persisted).
- Each kick is one uniform integer draw in [0, den); it scores when the draw < num, so P(score) = num/den exactly.
- The ladder is derived from the odds so every cash-out rung pays 97%: rung k = 0.97 × (den/num)^k, stored to 4 dp (15 rungs). e.g. at 7 in 10: 1.3857x, 1.9796x, 2.8280x, ...
- Score odds are validated server-side: num and den must be integers with 1 ≤ num < den ≤ 100, and a live round may only use an option from the offered SCORE_ODDS table - anything else throws "Goal: invalid score odds". (The sim accepts any well-formed odds.)
- startRound draws nothing; a cash-out pays bet × the current rung. Selections: { aimX, aimY } kicks, { type: 'cashout' } cashes out.
- The usual host rules apply: requestPlay is refused while a round is unresolved and changeBet mid-round; quitting mid-round cashes out.
Recovery: an unresolved round on load shows the "game in progress" popup and resumes at the goal prompt with the banked cash value. A failed kick or cash-out resumes the round the same way.
Autoplay: Number of Games, Turbo, Goals per Round (1-7, default 3), Stop on Win / Loss, On Win / On Loss bet step. Each round aims randomly and cashes out after the target goals.
Dev menu: Force Win / Force Loss toggles (cheat seed), Maths Sim (1mil, autoplay goal target at the current odds). Generic Force Win is excluded.
Sounds: kick, crowd cheer on a goal, groan on a save.
bg col: 2925ea