Changelog

18.2.0 (next release)

18.1.0

18.0.1

Tools no longer crash on Windows with more than 60 logical CPU cores.

18.0.0

17.9.0

17.8.1

17.8.0

17.7.0

17.6.0

17.5.0

17.4.0

17.3.0

17.2.0

17.1.1

bn::unique_ptr move fixed.

17.1.0

17.0.0

16.6.0

16.5.0

  • Big maps allow wrapping (they can now be moved beyond their boundaries).
  • Stack trace logging on error messages can be enabled with the STACKTRACE makefile variable.
  • Stack trace demangle can be enabled with BN_CFG_ASSERT_STACKTRACE_DEMANGLE.
  • bn::memory::used_rom added.
  • Import tool can now generate palettes for regular and affine background tiles. See the Regular background tiles and the Affine background tiles import guides to learn how to generate them.
  • GRAPHICS, AUDIO and DMGAUDIO makefile variables accept file and folder paths.
  • bn::audio::dmg_sync_enabled and bn::audio::set_dmg_sync_enabled removed as they don't work properly.
  • bn::time::current 12-hour mode support.
  • agbabi updated to 2.1.6.
  • Old documentation header restored.
  • dynamic_regular_bg example shows how to deal with multiple palette ids.
  • Tiles offset disabled in dynamic_regular_bg and dynamic_affine_bg examples.

16.4.0

16.3.0

16.2.0

16.1.0

  • Sprite affine mats management CPU usage reduced.
  • Music ending detection fixed.

16.0.0

  • bn::sound_handle and sound handle actions added. See the audio example to learn how to stop, release and setup sound effects with them.
  • bn::jingle and jingle actions added.
  • Audio commands generation optimized.
  • Music ending detection fixed.
  • Create new tiles methods deprecated.

15.9.0

  • Same maps with different tiles or palettes supported.
  • Some clangd and Clang-Tidy warnings fixed.

15.8.2

15.8.1

bn::vector::assign fixed.

15.8.0

15.7.1

Python 2 support restored.

15.7.0

15.6.0

  • bn::display::size added.
  • Standard abort implemented.
  • Color-related H-Blank effects update fixed.

15.5.0

15.4.1

bn::core::reset race condition fixed.

15.4.0

15.3.2

BG blocks commit fixed.

15.3.1

Slow game pak detection fixed (again).

15.3.0

15.2.0

  • bn::seed_random added.
  • Standard assert implemented.
  • Thread-safe initialization of local statics disabled.
  • Static destructors fixed.
  • Maps commit optimized by more than 35% in some cases.
  • Palette search optimized by more than 25% in some cases.
  • Big maps commit optimized.
  • Display setup commit optimized.
  • BG blocks and sprite tiles managers ROM usage reduced.
  • map_collision example added.

15.1.0

  • memcmp optimized.
  • Link flags fixed.

15.0.0

14.1.0

14.0.0

13.18.0

13.17.0

13.16.1

bn::ibitset AND operator fixed.

13.16.0

13.15.0

  • Brightness, contrast and intensity color effects optimized.
  • bn::random internal variables are protected to allow child classes to access them.
  • compile_commands.json generation support.

13.14.0

13.13.0

13.12.1

Tonclib linking error fixed.

13.12.0

13.11.0

13.10.1

-flto memset undefined references fixed.

13.10.0

  • memset moved to IWRAM.
  • Backdrop fade blending fixed.

13.9.0

13.8.1

bn::any management with types that can't be copied, moved or swapped fixed.

13.8.0

13.7.0

13.6.0

13.5.0

13.4.0

  • BN_BASIC_ASSERT added.
  • Repeated color palettes reduction can be disabled when importing a regular background. See the Regular backgrounds import guide to learn how to disable it.
  • Unaligned byte memset fixed.
  • Asserts without diagnostic information ROM usage reduced.
  • Input tiles in dynamic_regular_bg and dynamic_affine_bg examples are imported without using a map.
  • Frequently asked questions (FAQ) page improved.

13.3.1

bn::erase and bn::erase_if fixed.

13.3.0

13.2.0

13.1.1

Recovery of deleted background maps fixed.

13.1.0

13.0.0

12.5.0

BN_CFG_ASSERT_SHOW_DIAGNOSTIC added.

12.4.0

  • SRAM magic string fixed.
  • BN_CODE_IWRAM macro can be used for thumb code too.
  • Destructors of classes with _ptr suffix ROM usage reduced.
  • 4BPP regular backgrounds quantization improved.
  • Some error messages improved.
  • Import images guide explains why Usenti is recommended over other image editors.

12.3.0

  • bn::sprite_text_generator variable width fonts rendering fixed and optimized.
  • Sprite shape and size update ROM usage reduced.
  • Some Cppcheck warnings removed.

12.2.0

  • Automatic sprite double size detection fixed.
  • Sprite tiles management optimized (EWRAM and CPU usage reduced).
  • Background tiles and maps management optimized (EWRAM and CPU usage reduced).
  • Color palettes management CPU usage reduced.
  • Sprites and sprite affine mats management CPU usage reduced.
  • Backgrounds management CPU usage reduced.
  • Cameras management CPU usage reduced.

12.1.0

  • Sprite tiles delayed commit fixed.
  • V-Blank interrupt management optimized (EWRAM and CPU usage reduced).
  • Missed link messages frequency reduced.
  • bn::timer::elapsed_ticks optimized.

12.0.0

  • (Breaking change) bn::aligned fixed.
  • Color effects optimized.

11.0.1

bn::string::starts_with and bn::string_view::starts_with fixed.

11.0.0

Huffman images compression support (make sure to update devkitARM before using it).

10.7.0

10.6.1

bn::bitset AND, OR and XOR operators fixed.

10.6.0

10.5.0

10.4.0

  • Avoid data decompression in V-Blank if possible.
  • Audio updates can no longer be interrupted.

10.3.0

10.2.0

10.1.0

  • bn::audio::dmg_sync_enabled and bn::audio::set_dmg_sync_enabled added.
  • Custom assembler flags can be specified in the project's Makefile.
  • GBT Player updated to 4.4.1.
  • bn::fixed, bn::optional, bn::string_view and bn::span are no longer forward declared in the public API.
  • Text color in assert and profile screens improved.
  • Audio volume setup optimized.
  • Clouds restored in world_map example.

10.0.0

  • Custom linker flags can be specified in the project's Makefile.
  • Asserts ROM usage reduced.
  • Audio startup fixed when link-time optimization is enabled.
  • Audio stop fixed when link communication is active.
  • Parallel link-time optimization temporal files ignored and added to the list of files to clean.

9.5.0

9.4.1

BMP files colors count calculation fixed (again).

9.4.0

9.3.0

9.2.0

9.1.1

bn::calculate_sin_lut_value sine and cosine symmetry with 135 and 315 degrees fixed.

9.1.0

9.0.0

8.10.0

8.9.0

  • Hue shift palette effect added. See the palettes example to learn how to use it.
  • Brightness effect ROM usage reduced.
  • bn::sprite_item and bn::sprite_tiles_item size reduced.
  • Automatic sprite double size detection fixed.
  • bn::hbe_visible_toggle_action removed, since it was not possible to use it.
  • Clang build fixes.
  • Clang-Tidy warnings fixed.
  • New games made with Butano added to README.md.

8.8.0

  • Modified assets detection optimized.
  • Audio and graphics tools unified in order to reduce build time.
  • bn::newton_raphson_sqrt removed, since it doesn't work for bn::fixed input values.

8.7.0

  • An external bn::bg_palette_item can be specified when importing regular and affine backgrounds.
  • Colors count can be specified when importing sprite and background palettes.
  • Standard containers equality comparison optimized.
  • Asserts file name hack fixed.
  • Universal GBA Library LGPL license files removed.
  • Standard containers documentation improved.
  • Frequently asked questions (FAQ) page improved.

8.6.0

8.5.0

8.4.0

8.3.0

  • Maps commit optimized by more than 50% in some cases.
  • Integer alignment at minimum enforced in all containers.
  • BG blocks manager and sprite tiles manager commit fixed.

8.2.0

  • (Security issue) Source code files full path is not stored in output ROMs anymore.
  • Some Clang-Tidy and Cppcheck warnings removed.

8.1.0

8.0.0

7.8.0

7.7.0

7.6.0

7.5.1

Audio and HDMA issues when updating at less than 60FPS fixed.

7.5.0

7.4.0

  • Run-length is preferred to LZ77 when choosing best compression mode.
  • Sprites automatic double size mode and affine matrix management fixed.
  • Frequently asked questions (FAQ) page improved.

7.3.0

  • bn::sprite_text_generator can now plot multiple 16x16 variable width characters in a single sprite.
  • bn::sprite_text_generator IWRAM usage reduced.
  • Third party libraries to link can be specified in the project's Makefile.
  • Project's Makefile allows to build source files generated with an external tool. See the external_tool example to learn how to do it.
  • butano-audio-tool.py generates a list of all available music and sound items with their name.
  • audio_player example added.
  • Varooom 3D improved (check its readme.txt file for details).

7.2.0

7.1.1

bn::vector, bn::unordered_map and bn::unordered_set move constructors and assignment operators fixed.

7.1.0

7.0.1

bn::format build fix.

7.0.0

  • Varooom 3D source code and assets added.
  • Maximum number of active H-Blank effects reduced to 6.
  • Common files moved to common namespace.

6.18.0

  • Generated items are now constexpr inline to avoid being copied to every translation unit.
  • Sprites EWRAM usage reduced.
  • Different type backgrounds sorting fixed.

6.17.1

  • bn::sort with 128bit sort keys fixed.
  • IRQs setup during startup improved.

6.17.0

6.16.0

6.15.0

6.14.0

6.13.1

6.13.0

6.12.0

6.11.0

  • An external tool can be called from the project's Makefile. See the external_tool example to learn how to call it.
  • Affine background tiles offset optimized.
  • Big numbers to string conversion optimized.
  • 32bit integer division optimized.
  • 64bit integer division by 0 assert added.
  • Big maps maximum valid position fixed.
  • Compressed tiles warning fixed.
  • GCC11 warning fixed.
  • Some 8x8 sprite text characters fixed.
  • Qt Creator setup guide added.
  • More questions added to Frequently asked questions (FAQ) page.

6.10.0

  • dynamic_bg example added.
  • Affine background tiles offset fixed.

6.9.0

  • bn::sprite_font supports all sprite shapes and sizes.
  • Trivial type containers destruction optimized.
  • Container destructors are always noexcept.
  • Redundant container asserts removed.
  • GPIO direction register setup.

6.8.0

  • Sprites optimized.
  • Blending optimized.
  • Mosaic optimized.
  • Internal memory transfers optimized.
  • texture_polygons example affine parameters fixed.
  • Clouds removed from world_map example.

6.7.0

  • Automatic sprite double size detection improved.
  • Butano Fighter allows to disable rumble in the title menu.

6.6.2

Automatic sprite double size detection fixed.

6.6.1

BG blocks manager use after move fixed.

6.6.0

  • SRAM memory usage reduced.
  • Sprite animate actions memory usage reduced.
  • Missing asserts added to some actions.
  • bn::random is now a trivial class.
  • BG blocks manager search fixed.
  • world_map example frame rate back to 60FPS.

6.5.0

6.4.0

6.3.0

6.2.0

6.1.0

  • Sprite tiles generation outputs sprite shape and size.
  • BN_ASSERT and BN_ERROR can be modified or disabled for specific code sections.
  • Sprites IWRAM usage reduced.
  • Some internal asserts removed.
  • Profiler screen fixed.
  • Documentation explains how to place data in ROM.

6.0.0

5.3.1

bn::atan2 and bn::degrees_atan2 fixed.

5.3.0

5.2.0

5.1.0

5.0.0

4.4.0

  • bn::sprite_font allows to specify space between characters.
  • Background palettes bits per pixel mode can be specified by the user.
  • Palettes change optimized.
  • Unused palette colors are not imported anymore.
  • bn::sprite_ptr::set_tiles() validation fixed.

4.3.0

  • H-Blank effects EWRAM usage reduced (more than 2KB by default).
  • Optimization level changed to -O2 to avoid another No$gba crash.
  • SRAM code moved back from ROM to EWRAM, since doing that doesn't make No$gba crash anymore.
  • Redundant reset code removed.

4.2.0

  • Sprite and background palettes can be generated from images alone, without tiles or maps.
  • <cstddef> is always included (bn_cstddef.h header file removed).
  • bn::unordered_map and bn::unordered_set assignment fixed.

4.1.0

  • H-Blank effects optimized (it fixes world_map example flickering).
  • SRAM code moved from EWRAM to ROM to avoid a No$gba crash.

4.0.0

3.3.0

  • HDMA properly supported (now it works at less than 60fps). See bn::hdma and the hdma_polygons example for more.
  • gba-link-connection remote timeout detection fixed.

3.2.1

bn::optional build fix.

3.2.0

bn::optional is now constexpr.

3.1.0

3.0.0

Thanks to the awesome gba-link-connection, multiplayer support has been implemented! See bn::link and the link example for more.

2.0.0

  • By removing some method overloads, lots of runtime asserts when creating resources have been removed.
  • bn::palette_bpp_mode has been renamed to bn::bpp_mode and bpp_mode() methods have been renamed to bpp().
  • 8 bits per pixel background tiles allocation fixed.

1.0.0

0.4.0

  • btn renamed to bn. No more API breaks will be made between minor releases after 1.0.0, promise.
  • Background tiles manager status can be printed in the log with bn::bg_tiles::log_status(). This is done automatically when a non-optional background tiles allocation fails too.
  • Background regular maps manager status can be printed in the log with bn::bg_maps::log_status(). This is done automatically when a non-optional regular background map allocation fails too.
  • Sprite tiles manager status can be printed in the log with bn::sprite_tiles::log_status(). This is done automatically when a non-optional sprite tiles allocation fails too.
  • Color palettes managers status can be printed in the log with bn::bg_palettes::log_status() and bn::sprite_palettes::log_status(). This is done automatically when a non-optional color palette allocation fails too.
  • Sprites destruction optimized.
  • Setters with an optional parameter added to some classes.
  • Optional components documentation fixed.
  • Other documentation improvements.

0.3.0

  • Sprites update performance improved up to 30% in Butano Fighter thanks to avoid rebuilding sprites list as much as possible.
  • Profiler can show the maximum measured ticks per entry.
  • Assets tools print output binaries size.

0.2.0

  • Performance improved up to 12% in Butano Fighter without -flto thanks to using less build translation units.
  • Documentation improved.

0.1.0

First release.