From 09dd9961817ac9f8fcf366e8a98e4e37f1aaf770 Mon Sep 17 00:00:00 2001 From: Rickey Date: Tue, 25 Nov 2025 13:47:44 -0800 Subject: [PATCH] Clang Format Blinds (#253) * Quick cleanup on bitset docs * Clang format blind.h/c * Replace `_` with `s_` for functions * Fix newline size for macros. * Fix format for ci * Add macro for "unused" attribute --- .clang-format | 1 + .github/workflows/run_tests_ci_workflow.yml | 1 + include/bitset.h | 26 +++--- include/blind.h | 32 +++---- include/pool.h | 2 +- include/util.h | 2 + source/bitset.c | 2 +- source/blind.c | 95 +++++++++++---------- source/game.c | 2 +- source/joker_effects.c | 10 +-- 10 files changed, 96 insertions(+), 77 deletions(-) diff --git a/.clang-format b/.clang-format index 31fb924..80f4ddc 100644 --- a/.clang-format +++ b/.clang-format @@ -50,3 +50,4 @@ SpacesInLineCommentPrefix: Maximum: 1 PenaltyReturnTypeOnItsOwnLine: 99999999 +AlignEscapedNewlines: Left diff --git a/.github/workflows/run_tests_ci_workflow.yml b/.github/workflows/run_tests_ci_workflow.yml index 33d137c..f533a83 100644 --- a/.github/workflows/run_tests_ci_workflow.yml +++ b/.github/workflows/run_tests_ci_workflow.yml @@ -24,6 +24,7 @@ jobs: include/list.h source/list.c include/sprite.h source/sprite.c include/splash_screen.h source/splash_screen.c + include/blind.h source/blind.c # Currently contains only the code that has been formatted to conform # When all existing code conforms, change to this: # run: clang-format --dry-run -Werror include/*.h source/*.c diff --git a/include/bitset.h b/include/bitset.h index 0dc9118..791c9a4 100644 --- a/include/bitset.h +++ b/include/bitset.h @@ -110,10 +110,14 @@ void bitset_set_idx(Bitset* bitset, int idx, bool on); */ bool bitset_get_idx(Bitset* bitset, int idx); -// Get the next free (set to 0) index in the bitset. -// It also sets the bit which it maybe should do... It really shouldn't do two things -// But it's such a fast operation idk. // TODO: decide what you wanna do -int bitset_allocate_idx(Bitset* bitset); +/** + * @brief Set the next free index in the bitset and return the index value + * + * @param bitset A @ref Bitset to operate on + * + * @return The index of the bit that was set + */ +int bitset_set_next_free_idx(Bitset* bitset); /** * @brief Clear the bitset, all to 0 @@ -190,13 +194,13 @@ int bitset_itr_next(BitsetItr* itr); * @param name the name of the bitset * @param capacity the capacity of the bitset */ -#define BITSET_DEFINE(name, capacity) \ - static uint32_t name##_w[BITSET_ARRAY_SIZE] = {0}; \ - static Bitset name = { \ - .w = name##_w, \ - .nbits = BITSET_BITS_PER_WORD, \ - .nwords = BITSET_ARRAY_SIZE, \ - .cap = capacity, \ +#define BITSET_DEFINE(name, capacity) \ + static uint32_t name##_w[BITSET_ARRAY_SIZE] = {0}; \ + static Bitset name = { \ + .w = name##_w, \ + .nbits = BITSET_BITS_PER_WORD, \ + .nwords = BITSET_ARRAY_SIZE, \ + .cap = capacity, \ }; #endif // BITSET_H diff --git a/include/blind.h b/include/blind.h index c8e5dda..d001348 100644 --- a/include/blind.h +++ b/include/blind.h @@ -2,18 +2,18 @@ #define BLIND_H #include "sprite.h" - -#define MAX_ANTE 8 // The GBA's max uint value is around 4 billion, so we're going to not add endless mode for simplicity's sake +// The GBA's max uint value is around 4 billion, so we're going to not add endless mode for simplicity's sake +#define MAX_ANTE 8 #define SMALL_BLIND_PB 1 -#define BIG_BLIND_PB 2 -#define BOSS_BLIND_PB 3 +#define BIG_BLIND_PB 2 +#define BOSS_BLIND_PB 3 -#define BLIND_SPRITE_OFFSET 16 +#define BLIND_SPRITE_OFFSET 16 #define BLIND_SPRITE_COPY_SIZE BLIND_SPRITE_OFFSET * 8 // 8 ints per tile -#define SMALL_BLIND_TID 960 -#define BIG_BLIND_TID (BLIND_SPRITE_OFFSET + SMALL_BLIND_TID) -#define BOSS_BLIND_TID (BLIND_SPRITE_OFFSET + BIG_BLIND_TID) +#define SMALL_BLIND_TID 960 +#define BIG_BLIND_TID (BLIND_SPRITE_OFFSET + SMALL_BLIND_TID) +#define BOSS_BLIND_TID (BLIND_SPRITE_OFFSET + BIG_BLIND_TID) enum BlindColorIndex { @@ -26,19 +26,21 @@ enum BlindColorIndex BLIND_BACKGROUND_SHADOW_COLOR_INDEX = 7, }; -#define BLIND_TYPE_INFO_TABLE \ - BLIND_INFO(SMALL, small, FIX_ONE, 3) \ - BLIND_INFO(BIG, big, (FIX_ONE * 3) / 2, 4) \ +#define BLIND_TYPE_INFO_TABLE \ + BLIND_INFO(SMALL, small, FIX_ONE, 3) \ + BLIND_INFO(BIG, big, (FIX_ONE * 3) / 2, 4) \ BLIND_INFO(BOSS, boss, FIX_ONE * 2, 5) +// clang-format off enum BlindType { -#define BLIND_INFO(NAME, name, multi, reward) \ - BLIND_TYPE_##NAME , +#define BLIND_INFO(NAME, name, multi, reward) \ + BLIND_TYPE_##NAME, BLIND_TYPE_INFO_TABLE - BLIND_TYPE_MAX, #undef BLIND_INFO + BLIND_TYPE_MAX, }; +// clang-format on enum BlindState { @@ -74,6 +76,6 @@ int blind_get_requirement(enum BlindType type, int ante); int blind_get_reward(enum BlindType type); u16 blind_get_color(enum BlindType type, enum BlindColorIndex index); -Sprite *blind_token_new(enum BlindType type, int x, int y, int sprite_index); +Sprite* blind_token_new(enum BlindType type, int x, int y, int sprite_index); #endif // BLIND_H diff --git a/include/pool.h b/include/pool.h index e58d579..fbfa114 100644 --- a/include/pool.h +++ b/include/pool.h @@ -33,7 +33,7 @@ }; \ type * pool_get_##type() \ { \ - int free_offset = bitset_allocate_idx(type##_pool.bitset); \ + int free_offset = bitset_set_next_free_idx(type##_pool.bitset); \ if(free_offset == -1) return NULL; \ return &type##_pool.objects[free_offset]; \ } \ diff --git a/include/util.h b/include/util.h index 6b2c819..4c2fd7e 100644 --- a/include/util.h +++ b/include/util.h @@ -3,6 +3,8 @@ #include +#define GBLA_UNUSED __attribute__((unused)) + static inline int get_digits(int n) // https://stackoverflow.com/questions/1068849/how-do-i-determine-the-number-of-digits-of-an-integer-in-c { if (n < 10) return 1; diff --git a/source/bitset.c b/source/bitset.c index f067ec2..51dca2b 100644 --- a/source/bitset.c +++ b/source/bitset.c @@ -24,7 +24,7 @@ void bitset_set_idx(Bitset* bitset, int idx, bool on) } } -int bitset_allocate_idx(Bitset* bitset) +int bitset_set_next_free_idx(Bitset* bitset) { for (uint32_t i = 0; i < bitset->nwords; i++) { diff --git a/source/blind.c b/source/blind.c index e8842ec..d1f1078 100644 --- a/source/blind.c +++ b/source/blind.c @@ -1,52 +1,50 @@ -#include - #include "blind.h" -#include "small_blind_gfx.h" + #include "big_blind_gfx.h" #include "boss_blind_gfx.h" #include "graphic_utils.h" +#include "small_blind_gfx.h" +#include "util.h" -// +1 is added because we'll actually be indexing at 1, but if something causes you to go to ante 0, there will still be a value there. +#include + +// +1 is added because we'll actually be indexing at 1, but if something causes you to go to ante 0, there will still be +// a value there. static const int ante_lut[MAX_ANTE + 1] = {100, 300, 800, 2000, 5000, 11000, 20000, 35000, 50000}; -// Palettes for the blinds (Transparency, Text Color, Shadow, Highlight, Main Color) Use this: http://www.budmelvin.com/dev/15bitconverter.html -static const u16 small_blind_token_palette[PAL_ROW_LEN] = {0x0000, 0x7FFF, 0x34A1, 0x5DCB, 0x5104, 0x55A0, 0x2D01, 0x34E0}; -static const u16 big_blind_token_palette[PAL_ROW_LEN] = {0x0000, 0x2527, 0x15F5, 0x36FC, 0x1E9C, 0x01B4, 0x0D0A, 0x010E}; -static const u16 boss_blind_token_palette[PAL_ROW_LEN] = {0x0000, 0x2CC9, 0x3D0D, 0x5E14, 0x5171, 0x4D0F, 0x2CC8, 0x3089}; // This variable is temporary, each boss blind will have its own unique palette +// Palettes for the blinds (Transparency, Text Color, Shadow, Highlight, Main Color) Use this: +// http://www.budmelvin.com/dev/15bitconverter.html +static const u16 small_blind_token_palette[PAL_ROW_LEN] = + {0x0000, 0x7FFF, 0x34A1, 0x5DCB, 0x5104, 0x55A0, 0x2D01, 0x34E0}; +static const u16 big_blind_token_palette[PAL_ROW_LEN] = + {0x0000, 0x2527, 0x15F5, 0x36FC, 0x1E9C, 0x01B4, 0x0D0A, 0x010E}; +// This variable is temporary, each boss blind will have its own unique palette +static const u16 boss_blind_token_palette[PAL_ROW_LEN] = + {0x0000, 0x2CC9, 0x3D0D, 0x5E14, 0x5171, 0x4D0F, 0x2CC8, 0x3089}; - -static Blind _blind_type_map[BLIND_TYPE_MAX] = -{ -#define BLIND_INFO(NAME, name, multi, _reward) \ - { \ - .type = BLIND_TYPE_##NAME , \ - .gfx_info = \ - { \ - .tiles = name##_blind_gfxTiles, \ - .palette = name##_blind_token_palette, \ - .tid = NAME##_BLIND_TID, \ - .pb = NAME##_BLIND_PB, \ - }, \ - .score_req_multipler = multi , \ - .reward = _reward , \ - }, +// clang-format off +static Blind _blind_type_map[BLIND_TYPE_MAX] = { +#define BLIND_INFO(NAME, name, multi, _reward) \ + { \ + .type = BLIND_TYPE_##NAME, \ + .gfx_info = \ + { \ + .tiles = name##_blind_gfxTiles, \ + .palette = name##_blind_token_palette, \ + .tid = NAME##_BLIND_TID, \ + .pb = NAME##_BLIND_PB, \ + }, \ + .score_req_multipler = multi, \ + .reward = _reward, \ +}, BLIND_TYPE_INFO_TABLE #undef BLIND_INFO }; +// clang-format on -static void blind_gfx_init(enum BlindType type) -{ - // TODO: Re-add grit copy. You need to decouple the blind graphics first. - // This will allow this function to change the boss graphics info - //GRIT_CPY(&tile_mem[4][_blind_type_map[type].pal_info.tid], tiles); - BlindGfxInfo* p_gfx = &_blind_type_map[type].gfx_info; - memcpy32(&tile_mem[4][p_gfx->tid], p_gfx->tiles, BLIND_SPRITE_COPY_SIZE); - memcpy16(&pal_obj_bank[p_gfx->pb], p_gfx->palette, PAL_ROW_LEN); -} +static void s_blind_gfx_init(enum BlindType type); - -__attribute__((unused)) -void blind_set_boss_graphics(const unsigned int* tiles, const u16* palette) +GBLA_UNUSED void blind_set_boss_graphics(const unsigned int* tiles, const u16* palette) { // TODO: This function is unused and not fully fleshed out. // We need to support more boss blind graphics in the future. @@ -55,18 +53,17 @@ void blind_set_boss_graphics(const unsigned int* tiles, const u16* palette) // // This will eventually be in it's own map mapping graphic data to // boss types. - + _blind_type_map[BLIND_TYPE_BOSS].gfx_info.tiles = tiles; _blind_type_map[BLIND_TYPE_BOSS].gfx_info.palette = palette; - blind_gfx_init(BLIND_TYPE_BOSS); + s_blind_gfx_init(BLIND_TYPE_BOSS); } void blind_init() { - for(int i = 0; i < BLIND_TYPE_MAX; i++) + for (int i = 0; i < BLIND_TYPE_MAX; i++) { - blind_gfx_init(i); - + s_blind_gfx_init(i); } return; @@ -74,7 +71,9 @@ void blind_init() int blind_get_requirement(enum BlindType type, int ante) { - if (ante < 0 || ante > MAX_ANTE) ante = 0; // Ensure ante is within valid range + // Ensure ante is within valid range + if (ante < 0 || ante > MAX_ANTE) + ante = 0; return fx2int(_blind_type_map[type].score_req_multipler * ante_lut[ante]); } @@ -89,7 +88,7 @@ u16 blind_get_color(enum BlindType type, enum BlindColorIndex index) return _blind_type_map[type].gfx_info.palette[index]; } -Sprite *blind_token_new(enum BlindType type, int x, int y, int sprite_index) +Sprite* blind_token_new(enum BlindType type, int x, int y, int sprite_index) { u16 a0 = ATTR0_SQUARE | ATTR0_4BPP; u16 a1 = ATTR1_SIZE_32x32; @@ -101,3 +100,13 @@ Sprite *blind_token_new(enum BlindType type, int x, int y, int sprite_index) return sprite; } + +static void s_blind_gfx_init(enum BlindType type) +{ + // TODO: Re-add grit copy. You need to decouple the blind graphics first. + // This will allow this function to change the boss graphics info + // GRIT_CPY(&tile_mem[4][_blind_type_map[type].pal_info.tid], tiles); + BlindGfxInfo* p_gfx = &_blind_type_map[type].gfx_info; + memcpy32(&tile_mem[4][p_gfx->tid], p_gfx->tiles, BLIND_SPRITE_COPY_SIZE); + memcpy16(&pal_obj_bank[p_gfx->pb], p_gfx->palette, PAL_ROW_LEN); +} diff --git a/source/game.c b/source/game.c index b276925..f645b35 100644 --- a/source/game.c +++ b/source/game.c @@ -277,7 +277,7 @@ static inline void _set_shop_joker_avail(int joker_id, bool avail) bitset_set_idx(&_avail_jokers_bitset, joker_id, avail); } -__attribute__((unused)) +GBLA_UNUSED static inline bool _get_shop_joker_avail(int joker_id) { return bitset_get_idx(&_avail_jokers_bitset, joker_id); diff --git a/source/joker_effects.c b/source/joker_effects.c index 08d39c7..3a72839 100644 --- a/source/joker_effects.c +++ b/source/joker_effects.c @@ -733,10 +733,10 @@ static JokerEffect bootstraps_joker_effect(Joker *joker, Card *scored_card, enum } -// Using __attribute__((unused)) for jokers with no sprites yet to avoid warning +// Using GBLA_UNUSED, aka __attribute__((unused)), for jokers with no sprites yet to avoid warning // Remove the attribute once they have sprites // no graphics available but ready to be used if wanted when graphics available -__attribute__((unused)) +GBLA_UNUSED static JokerEffect shoot_the_moon_joker_effect(Joker *joker, Card *scored_card, enum JokerEvent joker_event) { JokerEffect effect = {0}; @@ -752,7 +752,7 @@ static JokerEffect shoot_the_moon_joker_effect(Joker *joker, Card *scored_card, } -__attribute__((unused)) +GBLA_UNUSED static JokerEffect photograph_joker_effect(Joker *joker, Card *scored_card, enum JokerEvent joker_event) { JokerEffect effect = {0}; @@ -787,7 +787,7 @@ static JokerEffect photograph_joker_effect(Joker *joker, Card *scored_card, enum // no graphics available but ready to be used if wanted when graphics available -__attribute__((unused)) +GBLA_UNUSED static JokerEffect triboulet_joker_effect(Joker *joker, Card *scored_card, enum JokerEvent joker_event) { JokerEffect effect = {0}; @@ -956,7 +956,7 @@ static JokerEffect hack_joker_effect(Joker *joker, Card *scored_card, enum Joker // Note: Joker expiration is not yet implemented so Seltzer cannot be made active before it does. -__attribute__((unused)) +GBLA_UNUSED static JokerEffect seltzer_joker_effect(Joker *joker, Card *scored_card, enum JokerEvent joker_event) { JokerEffect effect = {0};