From 962ec56d5966d124ad9470f058c8ab21e99b2f33 Mon Sep 17 00:00:00 2001 From: Matteo Benedetto Date: Wed, 24 Jun 2026 16:35:06 +0200 Subject: [PATCH] Add test_finale.gb: ROM che porta subito al finale per test rapidi build/test_finale.gb mostra immediatamente la schermata finale (testo tragico + musica del finale su tutti e 3 i canali) all'avvio, senza dover completare gli 8 livelli. Premi START per uscire. - src/test_finale_render.c: setup palette invertita, font IBM, scrittura del messaggio nel map_buffer, init audio + VBL + game_over=3/timer=0 per far partire il sequencer del finale. - Makefile: nuovo target build/test_finale.gb (aggiunto ad all). --- Makefile | 6 +++- assets/claimed.png | Bin 0 -> 11057 bytes src/test_finale_render.c | 69 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 assets/claimed.png create mode 100644 src/test_finale_render.c diff --git a/Makefile b/Makefile index 4097696..63403fe 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ BUILD_DIR = build # C source files SRCS = $(SRC_DIR)/main.c $(SRC_DIR)/engine.c $(SRC_DIR)/globals.c $(SRC_DIR)/maze.c $(SRC_DIR)/sound.c $(SRC_DIR)/render.c $(SRC_DIR)/player_logic.c $(SRC_DIR)/enemy_logic.c $(SRC_DIR)/tiles.c $(SRC_DIR)/player.c $(SRC_DIR)/enemy.c $(SRC_DIR)/gameover.c $(SRC_DIR)/next_level.c $(SRC_DIR)/stamina.c $(SRC_DIR)/level.c $(SRC_DIR)/title_bg.c -all: $(BUILD_DIR)/hello_iso.gb $(BUILD_DIR)/test_gameover.gb +all: $(BUILD_DIR)/hello_iso.gb $(BUILD_DIR)/test_gameover.gb $(BUILD_DIR)/test_finale.gb # Generate image assets generate_images: $(SCRIPTS_DIR)/generate_assets.py $(SCRIPTS_DIR)/generate_enemy.py $(SCRIPTS_DIR)/generate_level.py @@ -40,6 +40,10 @@ $(BUILD_DIR)/test_gameover.gb: generate_c_assets $(SRC_DIR)/test_gameover_render mkdir -p $(BUILD_DIR) $(LCC) -Wa-l -Wl-m -Wl-j -o $(BUILD_DIR)/test_gameover.gb $(SRC_DIR)/test_gameover_render.c $(SRC_DIR)/player.c $(SRC_DIR)/enemy.c $(SRC_DIR)/gameover.c $(SRC_DIR)/stamina.c +$(BUILD_DIR)/test_finale.gb: $(SRC_DIR)/test_finale_render.c + mkdir -p $(BUILD_DIR) + $(LCC) -Wa-l -Wl-m -Wl-j -o $(BUILD_DIR)/test_finale.gb $(SRC_DIR)/test_finale_render.c $(SRC_DIR)/globals.c $(SRC_DIR)/sound.c + clean: rm -rf $(BUILD_DIR)/* rm -f $(SRC_DIR)/tiles.c $(SRC_DIR)/tiles.h diff --git a/assets/claimed.png b/assets/claimed.png new file mode 100644 index 0000000000000000000000000000000000000000..0ec52646cb7361255b2a8ea087b177115e10ea91 GIT binary patch literal 11057 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 S&jAfANJdgYqDIUp@c#f#01YVs literal 0 HcmV?d00001 diff --git a/src/test_finale_render.c b/src/test_finale_render.c new file mode 100644 index 0000000..062ebe5 --- /dev/null +++ b/src/test_finale_render.c @@ -0,0 +1,69 @@ +#include +#include +#include +#include + +#include "globals.h" +#include "sound.h" + +uint8_t app_state = 1; // sound.c references this; not used in this test + +static void ending_puttext(uint8_t col, uint8_t row, const char *s) { + uint8_t i = 0; + while (s[i]) { + if (col + i < 32) { + map_buffer[(uint16_t)row * 32 + col + i] = (uint8_t)(s[i] - ' '); + } + i++; + } +} + +void main(void) { + SPRITES_8x16; + + OBP0_REG = 0xE4; + OBP1_REG = 0x1B; + BGP_REG = 0x1B; // inverted palette: dark bg, light text + + memset(map_buffer, 0, sizeof(map_buffer)); + set_bkg_tiles(0, 0, 32, 32, map_buffer); + + font_init(); + font_t f = font_load(font_ibm); + font_set(f); + + ending_puttext(3, 4, "YOUR TORCH HAS"); + ending_puttext(6, 5, "RUN OUT,"); + ending_puttext(2, 7, "YOU ARE TRAPPED."); + ending_puttext(0, 10, "JUST ANOTHER SCREAM"); + ending_puttext(3, 11, "FROM THE DARK."); + ending_puttext(5, 14, "GAME OVER"); + set_bkg_tiles(0, 0, 32, 32, map_buffer); + + NR52_REG = 0x80; + NR50_REG = 0x77; + NR51_REG = 0xFF; + sound_reset_music_state(); + remove_VBL(play_music_tick); + add_VBL(play_music_tick); + + // Trigger the finale music sequencer immediately (skip the 30-frame timer + // that the main game uses; here we want the music from frame 0). + game_over = 3; + game_over_timer = 0; + + SHOW_BKG; + SHOW_SPRITES; + DISPLAY_ON; + + uint8_t prev_keys = 0; + while (1) { + wait_vbl_done(); + uint8_t keys = joypad(); + if ((keys & J_START) && !(prev_keys & J_START)) { + level = 1; + break; + } + prev_keys = keys; + } +} \ No newline at end of file