← Return to Darts

BecknerWeb Darts

Aim True. Finish Strong. Version 1.0 · October 23, 2026

301, 501, Standard Cricket and four practice exercises. Local games run entirely in your browser. Internet rooms use the included Classic ASP/JScript service and Microsoft SQL Server. No build process, Node.js, npm, CDN, player account, external gameplay API or subscription is required.

Install on BecknerWeb

  1. Back up the existing root games.asp.
  2. Copy the entire darts folder from this ZIP into the website root. Keep its subfolders intact.
  3. Copy the ZIP's root games.asp over the website root games.asp. It is your existing menu with one Darts entry added before Dominoes Collection. Existing entries and shared includes are preserved.
  4. Open /darts/index.html, or /darts/. The included web.config enables index.html as a default document for this folder.
  5. Local play is ready. Configure online play below when needed.

The Return to Games link goes to /games.asp. If you host this game beneath a virtual subdirectory instead of the requested website-root /darts/, adjust that one absolute menu link accordingly. All gameplay assets use relative paths.

Internet multiplayer setup

Requirements: Windows IIS with Static Content and ASP (Classic ASP) enabled, Windows JScript scripting engine, SQL Server 2012+ and the Microsoft OLE DB Driver for SQL Server matching the connection string and application-pool bitness. ASP.NET alone is not sufficient.

  1. In SQL Server Management Studio, select the existing application database, then execute online/INSTALL.sql as its owner or another authorized administrator. It creates dbo.BWDartsRooms and a least-privilege BWDartsRole. It does not create a database/login or drop existing data.
  2. Have the administrator map the chosen IIS application-pool identity or dedicated SQL login to a database user. Add that database user to BWDartsRole using the commented example in the script. Do not try to add dbo or sa to this role. Do not run the application with database-owner credentials.
  3. Edit online/config.asp: set your SQL server, database, authentication and certificate options. The default uses Windows authentication with MSOLEDBSQL. SQL authentication is shown as a commented alternative. The installed driver must match the Provider name. If your driver requires MSOLEDBSQL19, use that provider name and its supported encryption settings. Use a trusted SQL certificate or configure certificate trust according to your existing server policy.
  4. Give the IIS identity access to that database. File-system write access is unnecessary: matches are stored in SQL Server.
  5. Use HTTPS for the public website. Room codes are shareable; private seat tokens must stay private.
  6. Open Darts on two devices using the same website address and protocol. Select Online Room. The host enters a name, rules and match length, then chooses Create Room. Share the displayed eight-character code. The friend enters a name/code and chooses Join Room. The host throws first; starting players alternate each leg.
  7. Refresh either device and choose Online Room → Reconnect. The seat and current visit are recovered. Successful create/join retries retain the original seat even if the first response was lost. Uncertain throws are retried with their original request identifier before another dart is allowed.

Both players see the host's rules. Online aiming has fixed slight server-generated variation (standard deviation 1.2% of the board radius) for both players; local exact-aim preferences do not override it. Skill Throw adds its timing offset before this variation. This is friendly browser competition, without an anti-cheat claim.

The active player advances their completed visit or winning leg. Only the host can start a rematch after the match ends. Leaving closes the room for both players; the local saved match is restored. Rooms expire 30 days after the last successful move. An owner-run optional SQL cleanup command is included; it is not required for play.

Service design

The server validates the seat token, room status, expected revision, action, turn, phase and coordinates. It computes landing variation and scores through the same rules engine as the browser. Updates run inside an ADO transaction with SQL row locks. Request identifiers and revisions prevent repeated scoring and stale updates. Queries are parameterized. Private tokens are never returned to the other player. Tokens are generated using browser cryptographic randomness and sent in POST bodies. A non-eval JSON codec supports the legacy JScript host.

online/engine.inc.asp contains an exact embedded copy of engine.js. If changing rules later, keep both copies synchronized; the supplied rule test checks equality.

Troubleshooting online play

Play and controls

Choose 301, 501, Cricket or Practice. Competitive modes offer a computer opponent at Easy, Normal, Hard or Expert, two to four local players, or two-player internet rooms. Match lengths are single-leg, best-of-3, best-of-5 or best-of-7. The first player to win a majority of the selected legs wins. With more than two local players, all players compete for that same number of leg wins; the starting seat rotates each leg.

Precision Aim: tap or drag the board, inspect the crosshair/magnifier, and press Throw Dart. On touch, the crosshair is 30 CSS pixels above the finger. Fine Aim opens arrow buttons; Tiny Steps makes them smaller. Cancel Aim removes the aim without throwing. The touch/mouse drag cannot throw a dart by itself.

Keyboard: focus the board with Tab. Arrows move the aim; Shift+Arrow moves it in smaller steps. Enter or Space throws. Escape cancels the aim. The separate Throw Dart button is also keyboard accessible.

Skill Throw: select it in Settings. Aim, press Start Skill Throw, then press Lock & Throw when the moving needle reaches the green center zone. The farther outside the zone, the larger the landing offset. High assistance gives a larger timing window. No swiping or device motion is required.

Variation: Exact lands at your chosen point in Precision Aim. Other settings add Gaussian variation around it. Skill timing error is additional. Exact Aim in Practice overrides random variation; choose Precision Aim as well for fully exact practice. Drag sensitivity changes the distance moved during dragging. Computer pace changes pauses, not difficulty.

Rules

The board has the standard clockwise order, with 20 at the top. Singles score their number, doubles twice it, trebles three times it; outer bull scores 25 and inner bull 50. Wires use a deterministic boundary rule: a mathematical boundary belongs to the ring indicated by the scoring engine; there is no random bounce-out. Up to three darts are available per visit. Winning or busting ends the visit immediately.

301 / 501

Subtract hits from the selected starting total. Straight In counts any dart; Double In requires a double before counting begins, including the opening dart. Under Double Out, finish exactly on a double (inner bull qualifies). Overshooting, leaving one or reaching zero without a double busts the whole visit and restores its initial score and double-in opening status. Under Straight Out, any scoring region can finish; leaving one is legal, and overshooting still busts. Checkout suggestions respect the selected rules and darts remaining.

Standard Cricket

Targets are 20, 19, 18, 17, 16, 15 and bull. Three marks close a target. Singles/doubles/trebles count 1/2/3 marks; outer/inner bull count 1/2. Further marks score face-value points while at least one opponent has that target open. Excess marks on the closing dart can score. Once everyone closes it, further hits do nothing. Close all targets and have at least as many points as every opponent to win, including a tied score. Closing while trailing does not win. No round limit applies.

Scoreboard symbols: dash = zero marks; slash = one; X = two; circled X = three/closed. Gold cells can score; dimmed columns are closed by everyone. Accessible cell labels state the number of marks in words.

Practice

Saves, sound and statistics

Local settings, names, the current match and already-thrown darts save in browser storage. Saves belong to this browser and hostname. Starting a new local match asks before abandoning an unfinished one. Online state is stored in SQL Server; the browser stores its seat token and any unresolved action. A saved online room does not automatically replace the saved local match on startup: choose Reconnect.

Sound and Voice have separate controls. Five original synthesized WAV effects are included locally. Voice uses installed browser/device speech synthesis; availability and voice quality vary. No speech API is called by the game. If the browser/device supplies only network-dependent voices, choose an installed offline voice in the device settings or turn narration off. The screen always displays the full result. Narration cancels old utterances before new ones, and cancels on restart or hiding the page.

Statistics retain the latest 100 local match records, grouped by player name and game/exercise. Online statistics show the current room match. Different names are separate players; using the same name combines local totals. Wins/losses count completed competitive matches. Completed-visit points and highest visit exclude busted visits; darts thrown still count. Three-dart average is credited points ÷ darts thrown × 3. A checkout attempt is a dart thrown while a legal one-dart finish exists, regardless of the aim. Cricket marks per round is useful marks ÷ darts thrown × 3; useful marks close a target or earn points. A partly completed visit contributes darts immediately and credited points when it ends.

Files

Credits

Original browser implementation, canvas artwork and synthesized sound effects prepared for BecknerWeb. No third-party gameplay libraries, art downloads or external runtime assets are included. Game rules follow the specification supplied for this project. Native fonts are used.