From 2816b20caee10345f9a52d6699b98052cea00a8f Mon Sep 17 00:00:00 2001 From: hkz Date: Sat, 26 Jul 2025 10:22:13 +0200 Subject: [PATCH] Add score info in start/end boxes --- graphics/extracted_charset.png | Bin 8966 -> 8825 bytes src/game_graphics.c | 40 +++++++++++++++++++++++++++------ src/main.c | 10 ++++----- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/graphics/extracted_charset.png b/graphics/extracted_charset.png index 38884c3b5c10b927b3cd4bc9681118285176dac5..a3222ab0285e0126e4aa3648ffe6b09168b5b95a 100644 GIT binary patch literal 8825 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 literal 8966 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 diff --git a/src/game_graphics.c b/src/game_graphics.c index 34ef116..adac3b9 100644 --- a/src/game_graphics.c +++ b/src/game_graphics.c @@ -25,7 +25,9 @@ static uint8_t *front_buf; static uint8_t *back_buf; -#define BOX_CONTENT_SIZE 544 +#define BOX_WIDTH 32 +#define BOX_HEIGHT 17 +#define BOX_CONTENT_SIZE (BOX_WIDTH * BOX_HEIGHT) static const uint8_t box_content_win[BOX_CONTENT_SIZE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -37,7 +39,7 @@ static const uint8_t box_content_win[BOX_CONTENT_SIZE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 15, 21, 18, 0, 19, 3, 15, 18, 5, 0, 9, 19, 58, 0, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -49,15 +51,15 @@ static const uint8_t box_content_win[BOX_CONTENT_SIZE] = { static const uint8_t box_content_lose[BOX_CONTENT_SIZE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 13, 5, 0, 15, 22, 5, 18, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 13, 5, 0, 0, 15, 22, 5, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 77, 0, 83, 77, 84, 0, 77, 0, 77, 0, 0, 77, 0, 0, 0, 83, 77, 84, 0, 83, 77,192, 0, 77, 77, 77, 0, 0, 0, 0, 77, 0, 77, 0, 77, 0, 77, 0, 77, 0, 77, 0, 0, 77, 0, 0, 0, 77, 0, 77, 0,212, 77, 84, 0, 77, 0, 0, 0, 0, - 0, 0,212, 77,211, 0, 77, 0, 77, 0, 77, 0, 77, 0, 0, 77, 0, 0, 0, 77, 0, 77, 0, 0, 0, 77, 0, 77, 86, 0, 0, 0, + 0, 0,212, 77,211, 0, 77, 0, 77, 0, 77, 0, 77, 0, 0, 77, 0, 0, 0, 77, 0, 77, 0, 0,203, 77, 0, 77,193, 0, 0, 0, 0, 0, 0, 77, 0, 0,212, 77,211, 0,212, 77,211, 0, 0,212, 77, 77, 0,212, 77,211, 0, 77, 77,211, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 25, 15, 21, 18, 0, 19, 3, 15, 18, 5, 0, 9, 19, 58, 0, 48, 48, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -73,7 +75,7 @@ static const uint8_t box_content_start[BOX_CONTENT_SIZE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 77,192, 0, 77, 77, 77, 0, 83, 77, 84, 0, 77, 77, 84, 0, 77, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212, 77, 84, 0, 0, 77, 0, 0, 77, 0, 77, 0, 77, 0, 77, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 77, 0, 0, 77,192, 77, 0, 77, 77,211, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0,203, 77, 0, 0, 77, 0, 0, 77,192, 77, 0, 77, 77,211, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 77,211, 0, 0, 77, 0, 0, 77, 0, 77, 0, 77, 0, 84, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -87,6 +89,11 @@ static const uint8_t box_content_start[BOX_CONTENT_SIZE] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; +static const uint8_t box_new_hi_score[BOX_WIDTH] = { + 0, 0,102, 0, 23, 5, 0, 7, 15, 20, 0, 1, 0, 14, 5, 23, 0, 8, 9, 7, 8, 45, 19, 3, 15, 18, 5, 33, 0,102, 0, 0 +}; + + // The grid is 5x5 squares, // It is offset on the left side by 7 pixels and on the top by 14 // Every square is 35x35 pixels @@ -185,6 +192,7 @@ void draw_tiles(void) { #define ENDGAME_BOX_X_OFFSET 2 #define ENDGAME_BOX_Y_OFFSET 16 +#define ENDGAME_BOX_SCORE_LEN 5 void ddraw_endgame_box(int8_t done, uint16_t score, uint16_t hi_score) { // Clear the part of the screen where we'll draw clear_box((SCREEN_WIDTH_B - (ENDGAME_BOX_X_OFFSET * 2)) + 1, (SCREEN_HEIGHT - (ENDGAME_BOX_Y_OFFSET * 2)) + CHAR_HEIGHT, ENDGAME_BOX_X_OFFSET, ENDGAME_BOX_Y_OFFSET, front_buf); @@ -227,7 +235,7 @@ void ddraw_endgame_box(int8_t done, uint16_t score, uint16_t hi_score) { // And now, the content!!! - for(uint16_t tile = 0; tile < sizeof(box_content_win); tile++) { + for(uint16_t tile = 0; tile < BOX_CONTENT_SIZE; tile++) { if(!content[tile]) continue; uint8_t x = tile % (SCREEN_WIDTH_B - (ENDGAME_BOX_X_OFFSET * 2) - 4); @@ -241,6 +249,24 @@ void ddraw_endgame_box(int8_t done, uint16_t score, uint16_t hi_score) { } } + if(done != 0) { // Print the score + direct_draw_number(score, ENDGAME_BOX_SCORE_LEN, ENDGAME_BOX_X_OFFSET + 23, ENDGAME_BOX_Y_OFFSET + (11 * CHAR_HEIGHT), front_buf); + + if(score > hi_score) { + for(uint8_t tile = 0; tile < BOX_WIDTH; tile++) { + if(!box_new_hi_score[tile]) continue; + + uint8_t invert = box_new_hi_score[tile] & 0x80; + uint8_t ch_num = box_new_hi_score[tile] & 0x7F; + + for(uint8_t row = 0; row < CHAR_HEIGHT; row++) { + uint16_t offset = line_offset_map[ENDGAME_BOX_Y_OFFSET + (2 * CHAR_HEIGHT) + (13 * CHAR_HEIGHT) + row] + ENDGAME_BOX_X_OFFSET + 2 + tile; + front_buf[offset] = invert ? ((~CHARSET[(ch_num * CHAR_HEIGHT) + row]) & 0x7F) : CHARSET[(ch_num * CHAR_HEIGHT) + row]; + } + } + } + } + // TODO: Add additional info to the box, if necessary } diff --git a/src/main.c b/src/main.c index 96d4195..b9d3d2a 100644 --- a/src/main.c +++ b/src/main.c @@ -50,11 +50,8 @@ __task int main(void) { while(1){ // Outer loop moves_count = 0; - - // Check if we have a new high-score - if (score > hi_score) hi_score = score; - - // TODO: Draw a screen and wait for a key press here here + + // Draw a screen and wait for a key press here here BELL1(); ddraw_endgame_box(done, score, hi_score); while(!read_any_key()) { @@ -63,6 +60,9 @@ __task int main(void) { BELL1(); clear_display_buffers(); // Clear display again + // Check if we have a new high-score from a previous game + if (score > hi_score) hi_score = score; + // Reset the game, calculate the initial score depending on which tiles we randomly get score = reset_game();