Changelog

17.5.0 (next release)

  • Custom C++ flags can be specified in the project's Makefile.
  • Spelling mistakes corrected.

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.