diff --git a/graphics/joker_gfx11.png b/graphics/joker_gfx11.png index 07b537c..2bc36d4 100644 Binary files a/graphics/joker_gfx11.png and b/graphics/joker_gfx11.png differ diff --git a/graphics/joker_gfx12.grit b/graphics/joker_gfx12.grit new file mode 100644 index 0000000..a8ac3f6 --- /dev/null +++ b/graphics/joker_gfx12.grit @@ -0,0 +1 @@ +-gB4 -Mw4 -Mh4 -m! -pn 16 \ No newline at end of file diff --git a/graphics/joker_gfx12.png b/graphics/joker_gfx12.png new file mode 100644 index 0000000..5d78c20 Binary files /dev/null and b/graphics/joker_gfx12.png differ diff --git a/graphics/joker_gfx13.grit b/graphics/joker_gfx13.grit new file mode 100644 index 0000000..a8ac3f6 --- /dev/null +++ b/graphics/joker_gfx13.grit @@ -0,0 +1 @@ +-gB4 -Mw4 -Mh4 -m! -pn 16 \ No newline at end of file diff --git a/graphics/joker_gfx13.png b/graphics/joker_gfx13.png new file mode 100644 index 0000000..ce7f8fe Binary files /dev/null and b/graphics/joker_gfx13.png differ diff --git a/include/joker_gfx.h b/include/joker_gfx.h index 75cfbbc..ce1c916 100644 --- a/include/joker_gfx.h +++ b/include/joker_gfx.h @@ -13,5 +13,7 @@ #include "joker_gfx9.h" #include "joker_gfx10.h" #include "joker_gfx11.h" +#include "joker_gfx12.h" +#include "joker_gfx13.h" #endif \ No newline at end of file diff --git a/source/joker.c b/source/joker.c index 867d608..6ec320b 100644 --- a/source/joker.c +++ b/source/joker.c @@ -130,6 +130,8 @@ void joker_init() joker_gfxTiles[9] = joker_gfx9Tiles; joker_gfxTiles[10] = joker_gfx10Tiles; joker_gfxTiles[11] = joker_gfx11Tiles; + joker_gfxTiles[12] = joker_gfx12Tiles; + joker_gfxTiles[13] = joker_gfx13Tiles; joker_gfxPal[0] = joker_gfx0Pal; joker_gfxPal[1] = joker_gfx1Pal; @@ -143,6 +145,8 @@ void joker_init() joker_gfxPal[9] = joker_gfx9Pal; joker_gfxPal[10] = joker_gfx10Pal; joker_gfxPal[11] = joker_gfx11Pal; + joker_gfxPal[12] = joker_gfx12Pal; + joker_gfxPal[13] = joker_gfx13Pal; for (int i = 0; i < num_spritesheets; i++) { diff --git a/source/joker_effects.c b/source/joker_effects.c index 7cbb0d3..155c850 100644 --- a/source/joker_effects.c +++ b/source/joker_effects.c @@ -304,7 +304,11 @@ static JokerEffect blue_joker_effect(Joker *joker, Card *scored_card) { return effect; } -static JokerEffect raised_fist_joker_effect(Joker *joker, Card *scored_card) { +// Using __attribute__((unused)) for jokers with no sprites yet to avoid warning +// Remove the attribute once they have sprites +__attribute__((unused)) +static JokerEffect raised_fist_joker_effect(Joker *joker, Card *scored_card) +{ JokerEffect effect = {0}; if (scored_card != NULL) return effect; // if card != null, we are not at the end-phase of scoring yet @@ -325,8 +329,9 @@ static JokerEffect raised_fist_joker_effect(Joker *joker, Card *scored_card) { effect.mult = lowest_value * 2; return effect; -} +} +__attribute__((unused)) static JokerEffect reserved_parking_joker_effect(Joker *joker, Card *scored_card) { JokerEffect effect = {0}; if (scored_card != NULL) @@ -346,7 +351,7 @@ static JokerEffect reserved_parking_joker_effect(Joker *joker, Card *scored_card } return effect; -} +}; static JokerEffect business_card_joker_effect(Joker *joker, Card *scored_card) { JokerEffect effect = {0}; @@ -377,6 +382,7 @@ static JokerEffect scholar_joker_effect(Joker *joker, Card *scored_card) { return effect; } +__attribute__((unused)) static JokerEffect scary_face_joker_effect(Joker *joker, Card *scored_card) { JokerEffect effect = {0}; if (scored_card == NULL) @@ -392,6 +398,7 @@ static JokerEffect scary_face_joker_effect(Joker *joker, Card *scored_card) { return effect; } + __attribute__((unused)) static JokerEffect abstract_joker_effect(Joker *joker, Card *scored_card) { JokerEffect effect = {0}; if (scored_card != NULL) @@ -404,6 +411,7 @@ static JokerEffect abstract_joker_effect(Joker *joker, Card *scored_card) { return effect; } +__attribute__((unused)) static JokerEffect bull_joker_effect(Joker *joker, Card *scored_card) { JokerEffect effect = {0}; if (scored_card != NULL) @@ -414,6 +422,7 @@ static JokerEffect bull_joker_effect(Joker *joker, Card *scored_card) { return effect; } +__attribute__((unused)) static JokerEffect smiley_face_joker_effect(Joker *joker, Card *scored_card) { JokerEffect effect = {0}; if (scored_card == NULL) @@ -457,43 +466,56 @@ static JokerEffect odd_todd_joker_effect(Joker *joker, Card *scored_card) { return effect; } +/* The index of a joker in the registry matches its ID. + * The joker sprites are matched by ID so the position in the registry + * determines the joker's sprite. + * Each consecutive NUM_JOKERS_PER_SPRITESHEET (defined in joker.c) jokers + * share a spritesheet and thus a color palette. + * To make better use of color palettes jokers may be rearranged here + * (and put together in the matching spritesheet) to share a color palette. + * Otherwise the order is similar to the wiki. + */ const JokerInfo joker_registry[] = { { COMMON_JOKER, 2, default_joker_effect }, // DEFAULT_JOKER_ID = 0 - { COMMON_JOKER, 5, greedy_joker_effect }, // GREEDY_JOKER_ID = 1 - { COMMON_JOKER, 5, lusty_joker_effect }, // etc... - { COMMON_JOKER, 5, wrathful_joker_effect }, - { COMMON_JOKER, 5, gluttonous_joker_effect }, - { COMMON_JOKER, 3, jolly_joker_effect }, - { COMMON_JOKER, 4, zany_joker_effect }, - { COMMON_JOKER, 4, mad_joker_effect }, - { COMMON_JOKER, 4, crazy_joker_effect }, - { COMMON_JOKER, 4, droll_joker_effect }, - { COMMON_JOKER, 3, sly_joker_effect }, - { COMMON_JOKER, 4, wily_joker_effect }, - { COMMON_JOKER, 4, clever_joker_effect }, - { COMMON_JOKER, 4, devious_joker_effect }, - { COMMON_JOKER, 4, crafty_joker_effect }, - { COMMON_JOKER, 5, half_joker_effect }, - { UNCOMMON_JOKER, 8, joker_stencil_effect }, - { COMMON_JOKER, 5, banner_joker_effect }, - { COMMON_JOKER, 4, walkie_talkie_joker_effect }, - { UNCOMMON_JOKER, 8, fibonnaci_joker_effect }, - { UNCOMMON_JOKER, 6, blackboard_joker_effect }, - { COMMON_JOKER, 5, mystic_summit_joker_effect }, - { COMMON_JOKER, 4, misprint_joker_effect }, - { UNCOMMON_JOKER, 6, blackboard_joker_effect }, - { COMMON_JOKER, 5, blue_joker_effect }, + { COMMON_JOKER, 5, greedy_joker_effect }, // GREEDY_JOKER_ID = 1 + { COMMON_JOKER, 5, lusty_joker_effect }, // etc... 2 + { COMMON_JOKER, 5, wrathful_joker_effect }, // 3 + { COMMON_JOKER, 5, gluttonous_joker_effect }, // 4 + { COMMON_JOKER, 3, jolly_joker_effect }, // 5 + { COMMON_JOKER, 4, zany_joker_effect }, // 6 + { COMMON_JOKER, 4, mad_joker_effect }, // 7 + { COMMON_JOKER, 4, crazy_joker_effect }, // 8 + { COMMON_JOKER, 4, droll_joker_effect }, // 9 + { COMMON_JOKER, 3, sly_joker_effect }, // 10 + { COMMON_JOKER, 4, wily_joker_effect }, // 11 + { COMMON_JOKER, 4, clever_joker_effect }, // 12 + { COMMON_JOKER, 4, devious_joker_effect }, // 13 + { COMMON_JOKER, 4, crafty_joker_effect }, // 14 + { COMMON_JOKER, 5, half_joker_effect }, // 15 + { UNCOMMON_JOKER, 8, joker_stencil_effect }, // 16 + { COMMON_JOKER, 5, banner_joker_effect }, // 17 + { COMMON_JOKER, 4, walkie_talkie_joker_effect }, // 18 + { UNCOMMON_JOKER, 8, fibonnaci_joker_effect }, // 19 + { UNCOMMON_JOKER, 6, blackboard_joker_effect }, // 20 + { COMMON_JOKER, 5, mystic_summit_joker_effect }, // 21 + { COMMON_JOKER, 4, misprint_joker_effect }, // 22 + { COMMON_JOKER, 4, even_steven_joker_effect }, // 23 + { COMMON_JOKER, 5, blue_joker_effect }, // 24 + { COMMON_JOKER, 4, odd_todd_joker_effect }, // 25 + { COMMON_JOKER, 4, scholar_joker_effect }, // 26 + { COMMON_JOKER, 4, business_card_joker_effect }, // 27 + // Business card should be paired with Shortcut for palette optimization when it's added + + // The following jokers don't have sprites yet, + // uncomment them when their sprites are added. +#if 0 { COMMON_JOKER, 5, raised_fist_joker_effect }, { COMMON_JOKER, 6, reserved_parking_joker_effect }, - { COMMON_JOKER, 4, business_card_joker_effect }, - { COMMON_JOKER, 4, scholar_joker_effect }, { COMMON_JOKER, 4, scary_face_joker_effect }, { COMMON_JOKER, 4, abstract_joker_effect }, { UNCOMMON_JOKER, 6, bull_joker_effect}, { COMMON_JOKER, 4, smiley_face_joker_effect }, - { COMMON_JOKER, 4, even_steven_joker_effect }, - { COMMON_JOKER, 4, odd_todd_joker_effect }, - +#endif }; static const size_t joker_registry_size = NUM_ELEM_IN_ARR(joker_registry);