- This Package Version: 5.25.2
- Effective Date: 01-Dec-2024
- GMA Core API Library Version: 6.26
- GMA Mapper Version: 4.27
- GMA Mapper Protocol: 415
- GMA Mapper File Format: 23
- GMA Mapper Preferences File Format: 8
- GMA User Preferences File Format: 2
When upgrading an existing server to version 5.15.0 or later, be sure to run scripts/upgrade-5.15.0
on each database file to update it to the new die-roll preset delegate capability.
In addition, if your server didn't have the following update installed previously, do it as well:
When upgrading an existing server to version 5.13.1 or later, be sure to run scripts/upgrade-5.13.1
on each database file to update it to the new chat history encoding scheme introduced at 5.13.1. If you don't, the server will ignore some or all of your historic chat and die roll messages. Alternatively, you can delete the old database and make a new one with the current server.
- Die-roll labels may also include ‖ separators.
- Die-roll label colors are stripped from output to clients which do not declare that they don't allow that feature.
- Die-roll labels now allow an extended syntax which allows users to add their own custom colors for individual modifiers and permuted rolls.
LineWrap
function to break long lines up on embedded newlines.WithoutNewline
option for hex dump output.YorN
yes/no prompt function.
- The standalone die-roller command
roll
was refactored and the ability to report statistics of the result set were added. Note: This changes the JSON output format (-json
option).
- Changes to authenticator and protocol to make the challenge/response exchange a little more secure, such as it is, by decoupling the nonce from the number of hash rounds. It is backward compatible with previous protocol versions but a server which uses protocol 415 and later will insist on a client that understands the new authentication scheme. Deprecates old methods which didn't understand this in favor of new ones, which is part of what makes this not be a breaking change:
GenerateChallenge
replaced withGenerateChallengeWithIterations
GenerateChallengeBytes
replaced withGenerateChallengeBytesWithIterations
AcceptChallenge
replaced withAcceptChallengeWithIterations
AcceptChallengeBytes
replaced withAcceptChallengeBytesWithIterations
- Text handling code picks up latest changes from GMA core to PostScript preambles.
- Added new option
|total n
to the die roller syntax. This repeats the die roll until the cumulative total of all the rolls meets or exceeds a target value. - Added new CLI tool
markup
(invoked asgma go markup
if using the whole GMA tool suite) which renders GMA markup text to plain text, PostScript, or HTML.- This is still a work in progress. It functions, but it's quite finished yet for PostScript output. The other output formats seem to be about ready.
- Added text processing functions
CenterPrefix
,CenterSuffix
,CenterText
,CenterTextPadding
to thetext
package.
- Moved description of markup and die-roll syntax to constants that can be read from applications.
- Enhanced the markup language.
- Changed GMA PostScript preamble data to be exported from the
text
package (was private before).
cmd/roll
reports the default seed in its JSON output if one wasn't given to it via-seed
.- Rearranged manpages so they all begin with
gma-go-
to disambiguate them from commands on the system with the same names. This also reflects the fact that they are intended to be invoked as subcommands ofgma
by starting the command line withgma go CMDNAME ARGS...
(although they can be run independently too).
cmd/roll
was left out of the git commit.
- Standalone die roller program, suitable for interactive use or to serve back-end code for web interfaces and such.
- Die-roll syntax help text now maintained in the
dice
package.
- Corrected bug in handling of
DR
server request. It was not unmarshalling the JSON payload, making it impossible to request delegated die-roll presets.
- Added the
image-audit
program. This checks the server's database for any images it's advertising to clients which don't actually exist on the web server. It can also update the server's database to remove any such invalid entries.
- Added Quality-of-service (QoS) limits. By default these are not enabled, but by adding a
QOS
entry in the server's.init
file, one or more of the following limits may be enabled, which allow the server to eject misbehaving clients, helping to prevent denial of service situations where a client can overburden or deadlock the server:- Limit on the number of times a client can ask for the same image after the server has told it where to find it. This indicates a problem with the client's ability to obtain images which may result in a packet storm as it keeps asking for the same image forever.
- Limit on the overall volume of packets received in a given span of time.
- A log entry which shows the QoS metrics gathered so far from each client.
- Implements protocol 414, which now allows
DENIED
messages to be sent from the server at any time (not just during the authentication phase), for the server to indicate that it now denies access to the client (say, for QoS rule violations). - Updates mapper client preferences format to include a new field to set the default timer visibility for the client.
- Improves functionality of
session-stats
command to use expanded JSON input file and generate the full game synopsis and video link list.
- Implements protocol 413.
- Expands fields in the
PROGRESS
message to track game timers as well as operation progress. - Adds message definitions for
CORE
,CORE/
, andCORE=
messages. Note that the core database is not yet implemented, so while the protocol messages are understood, no actual data can be retrieved using them yet.
- Expands fields in the
- Die rolls are now evaluated using floating-point instead of integer values. This means that constant values in die-roll expressions may include a fractional part, including formats like
123
,1.23
, and.123
but not12.
(trailing periods aren't recognized unless following digits).- The result of binary math operators involving real numbers are truncated to the greatest integer value less than or equal to the result, as per typical d20 game mechanics.
- Corrects issues with die-roll syntax parsing.
//
inside a{ ... / ... }
permutation was confused as a separator. It is now correctly seen as a division operator.- Labels are now allowed where operators are expected, so something like
(2+2) bonus
will now work as expected. - The definition of a label has been restricted since the looser definition had a tendency to swallow invalid expressions as labels. A label must now be a space-separated series of one or more words, where a word begins with a Unicode letter or underscore followed by zero or more Unicode letters, digits, underscores, periods (full stops), and/or commas.
- Adds
flash_updates
preferences item for mapper configuraiton files.
- Implements protocol 412.
- Adds the ability for users to designate authorized delegates to manage their die-roll presets.
- Adds support for mapper preferences file format version 5.
- Corrected an error in the client library which lost subscription information when following a
REDIRECT
directive from a server.
- Implements protocol 411.
- Adds timestamps to chat messages and die-roll results.
- Now immediately disconnects clients after sending
REDIRECT
to them.
- The move to protocol version 410 introduced an error in how the chat history database was managed. This release includes a script
scripts/upgrade-5.13.1
which repairs the database, as well as new server code to prevent this from happening again.
- When the server receives the
USR1
signal to reload its configuration files, it now also jumps the chat/die-roll message IDs to the current UNIX timestamp value, which should put it ahead of other concurrently-running servers (unless you have a server that's been spewing a message per second since it started, which is really unlikely, or your server's clock is wrong).
- Implements protocol 410.
- Adds
REDIRECT
command to protocol and server init file - Adds server-side configuration extension to
WORLD
command to allow server admin/GM to set a limited number of client preferences, overriding local user preferences.MkdirPath
,SCPDestination
,ServerHostname
GM settings for uploading content to the server.ImageBaseURL
setting which tells clients where to find images and maps on the server.ModuleCode
setting which specifies the adventure module in play.
- Adds client code to accept
REDIRECT
and server-side configuration, implemented inmap-console
.
- Adds
- Server now interprets the
HUP
signal as a request to hang up on all connected clients but leave the server running and accepting new connections.INT
remains as the signal to shut down the server itself (previously,HUP
andINT
both shut down the server).
- Adds
Stipple
field to map elements to specify a pattern fill. - Moves to protocol 409.
- Corrects die-roll syntax error where spaces between open parentheses was not parsed correctly (
((42))
worked but not( ( 42 ) )
)
- Servers can now filter clients to require a minimum client version number that is allowed to connect.
- This is accomplished by adding
MinimumVersion
andVersionPattern
fields to eachPackage
in a server's init fileUPDATES
section. - See the protocol documentation for details on these fields.
- This is accomplished by adding
- Adds preferences option to run curl in insecure mode (mapper preferences file v4)
- Doesn't allow
d0
in die rolls. This caused the server to panic. - Doesn't allow dividing by 0 in die roll expressions, which also caused the server to panic.
- Moved protocol to version 408
- Adds
PolyGM
attribute toPS
. - Adds
ReceivedTime
andSentTime
toECHO
. - Deprecates
Size
in favor of expanded and generalizedSkinSize
inPS
.
- Adds
- Added New Relic APM instrumentation to the major server functions.
- This is just the start of a work in progress.
- Renamed the server's
-profile
option to-cpuprofile
- Changed the semantics of
-telemetry-log
so that by default it does not log at all; now give"-"
as the log path to have it log to standard output.
- Add custom attributes to transactions (client info)
- Add error reporting
- Added missing source files needed for mapper clients and server.
- The server and client connection code included a spin loop that sent CPU usage through the roof when clients were connected. This has been fixed.
- Correction to
coredb
feat import code.
- Added support for animated image files.
When moving to version 5.8.0, a change is needed to the database file in use by the server. You can either delete the database file so that the 5.8.0 server will create a new one, or run the following command after shutting down your old server to make the necessary schema change before starting your 5.8.0 server:
scripts/upgrade5.7.0-5.8.0
- Added
coredb
program and supporting functions and types in theutil
package to import/export entries to/from the core game database (which will be) introducted in GMA Core 7.0. - Added the GMA PostScript preamble file as
string
constantstext.commonPostScriptPreamble
andtext.gmaPostScriptPreamble
- Added data structures and functions to access the global GMA preferences settings (which will be) introduced in GMA Core 7.0.
- Updated to file format version 21
- Removed redundant
Area
field from creatures - Added new
CustomReach
field for creatures - Added new
DispSize
field for creatures
map-console
didn't work if nopreferences.json
or*.conf
file was found.- clients didn't see
Transparency
attribute of status markers. map-console
didn't list transparency attributes.
- Implemented protocol 405.
map-console
shows server version number upon connect.
- Updated
UserPreferences
structure. - Improved
Makefile
- Implements server protocol 404
- Adds
Transparent
attribute to status marker definitions - Adds
Hidden
attribute to creatures
- Adds
- Typos in documentation
- Added <= and >= operators for die rolls to constrain values to be within defined limits.
- Die roll expressions got confused with spaces between parentheses and operators (e.g.,
(d20 + 3) * 2
). Fixes issue #19
- The
dice
module now respects algebraic order of operations and use of parentheses in die-roll expressions. - The
map-console
program now reads from mapper preferences settings as does the latest mapper version. - Added code to the
util
module to parse mapper preferences files.
- Implemented protocol 403 which expands the OK message and adds AI/.
- Corrected a bug where receipts weren't sent when a player make a die roll to GM only with multiple results, such as with a permutation.
- Added shorter CLI options to
map-console
. - Added doc comments for commands.
- Added
Makefile
to make building command binaries easier.
- Updated to server protocol version 402.
- Reports "to-GM-only" die rolls with more explicit details for clients to display.
- Changed how peer connections and disconnections are announced (removed race condition).
- Moved to server protocol version 401.
- Moved to server protocol version 400.
- Updated file format versions to JSON-based (mapper file format 20, die-roll file format 2).
- Refactored client/server code.
Warning: requires Go 1.18 or later
- Updated for protocol version 333.
- Added support for Allow server command.
- Now supports extended status marker definitions (with description of effects).
Synced version number with GMA core.
Added subtotals to die roll results.
Warning: a future release of this code will require Go 1.18.
Added additional core GMA functions and the map-console tool, which gives an interactive interface from the command line to the map server.
Added note pointing to paizo's Community Use Policy and GMA's usage of Pathfinder game-related information.
Since this is still in alpha, I'm taking the liberty to change the call to dice.StricturedDescribeRoll to correct the weirdness of having the sfOpt parameter, which should logically (no pun intended) be a bool value rather than a string, and also to provide a more flexible calling paradigm which doesn't require sending these values when they aren't needed.
Updated handling of custom bullets in the text.Render function so that common
bullet characters are translated to each output format. That means the plain text
formatter outputs Unicode bullet runes now by default, too, so if you really want
to use *
(for example) as a bullet you'll need to specify that as a custom
bullet rune explicitly, like:
formattedText, err := text.Render(s, AsPlainText, WithBullets('*', '-'))
Updated documentation. Lots of cleanup to make golint
happier.
Added random name generation package namegen
.
Added ability to get raw random number values from dice.DieRoller
that use the same
PRG.
Moved SaveData methods for MapObjects back to being unepxorted. Users should only save via the provided high-level SaveObjects function.
Updates map file support to version 17.
Adds mapper package with code to represent map objects and load/save them from a disk file or over the client/server protocol. Also adds code for clients to connect to a running server, with functions to send individual messages to the server and a mechanism for the client to be notified via subscribed channels when incoming server messages arrive.
Adds ToDeepTclString()
to the tcllist package which converts an arbitrary
slice of values (including nested sub-lists) into a Tcl string in one step.
Otherwise one would need to convert non-string types to strings and then
call ToTclString()
(repeatedly, in the case of sub-lists).
Correction to how auth objects manage byte slices.
Added text processing and utility functions.
Cleaned up the module documentation. Un-exported some of the internals of the dice package that weren't supposed to have been exported.
Initial move to its own repository. Implements the auth
, dice
, and tcllist
packages.