FlatRedBall Versions Save

Cross-platform 2D game engine focused on ultimate productivity built in .NET

April_6_2024

1 month ago

Note - releases no longer include binaries in the release notes. Download the latest version here: https://docs.flatredball.com/flatredball

Biggest Changes

  • FlatRedBall iOS and Android have been updated to .NET 8. This adds support for the latest C# syntax, improves performance, and allows targeting iOS 17.
  • The main four templates (FRB MonoGame DesktopGL .NET 6, FRB FNA .NET 7, FRB iOS .NET 8, and FRB Android .NET 8) now use nuget packages for the main FlatRedBall library rather than relying on the embedded .dll.
  • FlatRedBall no longer does ToLower when loading any files. This means that all file caching is now case sensitive, although dictionaries still do case insensitive checking. This is a huge improvement and makes Linux builds way more compatible with PC builds.
  • Lots of improvements to the embedded AnimationEditor including:
    • Horizontal and Vertical flipped sprites
    • Separate top and bottom window zoom values
    • Added guides support
    • Added frame relative X/Y display
    • Started adding shapes (circle) rendering in bottom window
  • New "Variants" can be used to communicate entity types throughout project, and new variants can even be created dynamically in code! This makes it easier to work with multiple types of entities and lets games work with dynamically-created entity types as if they were code generated.
  • Huge improvements to Forms DialogBox including automatic truncation, automatic paging, and styling.
  • Top down animation controller which functions similarly to the Platformer animation controller. This makes it much easier to create top-down animated characters, and will be used in future updates with default top down animated characters.
  • Big improvements in bitmap font (.fnt) parsing, making large character sets (such as Chinese) much faster to load in-game.
  • FRB now (mostly) builds and deploys through Github Actions, making it easier to maintain in the future compared to TeamCity.

Everything Else

FRB Editor

  • Significantly reduced the number of tasks running when a file changes.
  • Slight improvement in new project wizard speed from file watch improvements
  • When creating a custom project through the wizard (as opposed to platformer or top-down), the resolution display text now shows the effective resolution to avoid confusion
  • Right-click on file now says "Remove" instead of "Delete" since the file can be removed without being deleted
  • Fixed possible crash on TMX renaming
  • Fixed bad label on Top Down movement values saying "Speed Up" twice
  • Fixed a number of crashes related to right-click menu changes
  • Entities are no longer (by default) destroyed when colliding and dealing damage. This solves a variety of confusing behaviors for new users when working with IDamageArea
  • Added InvulnerabilityTimeAfterDamage to IDamageables in editor. This is optionally generated
  • Fixed bug where new windows can appear off-screen when using multiple monitors of different scale %.
  • Fixed drag+drop of file from Global Content Files into subfolder caused by file cache not being cleared.
  • Fixed polygon points not showing up inside a TileNodeNetwork when its Visible was set to true
  • Added right-click option to copy code name of a file
  • Pause ignore of entire Gum file (screen) is now supported, allowing an entire Gum object to suppress pausing

Edit Mode

  • Making a change to ODS (used for CSV) no longer fully restarts the scree - it can now be hot-reloaded.
  • Fixed crash when viewing an abstract entity
  • Fixed crash when adding a new Polygon
  • Improved selection so that items inside an entity instance are no longer selectable when doing a rectangle drag
  • Lots of unneeded code has been removed for UWP and Windows 8
  • Added new InputDeviceSelector - a Forms object similar to input selection on Switch
  • Generated code removes top down and platformer entities if they are no longer used by the project
  • Disabling live edit now properly removes all files.
  • Fixed problems with variants (formerly "Type") including statics, not set by derived, and top-down values.
  • Fixed bug where \n character was inserted into the PasswordTextBox when pressing the Enter key.
  • Removed confusing toggle for using content pipeline on right-click
  • New XML docs throughout engine
  • Automated Test Project updated to work with latest code
  • Improved Gum Sprite animations when using .achx so they "just work" in more cases
  • Time-related states are reset when changing Sprite animation chains (thanks @mfigueirido )
  • Added null check on MoveToScreen to provide more informative errors
  • Added custom coloring to nodes in NodeNetwork (thanks @mfigueirido )
  • Added FloatRectangle.IsPointInside (thanks @mfigueirido )
  • Allow TimeFactor=0 without throwing exception in generated code for double-activity calls (thanks @mfigueirido )
  • Fixed possible crash loading .TMX files with null groups.

New Project Templates and Forms

  • Added new .NET 8 templates for iOS and Android
  • Added new sample project for FlatRedBall.Forms
  • Simplified Game1 by removing 30 fps on mobile and code for Windows_8.

February_1_2024

3 months ago

Biggest Changes

  • Spine support!!! You can now add Spine to your projects. Full documentation available here: https://docs.flatredball.com/flatredball/spine
  • Added AchxToSpineAtlas project for converting .achx files to .atlas files. This includes contributions made by @profexorgeek
  • FlatRedBall Engine .dlls now include a syntax version number property. This will be used to compare the .gluj file version for safer upgrading and better diagnostics.
  • Content loading and caching at the engine level is now case insensitive - this greatly simplifies loading files on case-sensitive platforms like Linux, and will make cross-platform projects even easier to maintain.
  • IDrawableBatches now have their Update methods called earlier in the frame before Update/Activity so that changes to these objects are available on the frame they occur to custom code. This is useful for Spine animations which can update collision.
  • IDamageable now has IsDamageReceivingEnabled and InvulnerabilityTimeAfterDamage ( thanks @treesgobark )
  • IDamageArea now has IsDamageDealingEnabled ( thanks @treesgobark )

Everything Else

FRB Editor

  • Linking a game to FRB source now works correctly if the game is not on the same directory as the FRB/Gum repository
  • The Create New Plugin window now appears where the cursor is located
  • Variables on objects which come from files now can have hard defaults if the variable is not inherited from the file. For example, scale values on SpineDrawableBatch.
  • Fixed possible crash on right click + drag treenode
  • Fixed bug with song Set Volume checkbox not being saved to disk
  • Re-added alt+arrow on Files to reorder files. This is needed for Spine file loading order
  • Improvements to the Add Event window, including appearing at the right location and displaying source objects when drag+droping
  • Fixed the auto-generation of event names in the event window to properly consider tunneled object and selected event name
  • Added support for .fxb files (compiled shaders for FNA)
  • Fixed error output when drag+dropping a file into global content (made it run through a task)
  • Output from build tools is now scanned for "warning" to identify if output that was put in the error stream really should be a warning (fxc)
  • Removed slashes next to the search bar which explained the use of f, e, s, o, and v for filtering searches
  • Refreshing font cache now shows the command line that is called for better diagnostics
  • Refreshing font cache now updates font menbership in the project, increasing the chances of the game project staying up to date to font changes
  • The default variable display on an object that comes from Gum now properly performs recursion to find the true value if inheritance is involved
  • Adding FRB source to a game now handles existing project references better by attempting to remove them from the .sln first
  • Adding or removing favorite projects now updates the project menu in realtime
  • FRB Editor now warns you if you have the same plugin installed at the project level and globally - this can help diagnose problems when building new plugins
  • Added diagnostics about the mgcb version on a machine, useful if MG 3.8.0 is installed instead of 3.8.1
  • Pressing ENTER on polygon window now commits the changes
  • Fixed "object stripping" bug related to having 3 levels of inheritance. This effectively solves a bug SetByDerived would get reverted
  • Fixed "object stripping" bug where HasPublicProperty was ignored when determining what to strip
  • Fixed spacing and newlines on popup about removing instances.
  • Fixed possible crash when pressing STOP on song playing in the FRB Editor
  • Fixed NAudio codegen bug when an NAudio mp3 is marked as LoadedOnlyWhenReferenced = true
  • Fixed selection bug when toggling between Variables on an entity and the Entities folder not refreshing the Variables tab
  • Fixed codegen bug when copy/pasting an entity and types were generated as doubles instead of floats
  • Fixed codegen bug when generating states for colors tunneled on shapes ( thanks @treesgobark )
  • Fixed codegen bug when Gum instances referenced states that have been removed from their source component

Edit Mode

  • Fixed bug where objects could be incorrectly grabbed+moved in edit mode
  • Added more diagnostics when going into edit mode - outputting the exception if there is one
  • FRB Editor can now zoom to 7500% and 10000%
  • Added support for .fxb in ContentManager.Load
  • ShapeCollectionSave.SetValuesOn now updates shapes immediately, useful for diagnosing debugging problems when using animation shapes
  • NAudio songs no longer support values less than 0
  • Calling Sprite.PlayAnimationsAsync now forcefully sets this.Animate = true if any animations are passed in
  • Changing the slider on the Forms SettingView now sets the the entire AudioManager's MasterSongVolume

New Project Templates and Forms

  • Default Forms Slider now has Highlighted and HighlightedFocus states
  • Default Forms CheckBox HighlightedFocusedOff now properly has the check invisible

Full Changelog: https://github.com/vchelaru/FlatRedBall/compare/Jan_14_2024...February_1_2024

Jan_14_2024

4 months ago

Biggest Changes

  • Added AudioManager.Play(SoundEffectInstance) which plays using the master volume
  • Added PositionedObjectGueWrapper SetSprite and SetCollision, simplifying

Everything Else

  • Platformer entity IsOnGround set before JumpAction is raised so that the action can test if performing a jump on ground or double-jump
  • Adding new platformer variables immediately refreshes the dropdown in the Variables tab
  • Changing a variable's scope to private now asks whether to remove instances of the variable assignment
  • Fixed possible threading issue when updating a TSX file
  • Fixed Gum code generator not adjusting which version-specific properties are assigned when switching between projects with different file versions
  • Fixed possible crash when editing Polygon points in edit mode
  • Value sliding (click on label and slide) now works much better - but there's still more improvements to be made
  • Entities which implement IVisible, but have not set their Visible property now show a default of true, matching the value in code
  • Copy/paste of entities which are defined by base now supported
  • Fixed case where incorrect variable type was assigned on instances of entities

Full Changelog: https://github.com/vchelaru/FlatRedBall/compare/December_31_2023...January_14_2024

January_14_2024

4 months ago

Biggest Changes

  • Added AudioManager.Play(SoundEffectInstance) which plays using the master volume
  • Added PositionedObjectGueWrapper SetSprite and SetCollision, simplifying drawing FRB Sprites from Gum object positions. Also, this simplifies the setting of collision shapes from Gum object positions.

Everything Else

  • Platformer entity IsOnGround set before JumpAction is raised so that the action can test if performing a jump on ground or double-jump
  • Adding new platformer variables immediately refreshes the dropdown in the Variables tab
  • Changing a variable's scope to private now asks whether to remove instances of the variable assignment
  • Fixed possible threading issue when updating a TSX file
  • Fixed Gum code generator not adjusting which version-specific properties are assigned when switching between projects with different file versions
  • Fixed possible crash when editing Polygon points in edit mode
  • Value sliding (click on label and slide) now works much better - but there's still more improvements to be made
  • Entities which implement IVisible, but have not set their Visible property now show a default of true, matching the value in code
  • Copy/paste of entities which are defined by base now supported
  • Fixed case where incorrect variable type was assigned on instances of entities

Full Changelog: https://github.com/vchelaru/FlatRedBall/compare/December_31_2023...January_14_2024

December_31_2023

4 months ago

Biggest Changes

  • Added ability to assign animations based on platformer input
  • Added support for Gum BBCode text styling
  • Added CameraControllingEntity.IsKeepingTargetsInView useful for preventing players from leaving the gameplay area
  • When creating a new project, the last location is remembered
  • MapDrawableBatch object can now be created from TMX files in Screens
  • Added CameraControllingEntity.ShakeUntil
  • CameraControllingEntity.ShakeScreen now returns a Task
  • Added Alt+Arrow reordering of bookmarks
  • Added Sprite.UpdateToAnimationFrame

Everything Else

  • Fixed Help->Tutorials link pointing to old docs
  • Setting a variables as Private now shows a message box if the variable is SetByDerived
  • Removed TopDownValues being generated in a derived Entity's *Type object, causing null reference exceptions on access
  • Removed lots of event calls when sorting PositionedObjectLists, improving speed and fixing possible bugs
  • Fixed bug where adding a Gum object to non-IScalable entity treated the entity as if it had a width and height of 32
  • Game <-> FRB Editor communication only enabled in Debug to make it easier to measure performance in release
  • Removed a lot of foreach calls on PositionedObjectLists to reduce allocation
  • Added Forms ListBox.DoListItemsHaveFocus setter
  • Fixed polygons created through TMX files not being created as counterclockwise when flipped
  • Copy/paste now selects newly-created object
  • Fixed possible crash in DoPartitionedYCollision when removing more than one object in a collision method
  • Switching between types that can and can't use content pipeline is now handled better in csproj management
  • Fixed crash when passing relative path to NAudio Song creation
  • Fixed incorrect edit-mode highlighting when in edit mode
  • Right click, Add Folder/Entity now have icons
  • Removed "Call Activity" checkbox on SpriteList since sprites don't have an activity
  • Derived objects can no longer specify different partitioning than their base
  • No longer show option of whether to destroy first on damage vs always if second is not IDamageable.
  • Clearing a gamepad now clears the vibration motor setting, now stopping vibration when exiting a screen
  • Adding a new variable after cancelling a build no longer re-starts the build
  • Fixed possible crash accessing user's culture
  • Copy/paste instances does better about respecting the copied object's list
  • Fixed possible file access error when updating libraries (added try multiple times)
  • Setting an object's SetByDerived now sorts it properly in all derived implementations
  • Right-click option in the Bookmarks now says "Remove from Favorites" rather than "Delete" to avoid confusion
  • Gum Standard object codegen now respects version, re-enabling properties that were previously disabled, such as IgnoredByParentSize
  • Increased json.net version added from 12.0.3 to 13.0.3
  • Removed options from new project wizard about camera behavior when player and tiled maps aren't added
  • Added another error check when performing merging on Tile layers
  • EditorVisuals.ColoredRectangle now respects the argument Text object's VerticalAlignment.
  • Fixed possible crash when drag+dropping File into Objects folder under an entity
  • Added AnimationChain.GetTimeAtFrameIndex
  • Fixed possible error in About window
  • Added Vector3.FromAngleDegrees
  • Fixed codegen error when creating collision relationships between two individual objects (no lists)
  • Fixed crash in plugin creation window
  • Improved startup speed related to refreshing errors
  • Fixed recent file window not refreshing when it should
  • Fixed bugs related to switching between two projects while tasks are still going.
  • Renamed CameraControllingEntity CurrentZoom with ViewableAreaMultiplier
  • Fixed possible crash in the update window when downloading new dlls
  • Fixed codegen bug with .Forms

Full Changelog: https://github.com/vchelaru/FlatRedBall/compare/November_26_2023...December_31_2023

November_26_2023

5 months ago

Biggest Changes

  • Added keyboard (CTRL Key) movement to the PNG preview window
  • Collision tab when selecting a List object now shows the physics type in the relationship list
  • When no projects are loaded, all toolbars along the top are hidden
  • Added LocalizationManager.TranslateMulitple forcedLanguage optional parameter for translating multiple rows for a custom column. This is useful for things like setting the speaker on a dialog box
  • Added Xbox360GamePad ButtonDown, ButtonPushed, ButtonReleased, ButtonRepeatRate, IgnoreButtonForOneFrame, and GetButton which takes a ButtonPosition.
  • Static (shared) variables in entities can now be SetByDerived = true
  • FRB now supports Tiled maps with Tiled layers
  • Added button in Build tab output for deleting all output
  • Added new properties to CameraControllingEntity to control movement type - now it supports ConstantSpeed along with the old Smooth logic.
  • Added sequences of animations support to AnimationLayer.
  • Added Polygon.KeepThisInsideOf and ShapeCollection.KeepThisInsideOf, useful for keeping objects in screen.

Everything Else

  • Various fixes to FNA with live edit
  • Added Vector2.AngleDegrees extension methods
  • XML documentation added to various Vector2 and Vector3 extension methods
  • Removed MonoGame content build task from DesktopGL6 template - we don't use it, and it can cause compile errors
  • FRB FNA live edit now properly handles enum assignment
  • Numerous fixes in the TreeView not properly selecting items or updating right-click menu
  • CameraControllingEntity no longer zooms too close to view - it will not go closer than the default zoom even if the map is too small
  • Wizard is no longer "Glue" wizard in the UI.
  • Event export file lock no longer produces an error - it's usually not a big deal so we just output info without an error.
  • Fixed Gum not properly adding custom code files for Forms objects at times.
  • Fixed possible crash when exiting a screen on the same frame as a toast object being removed.
  • Fixed Keyboard.IsShiftDown ignoring right shift
  • Sprite no longer suppresses the TaskCancellationException on AnimateAsync
  • Fixed a number of bugs related to .gluj saving which could result in UI not properly displaying values
  • Fixed possible crash when assigning Target (single) on CameraControllingEntity
  • Added additional codegen checks on version numbers so that the older multi-player platformer project works.

Huge thanks to @Arcnor for getting Github Actions setup.

November_9_2023

6 months ago

Biggest Changes

  • FNA project (experimental) is now available in the new project creation
  • Big improvements in parallax with zooming cameras

Everything Else

  • Fixed Gum Sprites not showing their correct texture coordinates when using AnimationChains
  • Fixed CameraControllingEntity showing area outside of Map bounds when zooming
  • Fixed Lerp on the Y axis bug in CameraControllingEntity
  • Fixed bug where locked objects could be selected in edit mode with a rectangle selection
  • AnimationEditor now has an Add Circle option in the Add dropdown menu
  • More XML documentation in engine
  • Removed unused IncludeIIVisible property on FRB Objects

Full Changelog: https://github.com/vchelaru/FlatRedBall/compare/November_1_2023...November_9_2023

November_1_2023

6 months ago

Biggest Changes

  • FlatRedBall works on FNA - currently requires from-source setup (thanks to @Arcnor )
  • Lots of work improving FNA and AOT compiling support ( thanks to @Arcnor and @mfigueirido )
  • Gum now uses System.Drawing.Color and System.Numerics.Vector2/3 in Gum instead of XNA types. This makes Gum more portable to non-XNA platforms (MAUI, SDL, Unity, etc) (thanks to @Arcnor )
  • Add source command to project is now supported in more project types (Android, iOS, and even XNA4)
  • If Edit Mode is added to a game, variable changes are applied even if not in edit mode, enabling faster iteration
  • Big improvements in Gum layouts when moving between run and edit mode
  • Added bottom preview window for embedded animation editor including previewing shapes (thanks to @zdman2022 )
  • When creating a new project, FRB will check for FlatRedBall and Gum repositories and offer to link new game to source if they are found
  • Recent Files now shows the game's icon
  • Layers can now be re-ordered in live edit
  • New Platformer projects have a wall slide animation built in
  • Glue control code is now only generated if edit mode is enabled, removing tons of bloat
  • Added ability to create new projects from local templates instead of only templates online - useful for testing new platforms
  • FRB Editor supports localization ( thanks to @Lucasharskamp )

Everything Else

  • Lots of warnings fixed in the FRB Editor (Glue with All.sln)
  • AnimationEditor binaries now checked in to repository so users don't have to build this on their own with VS2019
  • Fixed Tiled map merging when the map is sorted on Y axis (tall maps) and the map uses animated tiles
  • FRB UWP has been removed from the new project options
  • Adding a new abstract screen (usually GameScreen) shows warning immediately rather than requiring FRB restart
  • FRB Editor is now smarter about reporting duplicates in csproj files
  • FlatRedBall Editor Wizard now checks for Gum presence before running, and gives a warning if it is missing
  • Viewport changing due to render target layers is now reset back to previous viewport
  • Popup windows now position correctly when display is not 100%
  • Fixed some UI thread deadlocks in FRB Editor
  • Fixed error where CameraControllingEntity can get null added to a list.
  • Fixed overflowing text in textbox that shows when setting an Entity to IVisible
  • Objects defined by base now have a new icon
  • Fixed bug causing custom slider min/max values to reset
  • Fixed Live Edit crash when moving an object from one layer to another
  • Pressing DEL now deletes a file from current files list
  • Added right-click option on Collision Relationships node to add new collision relationship
  • Added right-click option on Layer node
  • Improvements in game going into edit mode to reduce the chances of lost commands
  • GameScreen always shows Layer and Collision nodes since that's the most common place where these are added
  • New icon shown in the loading window
  • Added *.user.* to default gitignore
  • Missing csproj files are removed from recent files
  • Added checkbox to call activity on List creation, which is checked or unchecked depending on whether the entity type is derived. This can reduce the chances of double-activity calls. This includes a display of the reason for the activity call.
  • Fixed partitioning bug causing collisions to be excluded from checks incorrectly
  • Added EditorVisuals.ColoredRectangle which can surround a Text object to improve readability of debug displays.
  • Improved FRB Editor display on high DPI displays
  • Improvements in detecting .NET SDK location
  • Double-clicking .achx file now searches for AnimationEditor in default location (unzipped FRBDK) so setting windows file associations is not required.
  • Lots of improvements to linking game to source
    • Removed old menu items and replaced them with a single menu item which is enabled/disabled according to whether the project type supports linking to source
  • FRB Editor can now find the running .exe if its name does not match the .gluj name
  • Merging empty layers is now handled more gracefully
  • Improved error reporting on TMX files when merging and textures do not match between the two layers

September_17_2023

7 months ago

Biggest Changes

  • Fix compile errors on Android/iOS/.NET 4.7 projects due to missing effect manager.
  • Added right-click option for adding derived entity on entity
  • FlatRedBall.Forms DialogBox now can skip printing with a B press
  • Added icon to indicate whether game is connected to FRB Editor

Everything Else

  • Removed confusing popup about X/Y/Z variables when deriving from a base entity which does not have X/Y/Z
  • Improved handling of Byte type with sliders and in edit mode
  • Added support to run project in edit mode even if the .exe is renamed in
  • Gum fonts now rebuild on project load
  • Fix renaming shape in ShapeCollection
  • FlatRedBall Editor can now handle Game classes other than Game1.cs
  • Build in FlatRedBall Editor can now be release
  • Crash fix on F12

September_13_2023

8 months ago

Biggest Changes

  • Added new Profiling tab in FRB Editor
  • Added dedicated collision tab under profiling tab
  • Auto size partitioning now considers sprite animation shapes
  • Added checkbox in FRB Editor to automatically set collision from a sprite's animation
  • Added Sprite.SetCollisionFromAnimation to simplify updating ICollidable collisions from the current animation
  • Huge improvements to render target handling in FRB Editor including..
    • Sprites being able to reference a render target as their texture
    • Layers being able to reference render targets in FRB Editor UI (no longer requiring code)
  • Added new update button in the about page

Everything Else

  • Fixed possible crash due to render break reporting on screen transition
  • Added I2DInput.Position2D and Position3D
  • More EditorVisuals.Sprite overloads to simplify drawing sprites
  • IsEditingLocked now respects inheritance during live edit
  • Fixed AnalogStick as d pad repeat rate applying every frame
  • Fixed bug in IDamageable implementation applying the wrong damage
  • Setting nullable bool values in live edit no longer restarts the game
  • Better duplicate file error reporting in FRB Editor
  • Added codegen check for double-activity call
  • Added AudioManager.PlayAsync
  • Fixed bug where codegen wouldn't occur on add/delete screen
  • Variable reordering is faster now and properly sets icons
  • Fixed closing drag+drop dialog from collision relationships unintentionally creating relationship (thanks @treesgobark )
  • Added drag+drop entities from one list to another (thanks @treesgobark )
  • Improved stacked cloud collision physics on platformer
  • Added check when merging layers to see if textures differ
  • Derived objects now have lower weight in search box
  • Derived objects which are lists now have their own icon
  • Added ability to copy/paste states in Screens/Entities
  • Fixed cut-off text in Collision Relationship UI
  • Fixed numerous bugs in FRB Editor where assigning values was not persisting - specifically around setting a variable's custom displayer
  • Lots of comments clarifying how partitioning works in code
  • Fixed bug with SpriteManager.MoveLayerAboveLayer (thanks @treesgobark )
  • Added "ZeroInput" support in platformer input UI
  • Improved diagnostics when drag+dropping on list on another which cannot create a collision relationship
  • Setting Color Operation to default no longer restarts live edit (thanks @treesgobark)
  • Lots of information added to collision performance output
  • If an item has no name, its type is displayed in the render break output
  • RenderBreak output now combines multiple identical render breaks to reduce output size on apps with lots of render breaks
  • Fixed various crashes in the FRB Editor