DAILY YACHT v2026.10.13.3 A one-game-a-day dice door alexcorris@outlook.com bbswordle.com https://bsky.app/profile/bbswordle.com ====================================================================== Five dice, three rolls a turn, thirteen boxes. Every caller gets ONE game a day, and everybody's game that day is ranked together: best score wins the day, scores add up over the month and all-time, and there is a board for the longest daily play streaks. Missed days can be made up from the calendar while they are still open, and late in each month the rest of it can be played ahead. The dice are truly random - as if the callers sat at the same table - so nobody can learn a day's rolls on one BBS and use them on another. BBSes can play each other through the same league server Daily Blocks uses (version 2026.10.13.1 or later): see INTERBBS LEAGUES below. Use the right exe for your system - dyacht Linux dyachtpi Linux ARM/Raspberry Pi dyachtW32.exe Windows 32bit dyachtW64.exe Windows 64bit dyacht.exe MS-DOS (no inter-bbs capability) Created at run time, next to the executable: dyacht.ini settings (written with defaults on first run) dyacht.dat every game ever played (96-byte records) dyacht.lck a lock DIRECTORY that exists for a few milliseconds while a record is added dyacht.lgr InterBBS only: the other BBSes' scores, as collected dyacht.lgb InterBBS only: the league's BBS names dyacht.lgs InterBBS only: where the exchange got to, and when RUNNING ---------------------------------------------------------------------- dyacht -DDOOR32.SYS (or DOOR.SYS, DORINFOx.DEF, BBSDEV.DRP) dyacht -N -S dyacht -L local mode, asks for a name Extra switches: -U local mode on Linux: send UTF-8 instead of CP437 so the dice look right in a modern terminal -PName local mode: log in as Name without the prompt (_ = space) -TYYYYMMDD pretend today is that date - for testing only The door needs ANSI and an 80x24 (or bigger) screen. Players are identified by alias (real name if the drop file has no alias). All data lives in the directory the executable is in. DYACHT.INI ---------------------------------------------------------------------- MakeupDays=30 how many days back a missed day stays open (0 = no make-ups) PlayAheadDay=22 from this day of each month, the rest of that month can be played ahead (0 = never, 1 = the whole month is open from the 1st) StartDate=YYYYMMDD first day of play; set automatically on first run. Set it earlier to open past days for make-ups. InterBBS=0 1 = take part in an InterBBS league LeagueServer= the league server: host, or host:port BBSName= your BBS's name as the other boards will see it There is no board seed and nothing that has to stay fixed: every game is just five random dice, so any setting can be changed at any time. PLAYING AHEAD works as in Daily Blocks: from PlayAheadDay to the end of the month, the rest of THAT month can be played early from the calendar. A score played ahead is SEALED until its own day - banked, and seen by its owner, but left off every scoreboard, standing, record and streak, and not sent to a league, until that date. On the day it appears, marked "early". HOW IT PLAYS ---------------------------------------------------------------------- Everything is on one screen: the card (upper and lower halves), a panel with the turn, the roll, the boxes left and the score to beat, and five dice drawn in ANSI underneath. There is no clock: time never ranks anybody, so there is nothing to hurry for. On the card, a box still to fill shows a white [ ] and a bright name, so what is left stands out at a glance; a filled box shows a green tick, its name dims, and its score stays yellow. The screen has two halves, DICE and CARD, and the keys work on one of them at a time. The one in use is lit - its frame, its title, and the or the blue bar - and the bottom line shows its keys. ENTER always acts on that half: on the dice it ROLLS, on the card it SCORES. So pressing ENTER again and again just rolls; it never scores a box. TAB switch between DICE and CARD On the DICE (every turn starts here) ENTER roll - the first roll of a turn throws all five Left/Right move the to a die (A D also work) SPACE hold / let go of that die (held dice turn cyan, HELD) Up/Down go to the card On the CARD Up/Down choose a box (W S); Left/Right jumps between halves ENTER put the dice in the chosen box ESC or SPACE back to the dice Anywhere 1 - 5 hold / let go of that die R roll H or ? the rules Q leave the game here and finish later, or end it now After the third roll ENTER on the dice just says there are no rolls left; moving to the card is always your own TAB. After a box is scored, the next turn starts back on the dice. After every roll each open box shows, in green, what the dice would score there - so it is easy to see the choices. Putting a 0 in a box asks first if anything else would have scored. A Yacht moves the card's marker to the YACHT box (or the box the joker rule demands). When dice are rolled they tumble for a moment and settle one after another, with a | / - \ spinner beside ROLLS LEFT; a Yacht flashes. Scoring (the standard rules) Ones - Sixes the dice of that number, added Upper bonus +35 if the six upper boxes reach 63 (three of each) 3 of a Kind all five dice added, with at least three alike 4 of a Kind all five dice added, with at least four alike Full House 25 (three of one, two of another) Sm Straight 30 (four in a row) Lg Straight 40 (five in a row) YACHT 50 (five of a kind) Chance all five dice added Extra Yachts +100 each, once the YACHT box holds 50 The joker rule: a further Yacht, once the YACHT box is filled (with 50 or with 0), must go in the upper box of its number if that is open. If it is not, it may go in any open lower box, where Full House and the straights count in full. If none of those is open either, it fills an open upper box for zero. The door enforces this: boxes the dice may not go in show "--" and cannot be chosen. The +100 is only paid when the YACHT box holds 50. The highest possible game is 1,575. RULES WORTH KNOWING ---------------------------------------------------------------------- * One game a day. The game is on file the moment the first die is thrown, and it is rewritten after every roll and every box - always BEFORE the dice are shown. * A dropped call costs nothing. Hang up, time out, lose the connection or have the door killed, and the game waits exactly as it was, dice and all: the home screen says "unfinished", the calendar shows RESUME, and Play picks it up. Because the dice were written down before they were shown, coming back can never get a better roll. A game can be picked up for as long as its day is still open (today, or a make-up within MakeupDays). * Q (or ESC) during a game offers both: L leaves it to finish later, E ends it now - empty boxes score nothing and the day is used. * While a game is under way its score so far shows on the boards, marked "Playing". * Make-ups count in full - for the day's ranking, the month, streaks, everything. A day's winner can still change until its make-up window closes; the boards mark such days "open". * Equal scores are a tie and share the place: a day can have two winners, and both get the win (BBS vs BBS counts it once per BBS). The boards mark a shared place "=". Unlike Daily Blocks, time plays no part - nobody should feel rushed in a dice game. SCOREBOARDS ---------------------------------------------------------------------- 1 Day ranking for any one day; a shared place shows "=". Up/Down picks a player and ENTER shows their whole card; Up/Down there steps through the rest of the day's cards 2 Winners who won each day of a month 3 Month monthly standings (total, games, wins, average, best, Yachts) 4 Champs the champion of every month 5 All-Time lifetime standings 6 Top the 50 highest single games ever 7 Streaks the longest daily play streaks: best run, when it ended (or "still going"), the run alive now, games. A make-up fills its day, so a missed day can be mended while it is still open 8 Records hall of records (highest game, most Yachts in a game, best upper section, longest streak, longest streak going, most wins, most Yachts ever, best average, biggest month, most games) + the caller's own numbers Left/Right switches board, , and . move through days or months, 1-8 jump straight to a board. Long lists scroll with Up/Down, PgUp/PgDn, Home/End. YOUR CARDS on the main menu shows every card the caller has played, newest first, with their place on that day. INTERBBS LEAGUES ---------------------------------------------------------------------- Daily Yacht uses the Daily Blocks league server - the SAME program, on the SAME address and port. The server keeps a separate league for each game, so a BBS in the Daily Blocks league is not in the Daily Yacht league until its Daily Yacht door joins, and the two never mix. JOINING. In dyacht.ini set InterBBS=1 LeagueServer=their.address.example (add :port if they say so) BBSName=Your BBS Name and that is it. The next caller's door says hello, the server signs the BBS up and hands back the league's rules; the door writes them into dyacht.ini itself. Use the same BBSName as in dblocks.ini if you like - each game's league keeps its own list, so there is no clash. THE SERVER HAS TO BE 2026.10.13.1 OR LATER. An older Daily Blocks league server does not know about other games: the door then says "that league server is too old for Daily Yacht and needs updating" on the home screen and carries on locally. (Nothing is signed up on the old server.) WHAT THE LEAGUE DECIDES. Its first day, how far back a day can be made up, and the play-ahead day. While InterBBS=1 the league's MakeupDays and PlayAheadDay are used instead of your own. WHEN IT STARTS. Games from the league's first day on count in the league - including any this BBS played before it joined, since every game of dice is like every other. So a new BBS can make up every day the league has had so far (as far back as its make-up rule allows). WHAT CALLERS SEE. The same as Daily Blocks: the boards open on the league, each row showing player and BBS; L switches between the league and this BBS's own scores; B is BBS vs BBS - one line per BBS, ranked for the month by each BBS's BEST game of each day added up, so a BBS is not on top just for having the most callers. BBS names that do not fit their column lose a leading "The", then are cut. IF THE SERVER IS DOWN. The game carries on with what it has; it tries again five minutes later. A caller never waits more than a few seconds on the network. Scores move when a caller enters the door, comes back to the menu, opens the scoreboards or finishes a game - at most every two minutes unless there is a score to post. CHEATING. The server checks every card it is sent: each box has to be something five dice can make, the extra-Yacht count has to fit the card, a finished game needs all thirteen boxes, and the score has to be exactly what the boxes add up to. Anything else is turned away. It cannot tell whether the dice really fell that way - every league row shows handle and BBS so odd results can be seen. Your BBS name is yours once joined: the server gave your door a key (LeagueKey in dyacht.ini) and will not accept the name without it. Keep a copy with your backups. To leave, set InterBBS=0. FOR LEAGUE HOSTS ---------------------------------------------------------------------- Nothing to do but run dbserver 2026.10.13.1 or later. On its first run it adds yacht.ini, yacht.dat and yacht.bbs beside its own files and opens a Daily Yacht league; dbserver.ini, league.dat and league.bbs - the Daily Blocks league - are never touched. yacht.ini holds the Daily Yacht league's name, its MakeupDays and PlayAheadDay, its first day (Created=) and its LeagueID. banned.ini applies to every league. "dbserver -list" lists each league's BBSes. MAINTENANCE ---------------------------------------------------------------------- Delete dyacht.dat to wipe all scores. dyacht.ini can be deleted too (it is rewritten with defaults), but on a BBS in a league keep its LeagueKey line. A stale dyacht.lck directory after a crash is harmless; the door takes it over after three seconds.