Skip to content

1.21.0

Choose a tag to compare

@chrisdugne chrisdugne released this 10 Sep 20:23
· 72 commits to main since this release

A tree that says what each folder is for

Fox grew one folder at a time, and the names stopped matching the contents. core/ held nine autoload services and five base classes side by side. libs/ mixed static helpers, free to move, with autoload services whose every move breaks sixteen project.godot files. The word "store" meant an in-app-purchase store in one folder and a place holding state in another. Shaders lived in three folders, none of them named for shaders. Seven files were referenced by nothing at all.

Every folder now says what it is for: autoloads/ for services a game wires by path, libs/ for the nine static helpers, screens/ for the base classes a game extends, iap/ for in-app purchases, shaders/ for paint, tools/ for dev tools, and core/ for what is left.

Every consumer was repaired in the same batch as the move that broke it: 13 games, the coucarel creations and the representation templates, each one loading headless with no new error.

There is no functional regression: 1.21.0 is 1.20.0 with a tree you can navigate, and the version keeps climbing the same ladder.

Breaking changes

Every consumer of fox must update the paths it hardcodes. A class_name costs nothing, and an ext_resource carrying a uid= follows on its own. What breaks is bare paths: [autoload] lines, preload() string literals, and ext_resource lines with no uid=.

was is now
res://fox/stores/appstore.gd, playstore.gd res://fox/iap/…
res://fox/libs/{controls,keyboard,gesture,hot-reload,generate,frame-probe}.gd res://fox/autoloads/…
res://fox/core/{screen,screen-3d,popup,responsive,viewport-resize}.gd res://fox/screens/…
res://fox/components/blur.gdshader, behaviours/{simple-blur.gdshader,outline.tres,saturation-material.tres,disintegrate-material.tres}, components/splash/splash-electric.gdshader res://fox/shaders/…
res://fox/components/controls-test/… res://fox/tools/controls-test/…
interactiveArea2D, dropArea2D, multitouchArea files interactive-area-2d, drop-area-2d, multitouch-area

The node names inside those scenes are unchanged: $interactiveArea2D and get_node('interactiveArea2D') keep working, because those names are the public contract.

After updating, run Godot --headless --path . --import once. Moving a class_name file leaves the class cache stale, and a stale cache reports Could not resolve super class "FoxScreen" for a file that is perfectly fine.

Generate also stops opening res://assets/name-elements.json at script load. The path is now the project setting fox/generate/name_elements_path, defaulting to the old value, read on first use and guarded: a project without that file logs a warning instead of paying for it at boot.

changelog

No issue is closed by this release.

Full changelog: v1.20.0...v1.21.0