renombrats els fitxers de musica

This commit is contained in:
2026-04-17 13:29:07 +02:00
parent 9d86137203
commit 417699d276
23 changed files with 28 additions and 28 deletions

View File

@@ -232,7 +232,7 @@ JD8_Flip produces ABGR byte order: `0xFF000000 + R + (G<<8) + (B<<16)`. SDL text
### Resource Pack (`source/core/resources/`) ### Resource Pack (`source/core/resources/`)
Sistema d'empaquetat d'assets a l'estil `coffee_crisis_arcade_edition`. Genera un sol fitxer binari opac `resource.pack` que substitueix la carpeta `data/` als releases natius. Sistema d'empaquetat d'assets a l'estil `coffee_crisis_arcade_edition`. Genera un sol fitxer binari opac `resources.pack` que substitueix la carpeta `data/` als releases natius.
**Format AEE1** (fidel a CCAE amb clau pròpia): **Format AEE1** (fidel a CCAE amb clau pròpia):
``` ```
@@ -245,18 +245,18 @@ Checksum: djb2-like amb seed `0x12345678`. Càrrega full-to-RAM (sense mmap).
**Fitxers**: **Fitxers**:
- [source/core/resources/resource_pack.hpp/cpp](source/core/resources/) — classe `ResourcePack`: `loadPack`, `savePack`, `addFile`, `addDirectory`, `getResource(name) → std::vector<uint8_t>`, `hasResource` - [source/core/resources/resource_pack.hpp/cpp](source/core/resources/) — classe `ResourcePack`: `loadPack`, `savePack`, `addFile`, `addDirectory`, `getResource(name) → std::vector<uint8_t>`, `hasResource`
- [source/core/resources/resource_helper.hpp/cpp](source/core/resources/) — namespace `ResourceHelper`: `initializeResourceSystem(pack, enable_fallback)`, `loadFile(relative_path)`, `shutdownResourceSystem`. Prova el pack primer, cau a `file_getresourcefolder()+path` si el fallback està actiu. - [source/core/resources/resource_helper.hpp/cpp](source/core/resources/) — namespace `ResourceHelper`: `initializeResourceSystem(pack, enable_fallback)`, `loadFile(relative_path)`, `shutdownResourceSystem`. Prova el pack primer, cau a `file_getresourcefolder()+path` si el fallback està actiu.
- [tools/pack_resources/pack_resources.cpp](tools/pack_resources/pack_resources.cpp) — eina standalone CLI: `pack_resources [input_dir=data] [output=resource.pack]` + `--list pack`. - [tools/pack_resources/pack_resources.cpp](tools/pack_resources/pack_resources.cpp) — eina standalone CLI: `pack_resources [input_dir=data] [output=resources.pack]` + `--list pack`.
**Build**: **Build**:
- `make pack` compila l'eina (target `pack_resources` a `EXCLUDE_FROM_ALL` de [CMakeLists.txt](CMakeLists.txt)) i genera `resource.pack` a la rel. 33 entrades ≈ 4 MB. - `make pack` compila l'eina (target `pack_resources` a `EXCLUDE_FROM_ALL` de [CMakeLists.txt](CMakeLists.txt)) i genera `resources.pack` a la rel. 33 entrades ≈ 4 MB.
- `./build/pack_resources --list resource.pack` inspecciona el pack. - `./build/pack_resources --list resources.pack` inspecciona el pack.
**Estat actual (Fases 1-6 completades, 2026-04-16)**: **Estat actual (Fases 1-6 completades, 2026-04-16)**:
- `ResourcePack` + `ResourceHelper` + eina `pack_resources` compilen i funcionen. El pack genera 33 entrades ≈ 4 MB. - `ResourcePack` + `ResourceHelper` + eina `pack_resources` compilen i funcionen. El pack genera 33 entrades ≈ 4 MB.
- Cablejat al joc via `ResourceHelper::initializeResourceSystem` a [main.cpp](source/main.cpp) (amb `return SDL_APP_FAILURE` si falla), i `shutdownResourceSystem` a `SDL_AppQuit`. - Cablejat al joc via `ResourceHelper::initializeResourceSystem` a [main.cpp](source/main.cpp) (amb `return SDL_APP_FAILURE` si falla), i `shutdownResourceSystem` a `SDL_AppQuit`.
- Tots els callsites de recursos usen `ResourceHelper::loadFile` (`std::vector<uint8_t>`): [locale.cpp](source/core/locale/locale.cpp), [text.cpp](source/core/rendering/text.cpp), [scene_utils.cpp](source/scenes/scene_utils.cpp), [modulegame.cpp](source/game/modulegame.cpp), [jdraw8.cpp](source/core/jail/jdraw8.cpp). - Tots els callsites de recursos usen `ResourceHelper::loadFile` (`std::vector<uint8_t>`): [locale.cpp](source/core/locale/locale.cpp), [text.cpp](source/core/rendering/text.cpp), [scene_utils.cpp](source/scenes/scene_utils.cpp), [modulegame.cpp](source/game/modulegame.cpp), [jdraw8.cpp](source/core/jail/jdraw8.cpp).
- Scaffold `.jrf` eliminat de [jfile.cpp](source/core/jail/jfile.cpp): `file_setresourcefilename`, `file_setsource`, `SOURCE_FILE`/`SOURCE_FOLDER`, `dictionary_loaded`, `file_getfilepointer`, `file_readfile`. Només queden config-folder i resource-folder getters/setters. - Scaffold `.jrf` eliminat de [jfile.cpp](source/core/jail/jfile.cpp): `file_setresourcefilename`, `file_setsource`, `SOURCE_FILE`/`SOURCE_FOLDER`, `dictionary_loaded`, `file_getfilepointer`, `file_readfile`. Només queden config-folder i resource-folder getters/setters.
- Targets release a [Makefile](Makefile) (`_linux_release`/`_windows_release`/`_macos_release`) depenen de `pack` i copien `resource.pack` en lloc de `data/`. WASM intacte (`--preload-file data@/data`). - Targets release a [Makefile](Makefile) (`_linux_release`/`_windows_release`/`_macos_release`) depenen de `pack` i copien `resources.pack` en lloc de `data/`. WASM intacte (`--preload-file data@/data`).
- `enable_fallback = false` a Release natiu (`NDEBUG && !__EMSCRIPTEN__`): el pack és obligatori. Debug i WASM mantenen el fallback actiu. - `enable_fallback = false` a Release natiu (`NDEBUG && !__EMSCRIPTEN__`): el pack és obligatori. Debug i WASM mantenen el fallback actiu.
### External Libraries (`source/external/`) ### External Libraries (`source/external/`)
@@ -268,7 +268,7 @@ Checksum: djb2-like amb seed `0x12345678`. Càrrega full-to-RAM (sense mmap).
### Data Assets (`data/`) ### Data Assets (`data/`)
- `gfx/` — Original game GIFs (**do not modify content**): `frames.gif`/`frames2.gif` (sprite sheet del joc), `logo.gif`/`logo_new.gif` (intros), `menu.gif`/`menu2.gif`, `intro.gif`/`intro2.gif`/`intro3.gif` (slides), `ffase.gif` (banner nivells), `final.gif`/`finals.gif` (crèdits), `gameover.gif`, `tomba1.gif`/`tomba2.gif` (escena secreta) - `gfx/` — Original game GIFs (**do not modify content**): `frames.gif`/`frames2.gif` (sprite sheet del joc), `logo.gif`/`logo_new.gif` (intros), `menu.gif`/`menu2.gif`, `intro.gif`/`intro2.gif`/`intro3.gif` (slides), `ffase.gif` (banner nivells), `final.gif`/`finals.gif` (crèdits), `gameover.gif`, `tomba1.gif`/`tomba2.gif` (escena secreta)
- `music/` — 8 pistes OGG originals (`00000001.ogg`..`00000008.ogg`) - `music/` — 8 pistes OGG originals amb noms temàtics: `mort.ogg` (game over), `secreta.ogg` (escena secreta + piràmide 6), `menu.ogg` (menú + intros), `banner.ogg` (banner de fase), `final.ogg` (slides finals + crèdits), `piramide_1_4_5.ogg` (gameplay default), `piramide_2.ogg`, `piramide_3.ogg`
- `fonts/8bithud.fnt + .gif` — Bitmap font for overlay (8×8, 124 glyphs, UTF-8 with accents) - `fonts/8bithud.fnt + .gif` — Bitmap font for overlay (8×8, 124 glyphs, UTF-8 with accents)
- `shaders/` — GLSL sources: `postfx.vert`, `postfx.frag`, `upscale.frag`, `downscale.frag`, `crtpi_frag.glsl` - `shaders/` — GLSL sources: `postfx.vert`, `postfx.frag`, `upscale.frag`, `downscale.frag`, `crtpi_frag.glsl`
- `locale/ca.yaml` — UI strings in Valencian (menu titles/items/values, notifications). Edit freely; reload at restart - `locale/ca.yaml` — UI strings in Valencian (menu titles/items/values, notifications). Edit freely; reload at restart

View File

@@ -42,10 +42,10 @@ void ModuleGame::onEnter() {
// fade interpolarien cap a una paleta amb pantalla buida. // fade interpolarien cap a una paleta amb pantalla buida.
this->Draw(); this->Draw();
const char* music = info::ctx.num_piramide == 3 ? "music/00000008.ogg" const char* music = info::ctx.num_piramide == 3 ? "music/piramide_3.ogg"
: info::ctx.num_piramide == 2 ? "music/00000007.ogg" : info::ctx.num_piramide == 2 ? "music/piramide_2.ogg"
: info::ctx.num_piramide == 6 ? "music/00000002.ogg" : info::ctx.num_piramide == 6 ? "music/secreta.ogg"
: "music/00000006.ogg"; : "music/piramide_1_4_5.ogg";
const char* current_music = JA_GetMusicFilename(); const char* current_music = JA_GetMusicFilename();
if ((JA_GetMusicState() != JA_MUSIC_PLAYING) || !current_music || if ((JA_GetMusicState() != JA_MUSIC_PLAYING) || !current_music ||
strcmp(music, current_music) != 0) { strcmp(music, current_music) != 0) {

View File

@@ -11,7 +11,7 @@
namespace scenes { namespace scenes {
void BannerScene::onEnter() { void BannerScene::onEnter() {
playMusic("music/00000004.ogg"); playMusic("music/banner.ogg");
gfx_ = SurfaceHandle("gfx/ffase.gif"); gfx_ = SurfaceHandle("gfx/ffase.gif");

View File

@@ -9,7 +9,7 @@ namespace scenes {
// Banner pre-piràmide ("PIRÀMIDE X"). Reemplaça `ModuleSequence::doBanner()`. // Banner pre-piràmide ("PIRÀMIDE X"). Reemplaça `ModuleSequence::doBanner()`.
// //
// Flux: // Flux:
// 1. Arranca música "music/00000004.ogg" i carrega gfx/ffase.gif. // 1. Arranca música "music/banner.ogg" i carrega gfx/ffase.gif.
// 2. Pinta títol, subtítol i número de piràmide segons info::ctx.num_piramide. // 2. Pinta títol, subtítol i número de piràmide segons info::ctx.num_piramide.
// 3. Fade-in de paleta. // 3. Fade-in de paleta.
// 4. Mostra ~5s o fins que es polse una tecla. // 4. Mostra ~5s o fins que es polse una tecla.

View File

@@ -42,12 +42,12 @@ namespace scenes {
void CreditsScene::onEnter() { void CreditsScene::onEnter() {
// El vell doCredits no tocava música — heretava la del doSlides // El vell doCredits no tocava música — heretava la del doSlides
// previ ("music/00000005.ogg"). Si l'escena s'arrenca directament (test // previ ("music/final.ogg"). Si l'escena s'arrenca directament (test
// amb piramide_inicial=8) no hi ha res que heretar, així que // amb piramide_inicial=8) no hi ha res que heretar, així que
// arranquem la mateixa pista només si no sona res. Inocu en el // arranquem la mateixa pista només si no sona res. Inocu en el
// flux normal: JA_MUSIC_PLAYING fa que no la tornem a tocar. // flux normal: JA_MUSIC_PLAYING fa que no la tornem a tocar.
if (JA_GetMusicState() != JA_MUSIC_PLAYING) { if (JA_GetMusicState() != JA_MUSIC_PLAYING) {
playMusic("music/00000005.ogg"); playMusic("music/final.ogg");
} }
vaddr2_ = SurfaceHandle("gfx/final.gif"); vaddr2_ = SurfaceHandle("gfx/final.gif");

View File

@@ -50,7 +50,7 @@ namespace scenes {
} }
void IntroNewLogoScene::onEnter() { void IntroNewLogoScene::onEnter() {
playMusic("music/00000003.ogg"); playMusic("music/menu.ogg");
gfx_ = SurfaceHandle("gfx/logo_new.gif"); gfx_ = SurfaceHandle("gfx/logo_new.gif");
pal_ = JD8_LoadPalette("gfx/logo_new.gif"); pal_ = JD8_LoadPalette("gfx/logo_new.gif");

View File

@@ -13,7 +13,7 @@ namespace scenes {
// ciclo de paleta final. Reemplaça `ModuleSequence::doIntroNewLogo()`. // ciclo de paleta final. Reemplaça `ModuleSequence::doIntroNewLogo()`.
// //
// Flux: // Flux:
// 1. Carrega gfx/logo_new.gif, arranca música "music/00000003.ogg" i posa // 1. Carrega gfx/logo_new.gif, arranca música "music/menu.ogg" i posa
// la paleta directament (sense fade-in). Mostra pantalla negra 1s. // la paleta directament (sense fade-in). Mostra pantalla negra 1s.
// 2. Revelat: 9 lletres × 2 frames (amb cursor / sense cursor), 150 ms // 2. Revelat: 9 lletres × 2 frames (amb cursor / sense cursor), 150 ms
// cada frame. // cada frame.

View File

@@ -66,7 +66,7 @@ namespace scenes {
} }
void IntroScene::onEnter() { void IntroScene::onEnter() {
playMusic("music/00000003.ogg"); playMusic("music/menu.ogg");
gfx_ = SurfaceHandle("gfx/logo.gif"); gfx_ = SurfaceHandle("gfx/logo.gif");
pal_ = JD8_LoadPalette("gfx/logo.gif"); pal_ = JD8_LoadPalette("gfx/logo.gif");

View File

@@ -15,7 +15,7 @@ namespace scenes {
// `IntroNewLogoScene`. // `IntroNewLogoScene`.
// //
// Flux: // Flux:
// 1. Carrega gfx/logo.gif, arranca música "music/00000003.ogg", pantalla negra // 1. Carrega gfx/logo.gif, arranca música "music/menu.ogg", pantalla negra
// 1000 ms. // 1000 ms.
// 2. Revelat: 15 passos (100 o 200 ms) que van acumulant les lletres // 2. Revelat: 15 passos (100 o 200 ms) que van acumulant les lletres
// "JAILGAMES" d'esquerra a dreta amb un avió escombrant al final // "JAILGAMES" d'esquerra a dreta amb un avió escombrant al final

View File

@@ -10,7 +10,7 @@
namespace scenes { namespace scenes {
void MortScene::onEnter() { void MortScene::onEnter() {
playMusic("music/00000001.ogg"); playMusic("music/mort.ogg");
JI_DisableKeyboard(60); JI_DisableKeyboard(60);
info::ctx.vida = 5; info::ctx.vida = 5;
@@ -44,7 +44,7 @@ namespace scenes {
if (remaining_ms_ <= 0) { if (remaining_ms_ <= 0) {
// Arrenca música del següent mòdul abans del fade out, // Arrenca música del següent mòdul abans del fade out,
// igual que la versió vella feia al final de doMort(). // igual que la versió vella feia al final de doMort().
playMusic("music/00000003.ogg"); playMusic("music/menu.ogg");
info::ctx.num_piramide = 0; info::ctx.num_piramide = 0;
fade_.startFadeOut(); fade_.startFadeOut();
phase_ = Phase::FadingOut; phase_ = Phase::FadingOut;

View File

@@ -9,9 +9,9 @@ namespace scenes {
// Pantalla de "game over". Reemplaça `ModuleSequence::doMort()`. // Pantalla de "game over". Reemplaça `ModuleSequence::doMort()`.
// //
// Flux: // Flux:
// 1. Carrega gfx/gameover.gif, arranca música "music/00000001.ogg", fade-in de paleta. // 1. Carrega gfx/gameover.gif, arranca música "music/mort.ogg", fade-in de paleta.
// 2. Mostra la pantalla ~10 segons o fins que l'usuari polse una tecla. // 2. Mostra la pantalla ~10 segons o fins que l'usuari polse una tecla.
// 3. Arranca música del menú ("music/00000003.ogg") i fade-out de paleta. // 3. Arranca música del menú ("music/menu.ogg") i fade-out de paleta.
// 4. Marca num_piramide=0 i retorna nextState=1 perquè el Director // 4. Marca num_piramide=0 i retorna nextState=1 perquè el Director
// passe a l'escena del menú. // passe a l'escena del menú.
class MortScene : public Scene { class MortScene : public Scene {

View File

@@ -42,7 +42,7 @@ namespace scenes {
} }
void SecretaScene::onEnter() { void SecretaScene::onEnter() {
playMusic("music/00000002.ogg"); playMusic("music/secreta.ogg");
// Fade-out de la paleta anterior. Els assets es carreguen ja // Fade-out de la paleta anterior. Els assets es carreguen ja
// però no fem SetScreenPalette fins que acabe el fade — així // però no fem SetScreenPalette fins que acabe el fade — així

View File

@@ -10,7 +10,7 @@ namespace scenes {
// Pre-Secreta. Reemplaça `ModuleSequence::doSecreta()`. // Pre-Secreta. Reemplaça `ModuleSequence::doSecreta()`.
// //
// Flux: // Flux:
// 1. Arranca música "music/00000002.ogg" i fa fade-out de la paleta anterior. // 1. Arranca música "music/secreta.ogg" i fa fade-out de la paleta anterior.
// 2. Carrega gfx/tomba1.gif + paleta i pinta un scroll vertical doble // 2. Carrega gfx/tomba1.gif + paleta i pinta un scroll vertical doble
// (dos blits solapats, un a velocitat meitat que l'altre) durant // (dos blits solapats, un a velocitat meitat que l'altre) durant
// ~2.5 s + ~2.5 s de pausa. // ~2.5 s + ~2.5 s de pausa.

View File

@@ -40,8 +40,8 @@ namespace scenes {
const char* arxiu = nullptr; const char* arxiu = nullptr;
if (num_piramide_at_start_ == 7) { if (num_piramide_at_start_ == 7) {
// loop=1 per replicar el vell `play_music("00000005.ogg", 1)`. // loop=1 per replicar el vell `play_music("final.ogg", 1)`.
playMusic("music/00000005.ogg", 1); playMusic("music/final.ogg", 1);
arxiu = (info::ctx.diners < 200) ? "gfx/intro2.gif" : "gfx/intro3.gif"; arxiu = (info::ctx.diners < 200) ? "gfx/intro2.gif" : "gfx/intro3.gif";
} else { } else {
arxiu = "gfx/intro.gif"; arxiu = "gfx/intro.gif";

View File

@@ -11,8 +11,8 @@ namespace scenes {
// fade-out. Reemplaça `ModuleSequence::doSlides()`. // fade-out. Reemplaça `ModuleSequence::doSlides()`.
// //
// Tria d'asset segons context: // Tria d'asset segons context:
// - num_piramide == 7 i diners < 200: gfx/intro2.gif + música "music/00000005.ogg" // - num_piramide == 7 i diners < 200: gfx/intro2.gif + música "music/final.ogg"
// - num_piramide == 7 i diners >= 200: gfx/intro3.gif + música "music/00000005.ogg" // - num_piramide == 7 i diners >= 200: gfx/intro3.gif + música "music/final.ogg"
// - altre cas (num_piramide == 1): gfx/intro.gif, sense música nova // - altre cas (num_piramide == 1): gfx/intro.gif, sense música nova
// //
// Flux: // Flux: