Release notes

3.4 (upcoming version)

⚠️ The following changes are planned for inclusion in a future update. This list is informational only: nothing here is final until the update is actually published. Some items may be deferred or abandoned, and other items may be added at any time. In particular, changes to the APIs and script engine have the potential to introduce compatibility issues with plug-ins which might lead to those features being delayed, changed, or withdrawn.

Special note: Because version 3.4 involves major architectural changes, it is more likely than usual that the information below will change substantially before release.

Unsigned previews are now available for download. Alternatively, developers can work with the latest updates by checking out the main branch.

Features, enhancements, and changes

Move to Java 11:
Strange Eons now requires Java 11. Most users should not notice since the installer packages for Strange Eons include their own private Java environment.

New generic card types

Previously, Strange Eons included generic components for tokens and decks (and thus boards), but nothing for creating cards. This meant that new users couldn’t play around with it without installing at least one extension. This version adds over a dozen “generic” card types in sizes commonly offered by card printing services. Each type offers the same features: title and body text, a portrait, and the ability to customize design elements like the card’s background graphics. They strike a balance between simplicity and flexibility, and are perfect for quickly creating basic designs without having to create a plug-in. The built-in tuck box sizes have been updated to include a size preset for each generic card type.

Cloud fonts

Cloud fonts let both users and plug-in developers download fonts on demand. Cloud fonts can be used in Strange Eons without finding the relevant files yourself or installing them in your operating system. End users can Reserve cloud fonts in the Preferences dialog. Reserved fonts are kept up to date and registered automatically during startup. That means you can use them anywhere you can name a type family.

High DPI display support

This means proper support for “Retina” displays and setups that use desktop scaling. Note that the underlying support at both the Java and operating system level is not always perfect. For example, you may encounter weird issues when moving windows between displays with different scaling factors.

Part of adding high DPI support was replacing or updating nearly every graphic used by Strange Eons. If you notice an image that appears to be missing or incorrect, please report it as a bug by opening an issue, using the Help/Report a Bug menu item, or submitting a pull request.

Markdown document support

Projects support markdown (.md) files for documentation. Markdown is a simple and intuitive way to format text using plain symbols, such as asterisks, dashes, and brackets. Double-click a markdown file to view it, or right click and choose Open to edit.

Text/source editing

The previous “in house” text/code file editor has been replaced with a new implementation based on RSyntaxTextArea. The new system has better support for high DPI displays,* and enables new functionality such as highlighting search and replace matches and occurrences of the identifier under the caret. Work is still ongoing, with additional new features planned. In a few areas, the new editor has not yet reached feature parity.

Other code editing improvements include updated syntax colour themes and a more modern default font for markup and code editing (Windows and Mac).

* There are some known issues with non-integer desktop scaling settings, such as 125%.

Themes

It’s the little things…

Bug fixes

For plug-in developers

An updated and reorganized Plug-in Authoring Kit

This project folder full of examples and resources for new plug-in developers has been significantly revamped:

Build system change

If you are building Strange Eons from source, the build system has changed from Ant to Maven. If you are using an IDE to build the project, there is probably little or nothing to configure. Most current Java IDEs support Maven out of the box. You will need a “launch configuration” for the project; the repository includes configurations for NetBeans and VS Code. For other IDEs, you need to set the VM (or JVM) arguments passed to Java when running the project, specifically the Java agent, or it will fail to launch. At time of writing, the included configurations use: -Xmx4g -Xms1g -Xss1m -javaagent:lib/local/jar-loader/1.0/jar-loader-1.0.jar. The current configuration can be found in .vscode/launch.json under vmArgs.

Miscellaneous changes

High DPI support

Several new classes have been added to facilitate high DPI display support, and methods such as ResourceKit.getIcon(resUrl) have been updated to return DPI-aware results. Many of these classes can also be used to support smart multi-resolution drawing for game components. See this page for more information.

Themed colour palette

The class ca.cgjennings.ui.theme.Palette provides a shared palette with a selection of standard named colours. These colours are chosen to work together and can be customized by the theme. This allows you to use colour in UI elements safely, without getting clashing or hard-to-read results when the user’s theme is different from your own. Example use: Palette.get.dark.opaque.pink.

3.3 (build 4241)

Thanks to Henrik Rostedt for contributions to this update! Contribute your own features and bug fixes on GitHub.

Changes to hardware acceleration defaults

Note: If you have unusual graphics issues, you can disable all acceleration with the command line flag -xDisableAcceleration.

Windows: hardware acceleration is now disabled by default
Many graphics card drivers do not fully support the Direct3D-based acceleration that was previously used by default. The typical result is that parts of windows were repainted in the wrong places, making the application all but unusable. To avoid this confusing experience for new users, acceleration is now disabled by default. This may noticeably slow down the app on your device, particularly if you do not have a powerful CPU. You can opt in to acceleration by adding the -xEnableWindowsAcceleration command line switch.

Linux: XRender acceleration is now enabled by default, when supported
Previously, the default was to use OpenGL-based acceleration. In this version, XRender-based acceleration will be used instead if available. If this causes problems, you can revert to OpenGL acceleration by adding the command line switch -xOpenGL.

Mac: Metal acceleration is now enabled by default, when supported
Previously, the default was to use OpenGL-based acceleration. Starting in this version, Metal-based acceleration is possible, though it is generally only available when running Strange Eons with compatible builds of Java 17, which is not what Strange Eons currently ships with.

Features, enhancements, and changes

For plug-in developers

Script engine update

The interface to the script engine is undergoing significant change, but this should not affect developers who either rely on Strange Eons to manage loading and running scripts on their behalf, or interact with the engine through the higher-level ScriptMonkey class.

This release expands support for modern JavaScript features, and includes numerous performance and bug fixes. Summary of new JS features:

Array
Function
Set and Map
String
Math, Number, BigInt, etc.
Object
Interop with Java classes

Experimental TypeScript support updates

Bug fixes

3.2 (build 4202)

Important: If you have problems with a plug-in (for example, creating a component for a particular game) after updating, ensure that Compatibilty mode is checked in the Preferences dialog (in category Plug-ins, under Plug-in Scripts/Compiler Options).

Features, enhancements, and changes

For plug-in developers

Changes to how subprocesses are launched

Certain preference settings could be used to launch subprocesses such as the script debugging client. These settings are no longer used. Instead the app will launch these tools itself, without reference to these keys. This allows the exact command used to launch these commands to be updated automatically to keep up to date with changes to the Java runtime.

While the old keys are no longer used, it is still possible to override how these tools are launched if for some reason the automatic launch process does not work on a given system. However, there is no UI to edit these user settings so they must be set “by hand”. The following new keys are used (all with no initial value, meaning that the default automatic method is used):

test-bundle-launch
Controls how the plug-in test command starts a bundle test instance.

script-debug-client-launch
Controls how the script debugger client is started.

These keys can contain the following variables, which will be expanded to the relevant value:

%j the path to the Java runtime executable %v the virtual machine arguments used to launch the main app %c the class path used to launch the main app %h the host name of the debug server (debugger client only) %p the port number of the debug server (debugger client only)

Pack 200 transition

Publishing a plug-in bundle (preparing it for a catalog by creating a file ending in .pbz, .pgz, or .plzm) no longer applies Pack200 compression as part of the publication process. This change is necessary for Strange Eons to run under Java 14+, which drops support for Pack200. Existing plug-ins in the official catalog have been re-published without Pack200. Older versions of Strange Eons will detect that Pack200 was not applied and will correctly install the repacked versions. If you operate a third party plug-in catalog, you must re-publish your plug-ins as well. You can do this as follows:

  1. Make sure you have a plain bundle for each published plug-in. A published bundle can be unpacked to a plain bundle by opening (double clicking) it in a project. This must be done using build 4163 or earlier.
  2. Now start any build of Strange Eons that is at least build 4169.
  3. Using your catalog tools task folder, copy all of your plain plug-in bundles to the Staging Area.
  4. Double click on Publish to Local Catalog (robot icon) to run the script. You can expect a warning for each bundle, since it will have the same version timestamp as the already published version (it is the same version, we just want to recompress it without Pack200 and update the catalog accordingly).
  5. Wait for the published bundles to be rebuilt.
  6. Upload the contents of the Upload Queue to your catalog server as you normally would.

Changes to how text is rendered

You may notice differences in how text is rendered compared to previous versions of Strange Eons. Perhaps most noticeable is that the ascent of fonts is slightly different so that text no longer aligns with elements the same way that it used to. These variations are unavoidable due to a change in the underlying font engine being used to draw text.

Why did the font engine change?

The original Sun (later Oracle) Java runtimes that came with previous versions of Strange Eons used a commercial font engine called T2K (later renamed Font Fusion) and/or the engine of the host platform. When Sun opened the source code for the Java runtime, a process began to find open source replacements for proprietary components like T2K. In the case of T2K, the replacement was FreeType. Between the initial release of Java versions 8 and 9, Oracle changed the licensing rules for their Java runtime. The result was that Strange Eons could no longer include Oracle’s runtime and had to switch to runtimes based on OpenJDK. Moreover, starting with Java 11, Oracle replaced the font engine in their own runtime from T2K to FreeType. Thus, this change is likely both long-term and universal and will need to be adapted to rather than avoided.

What can be done?

FreeType is a mature, high-quality font engine capable of producing results comparable to T2K. However, rendering type is a complex and subjective problem. This means that the results from any two font engines are inevitably going to vary. In most if not all cases, the issue is not that the result from FreeType is “bad”. Rather, the issue is that the text layout was designed against the original font engine, so it needs some additional tweaking for the new font engine. Plug-in developers may want to adjust the region boxes, font sizes, or other details for the new engine. Since the new engine will handle each font a little differently, it seems unlikely that a single simple set of adjustments will cover all cases. That said, if you want to experiment and offer some suggested standard adjustment that covers a majority of cases, feel free to share your settings and/or submit a pull request.

Bug fixes

3.1 (build 4163)

This is a production release.

This description combines all changes from interim releases since the last production version, which was build 3784.

Features and enhancements

For plug-in developers

Bug fixes

Other changes

3.0 (build 3970)

This is an early access beta release. Features may continue to evolve; the release notes for the next production (non-beta) edition will include the definitive description of the feature.

Updates and changes

Script library updates

Script engine updates

This update brings partial ES6 support for script code, including:

Arrow functions

// instead of
function f(x) {
    return x*x - 1;
}
// you can write
f = x => x*x - 1;
// notice: the right side of the => is an expression
// that will implicitly be "return"ed

// if the function takes multiple arguments (or no arguments)
f = (x,y) => x*x + y - 1;

// if the function requires multiple statements or
// doesn't return anything
f = (x) => {
  // function body ...
};

// functional programming is much more convenient
evenNumbers = [0,1,2,3,4,5].map(v => 2*v);

Note that arrow functions cannot be used to implement Java interfaces as they capture the this value from the enclosing scope.

Method definitions

// instead of
let object = {
  name: "Abigail",
  greet: function(arg) {
    println(this.name + " says hi to " + arg);
  }  
};
// you can write
let object = {
  name: "Abigail",
  greet(arg) {
    println(this.name + " says hi to " + arg);
  }
}

Destructuring assignment improvements

// array matching
let array = [1, 2, 3, 4, 5];
let [a, , b, c] = array;
println(a); // 1
println(b); // 3
println(c); // 4

// object matching
let obj = {
  height: 60,
  age: 10,
  name: "Cathy"	
};

let {age, height} = obj;

println(age); // 10
println(height); // 60

// parameter matching
function f([name, age]) {
  return name + " is " + age;
}

let array = ["Bev", 52];
println(f(array)); // Bev is 52

Updated native JS objects

In addition to the above you can expect many more bug fixes and performance improvements under the hood.

Java API changes

Bug fixes

Historic versions

This is an incomplete set of release notes for historic, now long obsolete versions. Available historic versions can be downloaded here.

2.1

Deck Editor

Expansion Board Location Editor

Investigator Editor

Location Card Editor

Monster Editor

Mythos Card Editor

Personal Story Card Editor

Miscellaneous

Scripting Engine

Bug Fixes

2.0

Version 2 represents the biggest change for Strange Eons since its initial release.

Performance Enhancements

Plug-in Framework

Write custom plug-ins to extend and enhance SE using either compiled Java classes or ECMAScript (JavaScript). Download the plug-in kit for more information. Several plug-ins are included with Strange Eons as standard, including a reference map, skill check probability table, and scripting tools. Download more plug-ins here.

Custom Expansion Boards

Based on the existing deck editor, SE 2 now supports the creation of custom expansion boards and includes new editors for map locations, other world locations, special locations (like LiTaS) and gate markers. Improvements to the deck/expansion editor include:

Ancient One Plot/Epic Battle Cards

Ancient One Editor

Arkham Encounter Editor

Arkham Investigations Case Book Editor

Arkham Investigations Foldable Tome Editor

Benefit/Detriment Cards

Black Goat Cult Encounter Cards

Blight Cards

Corruption Cards

Difficulty Cards

DIY Card Type (“alpha”)

Gate Cards

Guardian Effect Card Editor

Investigator Editor

Note: To create an investigator with variable health (like Lily Chen), install the Variable Health Investigators extension plug-in.

Marker Editor

Miscellaneous Small Card

Miscellaneous Large Editor

Monster Editor

Scenario Editor

Design Support

Miscellaneous

Bug Fixes

1.71 (Nov 2007)

Arkham Encounter Card Editor

Magical Effect Card Editor

Spell Card Editor

Mythos Card Editor

Investigator Editor

General Features

Bug Fixes

1.70

King in Yellow Expansion Support

Herald/Guardian Cards

Mythos Cards

Item Editor

Gate Cards

Injury and Madness Cards

Miscellaneous Investigator Card

Ally Editor

Investigator Editor

Ancient One Editor

Monster Editor

Deck Editor

Image Export

General Features

Localization

Bug Fixes

Arkham Encounter Cards

1.62

Deck Editor

Item Editor

Investigator Editor

Paragraph Renderer

General Features

Bug Fixes

1.61

All Editors

Item Editor

Monster Editor

General Features

Bug Fixes

1.60

Investigator Editor

Item Editor

Skill Editor

Spell Editor

Card Quality

General Features

Localization

1.50 (Feb 2007)

Monster Editor

Ally Editor

Investigator Editor

Ancient One Editor

Resource Tool

Localization

Improved Typography

General Features

Known Issues

1.12 (Dec 2006)

Added:

Changed:

Known Issues:

1.10 (Nov 2006)

Added:

Changed:

0.92

Added:

Changed:

0.91

Minor bug fixes.

0.90 (Autumn 2006)

First public release.