diff --git a/butano/include/bn_documentation.h b/butano/include/bn_documentation.h index f66bdd98f..c587e2295 100644 --- a/butano/include/bn_documentation.h +++ b/butano/include/bn_documentation.h @@ -2160,6 +2160,7 @@ * * * bn::display::size added. * * Standard abort implemented. + * * Color-related H-Blank effects update fixed. * * * @section changelog_15_5_0 15.5.0 diff --git a/butano/src/bn_bg_palette_color_hbe_handler.h b/butano/src/bn_bg_palette_color_hbe_handler.h index a81dfee37..d61d6a073 100644 --- a/butano/src/bn_bg_palette_color_hbe_handler.h +++ b/butano/src/bn_bg_palette_color_hbe_handler.h @@ -29,7 +29,14 @@ class bg_palette_color_hbe_handler [[nodiscard]] static bool target_updated(intptr_t target_id, void*) { - palettes_bank::commit_data commit_data = palettes_manager::bg_palettes_bank().retrieve_commit_data(); + const palettes_bank& bg_palettes_bank = palettes_manager::bg_palettes_bank(); + + if(bg_palettes_bank.global_effects_updated()) + { + return true; + } + + palettes_bank::commit_data commit_data = bg_palettes_bank.retrieve_commit_data(); if(int count = commit_data.count) { diff --git a/butano/src/bn_bg_palettes_transparent_color_hbe_handler.h b/butano/src/bn_bg_palettes_transparent_color_hbe_handler.h index add76aa4d..358ad8628 100644 --- a/butano/src/bn_bg_palettes_transparent_color_hbe_handler.h +++ b/butano/src/bn_bg_palettes_transparent_color_hbe_handler.h @@ -28,7 +28,14 @@ class bg_palettes_transparent_color_hbe_handler [[nodiscard]] static bool target_updated(intptr_t, void*) { - palettes_bank::commit_data commit_data = palettes_manager::bg_palettes_bank().retrieve_commit_data(); + const palettes_bank& bg_palettes_bank = palettes_manager::bg_palettes_bank(); + + if(bg_palettes_bank.global_effects_updated()) + { + return true; + } + + palettes_bank::commit_data commit_data = bg_palettes_bank.retrieve_commit_data(); if(commit_data.colors_ptr) { diff --git a/butano/src/bn_palettes_bank.cpp.h b/butano/src/bn_palettes_bank.cpp.h index 238038f10..c0ec4f8f9 100644 --- a/butano/src/bn_palettes_bank.cpp.h +++ b/butano/src/bn_palettes_bank.cpp.h @@ -466,17 +466,7 @@ void palettes_bank::set_brightness(fixed brightness) if(update) { - _update = true; - _update_global_effects = true; - - if(output_brightness.data()) - { - _global_effects_enabled = true; - } - else - { - _check_global_effects_enabled(); - } + _on_global_effect_updated(output_brightness.data()); } } @@ -490,17 +480,7 @@ void palettes_bank::set_contrast(fixed contrast) if(update) { - _update = true; - _update_global_effects = true; - - if(output_contrast.data()) - { - _global_effects_enabled = true; - } - else - { - _check_global_effects_enabled(); - } + _on_global_effect_updated(output_contrast.data()); } } @@ -514,17 +494,7 @@ void palettes_bank::set_intensity(fixed intensity) if(update) { - _update = true; - _update_global_effects = true; - - if(output_intensity.data()) - { - _global_effects_enabled = true; - } - else - { - _check_global_effects_enabled(); - } + _on_global_effect_updated(output_intensity.data()); } } @@ -535,17 +505,7 @@ void palettes_bank::set_inverted(bool inverted) if(update) { - _update = true; - _update_global_effects = true; - - if(inverted) - { - _global_effects_enabled = true; - } - else - { - _check_global_effects_enabled(); - } + _on_global_effect_updated(inverted); } } @@ -559,17 +519,7 @@ void palettes_bank::set_grayscale_intensity(fixed intensity) if(update) { - _update = true; - _update_global_effects = true; - - if(output_intensity.data()) - { - _global_effects_enabled = true; - } - else - { - _check_global_effects_enabled(); - } + _on_global_effect_updated(output_intensity.data()); } } @@ -583,17 +533,7 @@ void palettes_bank::set_hue_shift_intensity(fixed intensity) if(update) { - _update = true; - _update_global_effects = true; - - if(output_intensity.data()) - { - _global_effects_enabled = true; - } - else - { - _check_global_effects_enabled(); - } + _on_global_effect_updated(output_intensity.data()); } } @@ -619,17 +559,7 @@ void palettes_bank::set_fade_intensity(fixed intensity) if(update) { - _update = true; - _update_global_effects = true; - - if(output_intensity.data()) - { - _global_effects_enabled = true; - } - else - { - _check_global_effects_enabled(); - } + _on_global_effect_updated(output_intensity.data()); } } @@ -644,17 +574,7 @@ void palettes_bank::set_fade(color color, fixed intensity) if(update) { - _update = true; - _update_global_effects = true; - - if(output_intensity.data()) - { - _global_effects_enabled = true; - } - else - { - _check_global_effects_enabled(); - } + _on_global_effect_updated(output_intensity.data()); } } @@ -667,6 +587,7 @@ void palettes_bank::update() { bool update_global_effects = _update_global_effects || _global_effects_enabled; _update = false; + _global_effects_updated = _update_global_effects; _update_global_effects = false; if(update_global_effects) @@ -748,6 +669,7 @@ void palettes_bank::reset_commit_data() { _first_index_to_commit = numeric_limits::max(); _last_index_to_commit = 0; + _global_effects_updated = false; } void palettes_bank::fill_hblank_effect_colors(int id, const color* source_colors_ptr, uint16_t* dest_ptr) const @@ -822,11 +744,15 @@ int palettes_bank::_first_bpp_4_palette_index() const return hw::palettes::count(); } -void palettes_bank::_check_global_effects_enabled() +void palettes_bank::_on_global_effect_updated(bool active) { - _global_effects_enabled = _inverted || fixed_t<5>(_brightness).data() || fixed_t<5>(_contrast).data() || - fixed_t<5>(_intensity).data() || fixed_t<5>(_grayscale_intensity).data() || - fixed_t<5>(_hue_shift_intensity).data() || fixed_t<5>(_fade_intensity).data(); + _update = true; + _update_global_effects = true; + + _global_effects_enabled = active || _inverted || fixed_t<5>(_brightness).data() || + fixed_t<5>(_contrast).data() || fixed_t<5>(_intensity).data() || + fixed_t<5>(_grayscale_intensity).data() || fixed_t<5>(_hue_shift_intensity).data() || + fixed_t<5>(_fade_intensity).data(); } void palettes_bank::_set_colors_bpp_impl(int id, const span& colors) diff --git a/butano/src/bn_palettes_bank.h b/butano/src/bn_palettes_bank.h index 2e9341e5c..36834090e 100644 --- a/butano/src/bn_palettes_bank.h +++ b/butano/src/bn_palettes_bank.h @@ -185,6 +185,11 @@ class palettes_bank [[nodiscard]] commit_data retrieve_commit_data() const; + [[nodiscard]] bool global_effects_updated() const + { + return _global_effects_updated; + } + void reset_commit_data(); void fill_hblank_effect_colors(int id, const color* source_colors_ptr, uint16_t* dest_ptr) const; @@ -245,6 +250,7 @@ class palettes_bank bool _update = false; bool _update_global_effects = false; bool _global_effects_enabled = false; + bool _global_effects_updated = false; [[nodiscard]] bool _same_colors(const span& colors, int id) const; @@ -252,7 +258,7 @@ class palettes_bank [[nodiscard]] int _first_bpp_4_palette_index() const; - void _check_global_effects_enabled(); + void _on_global_effect_updated(bool active); void _set_colors_bpp_impl(int id, const span& colors); diff --git a/butano/src/bn_sprite_palette_color_hbe_handler.h b/butano/src/bn_sprite_palette_color_hbe_handler.h index 4877c698c..b20019359 100644 --- a/butano/src/bn_sprite_palette_color_hbe_handler.h +++ b/butano/src/bn_sprite_palette_color_hbe_handler.h @@ -29,7 +29,14 @@ class sprite_palette_color_hbe_handler [[nodiscard]] static bool target_updated(intptr_t target_id, void*) { - palettes_bank::commit_data commit_data = palettes_manager::sprite_palettes_bank().retrieve_commit_data(); + const palettes_bank& sprite_palettes_bank = palettes_manager::sprite_palettes_bank(); + + if(sprite_palettes_bank.global_effects_updated()) + { + return true; + } + + palettes_bank::commit_data commit_data = sprite_palettes_bank.retrieve_commit_data(); if(int count = commit_data.count) { diff --git a/docs/changelog.html b/docs/changelog.html index 989313e3a..ad32ed9cc 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -183,7 +183,7 @@

Contents

  • 0.1.0
  • -

    15.6.0 (next release)

    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

    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 now can 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 nor 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.

    +

    15.6.0 (next release)

    • 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

    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 now can 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 nor 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.