← Return to Tabletop Hockey

Tabletop Hockey

Every Shift. Every Shot. Every Save.

BecknerWeb Fan Series · Release 1.0 · October 23, 2026

A complete turn-based coaching game with 12 original teams, 240 fictional players, local exhibitions, shared-device play, computer exhibitions, private internet rooms, seasons, and four-team playoffs. No build, package installation, external artwork, gameplay API, subscription, or player account is required. The optional development tests use Node; the installed game does not.

Install on BecknerWeb

  1. Back up your website's current games.asp and any existing /tabletophockey/ folder.
  2. Copy the entire supplied tabletophockey folder to the website root. Open /tabletophockey/index.html through your website.
  3. Replace the root games.asp with the supplied updated file. It was based on the latest supplied menu, version 95, and changes only one list entry: Tabletop Hockey → /tabletophockey/index.html. All prior entries and the ASP header/footer includes are preserved. If your live menu has changed since this package, merge that one entry into the newer menu instead.
  4. Local modes work immediately with static HTML, CSS, JavaScript, SVG and WAV support. Use a current Chrome, Edge, Firefox, or Safari browser. Serve through IIS rather than opening file:// so browser storage and server requests use a consistent origin.
  5. Internet play additionally requires the online setup below. You do not need SQL Server for local play or seasons.

Internet setup: Classic ASP + SQL Server

<system.webServer>
  <httpErrors existingResponse="PassThrough" />
</system.webServer>

Open Private internet rooms. The host chooses home/visiting, their own name and team, and Create Room. Share only the eight-character room code. The joiner chooses their own different team and Join Room; their side is assigned opposite the host. Each coach presses Save team & Ready. Both screens enter the match automatically when ready.

Both coaches choose and commit their own tactics. Choices remain concealed until both have committed. Each rolls only their own dice. Automatic Dice is a per-seat setting in Settings; one coach can automate while the other rolls manually. Both coaches acknowledge each result before the next play. You can leave and close a room for both coaches; refresh or temporary network interruptions do not close it.

Reconnect uses the private token and room saved in this browser, always targeting the room most recently created/joined successfully. Interrupted mutation requests retain the same request identifier and token before any transmission, including room creation/joining. Requests retry without resolving another play. Reconnect from a different browser/device requires the original browser's stored seat; there is deliberately no account or public token-recovery service. Do not clear site data or share seat tokens. Teams cannot be changed after the game starts.

The service hashes private 256-bit browser-generated seat tokens with SHA-256 in SQL; raw tokens are never stored in room rows or returned to the opponent. Online dice/event draws come from SQL CRYPT_GEN_RANDOM. Commands use parameterized ADO queries, room-row UPDLOCK/HOLDLOCK transactions, state revisions, request identifiers, phase/tactic validation and ownership derived from the token (not a submitted side). Exact mutation retries return the current state without another mutation. A stale new request is rejected and refreshed. Room creation/joining retries find the same seat by its token hash. No browser-submitted game state or dice are accepted. The complete room state lives in SQL, rather than in ASP session memory. Keep both tables together when backing up. The app preserves rooms and request records indefinitely; schedule any database retention with your administrator.

Controls and workflow

Choose your name, team, side, opponent mode, difficulty and overtime format in New game. For local two-player play, pass the device at the coach-handoff prompt after sealing a tactic. Neither coach can revise an already sealed tactic. Computer players use the identical engine, ratings, and probability tables.

  1. Read possession, zone, lineup, fatigue and manpower. Choose a tactic for the appropriate coach.
  2. After both coaches commit, roll your assigned pair of six-sided dice. White dice are offense or faceoff; red dice are defense/goalie. Resolved rolls retain their original role labels even after a turnover. The event percentile die is public in the dice tray and detailed explanation.
  3. Follow the puck animation. Results remain visible until Next play; menus and reading never consume game time. The play can resolve only once.
  4. Inspect Last play: dice & modifiers, Statistics, Lines & goalies, and Play-by-play as desired.

Click/tap, or Tab then Enter. Number keys 1–6 choose the matching visible tactic; R rolls the next locally owned pending pair; Space continues a result. Shortcuts pause in dialogs and input fields. Focus indicators are visible. Browser reduced-motion preferences suppress movement. On portrait screens, the scoreboard and rink precede the result and coaching buttons; secondary information is below labeled tabs. Rotation uses the same responsive document, without recreating the game.

Settings independently control effects, Audience (on by default), narration, dice automation, game speed and speech speed. Shared-device coaches switch between their two Automatic Dice settings. Computer exhibitions can optionally auto-continue. Local autoplay pauses while a dialog is open. Narration uses an installed browser/device voice; availability and naturalness vary by device, and a device voice may be needed for fully offline speech. All information is visual. New games/continue cancel previous speech rather than allowing overlap. The supplied crowd and effect clips are local synthesized WAV files.

Tactics

Situation Tactic Tradeoff
Faceoff Balanced No added bonus or risk.
Faceoff Quick / Physical +2 using skating / checking; Quick gains another +3 against Physical.
Defensive or neutral zone Carry Skating versus defense; forecheck opens a +2 carry counter.
Defensive or neutral zone Pass Passing versus defense; controlled entry gives +1 shot quality.
Defensive or neutral zone Dump Checking contest; entry succeeds at margin -2 or better and avoids offside.
Attacking zone Pass / Carry Win a contest to build +1 shot quality, maximum +4.
Attacking zone Cycle Win a passing contest to build +2 quality; pressure penalizes it by -3. Uses more clock.
Attacking zone Shoot Attempt a shot with current quality; a strong offensive roll can generate a rebound.
Live play Change Change forward line and defensive pair, concede possession, use 20 seconds.
Live play Clear Shorthanded clear is legal; otherwise icing and a defensive faceoff with no offending-team line change.
Defense Slot Reduces shot quality by 2, but permits passing. Useful on penalty kills.
Defense Pressure -2 against passes, -3 against cycles, but +1 shooting modifier and greater penalty risk.
Defense Block Raises shot-block percentile interval from 12 to 28.
Defense Forecheck Checking instead of defense, +2 in contests except Carry counters it; increased penalty risk.

Power plays use the same tactical choices with a +2 contest/shot modifier per net skater advantage. Cycle to create a lane; penalty killers can protect the slot or clear. A goalie pull adds an attacker and +2 advantage, but leaves an empty net. In a late lead, cycle can use 28 seconds; shooting takes 12. At stoppages choose a fresh line/pair, substitute either goalie, or use your one timeout to restore 60 fatigue points to every line. Goalie return/pull is permitted before committing a live-play decision; it uses no clock. A goal automatically restores both goalies.

Chosen tabletop ruleset

These are internally consistent fictional-league tabletop rules, informed by ice hockey, with the following deliberate abstractions. They are not labeled as a complete NHL rules implementation. No fights, injuries, video review, delayed penalty advantage, penalty shots, double minors, misconducts, or on-the-fly goalie substitutions are modeled.

Dice probabilities and modifiers

All 2d6 pairs are independent, uniformly distributed six-sided dice. The total frequencies from 2 through 12 are 1,2,3,4,5,6,5,4,3,2,1 out of 36. Ratings are means of the active individual skaters' relevant attributes (2–10), with fatigue applied. Team card ratings describe the profile used to construct those fictional player ratings.

Faceoff: each coach's 2d6 + effective skating (Balanced/Quick) or checking (Physical); Quick and Physical add 2, and Quick against Physical adds a further 3. Higher total wins; ties use event d100 ≤50 for visitors, otherwise home. The displayed modifier is the rounded difference of the full faceoff scores.

Contests: offense 2d6 − defense 2d6 + rounded modifier. Modifier = effective offensive attribute − effective defensive attribute + 2 × net active skater advantage + tactical modifiers listed above. Dump uses checking, Pass/Cycle passing, others skating; defense uses checking for Forecheck, otherwise defense. Nonnegative margin succeeds; Dump succeeds at -2 or better. Skater advantage includes extra attackers and the opponent's extra attacker. Success gives possession/zone/shot-quality benefits, not a goal automatically.

Event d100: one public uniform percentile is used for each resolved play. For a non-faceoff play, penalty chance P = clamp(round(8 − defending discipline × 0.55) + 2 when Pressure/Forecheck, 1, 8). If d100 ≤P, stop play for a penalty: 1 with equal coach dice totals is matching minors; 2 with defending 2d6 totaling 2 is a major; other penalty results are a minor. Matching/major events are therefore rare and depend on the public dice as well as the percentile. On controlled entries, non-penalty values through P+6 are offside. Other values use the contest.

Shooting: penalties take priority. Next, d100 ≤P+B is blocked, where B=28 for Block defense, otherwise 12. Values 95–100 are wide. All other shot values are remapped uniformly over their available interval to percentile Q = floor((d100−(P+B)−1) ×100 / (94−(P+B))) +1. A goal occurs when Q is at or below:

clamp(8 + round(1.8 × (offense 2d6 − defense 2d6 + shot modifier)), 2, 35) percent of unblocked on-target shots.

Shot modifier = effective offense − selected opponent goalie rating + accumulated shot quality + 2 × skater advantage −2 against Slot, or +1 against Pressure. An empty net replaces the finishing threshold with 80%; failure is wide, not a save. A non-goal saved shot rebounds if offense 2d6 is at least 9; otherwise it is frozen. Because Q is obtained from the finite public interval, realized conditional chances are quantized around the displayed percentage. Penalty, block, and miss chances are in addition to the conditional finishing probability. Inspection shows each pair, tactics, event d100, rounded modifier, conditional goal threshold, and elapsed time.

Shootout: chance = clamp(30 +4 × (attacker 2d6 − goalie 2d6 + individual shooting/skating − selected goalie rating + counter modifier),10,65) percent. Wrist/Challenge, Deke/Deep and Power/Read use counter modifier -3; all other combinations use +1. Deke uses skating; Wrist and Power use offense. Event d100 at or below this chance scores. Attempts rotate through the twelve forwards before repeating.

AI: Easy chooses uniformly from legal tactics. Normal mixes 35% random choices with a position/manpower/quality policy; Hard uses 12%; Expert 2%. The policy chooses draws based on roster strengths, controlled entries based on skating/passing, protection on the penalty kill, blocks against developed shots, cycling and timely shooting, live line changes for high fatigue in manual mode, goalie pulls when trailing late, and timeouts at useful late stoppages. Difficulties never alter dice, ratings, or outcome thresholds.

Seasons, statistics and saves

Create a 4/6/8/12-team season using that many teams from the ordered roster list. Choose 1–4 meetings per pairing, with home/away reversed on alternating cycles. Every team plays every other team that number of times. The sequential schedule can be coached one game at a time or simulated using the same complete engine. Simulation yields periodically so the interface can remain responsive.

Wins earn 2 points, all overtime/shootout losses 1, regulation losses 0. This league does not use a professional-league overtime empty-net point forfeiture. Standings break ties by points, wins, goal differential, goals for, then roster order. The top four enter 1-v-4 and 2-v-3 semifinals, then a championship, using your selected single-game or best-of-3/5/7 series. Home advantage alternates by game. Playoffs always use continuous sudden death. Completed fixtures record exactly once; refresh cannot count a result again. Regular-season totals remain separate from playoff series wins and scoring summaries.

Game and regular-season statistics include score, SOG, goals/assists/points, goalie shots/saves/save percentage, wins/losses/OTL, goals for/against, PP goals/penalty opportunities and completed PK attempts. One unmatched assessed penalty is one PP opportunity; multiple goals on a major can make PPG/opportunities exceed 100%. PK completed counts only penalties that have expired or ended on a power-play goal; active and queued penalties are not yet counted as completed kills. A kill fails if that penalty allowed any power-play goal. Goals against an empty net have no goalie attribution. Shootout deciding goals affect team standings GF/GA, but not player or goalie totals. No made-up research claims accompany the fictional identities or ratings.

Local settings, names, chosen teams, lineups, season, statistics and every game decision are stored after each mutation under the website's browser localStorage. Resume saved game restores exact clock, puck, lines, penalties, tactics, partially rolled dice and current decision. Each browser/origin has one local saved game and one season; normal confirmation protects an unfinished game or existing season from replacement. Clearing site data deletes local saves and private-seat access. Online match data remains in SQL; each coach's audio preferences stay local and their dice preference lives with their private seat.

Package contents and validation

See the test summary before enabling live internet matches. Live IIS/SQL behavior, true simultaneous database locking, real network disruption, and physical Pixel voice/audio/touch must be checked on the installed site; those platforms are not present in the build environment.