Week 65: Stability

An animated GIF showing a cat moving around some platforms that consist of 45 and 90-degree angles.
My corner-match autotiling is more stable and now works in-game!


tl;dr: Last week I focused on stabilizing my frameworks, so I could use them for Ludum Dare 50!


What happened last week?

Highlights

  • Fixes for my new corner-match autotiling system.
    • I'd never actually got this integrated with my Surfacer framework and running in a game!
    • I'd only been using the autotiling behavior from in the editor.
    • So there was a lot of fixing needed here!
  • Improvements to my color-configuration systems.
  • Lots of miscellaneous framework stabilization work.
  • I made a game for the Ludum Dare 50 game jam!

Laundry list

  • Fixes for my new corner-match autotiling system:
    • Create a new CornerMatchTile class, in order to disambiguate between the tileset and the underlying custom-autotiling tile.
    • Start reconciling old Surfacer tileset configurations with new SurfaceTiler configurations.
    • Create new separate demo tilesets for SquirrelAway vs Surfacer vs SurfaceTiler.
    • Delete obsolete old versions of corner-match files.
    • Reconcile the old Surfacer tileset configuration with the new SurfaceTiler configuration.
    • Update CornerMatchTilemap to omit the inner-tilemap if there are no registered CornerMatchTiles.
    • Update SurfaceParser to support multiple TileMaps.
    • Fix an issue relating to CornerMatchTiles being mapped to multiple outer tile IDs.
    • Add support for non-collidable tiles within a SurfacesTileset.
    • Fix type references to support either SurfacesTilemap or CornerMatchInnerTilemap.
    • Add support for configuring whether corner-match autotiling will include intra-subtile concave-45-degree cusps.
    • Fix a tile-binding regression.
    • Add support for no subtile collision-margin.
    • Fix some issues with clearing cells in CornerMatchTilemap.
    • Create a new simpler test level.
    • Fix surface-parsing with corner-match tilesets.
    • Remove unused non-corner-match tiles from SurfaceTiler demo tileset.
    • Fix surface-parsing to work with multiple tilemaps.
  • Improvements to my color-configuration systems:
    • Record each component of ColorConfigs separately, in order to preserve precision.
    • Fix a bug with saving color-config values.
    • Add support for using ColorConfigEdit for exported variables within the inspector panel.
    • Add property-list definitions to ColorConfig subclasses, to prevent empty getter/setter properties from saving in .tscn files.
    • Update ColorConfigEdit to use accordion panels to hide UI when not needed.
    • Fix ColorConfigEdit styling.
    • Fix a couple color palette bugs.
    • Record redundant node references in order to reduce boilerplate in ColorConfigEdit.
    • Add a ColorRect to indicate the current color in ColorConfigEdit.
    • Update characters to use the new ColorConfig class.
    • Replace obsolete ColorParams usages with ColorConfigs.
    • Add a checkered pattern behind the ColorConfigEdit ColorRect.
    • Move color defaults out of palette classes and into the new color-defaults classes.
    • Update get_direct_property_map access to filter on Color/ColorConfig values, so we can define individual hue/saturation/value/opacity variables in the same file that we define color variables.
    • Insert default-colors into framework manifest-schemas.
    • Remove the now-redundant SurfacerPalette.
    • Fix PaletteColorConfig overrides.
    • Fix a typo in some color keys.
    • Fix a bug with StaticColorConfig independent hsv component assignment.
      • If the HSV is 0,0,0, and you then try to assign the S to be 0.5, that assignment won’t actually do anything, because 0,0.5,0 is the same color as 0,0,0.
      • So if you are trying to change both S and V, they need to be assigned at the same time, or my StaticColorConfig class needed to be smarter about recording the intended component values.
    • Fix a color-config sampling bug.
    • Fix a regression with the registration of the color-config property-editor.
  • Lots of miscellaneous framework stabilization work:
    • Rename and move plugin-accordion files.
    • Add a function for accessing Godot’s internal editor icon textures.
    • Add logic to populate a single global annotation parameters dictionary with all of the different default values.
    • Remove obsolete/redundant SurfacerAnnotationsManifest.
    • Insert default annotation parameters into manifest schemas.
    • Update _get_common_overrides_for_annotations_mode to be DRY.
    • Update MultiNumberEditor and subclasses to support updating the control values from outside the UI.
    • Create a reusable reset-button widget.
    • Add support for tracking whether a manifest-row value has been changed from the default, and for resetting it back to the default value.
    • Fix logic for tracking is_changed for manifest array nodes when children are added and removed.
    • Add support for only saving to JSON manifest values that have been changed from their defaults.
      • This is important because I need these to serve as a clear indication of what has actually been changed by the user.
    • Refactor manifest logic to save all manifests a single file, with a configurable path.
    • Remove extra root nodes under each framework panel.
    • Add a SquirrelAwayDefaultColors class, to make it easier to quickly set up new colors.
    • Add support for multi-line text edits in the plugin manifest UI.
    • Move some Surfacer configuration from the old manifest pattern to the new on.
    • Add support for subtractive manifest overrides in addition to the additive ones.
    • Move framework metadata and schema files from plugin/ to config/.
    • Move the configuration of extra profiler metric keys into framework metadata files.
    • Move some configuration from framework global to framework schema.
    • Move some files from config/ to global/.
    • Add a new custom schema type for PackedScene.
    • Update to Godot v3.5-beta3.
    • Add a check that all required plugins are enabled.
    • Remove direct references to Sc from FrameworkPlugins.
    • Improve label styling for MultiNumberEditors.
    • Update welcome-panel-item manifest configurations to use const variables, so they can be targeted by subtractive overrides.
    • Add a general-purpose array-dedup function.
    • Fix a long-standing off-by-one-error bug in my json custom type decoding.
    • Fix annotation parameter configuration.
    • Update utility functions to support cascading operations.
    • Fix annotation parameter configuration.
    • Fix sound configuration.
    • Rename FrameworkMetadata to PluginMetadata.
    • Fix SurfaceMark removal to not happen while parsing the platform-graph on demand at play-time.
    • Fix a bug with Surfacer profiler metric preregistration.
    • Update input-map configurations to use new physical_scancode support.
    • Update bootstrapper repo with all of the recent framework changes.
    • Debug issues with schema setups being too coupled with SquirrelAway.
    • Fix a regression in Time labels from when I'd renamed the Time class.
    • Fix a regression with json values being treated as floats instead of ints.
    • Start adding a fix for calculating more-successful fall-from-in-air-position trajectories.
    • Fix a start-velocity max-speed calculation bug.
    • Add support for configuring whether the game window should be moved to the other monitor during local development.
    • Refactor frameworks to support dynamic re-assignment of the player-controlled-character.
    • Fix exclamation-mark annotation positioning.
    • Add support for configuring characters to never navigate to in-air destinations.

What's next?

  • Rate and review other Ludum Dare games.
  • A small handful of additional framework and plugin fixes.
  • A little more work to make my corner-match autotiling system more presentable as a stand-alone package.
  • Publish new and updated packages in the Godot Asset Library.


🎉 Cheers!


This is a simple icon representing my sabbatical.

Comments