Otter 0.7.3 - Online Table Top Environment Renderer

Ian Jackson ijackson at chiark.greenend.org.uk
Mon Jul 26 00:58:39 BST 2021


I am pleased to announce Otter 0.7.3.  The changelog is below.

This release contains significant bugfixes, notably to piece stacking
order manipulation.  Some games, especially manipulation rummy
(`vatikan.game.spec`) tripped up noticeable bugs in this area.

There are no incompatible changes (although the minimum supported Rust
version is now rather newer.)


Otter is a system for playing board games online, but it is not like
most other such systems.  In the words of the README:

  It does not know (nor does it need to know) the rules of the game you
  are playing.  Instead, it lets you and your friends play with common
  tabletop/boardgame elements such as hands of cards, boards, and so on.

Full information can be found in the online README and documentation:
  https://www.chiark.greenend.org.uk/~ianmdlvl/otter/docs/README.html
  https://www.chiark.greenend.org.uk/~ianmdlvl/otter/docs/

Otter can be obtained via git:
  https://salsa.debian.org/iwj/otter
For the releases, there are a PGP signed tags there, otter-X.Y.Z.

When I made the first public release, I blogged about it here:
  https://diziet.dreamwidth.org/8121.html
  https://diziet.dreamwidth.org/tag/otter


Version 0.7.3 - 2021-07-25
==========================

Build system bugfixes
---------------------

 * `cargo` publication in `make-release` uses better pre-clean
   approach.  (Removes some junk from caago packages.)

Version 0.7.2 - 2021-07-25
==========================

Bugfixes
--------

 * Complete overhaul of Z coordinate (stacking order) handling, including
   reworked Z lowering algorithm (`b` key function).  Changes and
   consequences include:

    - On page load, use player's view of the Z coordinate for sort order (Z
      display order) of occulted pieces, not actual Z (!)  avoiding
      incoherent client state and arbitrary behaviours eg:
    - Now we no longer ever raise a piece when user asks to lower (!!)
    - Occulters (hands and decks) more uniformly try to be low down.
    - e.g. user will no longer accidentally put card under their hand (!!)
    - Do not derange relative ordering of multiple lowered pieces.
    - Fix a logic errors and panics in Z coordinate handling which
      might prevent some attmepts to lower (or, mayby, raise) pieces.
    - When the user asks to raise but nothing can be raised, log a message.
    - Automatically lower occulting pieces when they are enabled, and
      pieces which are being pinned (insofar as reasonable); this
      significantly reduces the probability of mysterious trouble
      lowering a piece ("would disturb a piece held by another player").

 * Substantial overhaul of error handling for problems detected when
   processing client API requests:

    - It should no longer be possible for the user to cause JS exceptions or
      other lossage merely by asking to do things which it happens that the
      server (unbeknownst to user or client script.ts) won't permit.  Report
      these errors in the user-facing client log window, instead.
    - New discussion of inapplicable-api-op etc. error handling in
      `PROTOCOL.md`, and implementation of the new scheme.
    - Principled client decisions about what to show the user - which
      things are errors, which things are to be rported as conflicts, and
      generally what to put in the user-facing message log.

 * Do not re-raise things during drag if the user explicitly lowered
   them with `b` (since the user grasped them).

 * Fix JS exception if user selected multiple pieces which used the same key
   for different purposes.  (Even transiently, for example by selecting
   multiple hand repositories and claiming them all - you'd briefly have `C`
   for claim for some, and `C` for unclaim for others, triggering the bug.)

New features
------------

 * New general `t` keystroke to bring a piece to the top of the
   stacking order.

 * Player hands now show the count of contained pieces.

 * New loosely synchronised approach to "regrab", to enable a player
   to release a piece (eg, a card they have just drawn) and
   immediately, asynchronously, regrab it, while the server is sending
   an update (eg resulting from an occultation status change).  I.e.:
     - You can now draw a card into your hand in Mao and immediately regrasp
       it, planning to decide whether to play it - and you can do the regrasp
       without waiting for the server to show you the card.  Your regrasp and
       the server update run concurrently.

Other user-facing changes
-------------------------

 * `vatikan` game spec: Make the two hand repositoriess at the bottom bigger.
 * Deck card count uses a monospaced font.
 * Demo game: Add a label to the test hand.

Internal and development/test changes
-------------------------------------

New tests (and new checks in existing tests):

 * Test Z lowering algorithm with new test facility.
 * Test handling of UI actions which server decides (unpredictably
   from client POV) cannot be performed.
 * Add more tests of the zcoord module.
 * Webdriver tests: check that there were no JS exceptions.
 * Add in-browser testing of inapplicable-api-op error handling.
 * Test new regrab feature, and adjust tests to cope with regrab
   feature's somewhat different reporting of simultaneous-drag-attempts.
 * Tests do a consistency check of the Z coordinates vs the in-SVG
   subelement stacking order.

Testing, supporting changes:

 * New jstest facility for running for-browser JS in a nodejs
   environment with some cheesy mockups.  (New `otter-nodejs-tests`
   crate; involves a separate invocation of `wasm-bindgen`.)
 * Webdriver tests: pass window size arguments to firefox so we
   get a window big enough for the provided game specs.  Involves
   wrapper script for `firefox`.  Also Xvfb server screen size.

Internal and protocol improvements:

 * New "loose" update (api op) concept to support new regrab feature.
 * Fix a wdriver synch race which could lead to spurious tests failures.
 * Improve defensive programming in the zcoord module.
 * Abolish the incoherent `OnlineError` error type and replace it
   with `Inapplicable` and `Fatal`.
 * Abolish old incoherent and ununused `conflict_expected` in client JS.
 * Improved debug output in various places (when enabled or in tests).
 * Cleaned up a few flabby idioms in some tests.
 * Promote some debugging support to otter-base.

Internal docs improvements:

 * Fix some bogus links in internal docs.
 * Add some more internal documentation to the zcoord module.
 * Tidy up some leftover comments etc.
 * Typo and formatting fixes in `PROTOCOL.md`.
 * Fixes to `cargo doc` build.

Build system and dependencies:

 * Update many dependencies to new versions.
 * Tested build with Rust nightly-2021-07-15.
 * Dependencies on tera templating engine slightly rationalised.
 * Maekfile: avoid rebuilding the otter cli over and over again,
   by touching it when we rebuild it.


-- 
Ian Jackson <ijackson at chiark.greenend.org.uk>   These opinions are my own.  

Pronouns: they/he.  If I emailed you from @fyvzl.net or @evade.org.uk,
that is a private address which bypasses my fierce spamfilter.



More information about the sgo-software-announce mailing list