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