Add technical report, update docs/README, remove orphaned victory asset

- Add doc/AScreamFromTheDark_report.md: deep technical report covering
  architecture, features, historical workarounds and known debt.
- Rewrite README.md to reflect the current 'A Scream from the Dark'
  identity (ghost enemy, stamina/jump, fog of war, going-deeper victory)
  instead of the stale 'gioco carino' copy with old file paths.
- Update doc/generation.md: goal is now a random south-edge hatch,
  not the max-Manhattan-distance portal.
- Remove orphaned src/victory.{c,h} and its include in render.c;
  the victory sequence was replaced by the full-screen next_level image.
- Regenerate tracked png2asset outputs to match current build.
This commit is contained in:
2026-06-24 11:11:17 +02:00
parent cc656d01cc
commit 8244790603
20 changed files with 3238 additions and 925 deletions
+58 -60
View File
@@ -1,89 +1,87 @@
# gioco carino (Cute Isometric Game Boy Maze) # A Scream from the Dark
Un motore isometrico sperimentale per Game Boy (DMG/CGB) scritto in C con **GBDK-2020**. Genera un labirinto casuale ed esegue il rendering in proiezione isometrica con autotiling dinamico, movimento interpolato del personaggio, e un set di test automatizzati headless tramite l'emulatore **PyBoy** ed elaborazione d'immagine con **OpenCV**. Un survival-horror procedurale in prospettiva isometrica per Game Boy (DMG/CGB), scritto in C con **GBDK-2020**. Sei imprigionato in un labirinto 7×7 generato casualmente, illuminato solo da un ristretto quadrato di visibilità. Un **fantasma** si nasconde nel buio e ti bracca non appena entri nel suo raggio visivo. L'unica via di fuga è la **botola** sul bordo sud della mappa: raggiungerla significa "sprofondare più giù" (*Going Deeper*) e generare un nuovo livello.
--- ---
## 🎮 Caratteristiche Principali ## 🎮 Caratteristiche
* **Proiezione Isometrica**: Rendering di una mappa 2.5D su schermo Game Boy (tile 32x16 pixel disegnate a diamante). - **Proiezione isometrica 2.5D**: rendering della mappa a diamante (tile 32×16 px) su schermo Game Boy, con autotiling dinamico.
* **Labirinto Casuale Dinamico**: Algoritmo di backtracking iterativo (con stack in WRAM per evitare l'overflow dello stack hardware) che genera ogni volta un percorso 7x7 unico. - **Labirinto casuale**: algoritmo DFS iterativo con stack in WRAM (per evitare overflow dello stack hardware) che genera un "perfect maze" 7×7 unico ad ogni partita, poi "rotto" con riaperture casuali al 15% per creare loop e percorsi alternativi.
* **Movimento Interpolato (Lerp)**: Spostamenti fluidi del personaggio e della telecamera interpolati linearmente su 16 tick macchina. - **Fog of War**: visibilità 5×5 basata sulla distanza di Chebyshev, con affievolimento della luce sui bordi. Il fantasma si attiva solo quando entra in questo riquadro.
* **Delayed Auto Shift (DAS)**: Controlli reattivi e confortevoli con delay iniziale di 12 frame e ripetizione ogni 6 frame per il movimento continuo tenendo premuto il D-Pad. - **Movimento interpolato (LERP)**: spostamenti fluidi del personaggio e della telecamera su 16 tick a punto fisso (no float).
* **Autotiling Intelligente**: Calcolo dei vicini (maschera a 4 bit) per selezionare automaticamente il bordo e gli angoli di ciascuna tessera del pavimento (16 varianti per ognuno dei 2 stili di pavimento alternati a scacchiera). - **Delayed Auto-Shift (DAS)**: controlli alla Tetris — delay iniziale di 12 frame e ripetizione ogni 6 frame per il movimento continuo tenendo premuto il D-Pad.
* **Pipeline di Asset Ottimizzata**: Generazione procedurale di tile e sprite da script Python (`generate_assets.py`) e compilazione in C tramite `png2asset`. - **Salto evasivo con Stamina**: A+direzione scavalca il blocco adiacente atterrando 2 tile più in là (la cella intermedia deve essere un muro). Costa 60 punti stamina; la barra si ricarica di 1 punto al secondo.
- Animazione completa dei movimenti del giocatore. - **AI del fantasma**: pathfinding greedy con distanza al quadrato (niente sqrt, niente A*), cooldown di 1 secondo tra i passi, hitbox pixel-perfect (12×6 px) per una morte "giusta".
- Transizione al Game Over alla collisione. - **Audio procedurale**: colonna sonora sintetizzata manipolando direttamente i registri APU via VBL interrupt (nessun campione).
- Menu Iniziale con copertina d'arte a 2-bit nativa per hardware Game Boy. - **Schermate a tutto schermo**: copertina 2-bit nativa per il titolo, immagine "Going Deeper" per la vittoria, metasprite "GAME OVER" per la sconfitta.
- **Test headless**: pipeline di verifica con PyBoy + OpenCV senza emulatore grafico.
### Soundtrack ### Soundtrack
Il gioco implementa la musica generata proceduralmente manipolando i registri audio hardware del Game Boy in `engine.c`. 1. **Title Theme**: solenne e misteriosa, 32 battute sugli accordi La minore, Sol, Fa e Mi.
2. **Gameplay Theme**: battito ritmico ansioso ("eerie pulse") che accelera la tensione dell'inseguimento.
1. **Title Theme:** Una solenne e misteriosa melodia composta da 32 battute basata sugli accordi La minore, Sol, Fa e Mi, che accompagna la schermata d'avvio a schermo intero. 3. **Game Over Theme**: concerto tragico polifonico di 128 note con percussioni (noise channel), basso virtuoso e drammatica discesa melodica.
2. **Gameplay Theme:** Un battito ritmico ansioso che accelera progressivamente l'intensità all'inseguimento del fantasma, aumentando la pressione psicologica sul giocatore. 4. **Going Deeper**: melodia misteriosa discendente di 96 step (Am → Fmaj7 → Dm → E7 → C aug → abisso).
3. **Game Over Theme:** Un concerto tragico polifonico di 128 note con percussioni sinfoniche, basso virtuoso e drammatica discesa melodica, per sottolineare la sconfitta del giocatore.
## Compilazione
Assicurati di aver installato [GBDK-2020](https://github.com/gbdk-2020/gbdk-2020).
--- ---
## 🛠️ Dettagli Tecnici ## 🛠️ Dettagli tecnici
### Architettura dei File ### Architettura dei file
* [main.c](file:///home/enne2/dev/gameboy-hello/iso_test/main.c): Punto di ingresso del gioco. Esegue l'inizializzazione del ciclo macchina e del joypad e si sincronizza con l'intervallo di VBlank (`wait_vbl_done()`). - [`main.c`](src/main.c): entry point, loop VBL sincronizzato, macchina a stati `app_state` (0 = title, 1 = game).
* [engine.c](file:///home/enne2/dev/gameboy-hello/iso_test/engine.c) / [engine.h](file:///home/enne2/dev/gameboy-hello/iso_test/engine.h): Core del motore isometrico. Contiene la logica del labirinto, l'autotiling, lo scorrimento della telecamera, l'interpolazione del movimento e il supporto DAS. - [`engine.c`](src/engine.c) / [`engine.h`](src/engine.h): "direttore d'orchestra" — `title_init/update`, `engine_init`, `engine_update`.
* [player.c](file:///home/enne2/dev/gameboy-hello/iso_test/player.c) / [player.h](file:///home/enne2/dev/gameboy-hello/iso_test/player.h) & [tiles.c](file:///home/enne2/dev/gameboy-hello/iso_test/tiles.c) / [tiles.h](file:///home/enne2/dev/gameboy-hello/iso_test/tiles.h): Asset grafici compilati (metasprite per il giocatore in 4 direzioni e varianti di piastrelle). - [`globals.c`](src/globals.c) / [`globals.h`](src/globals.h): stato globale centralizzato (mappa, camera, player, enemy, stamina, `game_over`) per evitare dipendenze circolari tra moduli.
* [generate_assets.py](file:///home/enne2/dev/gameboy-hello/iso_test/generate_assets.py): Script Python PIL per generare le texture di tiles e sprite a partire da matrici di pixel. - [`maze.c`](src/maze.c): generazione procedurale DFS + loop + posizionamento botola.
- [`player_logic.c`](src/player_logic.c): input, DAS, state machine del movimento, salto, stamina.
- [`enemy_logic.c`](src/enemy_logic.c): AI greedy, cooldown, rendering nemico, hitbox pixel-perfect.
- [`render.c`](src/render.c): proiezione isometrica, fog of war, autotiling multi-pass, stamina UI, sprite player.
- [`sound.c`](src/sound.c): sequencer audio via VBL interrupt, 4 tracce.
- `tiles.c / player.c / enemy.c / gameover.c / next_level.c / stamina.c / title_bg.c`: asset generati da `png2asset`.
- [`scripts/`](scripts/): generazione procedurale di tile/sprite (`generate_assets.py`, `generate_enemy.py`), quantizzazione immagini (`process_next_level.py`), test headless.
### Formato delle Coordinate Isometriche ### Formato delle coordinate isometriche
Le coordinate logiche del labirinto $2D$ `(lx, ly)` vengono convertite in coordinate dello schermo Game Boy `(iso_x, iso_y)` per i background tiles tramite la seguente formula: Le coordinate logiche `(lx, ly)` vengono convertite in coordinate schermo `(iso_x, iso_y)`:
$$iso\_x = (lx - ly) \times 2 + 12$$ ```
$$iso\_y = (lx + ly) \times 1 + 2$$ iso_x = (lx - ly) * 2 + 12
Questo permette di mappare una griglia ruotata a diamante perfettamente centrata nello spazio di visualizzazione. iso_y = (lx + ly) * 1 + 2
```
e in coordinate pixel fisiche per camera/collisione:
```
px = (lx - ly) * 16 + 96
py = (lx + ly) * 8 + 16
```
Camera centrata: `scroll_x = px - 64`, `scroll_y = py - 72`.
Per un'analisi approfondita di codice, funzionalità e workaround storici, vedi [`doc/AScreamFromTheDark_report.md`](doc/AScreamFromTheDark_report.md).
--- ---
## 🚀 Requisiti e Build ## 🚀 Requisiti e build
### Prerequisiti ### Prerequisiti
1. **GBDK-2020**: Installato in `/home/enne2/.local/gbdk`. 1. **GBDK-2020** installato in `/home/enne2/.local/gbdk`.
2. **Python 3**: Con i seguenti pacchetti installati per i test e la rigenerazione degli asset: 2. **Python 3** con i pacchetti per la rigenerazione degli asset e i test:
```bash ```bash
pip install --user Pillow pyboy opencv-python numpy pip install --user Pillow pyboy opencv-python numpy
``` ```
### Compilazione ### Compilazione
Per compilare la ROM ed esportare `hello_iso.gb`:
```bash ```bash
make clean && make make clean && make
``` ```
Questo comando: Questo comando:
1. Esegue `generate_assets.py` per creare `tiles.png` e `player.png`. 1. Esegue gli script Python per creare `tiles.png`, `player.png`, `enemy.png`.
2. Usa `png2asset` per convertire le PNG in codice sorgente C. 2. Usa `png2asset` per convertire i PNG in sorgenti C.
3. Usa il compilatore `lcc` di GBDK per compilare e linkare tutti i file sorgente C nella ROM finale. 3. Usa il compilatore `lcc` di GBDK per compilare e linkare i sorgenti in `build/hello_iso.gb` (e `build/test_gameover.gb`).
--- ---
## 🧪 Test e Analisi Automatica ## 🧪 Test e analisi automatica
Il progetto include tre livelli di verifica headless per testare la correttezza logica e visuale senza avviare manualmente un emulatore grafico. 1. **Screenshot** — `python3 scripts/test_pyboy.py`: avvia la ROM in PyBoy per 120 frame e salva `assets/hello_iso_gb.png`.
2. **Test di movimento in WRAM** — `python3 scripts/test_movement.py`: legge la griglia del labirinto in WRAM (indirizzo risolto dinamicamente via `hello_iso.noi`) e simula pressioni direzionali verificando `player_lx/ly`.
3. **Rilevamento glitch con OpenCV** — `python3 scripts/opencv_analyze_tiles.py`: esamina lo screenshot cercando disallineamenti o buchi neri tra le giunzioni isometriche.
4. **ROM di test isolata** — `make build/test_gameover.gb`: renderizza solo player + metasprite GAME OVER per validare la schermata di sconfitta.
1. **Generazione Screenshot**: La documentazione tecnica dettagliata per modulo è in [`doc/`](doc/).
```bash
python3 test_pyboy.py
```
Avvia la ROM in PyBoy per 120 frame e salva un'immagine `hello_iso_gb.png` del display.
2. **Test di Movimento in WRAM**:
```bash
python3 test_movement.py
```
Carica la ROM in PyBoy, legge lo stato della griglia del labirinto in WRAM (a partire dall'indirizzo `0xC0B1`) e simula la pressione dei tasti direzionali, verificando che la posizione del player (indirizzi `0xC4F4` e `0xC4F5`) cambi correttamente secondo le collisioni calcolate.
3. **Rilevamento Glitch con OpenCV**:
```bash
python3 opencv_analyze_tiles.py
```
Utilizza OpenCV per esaminare lo screenshot generato, cercando disallineamenti o buchi neri tra le giunzioni delle piastrelle isometriche, segnalando eventuali problemi di rendering.
+185
View File
@@ -0,0 +1,185 @@
# A Scream from the Dark — Report Tecnico Approfondito
> Labirinto isometrico con inseguimento per Game Boy (DMG/CGB), scritto in C con **GBDK-2020**.
> Repository: `gameboy-hello-iso` · Target ROM: `build/hello_iso.gb` (32 KB).
> ~5941 righe di C/H + ~1710 righe di script Python per la pipeline asset.
---
## 1. Identità del gioco
"A Scream from the Dark" è un piccolo survival-horror procedurale in prospettiva isometrica 2.5D. Il giocatore è imprigionato in un labirinto 7×7 generato casualmente, illuminato solo da un ristretto quadrato di visibilità (Fog of War). Un **fantasma** si nasconde nel buio e bracca il giocatore non appena entra nel suo riquadro visivo (5×5). L'unica via di fuga è una **botola** (`maze[y][x] == 2`) piazzata sul bordo sud della mappa: raggiungerla significa "sprofondare più giù" (*Going Deeper*) e avanzare di livello.
Loop di gioco:
1. **Title screen** — copertina 2-bit + tema solenne/misterioso (32 battute).
2. **Gameplay** — esplorazione a griglia con movimento interpolato, salto evasivo a consumo di stamina, AI greedy del fantasma, hitbox pixel-perfect.
3. **Game Over (Sconfitta)** — "fermo immagine" drammatico di 45 frame → schermo nero → metasprite `GAME OVER` + concerto tragico polifonico di 128 note con percussioni (noise channel).
4. **Going Deeper (Vittoria)** — reset scroll + immagine a tutto schermo `next_level.png` + melodia misteriosa discendente di 96 step. Premi START per rigenerare un nuovo livello.
---
## 2. Architettura del codice
### 2.1 Organizzazione modulare
Il progetto nasceva da un monolite `engine.c` di oltre 1000 righe, poi rifattorizzato in moduli a singola responsabilità. L'orchestrazione avviene in `main.c` / `engine.c`; lo stato mutabile è centralizzato in `globals.c`/`globals.h` per evitare dipendenze circolari tra moduli C.
| File | Ruolo |
|------|-------|
| `main.c` | Entry point, loop VBL, macchina a stati `app_state` (0=title, 1=game). |
| `engine.c` | "Direttore d'orchestra": `title_init/update`, `engine_init`, `engine_update`. |
| `globals.c/h` | Stato globale: mappa, camera, player, enemy, stamina, game_over. |
| `maze.c` | Generazione procedurale DFS + creazione loop + posizionamento botola. |
| `player_logic.c` | Input, DAS, state machine del movimento, salto, stamina. |
| `enemy_logic.c` | AI greedy, cooldown, rendering nemico, hitbox pixel-perfect. |
| `render.c` | Proiezione isometrica, fog of war, autotiling, multi-pass, stamina UI, sprite player. |
| `sound.c` | Sequencer audio via VBL interrupt, 4 tracce (title/gameplay/gameover/next_level). |
| `tiles.c/player.c/enemy.c/gameover.c/next_level.c/stamina.c/title_bg.c` | Asset generati da `png2asset`. |
### 2.2 Pipeline asset (Python → C)
`scripts/generate_assets.py` (PIL) produce `tiles.png`/`player.png` da matrici di pixel; `generate_enemy.py` genera il fantasma; `process_next_level.py` quantizza `next_level_original.png` a 4 livelli con soglie fisse. Il `Makefile` poi invoca `png2asset` per convertire ogni PNG in `src/*.c` (map, metasprite, tile data). `make clean` cancella anche i C generati, forzando la rigenerazione.
---
## 3. Funzionalità chiave in dettaglio
### 3.1 Proiezione isometrica
Conversione griglia logica `(lx,ly)` → schermo:
```
iso_x = (lx - ly) * 2 + 12 // tile 32x16 → metà larghezza
iso_y = (lx + ly) * 1 + 2 // tile altezza 8px logica
```
Coordinate fisiche pixel del player/nemico usate per camera & collision:
```
px = (lx - ly) * 16 + 96
py = (lx + ly) * 8 + 16
```
Camera centrata: `scroll_x = px - 64`, `scroll_y = py - 72` (160×144 display → centro 80×72, con offset hardware).
### 3.2 Generazione del labirinto (`maze.c`)
- **DFS iterativo con stack in WRAM** (`stack_x[49]/stack_y[49]`): evita l'overflow dello stack hardware del LR35902 ricorrendo a un array in RAM. Celle dispari = stanze, celle pari = muri divisori; scava il muro di mezzo con la media aritmetica delle coordinate.
- **Fase 2 — loop**: riapre muri residui che collegano due corridoi opposti con probabilità 15%. Vitale per il gameplay d'inseguimento (permette di aggirare il fantasma).
- **Fase 3 — botola**: sceglie un punto **casuale** sul bordo sud (`y = MAP_SIZE-2`) tra le celle calpestabili, invece della "distanza di Manhattan massima" originaria (la doc `generation.md` è rimasta indietro rispetto al codice: vedi §7 Incongruenze). Fallback estremo su `(5,5)` se la riga fosse inaccessibile.
### 3.3 Movimento & DAS (`player_logic.c`)
- **State machine rigida**: durante `is_moving` (16 frame di LERP) ogni input è ignorato → movimento strettamente grid-based stile Zelda/Pokémon.
- **LERP** a punto fisso: `px = start_px + ((target_px - start_px) * move_progress) >> 4` (divisione per 16 via shift, no float).
- **DAS (Delayed Auto Shift)** alla Tetris: `DAS_DELAY=12` frame di attesa iniziale, poi `DAS_REPEAT=6` frame tra ripetizioni. `keys_pressed = keys & ~prev_keys` rileva il fronte di salita.
- **Salto evasivo**: A+direzione → atterraggio 2 tile più in là. Condizioni: cella intermedia DEVE essere muro (`maze==0`), cella di arrivo pavimento/vittoria, stamina ≥ 60. Consuma 60 stamina. L'arco parabolico è solo visivo: `y_offset = (move_progress * (16 - move_progress)) >> 2` (apice 16px a frame 8). La logica resta 2D.
- **Stamina**: ricarica 1 punto/s (60 frame). Barra UI a 5 segmenti sprite (ID 1822) in alto a destra, conversione `stamina*40/100` → pixel.
### 3.4 Fog of War (`render.c` + `enemy_logic.c`)
Distanza di **Chebyshev** `max(|dx|,|dy|)` invece di euclidea (no sqrt, no lookup): quadrato di visibilità 5×5.
- `dist > 2` → cella non disegnata (nera).
- `dist == 2` → offset grafico scuro ("Tile Dark") per simulare affievolimento della luce prima del buio.
- Il nemico si "sveglia" e insegue solo se `dist <= 2` (entra nel cono visivo): coerente con la nebbia.
### 3.5 Autotiling & multi-pass rendering
- **Maschera a 4 bit** sui vicini (TL, TR, BL, BR) per scegliere varianti di bordo/angolo (16 varianti × 2 stili di pavimento alternati a scacchiera `is_alt = (lx+ly)%2==0`).
- **Problema overlapping isometrico**: il background GB non ha trasparenza hardware; i tile disegnati dopo "tagliano" quelli prima con angoli piatti. Soluzione ibrida:
1. **Pass 1**: pavimenti normali con bitmasking dinamico degli angoli (ricolorano in base al vicino).
2. **Pass 2**: la botola (oggetto complessa, 243+81+162 varianti con maschera a 4 vicini `state_tl + state_tr*3 + state_bl*9 + state_br*27`) disegnata **per ultima**, sovrascrive i pavimenti frontali ma si fonde grazie alle maschere dei propri angoli inferiori.
- Questo evita l'uso di sprite hardware per la botola (che causerebbero flickering per il limite di 10 sprite/scanline) e contiene il consumo di VRAM (limite 256 tile).
### 3.6 Ottimizzazione rendering
Trasferisce solo le 16 righe visibili invece di tutte le 32: `set_bkg_tiles(0, 2, 32, 16, &map_buffer[2*32])`. Aggiornamento a `move_progress==8` (metà passo) per fluidità del fog of war. `map_buffer` usato con wrap `& 31` per gestire lo scroll modulare.
### 3.7 AI del fantasma (`enemy_logic.c`)
- **Greedy invece di A***: confronta la distanza al quadrato `dx²+dy²` delle 4 celle adiacenti calpestabili e sceglie la minima. No sqrt (pesante su 4 MHz), no heap/nodi (frame drops inammissibili). Difetto voluto: si incastra in vicoli a U → diventa una dinamica di gameplay (seminarlo col level design).
- **Cooldown**: dopo ogni passo (16 frame di LERP) rimane congelato 60 frame (1 s). Il giocatore è più veloce → il salto evasivo è il salvavita.
- **Hitbox pixel-perfect**: la morte non scatta per coincidenza di cella logica, ma per sovrapposizione dei pixel fisici con tolleranza `|dx|<12 && |dy|<6`. Più "giusta" agli occhi del giocatore.
- Culling off-screen: `enemy_screen_x` e `_y` con wrap `& 255` + soglie `-8..168` / `-8..152`; se fuori range o `ep_dist > 2` lo sprite viene spostato a `(0,0)` (offscreen).
### 3.8 Audio (`sound.c`)
Sequencer agganciato al **VBL interrupt** (`add_VBL(play_music_tick)`), ~60 Hz, non blocca il rendering. Usa i 4 canali APU:
- **CH1** (pulse+sweep): arpeggi rapidi (gameover/next_level), tema title.
- **CH2** (pulse): bassi/melodie tenute (gameover ch2_seq, basso title/next_level un'ottava sotto con `n/2`).
- **CH4** (noise): percussioni — `step%8==0` trigger; freq `0x68` (thud basso) per `step<64`, `0x42` (crash) per `step>=64`.
- **CH3** (wave): non utilizzato.
Tracce:
- **Title**: `title_melody[32]`, 30 frame/nota, basso ogni 4 step, accordi AmGFE.
- **Gameplay**: `eerie_reg_vals[96]`, 20 frame/nota, pattern A minD minE7 (ansia crescente).
- **Game Over**: `ch1_seq[128]` + `ch2_seq[128]`, 10 frame/nota, 16 accordi con intensificazione (arpeggi più alti nella seconda metà).
- **Going Deeper**: `next_level_seq[96]`, 15 frame/nota, 6 sezioni (Am, Fmaj7, Dm, E7, C aug, discesa finale nel buio `N_G2 N_E3 N_C3… N_C2 R…`).
Frequenze delle note: costanti `N_*` precalcolate come `(2048 - 131072/freq)` → scritte direttamente in `NR13/NR23` (low) e `NR14/NR24` (high | 0x80 trigger).
---
## 4. Workaround e fix storici (dalla git history)
La cronologia di 23 commit racconta un'intensa fase di caccia ai bug hardware-specifici del Game Boy. Riepilogo dei workaround più significativi:
| Commit | Problema | Workaround |
|--------|----------|------------|
| `93deb35` | **VRAM shared memory overlap**: i tile della stamina UI (sprite) sovrascrivevano i tile del background perché caricati nello stesso blocco VRAM. | Caricare `stamina_tiles` **dopo** i background tile e a partire da `tiles_TILE_COUNT` (indici ≥128, fuori dal blocco condiviso). `base_tile = tiles_TILE_COUNT` in `update_stamina_display`. |
| `6d94992` | **2-frame lag tra tile**: il DAS non era sincronizzato col ciclo di movimento. | Sincronizzazione del timer DAS con la state machine del passo. |
| `7d85aec` | Labirinto "perfetto" intrappolava il giocatore. | Fase 2: riapertura casuale 15% dei muri → loop evasivi. |
| `b47455c` | Offset rendering nemico errato + collisione approssimata. | Calcolo `screen_x = ((px - scroll) & 255) + 24/+16` e hitbox pixel-perfect 12×6. |
| `c983631` | Palette sprite errata per il nemico su DMG + game over troppo brusco. | `OBP1_REG = 0x1B` (palette invertita per fantasma bianco) + `game_over_timer` di delay. |
| `e07e8c6` | Nemico invisibile fuori schermo a causa dello scroll. | Wrap `& 255` + culling con soglie fisiche. |
| `8d71a23` / `1b0e1a0` | Artefatti sprite sulle scale. | Primo tentativo sprite-based con `-spr8x16`, poi **revert** a tile-based (le scale tornano nel background). |
| `f14e264` | Scale come ostacolo bloccava il fantasma. | Ridisegno come **botola nel terreno**: il fantasma può camminarci sopra (tile 2 è calpestabile per l'AI: `maze[ly][lx] != 0`). |
| `cb19677` | Glitch immagine next_level + scroll non allineato. | Reset `SCX_REG=SCY_REG=0` prima di mostrare l'immagine a tutto schermo + miglioramento quantizzazione colore. |
| `d8fd746` | Quantizzazione dell'immagine perdeva i toni scuri. | Soglie fisse in `process_next_level.py`: `<40` nero, `40128` grigio scuro (85), `128200` grigio chiaro (170), `≥200` bianco. |
| `cc656d0` | Musica next_level poco udibile + fine brusco. | Envelope più alto (`NR12_REG=0xC5`) e discesa graduale fino a `N_C2 R…`. |
**Pattern ricorrente di workaround GB**: ogni "feature" ha dovuto litigare con i limiti hardware — VRAM da 256 tile condivisa tra BG e sprite, assenza di trasparenza nel background, limite 10 sprite/scanline, CPU 4 MHz senza FPU, stack da 8 bit. La filosofia è **"ingannare l'hardware con la matematica"**: LERP a punto fisso, distanze al quadrato/Chebyshev, multi-pass con bitmasking, sequencer audio via interrupt.
---
## 5. Test & verifica headless
Pipeline di verifica senza emulatore grafico (PyBoy + OpenCV):
1. **`test_pyboy.py` / `take_screenshot.py`**: avvia la ROM in PyBoy per N frame e salva screenshot (`hello_iso_gb.png`).
2. **`test_movement.py`**: legge la griglia maze in WRAM (indirizzo cercato dinamicamente via `hello_iso.noi`) e simula pressioni direzionali, verificando `player_lx/ly`. Nota: lo script cerca `hello_iso.noi` ma il Makefile produce `test_gameover.noi` in `build/` — potenziale incongruenza di percorso (vedi §7).
3. **`opencv_analyze_tiles.py` / `opencv_check_centering.py`**: rilevano disallineamenti/buchi neri tra giunzioni isometriche e centratura.
4. **`test_gameover_render.c`** + target `test_gameover.gb`: ROM standalone che renderizza solo player + metasprite GAME OVER per validare visivamente la schermata di sconfitta isolata.
---
## 6. Punti di forza tecnici
- **Modularizzazione pulita** con stato centralizzato: leggibile e manutenibile nonostante i vincoli embedded.
- **Commenti didattici** in italiano: ogni modulo spiega il *perché* delle scelte (es. "non usiamo sqrt perché troppo costosa"), utile come materiale di studio GB dev.
- **Niente float**: tutto a punto fisso con shift (`>> 4`, `>> 2`), essenziale sul LR35902.
- **Audio interamente procedurale**: nessun campione, solo registri APU; la ROM resta compatta (32 KB).
- **Pipeline asset riproducibile**: `make clean && make` rigenera tutto da PNG sorgenti.
---
## 7. Incongruenze, debiti tecnici e osservazioni
1. **README obsoleto**: il `README.md` storico parlava di "gioco carino", titoli `file:///home/enne2/dev/gameboy-hello/iso_test/...` (percorso storico diverso da quello attuale `gameboy-hello-iso`) e non menzionava "A Scream from the Dark", né il salto/stamina/fantasma/botola. Risolto in questa revisione allineando il README all'identità attuale.
2. **`doc/generation.md` vs `maze.c`**: la doc descriveva il posizionamento del traguardo via **distanza di Manhattan massima**; il codice attuale sceglie invece un **punto casuale sul bordo sud**. Risolto in questa revisione aggiornando `doc/generation.md`.
3. **`victory.c/h` orfani**: l'asset `victory` (scritta VITTORIA) era ancora compilato e incluso da `render.c` ma la sequenza di vittoria è stata sostituita dall'immagine a tutto schermo `next_level` (commit `3aa20fd`). Risolto in questa revisione rimuovendo l'inclusione e i file morti.
4. **`test_movement.py`**: cerca `hello_iso.noi` nella cwd, ma il `.noi` viene generato in `build/` (per `test_gameover`); per la ROM principale il `.noi` non è tra i target Makefile espliciti. Lo script può fallire se eseguito fuori da `build/`. (Osservazione residua, non bloccante.)
5. **`game_over` come `volatile`**: marcato `volatile` in `globals.h` (corretto, modificato da ISR audio/VBL), ma alcuni aggiornamenti avvengono anche dal main loop non-atomic — in pratica sicuro perché la lettura/scrittura è a 8 bit sul LR35902 (atomica), ma vale la pena documentarlo.
6. **`app_state` ridefinito** in `globals.h` e `engine.h` (entrambi `extern uint8_t app_state`): duplicazione inoffensiva ma ridondante.
7. **Spawn player fallback**: ricerca la prima cella libera se `(1,1)` è muro (teoricamente impossibile col DFS partendo da 1,1) — difensivo, buon codice.
8. **`title_update` vuoto**: il loop del titolo non fa nulla a parte il polling (gestito in `main.c`). La musica continua via interrupt. Pulito ma il corpo vuoto andrebbe commentato o rimosso se non serve estensione futura.
9. **Costante `N_E2 = 458`** in `next_level_seq` mentre le altre note `N_*2` sono nell'ordine di 44961: c'è un salto numerico marcato. `N_C2=44` è la nota più grave (registro APU = 44 → freq ~131 Hz, Do2). `N_E2=458` non segue la formula `2048-131072/f` in modo coerente con gli altri `N_*2` (es. `N_D2` non è definito): vale la pena verificare che la discesa finale `N_G2 N_E3 N_C3 … N_E2 N_C3 N_G2 … N_C2` suoni effettivamente come inteso. Sospetto di coerenza tonale da validare all'ascolto.
---
## 8. Mappa mentale del flusso runtime
```
main.loop (VBL-synced)
├─ app_state==0 → title_update (no-op) [musica: VBL interrupt → play_music_tick]
│ └─ J_START fronte → engine_init()
└─ app_state==1 → engine_update
├─ if game_over:
│ ├─ game_over_timer>0 → countdown; a 0: svuota BG (sconfitta) o mostra next_level (vittoria)
│ ├─ timer==0 → metasprite GAME OVER + player + (enemy se vicino)
│ └─ J_START → engine_init() (riavvio)
├─ update_enemy_logic() [AI greedy, cooldown, hitbox → game_over=1]
└─ update_player_movement [DAS, LERP, salto, stamina, vittoria → game_over=2]
└─ durante is_moving: scroll/move_bkg + draw_map a frame 8 + sprite
```
---
## 9. Conclusione
"A Scream from the Dark" è un piccolo gioiello di ingegneria embedded: realizza proiezione isometrica, generazione procedurale, AI di inseguimento, audio polifonico e un'interfaccia stamina — tutto nei 32 KB e 8 KB WRAM di un Game Boy del 1989. Il valore didattico è alto: ogni modulo è un caso di studio su come **tradurre feature "moderne" in matematica a punto fisso e gestione diretta dei registri hardware**. Le incongruenze principali erano cosmetiche (README/doc da allineare all'identità attuale, asset `victory` orfano) e non intaccavano la correttezza; sono state risolte in questa revisione. Il codice è in ottima forma per essere esteso (più livelli con difficoltà crescente, nuovi nemici, oggetti raccoglibili) o usato come base per tutorial di sviluppo GB.
+6 -3
View File
@@ -17,7 +17,10 @@ Un "Perfect Maze" è frustrante in un gioco di inseguimento, perché intrappola
Pertanto, è stata aggiunta una *Fase 2* alla generazione: l'algoritmo scansiona i muri rimanenti e, se un muro divide due stanze adiacenti, lo abbatte con una probabilità del 15%. Pertanto, è stata aggiunta una *Fase 2* alla generazione: l'algoritmo scansiona i muri rimanenti e, se un muro divide due stanze adiacenti, lo abbatte con una probabilità del 15%.
Questo genera anelli (loop) all'interno del labirinto, permettendo al giocatore tattiche evasive per aggirare il fantasma. Questo genera anelli (loop) all'interno del labirinto, permettendo al giocatore tattiche evasive per aggirare il fantasma.
## Posizionamento del Traguardo (Vittoria) ## Posizionamento del Traguardo (La Botola)
La casella traguardo (il "Portale") deve essere logicamente il punto più lontano dalla partenza (situata in alto a sinistra a `1,1`). La casella traguardo è una **botola** nel terreno (ID 2) che il giocatore deve raggiungere per "sprofondare più giù" (*Going Deeper*) e avanzare di livello.
Per trovarla, l'algoritmo calcola la **Distanza di Manhattan** (`|X1 - X2| + |Y1 - Y2|`) di ogni cella percorribile rispetto a `1,1`. La cella con il valore più alto viene designata con ID 2, trasformandola graficamente nel portale di fine livello. Invece di cercare il punto matematicamente più lontano dalla partenza, l'algoritmo attuale sceglie un **punto casuale sul bordo sud** della mappa (`y = MAP_SIZE - 2`) tra le celle calpestabili di quella riga. Questo permette alla botola di apparire in una posizione imprevedibile lungo il bordo sud ad ogni partita.
Se, per un caso limite, la riga in fondo fosse inaccessibile, esiste un **fallback estremo** che posiziona la botola nell'angolo `(MAP_SIZE-2, MAP_SIZE-2)`.
Nota: storicamente il posizionamento usava la **Distanza di Manhattan** massima rispetto a `1,1`; il comportamento è stato cambiato per aumentare la varietà delle partite. La botola è disegnata con un oggetto complesso a maschera 4-vicini nel Pass 2 del renderer (vedi `graphics.md`).
+161 -42
View File
@@ -1,5 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /enemy.png -c /enemy.c -sw 16 -sh 16 -bpp 2 -noflip -keep_palette_order -sp 0x10
#include <stdint.h> #include <stdint.h>
#include <gbdk/platform.h> #include <gbdk/platform.h>
@@ -8,50 +7,170 @@
BANKREF(enemy) BANKREF(enemy)
const palette_color_t enemy_palettes[32] = { const palette_color_t enemy_palettes[32] = {
RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33), RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33)
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0) RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
}; ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
};
const uint8_t enemy_tiles[512] = { const uint8_t enemy_tiles[512] = {
0x07,0x07,0x08,0x0f,0x17,0x18,0x1f,0x12,0x1c,0x13,0x3f,0x23,0x2e,0x31,0x17,0x18, 0x07,0x07,0x08,0x0f,
0x09,0x0e,0x09,0x0e,0x04,0x07,0x04,0x07,0x05,0x06,0x0b,0x0d,0x06,0x06,0x00,0x00, 0x17,0x18,0x1f,0x12,
0xc0,0xc0,0x20,0xe0,0xd0,0x30,0xf0,0x50,0x70,0x90,0xf0,0x90,0xf8,0x18,0xfc,0x04, 0x1c,0x13,0x3f,0x23,
0xf8,0x08,0xf0,0x30,0xc0,0x40,0xc0,0x40,0xc0,0x40,0x80,0x80,0x00,0x00,0x00,0x00, 0x2e,0x31,0x17,0x18,
0x07,0x07,0x08,0x0f,0x17,0x18,0x1f,0x12,0x1c,0x13,0x1f,0x13,0x2e,0x31,0x27,0x38, 0x09,0x0e,0x09,0x0e,
0x13,0x1c,0x09,0x0e,0x04,0x07,0x04,0x07,0x05,0x06,0x02,0x03,0x01,0x01,0x00,0x00, 0x04,0x07,0x04,0x07,
0xc0,0xc0,0x20,0xe0,0xd0,0x30,0xf0,0x50,0x70,0x90,0xf0,0x90,0xf8,0x18,0xfc,0x04, 0x05,0x06,0x0b,0x0d,
0xf8,0x08,0xf0,0x30,0xc0,0x40,0xc0,0x40,0xc0,0x40,0xc0,0x40,0x80,0x80,0x00,0x00, 0x06,0x06,0x00,0x00,
0x03,0x03,0x04,0x07,0x0b,0x0c,0x0f,0x0a,0x0e,0x09,0x0f,0x09,0x1f,0x18,0x3f,0x20,
0x1f,0x10,0x0f,0x0c,0x03,0x02,0x03,0x02,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00, 0xc0,0xc0,0x20,0xe0,
0xe0,0xe0,0x10,0xf0,0xe8,0x18,0xf8,0x48,0x38,0xc8,0xfc,0xc4,0x74,0x8c,0xe8,0x18, 0xd0,0x30,0xf0,0x50,
0x90,0x70,0x90,0x70,0x20,0xe0,0x20,0xe0,0xa0,0x60,0xd0,0xb0,0x60,0x60,0x00,0x00, 0x70,0x90,0xf0,0x90,
0x03,0x03,0x04,0x07,0x0b,0x0c,0x0f,0x0a,0x0e,0x09,0x0f,0x09,0x1f,0x18,0x3f,0x20, 0xf8,0x18,0xfc,0x04,
0x1f,0x10,0x0f,0x0c,0x03,0x02,0x03,0x02,0x03,0x02,0x03,0x02,0x01,0x01,0x00,0x00, 0xf8,0x08,0xf0,0x30,
0xe0,0xe0,0x10,0xf0,0xe8,0x18,0xf8,0x48,0x38,0xc8,0xf8,0xc8,0x74,0x8c,0xe4,0x1c, 0xc0,0x40,0xc0,0x40,
0xc8,0x38,0x90,0x70,0x20,0xe0,0x20,0xe0,0xa0,0x60,0x40,0xc0,0x80,0x80,0x00,0x00, 0xc0,0x40,0x80,0x80,
0x03,0x03,0x04,0x07,0x0b,0x0c,0x0f,0x08,0x0f,0x08,0x0f,0x08,0x1f,0x18,0x3f,0x20, 0x00,0x00,0x00,0x00,
0x1f,0x10,0x0f,0x0c,0x03,0x02,0x03,0x02,0x03,0x02,0x01,0x01,0x00,0x00,0x00,0x00,
0xe0,0xe0,0x10,0xf0,0xe8,0x18,0xf8,0x08,0xf8,0x08,0xf8,0x08,0xe8,0x18,0xd0,0x30, 0x07,0x07,0x08,0x0f,
0x90,0x70,0x90,0x70,0x20,0xe0,0x20,0xe0,0xa0,0x60,0xd0,0xb0,0x60,0x60,0x00,0x00, 0x17,0x18,0x1f,0x12,
0x03,0x03,0x04,0x07,0x0b,0x0c,0x0f,0x08,0x0f,0x08,0x0f,0x08,0x1f,0x18,0x3f,0x20, 0x1c,0x13,0x1f,0x13,
0x1f,0x10,0x0f,0x0c,0x03,0x02,0x03,0x02,0x03,0x02,0x03,0x02,0x01,0x01,0x00,0x00, 0x2e,0x31,0x27,0x38,
0xe0,0xe0,0x10,0xf0,0xe8,0x18,0xf8,0x08,0xf8,0x08,0xf8,0x08,0xe8,0x18,0xd0,0x30, 0x13,0x1c,0x09,0x0e,
0x90,0x70,0x90,0x70,0x20,0xe0,0x20,0xe0,0xa0,0x60,0x40,0xc0,0x80,0x80,0x00,0x00, 0x04,0x07,0x04,0x07,
0x07,0x07,0x08,0x0f,0x17,0x18,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x17,0x18,0x0b,0x0c, 0x05,0x06,0x02,0x03,
0x09,0x0e,0x09,0x0e,0x04,0x07,0x04,0x07,0x05,0x06,0x0b,0x0d,0x06,0x06,0x00,0x00, 0x01,0x01,0x00,0x00,
0xc0,0xc0,0x20,0xe0,0xd0,0x30,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf8,0x18,0xfc,0x04,
0xf8,0x08,0xf0,0x30,0xc0,0x40,0xc0,0x40,0xc0,0x40,0x80,0x80,0x00,0x00,0x00,0x00, 0xc0,0xc0,0x20,0xe0,
0x07,0x07,0x08,0x0f,0x17,0x18,0x1f,0x10,0x1f,0x10,0x1f,0x10,0x17,0x18,0x0b,0x0c, 0xd0,0x30,0xf0,0x50,
0x09,0x0e,0x09,0x0e,0x04,0x07,0x04,0x07,0x05,0x06,0x02,0x03,0x01,0x01,0x00,0x00, 0x70,0x90,0xf0,0x90,
0xc0,0xc0,0x20,0xe0,0xd0,0x30,0xf0,0x10,0xf0,0x10,0xf0,0x10,0xf8,0x18,0xfc,0x04, 0xf8,0x18,0xfc,0x04,
0xf8,0x08,0xf0,0x30,0xc0,0x40,0xc0,0x40,0xc0,0x40,0xc0,0x40,0x80,0x80,0x00,0x00 0xf8,0x08,0xf0,0x30,
}; 0xc0,0x40,0xc0,0x40,
0xc0,0x40,0xc0,0x40,
0x80,0x80,0x00,0x00,
0x03,0x03,0x04,0x07,
0x0b,0x0c,0x0f,0x0a,
0x0e,0x09,0x0f,0x09,
0x1f,0x18,0x3f,0x20,
0x1f,0x10,0x0f,0x0c,
0x03,0x02,0x03,0x02,
0x03,0x02,0x01,0x01,
0x00,0x00,0x00,0x00,
0xe0,0xe0,0x10,0xf0,
0xe8,0x18,0xf8,0x48,
0x38,0xc8,0xfc,0xc4,
0x74,0x8c,0xe8,0x18,
0x90,0x70,0x90,0x70,
0x20,0xe0,0x20,0xe0,
0xa0,0x60,0xd0,0xb0,
0x60,0x60,0x00,0x00,
0x03,0x03,0x04,0x07,
0x0b,0x0c,0x0f,0x0a,
0x0e,0x09,0x0f,0x09,
0x1f,0x18,0x3f,0x20,
0x1f,0x10,0x0f,0x0c,
0x03,0x02,0x03,0x02,
0x03,0x02,0x03,0x02,
0x01,0x01,0x00,0x00,
0xe0,0xe0,0x10,0xf0,
0xe8,0x18,0xf8,0x48,
0x38,0xc8,0xf8,0xc8,
0x74,0x8c,0xe4,0x1c,
0xc8,0x38,0x90,0x70,
0x20,0xe0,0x20,0xe0,
0xa0,0x60,0x40,0xc0,
0x80,0x80,0x00,0x00,
0x03,0x03,0x04,0x07,
0x0b,0x0c,0x0f,0x08,
0x0f,0x08,0x0f,0x08,
0x1f,0x18,0x3f,0x20,
0x1f,0x10,0x0f,0x0c,
0x03,0x02,0x03,0x02,
0x03,0x02,0x01,0x01,
0x00,0x00,0x00,0x00,
0xe0,0xe0,0x10,0xf0,
0xe8,0x18,0xf8,0x08,
0xf8,0x08,0xf8,0x08,
0xe8,0x18,0xd0,0x30,
0x90,0x70,0x90,0x70,
0x20,0xe0,0x20,0xe0,
0xa0,0x60,0xd0,0xb0,
0x60,0x60,0x00,0x00,
0x03,0x03,0x04,0x07,
0x0b,0x0c,0x0f,0x08,
0x0f,0x08,0x0f,0x08,
0x1f,0x18,0x3f,0x20,
0x1f,0x10,0x0f,0x0c,
0x03,0x02,0x03,0x02,
0x03,0x02,0x03,0x02,
0x01,0x01,0x00,0x00,
0xe0,0xe0,0x10,0xf0,
0xe8,0x18,0xf8,0x08,
0xf8,0x08,0xf8,0x08,
0xe8,0x18,0xd0,0x30,
0x90,0x70,0x90,0x70,
0x20,0xe0,0x20,0xe0,
0xa0,0x60,0x40,0xc0,
0x80,0x80,0x00,0x00,
0x07,0x07,0x08,0x0f,
0x17,0x18,0x1f,0x10,
0x1f,0x10,0x1f,0x10,
0x17,0x18,0x0b,0x0c,
0x09,0x0e,0x09,0x0e,
0x04,0x07,0x04,0x07,
0x05,0x06,0x0b,0x0d,
0x06,0x06,0x00,0x00,
0xc0,0xc0,0x20,0xe0,
0xd0,0x30,0xf0,0x10,
0xf0,0x10,0xf0,0x10,
0xf8,0x18,0xfc,0x04,
0xf8,0x08,0xf0,0x30,
0xc0,0x40,0xc0,0x40,
0xc0,0x40,0x80,0x80,
0x00,0x00,0x00,0x00,
0x07,0x07,0x08,0x0f,
0x17,0x18,0x1f,0x10,
0x1f,0x10,0x1f,0x10,
0x17,0x18,0x0b,0x0c,
0x09,0x0e,0x09,0x0e,
0x04,0x07,0x04,0x07,
0x05,0x06,0x02,0x03,
0x01,0x01,0x00,0x00,
0xc0,0xc0,0x20,0xe0,
0xd0,0x30,0xf0,0x10,
0xf0,0x10,0xf0,0x10,
0xf8,0x18,0xfc,0x04,
0xf8,0x08,0xf0,0x30,
0xc0,0x40,0xc0,0x40,
0xc0,0x40,0xc0,0x40,
0x80,0x80,0x00,0x00
};
const metasprite_t enemy_metasprite0[] = { const metasprite_t enemy_metasprite0[] = {
METASPR_ITEM(-8, -8, 0, S_PAL(0) | S_PALETTE), METASPR_ITEM(-8, -8, 0, S_PAL(0) | S_PALETTE),
-2
View File
@@ -1,6 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /enemy.png -c /enemy.c -sw 16 -sh 16 -bpp 2 -noflip -keep_palette_order -sp 0x10
#ifndef METASPRITE_enemy_H #ifndef METASPRITE_enemy_H
#define METASPRITE_enemy_H #define METASPRITE_enemy_H
+107 -30
View File
@@ -1,5 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /gameover.png -c /gameover.c -bpp 2 -noflip -keep_palette_order
#include <stdint.h> #include <stdint.h>
#include <gbdk/platform.h> #include <gbdk/platform.h>
@@ -8,38 +7,116 @@
BANKREF(gameover) BANKREF(gameover)
const palette_color_t gameover_palettes[32] = { const palette_color_t gameover_palettes[32] = {
RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33), RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33)
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0) RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
}; ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
};
const uint8_t gameover_tiles[320] = { const uint8_t gameover_tiles[320] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xff,0xfc,0xfe,0xf8,0xfc,0xf8,0xfd,0xf8,0xfd, 0xff,0xff,0xff,0xff,
0xf8,0xfd,0xf8,0xfc,0xfc,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xfe,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0x1e,0xff,0x0c,0x1e,0x08,0xfd,0xf8,0xfd,0x88,0xfc, 0xfc,0xfe,0xf8,0xfc,
0x88,0xdd,0x08,0xdd,0x08,0x1d,0x19,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xf8,0xfd,0xf8,0xfd,
0xff,0xff,0xff,0xff,0xff,0xff,0x79,0xff,0x38,0x7d,0x18,0xbc,0x18,0xbd,0x18,0x3d, 0xf8,0xfd,0xf8,0xfc,
0x18,0xbd,0x18,0xbd,0x18,0xbd,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfc,0xfe,0xfe,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0x98,0xff,0x18,0xbc,0x18,0x3d,0x18,0xbc,0x18,0xbd, 0xff,0xff,0xff,0xff,
0x18,0xbd,0x18,0xbc,0x18,0xbf,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0x1f,0xff,0x0f,0x1f,0x0f,0xff,0x1f,0x3f,0x0f,0xff,
0xff,0xff,0x0f,0x1f,0x1f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xf8,0xfc,0xf8,0xfd,0xf8,0xfd,0xf8,0xfd, 0xff,0xff,0x1e,0xff,
0xf8,0xfd,0xf8,0xfc,0xfc,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x0c,0x1e,0x08,0xfd,
0xff,0xff,0xff,0xff,0xff,0xff,0x39,0xff,0x18,0x3d,0x18,0xbd,0x18,0xbd,0x18,0xbd, 0xf8,0xfd,0x88,0xfc,
0x18,0xbd,0x1c,0x3e,0x3e,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x88,0xdd,0x08,0xdd,
0xff,0xff,0xff,0xff,0xff,0xff,0x98,0xff,0x18,0xbc,0x18,0xbd,0x18,0xbc,0x18,0xbd, 0x08,0x1d,0x19,0xff,
0x18,0xbd,0x38,0x7c,0x78,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0x18,0xff,0x08,0x1c,0x08,0xfd,0x18,0x3c,0x08,0xfd, 0xff,0xff,0xff,0xff,
0xf8,0xfd,0x08,0x1d,0x19,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0xff,0x1f,0x3f,0x1f,0xbf,0x3f,0x7f,0x1f,0xbf, 0xff,0xff,0xff,0xff,
0x1f,0xbf,0x1f,0xbf,0x9f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff 0xff,0xff,0x79,0xff,
}; 0x38,0x7d,0x18,0xbc,
0x18,0xbd,0x18,0x3d,
0x18,0xbd,0x18,0xbd,
0x18,0xbd,0x99,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0x98,0xff,
0x18,0xbc,0x18,0x3d,
0x18,0xbc,0x18,0xbd,
0x18,0xbd,0x18,0xbc,
0x18,0xbf,0x9f,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0x1f,0xff,
0x0f,0x1f,0x0f,0xff,
0x1f,0x3f,0x0f,0xff,
0xff,0xff,0x0f,0x1f,
0x1f,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xfc,0xff,
0xf8,0xfc,0xf8,0xfd,
0xf8,0xfd,0xf8,0xfd,
0xf8,0xfd,0xf8,0xfc,
0xfc,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0x39,0xff,
0x18,0x3d,0x18,0xbd,
0x18,0xbd,0x18,0xbd,
0x18,0xbd,0x1c,0x3e,
0x3e,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0x98,0xff,
0x18,0xbc,0x18,0xbd,
0x18,0xbc,0x18,0xbd,
0x18,0xbd,0x38,0x7c,
0x78,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0x18,0xff,
0x08,0x1c,0x08,0xfd,
0x18,0x3c,0x08,0xfd,
0xf8,0xfd,0x08,0x1d,
0x19,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0x3f,0xff,
0x1f,0x3f,0x1f,0xbf,
0x3f,0x7f,0x1f,0xbf,
0x1f,0xbf,0x1f,0xbf,
0x9f,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff
};
const metasprite_t gameover_metasprite0[] = { const metasprite_t gameover_metasprite0[] = {
METASPR_ITEM(-8, -40, 0, S_PAL(0)), METASPR_ITEM(-8, -40, 0, S_PAL(0)),
-2
View File
@@ -1,6 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /gameover.png -c /gameover.c -bpp 2 -noflip -keep_palette_order
#ifndef METASPRITE_gameover_H #ifndef METASPRITE_gameover_H
#define METASPRITE_gameover_H #define METASPRITE_gameover_H
+946 -238
View File
File diff suppressed because it is too large Load Diff
-2
View File
@@ -1,6 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /next_level.png -c /next_level.c -map -bpp 2 -noflip -max_palettes 1
#ifndef METASPRITE_next_level_H #ifndef METASPRITE_next_level_H
#define METASPRITE_next_level_H #define METASPRITE_next_level_H
+143 -38
View File
@@ -1,5 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /player.png -c /player.c -sw 16 -sh 16 -bpp 2 -noflip -keep_palette_order
#include <stdint.h> #include <stdint.h>
#include <gbdk/platform.h> #include <gbdk/platform.h>
@@ -8,46 +7,152 @@
BANKREF(player) BANKREF(player)
const palette_color_t player_palettes[32] = { const palette_color_t player_palettes[32] = {
RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33), RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33)
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0) RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
}; ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
};
const uint8_t player_tiles[448] = { const uint8_t player_tiles[448] = {
0x0f,0x0f,0x10,0x1f,0x27,0x3f,0x2b,0x3c,0x2e,0x39,0x2f,0x39,0x2f,0x38,0x2f,0x39, 0x0f,0x0f,0x10,0x1f,
0x1f,0x1c,0x2f,0x3f,0x28,0x3f,0x38,0x2f,0x3c,0x3f,0x0a,0x0e,0x1e,0x1e,0x1e,0x1e, 0x27,0x3f,0x2b,0x3c,
0xf0,0xf0,0x08,0xf8,0xe4,0xfc,0xd4,0x3c,0xd4,0x3c,0xf4,0x3c,0xf4,0x1c,0xf4,0xfc, 0x2e,0x39,0x2f,0x39,
0xf8,0x38,0xf4,0xfc,0x14,0xfc,0x1c,0xf4,0x3c,0xfc,0x50,0x70,0x78,0x78,0x78,0x78, 0x2f,0x38,0x2f,0x39,
0x0f,0x0f,0x10,0x1f,0x27,0x3f,0x2b,0x3c,0x2e,0x39,0x2f,0x39,0x2f,0x38,0x2f,0x39, 0x1f,0x1c,0x2f,0x3f,
0x1f,0x1c,0x2f,0x3f,0x28,0x3f,0x38,0x2f,0x3c,0x3f,0x08,0x0c,0x1c,0x1c,0x1c,0x1c, 0x28,0x3f,0x38,0x2f,
0xf0,0xf0,0x08,0xf8,0xe4,0xfc,0xd4,0x3c,0xd4,0x3c,0xf4,0x3c,0xf4,0x1c,0xf4,0xfc, 0x3c,0x3f,0x0a,0x0e,
0xf8,0x38,0xf4,0xfc,0x14,0xfc,0x1c,0xf4,0x3c,0xfc,0x20,0x60,0xe0,0xe0,0xe0,0xe0, 0x1e,0x1e,0x1e,0x1e,
0x0f,0x0f,0x10,0x1f,0x27,0x3f,0x2b,0x3c,0x2b,0x3c,0x2f,0x3c,0x2f,0x38,0x2f,0x3f,
0x1f,0x1c,0x2f,0x3f,0x28,0x3f,0x38,0x2f,0x3c,0x3f,0x0a,0x0e,0x1e,0x1e,0x1e,0x1e, 0xf0,0xf0,0x08,0xf8,
0xf0,0xf0,0x08,0xf8,0xe4,0xfc,0xd4,0x3c,0x74,0x9c,0xf4,0x9c,0xf4,0x1c,0xf4,0x9c, 0xe4,0xfc,0xd4,0x3c,
0xf8,0x38,0xf4,0xfc,0x14,0xfc,0x1c,0xf4,0x3c,0xfc,0x50,0x70,0x78,0x78,0x78,0x78, 0xd4,0x3c,0xf4,0x3c,
0x0f,0x0f,0x10,0x1f,0x27,0x3f,0x2b,0x3c,0x2b,0x3c,0x2f,0x3c,0x2f,0x38,0x2f,0x3f, 0xf4,0x1c,0xf4,0xfc,
0x1f,0x1c,0x2f,0x3f,0x28,0x3f,0x38,0x2f,0x3c,0x3f,0x04,0x06,0x07,0x07,0x07,0x07, 0xf8,0x38,0xf4,0xfc,
0xf0,0xf0,0x08,0xf8,0xe4,0xfc,0xd4,0x3c,0x74,0x9c,0xf4,0x9c,0xf4,0x1c,0xf4,0x9c, 0x14,0xfc,0x1c,0xf4,
0xf8,0x38,0xf4,0xfc,0x14,0xfc,0x1c,0xf4,0x3c,0xfc,0x10,0x30,0x38,0x38,0x38,0x38, 0x3c,0xfc,0x50,0x70,
0x0f,0x0f,0x10,0x1f,0x27,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f, 0x78,0x78,0x78,0x78,
0x1f,0x1f,0x2f,0x3f,0x28,0x3f,0x38,0x2f,0x3c,0x3f,0x0a,0x0e,0x1e,0x1e,0x1e,0x1e,
0xf0,0xf0,0x08,0xf8,0xe4,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc, 0x0f,0x0f,0x10,0x1f,
0xf8,0xf8,0xf4,0xfc,0x14,0xfc,0x1c,0xf4,0x3c,0xfc,0x50,0x70,0x78,0x78,0x78,0x78, 0x27,0x3f,0x2b,0x3c,
0x0f,0x0f,0x10,0x1f,0x27,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f, 0x2e,0x39,0x2f,0x39,
0x1f,0x1f,0x2f,0x3f,0x28,0x3f,0x38,0x2f,0x3c,0x3f,0x04,0x06,0x07,0x07,0x07,0x07, 0x2f,0x38,0x2f,0x39,
0xf0,0xf0,0x08,0xf8,0xe4,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc, 0x1f,0x1c,0x2f,0x3f,
0xf8,0xf8,0xf4,0xfc,0x14,0xfc,0x1c,0xf4,0x3c,0xfc,0x10,0x30,0x38,0x38,0x38,0x38, 0x28,0x3f,0x38,0x2f,
0x0f,0x0f,0x10,0x1f,0x27,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f,0x20,0x3f, 0x3c,0x3f,0x08,0x0c,
0x1f,0x1f,0x2f,0x3f,0x28,0x3f,0x38,0x2f,0x3c,0x3f,0x08,0x0c,0x1c,0x1c,0x1c,0x1c, 0x1c,0x1c,0x1c,0x1c,
0xf0,0xf0,0x08,0xf8,0xe4,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc,0x04,0xfc,
0xf8,0xf8,0xf4,0xfc,0x14,0xfc,0x1c,0xf4,0x3c,0xfc,0x20,0x60,0xe0,0xe0,0xe0,0xe0 0xf0,0xf0,0x08,0xf8,
}; 0xe4,0xfc,0xd4,0x3c,
0xd4,0x3c,0xf4,0x3c,
0xf4,0x1c,0xf4,0xfc,
0xf8,0x38,0xf4,0xfc,
0x14,0xfc,0x1c,0xf4,
0x3c,0xfc,0x20,0x60,
0xe0,0xe0,0xe0,0xe0,
0x0f,0x0f,0x10,0x1f,
0x27,0x3f,0x2b,0x3c,
0x2b,0x3c,0x2f,0x3c,
0x2f,0x38,0x2f,0x3f,
0x1f,0x1c,0x2f,0x3f,
0x28,0x3f,0x38,0x2f,
0x3c,0x3f,0x0a,0x0e,
0x1e,0x1e,0x1e,0x1e,
0xf0,0xf0,0x08,0xf8,
0xe4,0xfc,0xd4,0x3c,
0x74,0x9c,0xf4,0x9c,
0xf4,0x1c,0xf4,0x9c,
0xf8,0x38,0xf4,0xfc,
0x14,0xfc,0x1c,0xf4,
0x3c,0xfc,0x50,0x70,
0x78,0x78,0x78,0x78,
0x0f,0x0f,0x10,0x1f,
0x27,0x3f,0x2b,0x3c,
0x2b,0x3c,0x2f,0x3c,
0x2f,0x38,0x2f,0x3f,
0x1f,0x1c,0x2f,0x3f,
0x28,0x3f,0x38,0x2f,
0x3c,0x3f,0x04,0x06,
0x07,0x07,0x07,0x07,
0xf0,0xf0,0x08,0xf8,
0xe4,0xfc,0xd4,0x3c,
0x74,0x9c,0xf4,0x9c,
0xf4,0x1c,0xf4,0x9c,
0xf8,0x38,0xf4,0xfc,
0x14,0xfc,0x1c,0xf4,
0x3c,0xfc,0x10,0x30,
0x38,0x38,0x38,0x38,
0x0f,0x0f,0x10,0x1f,
0x27,0x3f,0x20,0x3f,
0x20,0x3f,0x20,0x3f,
0x20,0x3f,0x20,0x3f,
0x1f,0x1f,0x2f,0x3f,
0x28,0x3f,0x38,0x2f,
0x3c,0x3f,0x0a,0x0e,
0x1e,0x1e,0x1e,0x1e,
0xf0,0xf0,0x08,0xf8,
0xe4,0xfc,0x04,0xfc,
0x04,0xfc,0x04,0xfc,
0x04,0xfc,0x04,0xfc,
0xf8,0xf8,0xf4,0xfc,
0x14,0xfc,0x1c,0xf4,
0x3c,0xfc,0x50,0x70,
0x78,0x78,0x78,0x78,
0x0f,0x0f,0x10,0x1f,
0x27,0x3f,0x20,0x3f,
0x20,0x3f,0x20,0x3f,
0x20,0x3f,0x20,0x3f,
0x1f,0x1f,0x2f,0x3f,
0x28,0x3f,0x38,0x2f,
0x3c,0x3f,0x04,0x06,
0x07,0x07,0x07,0x07,
0xf0,0xf0,0x08,0xf8,
0xe4,0xfc,0x04,0xfc,
0x04,0xfc,0x04,0xfc,
0x04,0xfc,0x04,0xfc,
0xf8,0xf8,0xf4,0xfc,
0x14,0xfc,0x1c,0xf4,
0x3c,0xfc,0x10,0x30,
0x38,0x38,0x38,0x38,
0x0f,0x0f,0x10,0x1f,
0x27,0x3f,0x20,0x3f,
0x20,0x3f,0x20,0x3f,
0x20,0x3f,0x20,0x3f,
0x1f,0x1f,0x2f,0x3f,
0x28,0x3f,0x38,0x2f,
0x3c,0x3f,0x08,0x0c,
0x1c,0x1c,0x1c,0x1c,
0xf0,0xf0,0x08,0xf8,
0xe4,0xfc,0x04,0xfc,
0x04,0xfc,0x04,0xfc,
0x04,0xfc,0x04,0xfc,
0xf8,0xf8,0xf4,0xfc,
0x14,0xfc,0x1c,0xf4,
0x3c,0xfc,0x20,0x60,
0xe0,0xe0,0xe0,0xe0
};
const metasprite_t player_metasprite0[] = { const metasprite_t player_metasprite0[] = {
METASPR_ITEM(-8, -8, 0, S_PAL(0)), METASPR_ITEM(-8, -8, 0, S_PAL(0)),
-2
View File
@@ -1,6 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /player.png -c /player.c -sw 16 -sh 16 -bpp 2 -noflip -keep_palette_order
#ifndef METASPRITE_player_H #ifndef METASPRITE_player_H
#define METASPRITE_player_H #define METASPRITE_player_H
-1
View File
@@ -6,7 +6,6 @@
#include "player.h" #include "player.h"
#include "enemy.h" #include "enemy.h"
#include "gameover.h" #include "gameover.h"
#include "victory.h"
#include "stamina.h" #include "stamina.h"
#include "maze.h" #include "maze.h"
+134 -36
View File
@@ -1,5 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /stamina.png -c /stamina.c -bpp 2 -noflip -keep_palette_order
#include <stdint.h> #include <stdint.h>
#include <gbdk/platform.h> #include <gbdk/platform.h>
@@ -8,44 +7,143 @@
BANKREF(stamina) BANKREF(stamina)
const palette_color_t stamina_palettes[32] = { const palette_color_t stamina_palettes[32] = {
RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33), RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33)
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0) RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
}; ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
};
const uint8_t stamina_tiles[416] = { const uint8_t stamina_tiles[416] = {
0xff,0xff,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0xff,0xff,0xff, 0xff,0xff,0x00,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0xff,0xff,0xff,
0xff,0xff,0x00,0xff,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xff,0x7f,0x00,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0xff,
0xff,0xff,0x00,0xff,0xff,0x3f,0xff,0x3f,0xff,0x3f,0xff,0x3f,0x00,0xff,0xff,0xff, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,0xff,0x1f,0xff,0x1f,0xff,0x1f,0xff,0x1f,0x00,0xff,0xff,0xff, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,0xff,0x0f,0xff,0x0f,0xff,0x0f,0xff,0x0f,0x00,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0xff,0x00,0xff,
0xff,0xff,0x00,0xff,0xff,0x07,0xff,0x07,0xff,0x07,0xff,0x07,0x00,0xff,0xff,0xff, 0xff,0x7f,0xff,0x7f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0x7f,0xff,0x7f,
0xff,0xff,0x00,0xff,0xff,0x03,0xff,0x03,0xff,0x03,0xff,0x03,0x00,0xff,0xff,0xff, 0x00,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,0xff,0x01,0xff,0x01,0xff,0x01,0xff,0x01,0x00,0xff,0xff,0xff, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0x00,0xff,0xff,0xff, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x7f,0xff,0x00,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xff,0x7f,0xff,0x00,0xff,0x7f,0xff, 0xff,0xff,0x00,0xff,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0xff,0x3f,0xff,0x3f,
0xfe,0xff,0x00,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff,0xfe,0xff,0x00,0xff,0xfe,0xff, 0xff,0x3f,0xff,0x3f,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0xff,0xff,0xff,
0x7f,0xff,0x00,0xff,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x7f,0x80,0x00,0xff,0x7f,0xff, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,
0xfe,0xff,0x00,0xff,0xfe,0x01,0xfe,0x01,0xfe,0x01,0xfe,0x01,0x00,0xff,0xfe,0xff, 0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 0x00,0x00,0x00,0x00,
};
0xff,0xff,0x00,0xff,
0xff,0x1f,0xff,0x1f,
0xff,0x1f,0xff,0x1f,
0x00,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,
0xff,0x0f,0xff,0x0f,
0xff,0x0f,0xff,0x0f,
0x00,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,
0xff,0x07,0xff,0x07,
0xff,0x07,0xff,0x07,
0x00,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,
0xff,0x03,0xff,0x03,
0xff,0x03,0xff,0x03,
0x00,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,
0xff,0x01,0xff,0x01,
0xff,0x01,0xff,0x01,
0x00,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0xff,0xff,0x00,0xff,
0xff,0x00,0xff,0x00,
0xff,0x00,0xff,0x00,
0x00,0xff,0xff,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x7f,0xff,0x00,0xff,
0x7f,0xff,0x7f,0xff,
0x7f,0xff,0x7f,0xff,
0x00,0xff,0x7f,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0xfe,0xff,0x00,0xff,
0xfe,0xff,0xfe,0xff,
0xfe,0xff,0xfe,0xff,
0x00,0xff,0xfe,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x7f,0xff,0x00,0xff,
0x7f,0x80,0x7f,0x80,
0x7f,0x80,0x7f,0x80,
0x00,0xff,0x7f,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0xfe,0xff,0x00,0xff,
0xfe,0x01,0xfe,0x01,
0xfe,0x01,0xfe,0x01,
0x00,0xff,0xfe,0xff,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00
};
const metasprite_t stamina_metasprite0[] = { const metasprite_t stamina_metasprite0[] = {
METASPR_ITEM(-8, -52, 0, S_PAL(0)), METASPR_ITEM(-8, -52, 0, S_PAL(0)),
-2
View File
@@ -1,6 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /stamina.png -c /stamina.c -bpp 2 -noflip -keep_palette_order
#ifndef METASPRITE_stamina_H #ifndef METASPRITE_stamina_H
#define METASPRITE_stamina_H #define METASPRITE_stamina_H
+620 -160
View File
@@ -1,5 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /tiles.png -c /tiles.c -map -bpp 2 -noflip -keep_palette_order
#include <stdint.h> #include <stdint.h>
#include <gbdk/platform.h> #include <gbdk/platform.h>
@@ -8,168 +7,629 @@
BANKREF(tiles) BANKREF(tiles)
const palette_color_t tiles_palettes[32] = { const palette_color_t tiles_palettes[32] = {
RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33), RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33)
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0) RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
}; ,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
,
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
};
const uint8_t tiles_tiles[2416] = { const uint8_t tiles_tiles[2416] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xf0,0xf0,0xc0,0xc3, 0xff,0xff,0xff,0xff,
0xff,0xff,0xfc,0xfc,0xf0,0xf0,0xc0,0xc0,0x00,0x03,0x03,0x1c,0x1f,0x60,0x7f,0x80, 0xff,0xff,0xff,0xff,
0xff,0xff,0x3f,0x3f,0x0f,0x0f,0x03,0x03,0x00,0x80,0x80,0x78,0xf8,0x07,0xff,0x00, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0x1f,0x1f,0x07,0x87,0x81,0x71, 0xff,0xff,0xff,0xff,
0x81,0x8e,0xe0,0xe1,0xf8,0xf8,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,
0xff,0x00,0x1f,0xe0,0x01,0x1e,0x00,0x01,0xc0,0xc0,0xf0,0xf0,0xfc,0xfc,0xff,0xff, 0xff,0xff,0xfc,0xfc,
0xfe,0x01,0xf8,0x06,0xc0,0x38,0x00,0xc0,0x03,0x03,0x0f,0x0f,0x3f,0x3f,0xff,0xff, 0xf0,0xf0,0xc0,0xc3,
0x03,0xc3,0x0f,0x0f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xfc,0xfc,
0x00,0x01,0x01,0x06,0x07,0x38,0x3f,0xc0,0xff,0x01,0xfc,0x04,0xf0,0x10,0xc0,0x43, 0xf0,0xf0,0xc0,0xc0,
0x3f,0xc0,0xfc,0x00,0xf0,0x00,0xc0,0x00,0x00,0x03,0x03,0x1c,0x1f,0x60,0x7f,0x80, 0x00,0x03,0x03,0x1c,
0xff,0x01,0xfe,0x07,0xf8,0x3f,0xc0,0xff,0x01,0xff,0x04,0xfc,0x10,0xf0,0x40,0xc3, 0x1f,0x60,0x7f,0x80,
0xc0,0xff,0x00,0xfc,0x00,0xf0,0x00,0xc0,0x00,0x03,0x03,0x1c,0x1f,0x60,0x7f,0x80, 0xff,0xff,0x3f,0x3f,
0xf0,0x0e,0x3e,0x01,0x0f,0x00,0x03,0x00,0x00,0x80,0x80,0x78,0xf8,0x07,0xff,0x00, 0x0f,0x0f,0x03,0x03,
0x00,0x00,0x00,0xe0,0xe0,0x1e,0xfe,0x01,0x7f,0x00,0x1f,0x00,0x07,0x80,0x81,0x70, 0x00,0x80,0x80,0x78,
0x0f,0xfe,0x01,0x3f,0x00,0x0f,0x00,0x03,0x00,0x80,0x80,0x78,0xf8,0x07,0xff,0x00, 0xf8,0x07,0xff,0x00,
0xff,0x00,0xff,0xe0,0x1f,0xfe,0x01,0xff,0x00,0x7f,0x00,0x1f,0x00,0x87,0x80,0x71, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xf0,0xfc,0xc3, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xfc,0x03,0xe0,0x1c,0x80,0x60,0x00,0x80, 0x7f,0x7f,0x1f,0x1f,
0xff,0xff,0xff,0x3f,0xff,0x0f,0xff,0x03,0x7f,0x80,0x07,0x78,0x00,0x07,0x00,0x00, 0x07,0x87,0x81,0x71,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x1f,0x7f,0x87,0x0f,0x71, 0x81,0x8e,0xe0,0xe1,
0xf0,0x8e,0xfe,0xe1,0xff,0xf8,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xf8,0xf8,0xfe,0xfe,
0x00,0x00,0x00,0xe0,0xe0,0x1e,0xfe,0x01,0xff,0xc0,0xff,0xf0,0xff,0xfc,0xff,0xff, 0xff,0xff,0xff,0xff,
0x00,0x01,0x01,0x06,0x07,0x38,0x3f,0xc0,0xff,0x03,0xff,0x0f,0xff,0x3f,0xff,0xff, 0xff,0xff,0xff,0xff,
0x3f,0xc3,0xff,0x0f,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x00,0x1f,0xe0,
0xfe,0x01,0xf8,0x06,0xc0,0x38,0x00,0xc0,0x01,0x01,0x07,0x04,0x1f,0x10,0x7c,0x43, 0x01,0x1e,0x00,0x01,
0x00,0xc0,0x03,0x00,0x0f,0x00,0x3f,0x00,0xfc,0x03,0xe0,0x1c,0x80,0x60,0x00,0x80, 0xc0,0xc0,0xf0,0xf0,
0x01,0xff,0x07,0xfe,0x3f,0xf8,0xff,0xc0,0xff,0x01,0xff,0x04,0xff,0x10,0xfc,0x43, 0xfc,0xfc,0xff,0xff,
0xff,0xc0,0xff,0x00,0xff,0x00,0xff,0x00,0xfc,0x03,0xe0,0x1c,0x80,0x60,0x00,0x80, 0xfe,0x01,0xf8,0x06,
0x01,0x0e,0xc0,0x01,0xf0,0x00,0xfc,0x00,0x7f,0x80,0x07,0x78,0x00,0x07,0x00,0x00, 0xc0,0x38,0x00,0xc0,
0xff,0x00,0x1f,0xe0,0x01,0x1e,0x00,0x01,0x80,0x00,0xe0,0x00,0x78,0x80,0x0e,0x70, 0x03,0x03,0x0f,0x0f,
0xfe,0x0f,0xff,0x01,0xff,0x00,0xff,0x00,0x7f,0x80,0x07,0x78,0x00,0x07,0x00,0x00, 0x3f,0x3f,0xff,0xff,
0x00,0xff,0xe0,0xff,0xfe,0x1f,0xff,0x01,0xff,0x00,0xff,0x00,0x7f,0x80,0x0f,0x70, 0x03,0xc3,0x0f,0x0f,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xf0,0xff,0xc3,0xff, 0x3f,0x3f,0xff,0xff,
0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff,0x03,0xff,0x1c,0xff,0x60,0xff,0x80,0xff, 0xff,0xff,0xff,0xff,
0xff,0xff,0x3f,0xff,0x0f,0xff,0x03,0xff,0x80,0xff,0x78,0xff,0x07,0xff,0x00,0xff, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x1f,0xff,0x87,0xff,0x71,0xff, 0x00,0x01,0x01,0x06,
0x8e,0xff,0xe1,0xff,0xf8,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x07,0x38,0x3f,0xc0,
0x00,0xff,0xe0,0xff,0x1e,0xff,0x01,0xff,0xc0,0xff,0xf0,0xff,0xfc,0xff,0xff,0xff, 0xff,0x01,0xfc,0x04,
0x01,0xff,0x06,0xff,0x38,0xff,0xc0,0xff,0x03,0xff,0x0f,0xff,0x3f,0xff,0xff,0xff, 0xf0,0x10,0xc0,0x43,
0xc3,0xff,0x0f,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x3f,0xc0,0xfc,0x00,
0x00,0x01,0x01,0x06,0x07,0x38,0x3f,0xc0,0xff,0x01,0xfc,0x07,0xf0,0x1f,0xc3,0x7f, 0xf0,0x00,0xc0,0x00,
0x3f,0xc0,0xfc,0x03,0xf0,0x0f,0xc0,0x3f,0x03,0xff,0x1c,0xff,0x60,0xff,0x80,0xff, 0x00,0x03,0x03,0x1c,
0xff,0x01,0xfe,0x07,0xf8,0x3f,0xc0,0xff,0x01,0xff,0x04,0xff,0x10,0xff,0x43,0xff, 0x1f,0x60,0x7f,0x80,
0xc0,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x03,0xff,0x1c,0xff,0x60,0xff,0x80,0xff, 0xff,0x01,0xfe,0x07,
0xf0,0x0e,0x3e,0xc1,0x0f,0xf0,0x03,0xfc,0x80,0xff,0x78,0xff,0x07,0xff,0x00,0xff, 0xf8,0x3f,0xc0,0xff,
0x00,0x00,0x00,0xe0,0xe0,0x1e,0xfe,0x01,0x7f,0x80,0x1f,0xe0,0x87,0xf8,0x71,0xfe, 0x01,0xff,0x04,0xfc,
0x0f,0xfe,0x01,0xff,0x00,0xff,0x00,0xff,0x80,0xff,0x78,0xff,0x07,0xff,0x00,0xff, 0x10,0xf0,0x40,0xc3,
0xff,0x00,0xff,0xe0,0x1f,0xfe,0x01,0xff,0x00,0xff,0x00,0xff,0x80,0xff,0x70,0xff, 0xc0,0xff,0x00,0xfc,
0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff,0x03,0xff,0x1f,0xfc,0x7f,0xe0,0xff,0x80, 0x00,0xf0,0x00,0xc0,
0xff,0xff,0x3f,0xff,0x0f,0xff,0x03,0xff,0x80,0xff,0xf8,0x7f,0xff,0x07,0xff,0x00, 0x00,0x03,0x03,0x1c,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x1f,0xff,0x87,0xff,0xf1,0x7f, 0x1f,0x60,0x7f,0x80,
0x8f,0xfe,0xe1,0xff,0xf8,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xf0,0x0e,0x3e,0x01,
0xff,0x00,0xff,0xe0,0x1f,0xfe,0x01,0xff,0xc0,0xff,0xf0,0xff,0xfc,0xff,0xff,0xff, 0x0f,0x00,0x03,0x00,
0xff,0x01,0xfe,0x07,0xf8,0x3f,0xc0,0xff,0x03,0xff,0x0f,0xff,0x3f,0xff,0xff,0xff, 0x00,0x80,0x80,0x78,
0xfe,0x01,0xf8,0x06,0xc0,0x38,0x00,0xc0,0x01,0x01,0x04,0x07,0x10,0x1f,0x43,0x7f, 0xf8,0x07,0xff,0x00,
0x00,0xc0,0x00,0x03,0x00,0x0f,0x00,0x3f,0x03,0xff,0x1f,0xfc,0x7f,0xe0,0xff,0x80, 0x00,0x00,0x00,0xe0,
0x01,0xff,0x07,0xfe,0x3f,0xf8,0xff,0xc0,0xff,0x01,0xfc,0x07,0xf0,0x1f,0xc3,0x7f, 0xe0,0x1e,0xfe,0x01,
0xff,0xc0,0xfc,0x03,0xf0,0x0f,0xc0,0x3f,0x03,0xff,0x1f,0xfc,0x7f,0xe0,0xff,0x80, 0x7f,0x00,0x1f,0x00,
0x01,0x0e,0x00,0xc1,0x00,0xf0,0x00,0xfc,0x80,0xff,0xf8,0x7f,0xff,0x07,0xff,0x00, 0x07,0x80,0x81,0x70,
0xff,0x00,0x1f,0xe0,0x01,0x1e,0x00,0x01,0x00,0x80,0x00,0xe0,0x80,0xf8,0xf0,0x7e, 0x0f,0xfe,0x01,0x3f,
0xfe,0x0f,0x3f,0xc1,0x0f,0xf0,0x03,0xfc,0x80,0xff,0xf8,0x7f,0xff,0x07,0xff,0x00, 0x00,0x0f,0x00,0x03,
0x00,0xff,0xe0,0xff,0xfe,0x1f,0xff,0x01,0x7f,0x80,0x1f,0xe0,0x87,0xf8,0xf1,0x7e, 0x00,0x80,0x80,0x78,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xf0,0xf0,0xc3,0xc0, 0xf8,0x07,0xff,0x00,
0xff,0xff,0xfc,0xfc,0xf0,0xf0,0xc3,0xc0,0x0f,0x00,0x3f,0x00,0xff,0x03,0xff,0x0f, 0xff,0x00,0xff,0xe0,
0xff,0xff,0x3f,0x3f,0x0f,0x0f,0x03,0xc3,0x00,0xf0,0x00,0xfc,0xc0,0xff,0xf0,0xff, 0x1f,0xfe,0x01,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0x7f,0x1f,0x1f,0x07,0x07,0x01,0xc1, 0x00,0x7f,0x00,0x1f,
0x80,0x80,0xe0,0xe0,0xf8,0xf8,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x00,0x87,0x80,0x71,
0xff,0x3f,0x3f,0x3f,0x0f,0x0f,0x03,0x03,0xc0,0xc0,0xf0,0xf0,0xfc,0xfc,0xff,0xff, 0xff,0xff,0xff,0xff,
0xfc,0xff,0xfc,0xfc,0xf0,0xf0,0xc0,0xc0,0x03,0x03,0x0f,0x0f,0x3f,0x3f,0xff,0xff, 0xff,0xff,0xff,0xff,
0x03,0x03,0x0f,0x0f,0x3f,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xfc,
0x00,0x01,0x01,0x06,0x07,0x38,0x3f,0xc0,0xff,0x01,0xfc,0x04,0xf0,0x10,0xc3,0x40, 0xff,0xf0,0xfc,0xc3,
0x3f,0xc0,0xfc,0x00,0xf0,0x00,0xc3,0x00,0x0f,0x00,0x3f,0x00,0xff,0x03,0xff,0x0f, 0xff,0xff,0xff,0xfc,
0xff,0x01,0xfe,0x07,0xf8,0x3f,0xc0,0xff,0x01,0xff,0x04,0xfc,0x10,0xf0,0x43,0xc0, 0xff,0xf0,0xff,0xc0,
0xc0,0xff,0x00,0xfc,0x00,0xf0,0x03,0xc0,0x0f,0x00,0x3f,0x00,0xff,0x03,0xff,0x0f, 0xfc,0x03,0xe0,0x1c,
0xf0,0x0e,0x3e,0x01,0x0f,0x00,0x03,0xc0,0x00,0xf0,0x00,0xfc,0xc0,0xff,0xf0,0xff, 0x80,0x60,0x00,0x80,
0x00,0x00,0x00,0xe0,0xe0,0x1e,0xfe,0x01,0x7f,0x00,0x1f,0x00,0x07,0x00,0x01,0xc0, 0xff,0xff,0xff,0x3f,
0x0f,0xfe,0x01,0x3f,0x00,0x0f,0x00,0xc3,0x00,0xf0,0x00,0xfc,0xc0,0xff,0xf0,0xff, 0xff,0x0f,0xff,0x03,
0xff,0x00,0xff,0xe0,0x1f,0xfe,0x01,0xff,0x00,0x7f,0x00,0x1f,0x00,0x07,0x00,0xc1, 0x7f,0x80,0x07,0x78,
0x80,0x00,0xe0,0x00,0xf8,0x00,0xfe,0x00,0x7f,0x80,0x07,0x78,0x00,0x07,0x00,0x00, 0x00,0x07,0x00,0x00,
0xff,0x3f,0x3f,0x3f,0x0f,0x0f,0x03,0x03,0xc0,0x00,0xf0,0x00,0x7c,0x80,0x0f,0x70, 0xff,0xff,0xff,0xff,
0x00,0x80,0x00,0xe0,0x00,0xf8,0x00,0xfe,0x80,0xff,0xf8,0x7f,0xff,0x07,0xff,0x00, 0xff,0xff,0xff,0xff,
0xff,0x3f,0x3f,0x3f,0x0f,0x0f,0x03,0x03,0x00,0xc0,0x00,0xf0,0x80,0xfc,0xf0,0x7f, 0xff,0x7f,0xff,0x1f,
0xfc,0xff,0xfc,0xfc,0xf0,0xf0,0xc0,0xc0,0x03,0x00,0x0f,0x00,0x3f,0x00,0xfc,0x03, 0x7f,0x87,0x0f,0x71,
0x03,0x02,0x0f,0x08,0x3f,0x20,0xff,0x80,0xfc,0x03,0xe0,0x1c,0x80,0x60,0x00,0x80, 0xf0,0x8e,0xfe,0xe1,
0xfc,0xff,0xfc,0xfc,0xf0,0xf0,0xc0,0xc0,0x00,0x03,0x00,0x0f,0x00,0x3f,0x03,0xff, 0xff,0xf8,0xff,0xfe,
0x02,0x03,0x08,0x0f,0x20,0x3f,0x80,0xff,0x03,0xff,0x1f,0xfc,0x7f,0xe0,0xff,0x80, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xfc,0xf0,0xf3,0xc0, 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xfc,0xfc,0xf0,0xf3,0xc0,0xcf,0x00,0x3f,0x00,0xff,0x03,0xff,0x0f, 0x00,0x00,0x00,0xe0,
0xff,0xff,0xff,0x3f,0x3f,0x0f,0x0f,0xc3,0x03,0xf0,0x00,0xfc,0xc0,0xff,0xf0,0xff, 0xe0,0x1e,0xfe,0x01,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x1f,0x3f,0x07,0x0f,0xc1, 0xff,0xc0,0xff,0xf0,
0xfc,0x80,0xff,0xe0,0xff,0xf8,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xfc,0xff,0xff,
0xff,0x3f,0x3f,0x3f,0xcf,0x0f,0xf3,0x03,0xfc,0xc0,0xff,0xf0,0xff,0xfc,0xff,0xff, 0x00,0x01,0x01,0x06,
0xfc,0xff,0xfc,0xfc,0xf3,0xf0,0xcf,0xc0,0x3f,0x03,0xff,0x0f,0xff,0x3f,0xff,0xff, 0x07,0x38,0x3f,0xc0,
0x3f,0x03,0xff,0x0f,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0x03,0xff,0x0f,
0xfe,0x01,0xf8,0x06,0xc0,0x38,0x00,0xc0,0x01,0x01,0x07,0x04,0x1c,0x10,0x73,0x40, 0xff,0x3f,0xff,0xff,
0x00,0xc0,0x03,0x00,0x0c,0x00,0x33,0x00,0xcf,0x00,0x3f,0x00,0xff,0x03,0xff,0x0f, 0x3f,0xc3,0xff,0x0f,
0x01,0xff,0x07,0xfe,0x3f,0xf8,0xff,0xc0,0xff,0x01,0xff,0x04,0xfc,0x10,0xf3,0x40, 0xff,0x3f,0xff,0xff,
0xff,0xc0,0xff,0x00,0xfc,0x00,0xf3,0x00,0xcf,0x00,0x3f,0x00,0xff,0x03,0xff,0x0f, 0xff,0xff,0xff,0xff,
0x01,0x0e,0xc0,0x01,0x30,0x00,0x0c,0xc0,0x03,0xf0,0x00,0xfc,0xc0,0xff,0xf0,0xff, 0xff,0xff,0xff,0xff,
0xff,0x00,0x1f,0xe0,0x01,0x1e,0x00,0x01,0x80,0x00,0xe0,0x00,0x38,0x00,0x0e,0xc0, 0xfe,0x01,0xf8,0x06,
0xfe,0x0f,0xff,0x01,0x3f,0x00,0x0f,0xc0,0x03,0xf0,0x00,0xfc,0xc0,0xff,0xf0,0xff, 0xc0,0x38,0x00,0xc0,
0x00,0xff,0xe0,0xff,0xfe,0x1f,0xff,0x01,0xff,0x00,0xff,0x00,0x3f,0x00,0x0f,0xc0, 0x01,0x01,0x07,0x04,
0x7c,0x00,0x1f,0x00,0x07,0x00,0x01,0x00,0x00,0x80,0x80,0x78,0xf8,0x07,0xff,0x00, 0x1f,0x10,0x7c,0x43,
0xff,0x3f,0x3f,0x3f,0xcf,0x0f,0xf3,0x03,0x3c,0x00,0x0f,0x00,0x03,0x80,0x80,0x70, 0x00,0xc0,0x03,0x00,
0xfc,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x80,0x7f,0xf8,0x07,0xff,0x00,0xff, 0x0f,0x00,0x3f,0x00,
0xff,0x3f,0x3f,0x3f,0xcf,0x0f,0xf3,0x03,0xfc,0x00,0xff,0x00,0xff,0x80,0x7f,0xf0, 0xfc,0x03,0xe0,0x1c,
0xfc,0xff,0xfc,0xfc,0xf3,0xf0,0xcf,0xc0,0x3c,0x00,0xf0,0x00,0xc0,0x00,0x00,0x03, 0x80,0x60,0x00,0x80,
0x3e,0x02,0xf8,0x08,0xe0,0x20,0x80,0x80,0x00,0x03,0x03,0x1c,0x1f,0x60,0x7f,0x80, 0x01,0xff,0x07,0xfe,
0xfc,0xff,0xfc,0xfc,0xf3,0xf0,0xcf,0xc0,0x3f,0x00,0xff,0x00,0xff,0x00,0xff,0x03, 0x3f,0xf8,0xff,0xc0,
0x3f,0x02,0xff,0x08,0xff,0x20,0xff,0x80,0xff,0x03,0xfc,0x1f,0xe0,0x7f,0x80,0xff, 0xff,0x01,0xff,0x04,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff, 0xff,0x10,0xfc,0x43,
0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff,0x00,0xff,0x00,0xff,0x03,0xff,0x0f,0xff, 0xff,0xc0,0xff,0x00,
0xff,0xff,0x3f,0xff,0x0f,0xff,0xc3,0xff,0xf0,0xff,0xfc,0xff,0xff,0xff,0xff,0xff, 0xff,0x00,0xff,0x00,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,0xff,0x1f,0xff,0x07,0xff,0xc1,0xff, 0xfc,0x03,0xe0,0x1c,
0x80,0xff,0xe0,0xff,0xf8,0xff,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x80,0x60,0x00,0x80,
0x3f,0xff,0x3f,0xff,0x0f,0xff,0x03,0xff,0xc0,0xff,0xf0,0xff,0xfc,0xff,0xff,0xff, 0x01,0x0e,0xc0,0x01,
0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff,0x03,0xff,0x0f,0xff,0x3f,0xff,0xff,0xff, 0xf0,0x00,0xfc,0x00,
0x03,0xff,0x0f,0xff,0x3f,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0x7f,0x80,0x07,0x78,
0x00,0x01,0x01,0x06,0x07,0x38,0x3f,0xc0,0xff,0x01,0xfc,0x07,0xf0,0x1f,0xc0,0x7f, 0x00,0x07,0x00,0x00,
0x3f,0xc0,0xfc,0x03,0xf0,0x0f,0xc0,0x3f,0x00,0xff,0x00,0xff,0x03,0xff,0x0f,0xff, 0xff,0x00,0x1f,0xe0,
0xff,0x01,0xfe,0x07,0xf8,0x3f,0xc0,0xff,0x01,0xff,0x04,0xff,0x10,0xff,0x40,0xff, 0x01,0x1e,0x00,0x01,
0xc0,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x03,0xff,0x0f,0xff, 0x80,0x00,0xe0,0x00,
0xf0,0x0e,0x3e,0xc1,0x0f,0xf0,0xc3,0xfc,0xf0,0xff,0xfc,0xff,0xff,0xff,0xff,0xff, 0x78,0x80,0x0e,0x70,
0x00,0x00,0x00,0xe0,0xe0,0x1e,0xfe,0x01,0x7f,0x80,0x1f,0xe0,0x07,0xf8,0xc1,0xfe, 0xfe,0x0f,0xff,0x01,
0x0f,0xfe,0x01,0xff,0x00,0xff,0xc0,0xff,0xf0,0xff,0xfc,0xff,0xff,0xff,0xff,0xff, 0xff,0x00,0xff,0x00,
0xff,0x00,0xff,0xe0,0x1f,0xfe,0x01,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0xc0,0xff, 0x7f,0x80,0x07,0x78,
0x80,0x7f,0xe0,0x1f,0xf8,0x07,0xfe,0x01,0x7f,0x80,0x07,0x78,0x00,0x07,0x00,0x00, 0x00,0x07,0x00,0x00,
0x3f,0xff,0x3f,0xff,0x0f,0xff,0x03,0xff,0xc0,0x3f,0xf0,0x0f,0x7c,0x83,0x0f,0x70, 0x00,0xff,0xe0,0xff,
0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x80,0xff,0xf8,0x7f,0xff,0x07,0xff,0x00, 0xfe,0x1f,0xff,0x01,
0x3f,0xff,0x3f,0xff,0x0f,0xff,0x03,0xff,0x00,0xff,0x00,0xff,0x80,0xff,0xf0,0x7f, 0xff,0x00,0xff,0x00,
0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff,0x03,0xfc,0x0f,0xf0,0x3f,0xc0,0xfc,0x03, 0x7f,0x80,0x0f,0x70,
0x03,0xfe,0x0f,0xf8,0x3f,0xe0,0xff,0x80,0xfc,0x03,0xe0,0x1c,0x80,0x60,0x00,0x80, 0xff,0xff,0xff,0xff,
0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff,0x00,0xff,0x00,0xff,0x00,0xff,0x03,0xff, 0xff,0xff,0xff,0xff,
0x02,0xff,0x08,0xff,0x20,0xff,0x80,0xff,0x03,0xff,0x1f,0xfc,0x7f,0xe0,0xff,0x80, 0xff,0xff,0xfc,0xff,
0xfe,0x01,0xf8,0x06,0xc0,0x38,0x00,0xc0,0x01,0x01,0x04,0x07,0x10,0x1f,0x40,0x7f, 0xf0,0xff,0xc3,0xff,
0x00,0xc0,0x00,0x03,0x00,0x0f,0x00,0x3f,0x00,0xff,0x00,0xff,0x03,0xff,0x0f,0xff, 0xff,0xff,0xfc,0xff,
0x01,0xff,0x07,0xfe,0x3f,0xf8,0xff,0xc0,0xff,0x01,0xfc,0x07,0xf0,0x1f,0xc0,0x7f, 0xf0,0xff,0xc0,0xff,
0xff,0xc0,0xfc,0x03,0xf0,0x0f,0xc0,0x3f,0x00,0xff,0x00,0xff,0x03,0xff,0x0f,0xff, 0x03,0xff,0x1c,0xff,
0x01,0x0e,0x00,0xc1,0x00,0xf0,0xc0,0xfc,0xf0,0xff,0xfc,0xff,0xff,0xff,0xff,0xff, 0x60,0xff,0x80,0xff,
0xff,0x00,0x1f,0xe0,0x01,0x1e,0x00,0x01,0x00,0x80,0x00,0xe0,0x00,0xf8,0xc0,0xfe, 0xff,0xff,0x3f,0xff,
0xfe,0x0f,0x3f,0xc1,0x0f,0xf0,0xc3,0xfc,0xf0,0xff,0xfc,0xff,0xff,0xff,0xff,0xff, 0x0f,0xff,0x03,0xff,
0x00,0xff,0xe0,0xff,0xfe,0x1f,0xff,0x01,0x7f,0x80,0x1f,0xe0,0x07,0xf8,0xc1,0xfe, 0x80,0xff,0x78,0xff,
0x00,0x7f,0x00,0x1f,0x00,0x07,0x00,0x01,0x00,0x80,0x80,0x78,0xf8,0x07,0xff,0x00, 0x07,0xff,0x00,0xff,
0x3f,0xff,0x3f,0xff,0x0f,0xff,0x03,0xff,0x00,0x3f,0x00,0x0f,0x00,0x83,0x80,0x70, 0xff,0xff,0xff,0xff,
0x80,0x7f,0xe0,0x1f,0xf8,0x07,0xfe,0x01,0xff,0x80,0x7f,0xf8,0x07,0xff,0x00,0xff, 0xff,0xff,0xff,0xff,
0x3f,0xff,0x3f,0xff,0x0f,0xff,0x03,0xff,0xc0,0x3f,0xf0,0x0f,0xfc,0x83,0x7f,0xf0, 0x7f,0xff,0x1f,0xff,
0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff,0x00,0xfc,0x00,0xf0,0x00,0xc0,0x00,0x03, 0x87,0xff,0x71,0xff,
0x02,0xfe,0x08,0xf8,0x20,0xe0,0x80,0x80,0x00,0x03,0x03,0x1c,0x1f,0x60,0x7f,0x80, 0x8e,0xff,0xe1,0xff,
0xff,0xff,0xfc,0xff,0xf0,0xff,0xc0,0xff,0x03,0xfc,0x0f,0xf0,0x3f,0xc0,0xff,0x03, 0xf8,0xff,0xfe,0xff,
0x03,0xfe,0x0f,0xf8,0x3f,0xe0,0xff,0x80,0xff,0x03,0xfc,0x1f,0xe0,0x7f,0x80,0xff 0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x00,0xff,0xe0,0xff,
0x1e,0xff,0x01,0xff,
0xc0,0xff,0xf0,0xff,
0xfc,0xff,0xff,0xff,
0x01,0xff,0x06,0xff,
0x38,0xff,0xc0,0xff,
0x03,0xff,0x0f,0xff,
0x3f,0xff,0xff,0xff,
0xc3,0xff,0x0f,0xff,
0x3f,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x00,0x01,0x01,0x06,
0x07,0x38,0x3f,0xc0,
0xff,0x01,0xfc,0x07,
0xf0,0x1f,0xc3,0x7f,
0x3f,0xc0,0xfc,0x03,
0xf0,0x0f,0xc0,0x3f,
0x03,0xff,0x1c,0xff,
0x60,0xff,0x80,0xff,
0xff,0x01,0xfe,0x07,
0xf8,0x3f,0xc0,0xff,
0x01,0xff,0x04,0xff,
0x10,0xff,0x43,0xff,
0xc0,0xff,0x00,0xff,
0x00,0xff,0x00,0xff,
0x03,0xff,0x1c,0xff,
0x60,0xff,0x80,0xff,
0xf0,0x0e,0x3e,0xc1,
0x0f,0xf0,0x03,0xfc,
0x80,0xff,0x78,0xff,
0x07,0xff,0x00,0xff,
0x00,0x00,0x00,0xe0,
0xe0,0x1e,0xfe,0x01,
0x7f,0x80,0x1f,0xe0,
0x87,0xf8,0x71,0xfe,
0x0f,0xfe,0x01,0xff,
0x00,0xff,0x00,0xff,
0x80,0xff,0x78,0xff,
0x07,0xff,0x00,0xff,
0xff,0x00,0xff,0xe0,
0x1f,0xfe,0x01,0xff,
0x00,0xff,0x00,0xff,
0x80,0xff,0x70,0xff,
0xff,0xff,0xfc,0xff,
0xf0,0xff,0xc0,0xff,
0x03,0xff,0x1f,0xfc,
0x7f,0xe0,0xff,0x80,
0xff,0xff,0x3f,0xff,
0x0f,0xff,0x03,0xff,
0x80,0xff,0xf8,0x7f,
0xff,0x07,0xff,0x00,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x7f,0xff,0x1f,0xff,
0x87,0xff,0xf1,0x7f,
0x8f,0xfe,0xe1,0xff,
0xf8,0xff,0xfe,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0x00,0xff,0xe0,
0x1f,0xfe,0x01,0xff,
0xc0,0xff,0xf0,0xff,
0xfc,0xff,0xff,0xff,
0xff,0x01,0xfe,0x07,
0xf8,0x3f,0xc0,0xff,
0x03,0xff,0x0f,0xff,
0x3f,0xff,0xff,0xff,
0xfe,0x01,0xf8,0x06,
0xc0,0x38,0x00,0xc0,
0x01,0x01,0x04,0x07,
0x10,0x1f,0x43,0x7f,
0x00,0xc0,0x00,0x03,
0x00,0x0f,0x00,0x3f,
0x03,0xff,0x1f,0xfc,
0x7f,0xe0,0xff,0x80,
0x01,0xff,0x07,0xfe,
0x3f,0xf8,0xff,0xc0,
0xff,0x01,0xfc,0x07,
0xf0,0x1f,0xc3,0x7f,
0xff,0xc0,0xfc,0x03,
0xf0,0x0f,0xc0,0x3f,
0x03,0xff,0x1f,0xfc,
0x7f,0xe0,0xff,0x80,
0x01,0x0e,0x00,0xc1,
0x00,0xf0,0x00,0xfc,
0x80,0xff,0xf8,0x7f,
0xff,0x07,0xff,0x00,
0xff,0x00,0x1f,0xe0,
0x01,0x1e,0x00,0x01,
0x00,0x80,0x00,0xe0,
0x80,0xf8,0xf0,0x7e,
0xfe,0x0f,0x3f,0xc1,
0x0f,0xf0,0x03,0xfc,
0x80,0xff,0xf8,0x7f,
0xff,0x07,0xff,0x00,
0x00,0xff,0xe0,0xff,
0xfe,0x1f,0xff,0x01,
0x7f,0x80,0x1f,0xe0,
0x87,0xf8,0xf1,0x7e,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xfc,0xfc,
0xf0,0xf0,0xc3,0xc0,
0xff,0xff,0xfc,0xfc,
0xf0,0xf0,0xc3,0xc0,
0x0f,0x00,0x3f,0x00,
0xff,0x03,0xff,0x0f,
0xff,0xff,0x3f,0x3f,
0x0f,0x0f,0x03,0xc3,
0x00,0xf0,0x00,0xfc,
0xc0,0xff,0xf0,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x7f,0x7f,0x1f,0x1f,
0x07,0x07,0x01,0xc1,
0x80,0x80,0xe0,0xe0,
0xf8,0xf8,0xfe,0xfe,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0x3f,0x3f,0x3f,
0x0f,0x0f,0x03,0x03,
0xc0,0xc0,0xf0,0xf0,
0xfc,0xfc,0xff,0xff,
0xfc,0xff,0xfc,0xfc,
0xf0,0xf0,0xc0,0xc0,
0x03,0x03,0x0f,0x0f,
0x3f,0x3f,0xff,0xff,
0x03,0x03,0x0f,0x0f,
0x3f,0x3f,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x00,0x01,0x01,0x06,
0x07,0x38,0x3f,0xc0,
0xff,0x01,0xfc,0x04,
0xf0,0x10,0xc3,0x40,
0x3f,0xc0,0xfc,0x00,
0xf0,0x00,0xc3,0x00,
0x0f,0x00,0x3f,0x00,
0xff,0x03,0xff,0x0f,
0xff,0x01,0xfe,0x07,
0xf8,0x3f,0xc0,0xff,
0x01,0xff,0x04,0xfc,
0x10,0xf0,0x43,0xc0,
0xc0,0xff,0x00,0xfc,
0x00,0xf0,0x03,0xc0,
0x0f,0x00,0x3f,0x00,
0xff,0x03,0xff,0x0f,
0xf0,0x0e,0x3e,0x01,
0x0f,0x00,0x03,0xc0,
0x00,0xf0,0x00,0xfc,
0xc0,0xff,0xf0,0xff,
0x00,0x00,0x00,0xe0,
0xe0,0x1e,0xfe,0x01,
0x7f,0x00,0x1f,0x00,
0x07,0x00,0x01,0xc0,
0x0f,0xfe,0x01,0x3f,
0x00,0x0f,0x00,0xc3,
0x00,0xf0,0x00,0xfc,
0xc0,0xff,0xf0,0xff,
0xff,0x00,0xff,0xe0,
0x1f,0xfe,0x01,0xff,
0x00,0x7f,0x00,0x1f,
0x00,0x07,0x00,0xc1,
0x80,0x00,0xe0,0x00,
0xf8,0x00,0xfe,0x00,
0x7f,0x80,0x07,0x78,
0x00,0x07,0x00,0x00,
0xff,0x3f,0x3f,0x3f,
0x0f,0x0f,0x03,0x03,
0xc0,0x00,0xf0,0x00,
0x7c,0x80,0x0f,0x70,
0x00,0x80,0x00,0xe0,
0x00,0xf8,0x00,0xfe,
0x80,0xff,0xf8,0x7f,
0xff,0x07,0xff,0x00,
0xff,0x3f,0x3f,0x3f,
0x0f,0x0f,0x03,0x03,
0x00,0xc0,0x00,0xf0,
0x80,0xfc,0xf0,0x7f,
0xfc,0xff,0xfc,0xfc,
0xf0,0xf0,0xc0,0xc0,
0x03,0x00,0x0f,0x00,
0x3f,0x00,0xfc,0x03,
0x03,0x02,0x0f,0x08,
0x3f,0x20,0xff,0x80,
0xfc,0x03,0xe0,0x1c,
0x80,0x60,0x00,0x80,
0xfc,0xff,0xfc,0xfc,
0xf0,0xf0,0xc0,0xc0,
0x00,0x03,0x00,0x0f,
0x00,0x3f,0x03,0xff,
0x02,0x03,0x08,0x0f,
0x20,0x3f,0x80,0xff,
0x03,0xff,0x1f,0xfc,
0x7f,0xe0,0xff,0x80,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xfc,
0xfc,0xf0,0xf3,0xc0,
0xff,0xff,0xff,0xfc,
0xfc,0xf0,0xf3,0xc0,
0xcf,0x00,0x3f,0x00,
0xff,0x03,0xff,0x0f,
0xff,0xff,0xff,0x3f,
0x3f,0x0f,0x0f,0xc3,
0x03,0xf0,0x00,0xfc,
0xc0,0xff,0xf0,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0x7f,0xff,0x1f,
0x3f,0x07,0x0f,0xc1,
0xfc,0x80,0xff,0xe0,
0xff,0xf8,0xff,0xfe,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0x3f,0x3f,0x3f,
0xcf,0x0f,0xf3,0x03,
0xfc,0xc0,0xff,0xf0,
0xff,0xfc,0xff,0xff,
0xfc,0xff,0xfc,0xfc,
0xf3,0xf0,0xcf,0xc0,
0x3f,0x03,0xff,0x0f,
0xff,0x3f,0xff,0xff,
0x3f,0x03,0xff,0x0f,
0xff,0x3f,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xfe,0x01,0xf8,0x06,
0xc0,0x38,0x00,0xc0,
0x01,0x01,0x07,0x04,
0x1c,0x10,0x73,0x40,
0x00,0xc0,0x03,0x00,
0x0c,0x00,0x33,0x00,
0xcf,0x00,0x3f,0x00,
0xff,0x03,0xff,0x0f,
0x01,0xff,0x07,0xfe,
0x3f,0xf8,0xff,0xc0,
0xff,0x01,0xff,0x04,
0xfc,0x10,0xf3,0x40,
0xff,0xc0,0xff,0x00,
0xfc,0x00,0xf3,0x00,
0xcf,0x00,0x3f,0x00,
0xff,0x03,0xff,0x0f,
0x01,0x0e,0xc0,0x01,
0x30,0x00,0x0c,0xc0,
0x03,0xf0,0x00,0xfc,
0xc0,0xff,0xf0,0xff,
0xff,0x00,0x1f,0xe0,
0x01,0x1e,0x00,0x01,
0x80,0x00,0xe0,0x00,
0x38,0x00,0x0e,0xc0,
0xfe,0x0f,0xff,0x01,
0x3f,0x00,0x0f,0xc0,
0x03,0xf0,0x00,0xfc,
0xc0,0xff,0xf0,0xff,
0x00,0xff,0xe0,0xff,
0xfe,0x1f,0xff,0x01,
0xff,0x00,0xff,0x00,
0x3f,0x00,0x0f,0xc0,
0x7c,0x00,0x1f,0x00,
0x07,0x00,0x01,0x00,
0x00,0x80,0x80,0x78,
0xf8,0x07,0xff,0x00,
0xff,0x3f,0x3f,0x3f,
0xcf,0x0f,0xf3,0x03,
0x3c,0x00,0x0f,0x00,
0x03,0x80,0x80,0x70,
0xfc,0x00,0xff,0x00,
0xff,0x00,0xff,0x00,
0xff,0x80,0x7f,0xf8,
0x07,0xff,0x00,0xff,
0xff,0x3f,0x3f,0x3f,
0xcf,0x0f,0xf3,0x03,
0xfc,0x00,0xff,0x00,
0xff,0x80,0x7f,0xf0,
0xfc,0xff,0xfc,0xfc,
0xf3,0xf0,0xcf,0xc0,
0x3c,0x00,0xf0,0x00,
0xc0,0x00,0x00,0x03,
0x3e,0x02,0xf8,0x08,
0xe0,0x20,0x80,0x80,
0x00,0x03,0x03,0x1c,
0x1f,0x60,0x7f,0x80,
0xfc,0xff,0xfc,0xfc,
0xf3,0xf0,0xcf,0xc0,
0x3f,0x00,0xff,0x00,
0xff,0x00,0xff,0x03,
0x3f,0x02,0xff,0x08,
0xff,0x20,0xff,0x80,
0xff,0x03,0xfc,0x1f,
0xe0,0x7f,0x80,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xfc,0xff,
0xf0,0xff,0xc0,0xff,
0xff,0xff,0xfc,0xff,
0xf0,0xff,0xc0,0xff,
0x00,0xff,0x00,0xff,
0x03,0xff,0x0f,0xff,
0xff,0xff,0x3f,0xff,
0x0f,0xff,0xc3,0xff,
0xf0,0xff,0xfc,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x7f,0xff,0x1f,0xff,
0x07,0xff,0xc1,0xff,
0x80,0xff,0xe0,0xff,
0xf8,0xff,0xfe,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x3f,0xff,0x3f,0xff,
0x0f,0xff,0x03,0xff,
0xc0,0xff,0xf0,0xff,
0xfc,0xff,0xff,0xff,
0xff,0xff,0xfc,0xff,
0xf0,0xff,0xc0,0xff,
0x03,0xff,0x0f,0xff,
0x3f,0xff,0xff,0xff,
0x03,0xff,0x0f,0xff,
0x3f,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,
0x00,0x01,0x01,0x06,
0x07,0x38,0x3f,0xc0,
0xff,0x01,0xfc,0x07,
0xf0,0x1f,0xc0,0x7f,
0x3f,0xc0,0xfc,0x03,
0xf0,0x0f,0xc0,0x3f,
0x00,0xff,0x00,0xff,
0x03,0xff,0x0f,0xff,
0xff,0x01,0xfe,0x07,
0xf8,0x3f,0xc0,0xff,
0x01,0xff,0x04,0xff,
0x10,0xff,0x40,0xff,
0xc0,0xff,0x00,0xff,
0x00,0xff,0x00,0xff,
0x00,0xff,0x00,0xff,
0x03,0xff,0x0f,0xff,
0xf0,0x0e,0x3e,0xc1,
0x0f,0xf0,0xc3,0xfc,
0xf0,0xff,0xfc,0xff,
0xff,0xff,0xff,0xff,
0x00,0x00,0x00,0xe0,
0xe0,0x1e,0xfe,0x01,
0x7f,0x80,0x1f,0xe0,
0x07,0xf8,0xc1,0xfe,
0x0f,0xfe,0x01,0xff,
0x00,0xff,0xc0,0xff,
0xf0,0xff,0xfc,0xff,
0xff,0xff,0xff,0xff,
0xff,0x00,0xff,0xe0,
0x1f,0xfe,0x01,0xff,
0x00,0xff,0x00,0xff,
0x00,0xff,0xc0,0xff,
0x80,0x7f,0xe0,0x1f,
0xf8,0x07,0xfe,0x01,
0x7f,0x80,0x07,0x78,
0x00,0x07,0x00,0x00,
0x3f,0xff,0x3f,0xff,
0x0f,0xff,0x03,0xff,
0xc0,0x3f,0xf0,0x0f,
0x7c,0x83,0x0f,0x70,
0x00,0xff,0x00,0xff,
0x00,0xff,0x00,0xff,
0x80,0xff,0xf8,0x7f,
0xff,0x07,0xff,0x00,
0x3f,0xff,0x3f,0xff,
0x0f,0xff,0x03,0xff,
0x00,0xff,0x00,0xff,
0x80,0xff,0xf0,0x7f,
0xff,0xff,0xfc,0xff,
0xf0,0xff,0xc0,0xff,
0x03,0xfc,0x0f,0xf0,
0x3f,0xc0,0xfc,0x03,
0x03,0xfe,0x0f,0xf8,
0x3f,0xe0,0xff,0x80,
0xfc,0x03,0xe0,0x1c,
0x80,0x60,0x00,0x80,
0xff,0xff,0xfc,0xff,
0xf0,0xff,0xc0,0xff,
0x00,0xff,0x00,0xff,
0x00,0xff,0x03,0xff,
0x02,0xff,0x08,0xff,
0x20,0xff,0x80,0xff,
0x03,0xff,0x1f,0xfc,
0x7f,0xe0,0xff,0x80,
0xfe,0x01,0xf8,0x06,
0xc0,0x38,0x00,0xc0,
0x01,0x01,0x04,0x07,
0x10,0x1f,0x40,0x7f,
0x00,0xc0,0x00,0x03,
0x00,0x0f,0x00,0x3f,
0x00,0xff,0x00,0xff,
0x03,0xff,0x0f,0xff,
0x01,0xff,0x07,0xfe,
0x3f,0xf8,0xff,0xc0,
0xff,0x01,0xfc,0x07,
0xf0,0x1f,0xc0,0x7f,
0xff,0xc0,0xfc,0x03,
0xf0,0x0f,0xc0,0x3f,
0x00,0xff,0x00,0xff,
0x03,0xff,0x0f,0xff,
0x01,0x0e,0x00,0xc1,
0x00,0xf0,0xc0,0xfc,
0xf0,0xff,0xfc,0xff,
0xff,0xff,0xff,0xff,
0xff,0x00,0x1f,0xe0,
0x01,0x1e,0x00,0x01,
0x00,0x80,0x00,0xe0,
0x00,0xf8,0xc0,0xfe,
0xfe,0x0f,0x3f,0xc1,
0x0f,0xf0,0xc3,0xfc,
0xf0,0xff,0xfc,0xff,
0xff,0xff,0xff,0xff,
0x00,0xff,0xe0,0xff,
0xfe,0x1f,0xff,0x01,
0x7f,0x80,0x1f,0xe0,
0x07,0xf8,0xc1,0xfe,
0x00,0x7f,0x00,0x1f,
0x00,0x07,0x00,0x01,
0x00,0x80,0x80,0x78,
0xf8,0x07,0xff,0x00,
0x3f,0xff,0x3f,0xff,
0x0f,0xff,0x03,0xff,
0x00,0x3f,0x00,0x0f,
0x00,0x83,0x80,0x70,
0x80,0x7f,0xe0,0x1f,
0xf8,0x07,0xfe,0x01,
0xff,0x80,0x7f,0xf8,
0x07,0xff,0x00,0xff,
0x3f,0xff,0x3f,0xff,
0x0f,0xff,0x03,0xff,
0xc0,0x3f,0xf0,0x0f,
0xfc,0x83,0x7f,0xf0,
0xff,0xff,0xfc,0xff,
0xf0,0xff,0xc0,0xff,
0x00,0xfc,0x00,0xf0,
0x00,0xc0,0x00,0x03,
0x02,0xfe,0x08,0xf8,
0x20,0xe0,0x80,0x80,
0x00,0x03,0x03,0x1c,
0x1f,0x60,0x7f,0x80,
0xff,0xff,0xfc,0xff,
0xf0,0xff,0xc0,0xff,
0x03,0xfc,0x0f,0xf0,
0x3f,0xc0,0xff,0x03,
0x03,0xfe,0x0f,0xf8,
0x3f,0xe0,0xff,0x80,
0xff,0x03,0xfc,0x1f,
0xe0,0x7f,0x80,0xff
}; };
-2
View File
@@ -1,6 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /tiles.png -c /tiles.c -map -bpp 2 -noflip -keep_palette_order
#ifndef METASPRITE_tiles_H #ifndef METASPRITE_tiles_H
#define METASPRITE_tiles_H #define METASPRITE_tiles_H
+878 -221
View File
File diff suppressed because it is too large Load Diff
-2
View File
@@ -1,6 +1,4 @@
//AUTOGENERATED FILE FROM png2asset //AUTOGENERATED FILE FROM png2asset
// Conversion args: /title_bg.png -c /title_bg.c -map -bpp 2 -noflip -keep_palette_order -max_palettes 1
#ifndef METASPRITE_title_bg_H #ifndef METASPRITE_title_bg_H
#define METASPRITE_title_bg_H #define METASPRITE_title_bg_H
-51
View File
@@ -1,51 +0,0 @@
//AUTOGENERATED FILE FROM png2asset
// Conversion args: /victory.png -c /victory.c -bpp 2 -noflip -keep_palette_order
#include <stdint.h>
#include <gbdk/platform.h>
#include <gbdk/metasprites.h>
BANKREF(victory)
const palette_color_t victory_palettes[32] = {
RGB8(224,248,207), RGB8(134,192,108), RGB8( 48,104, 80), RGB8( 7, 24, 33),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0),
RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0), RGB8( 0, 0, 0)
};
const uint8_t victory_tiles[224] = {
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x88,0xff,0x88,0xdd,0x88,0xdd,0x88,0xdd,
0xc1,0xeb,0xc1,0xe3,0xe3,0xf7,0xf7,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xff,0xc3,0xe7,0xe3,0xf7,0xe3,0xf7,
0xe3,0xf7,0xe3,0xf7,0xc3,0xe7,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xff,0x81,0xc3,0x83,0xdf,0x8f,0xdf,
0x8f,0xdf,0x83,0xdf,0x81,0xc3,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x81,0xff,0x80,0xc1,0xe3,0xf7,0xe3,0xf7,
0xe3,0xf7,0xe3,0xf7,0xe3,0xf7,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xc3,0xff,0x81,0xc3,0x81,0xdb,0x81,0xdb,
0x81,0xdb,0x81,0xdb,0x81,0xc3,0xc3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x83,0xff,0x81,0xc3,0x81,0xdb,0x81,0xc3,
0x81,0xdb,0x89,0xdb,0x89,0xdb,0x99,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x99,0xff,0x88,0xdd,0xc1,0xeb,0xc1,0xe3,
0xe3,0xf7,0xe3,0xf7,0xe3,0xf7,0xe3,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
};
const metasprite_t victory_metasprite0[] = {
METASPR_ITEM(-8, -28, 0, S_PAL(0)),
METASPR_ITEM(0, 8, 2, S_PAL(0)),
METASPR_ITEM(0, 8, 4, S_PAL(0)),
METASPR_ITEM(0, 8, 6, S_PAL(0)),
METASPR_ITEM(0, 8, 8, S_PAL(0)),
METASPR_ITEM(0, 8, 10, S_PAL(0)),
METASPR_ITEM(0, 8, 12, S_PAL(0)),
METASPR_TERM
};
const metasprite_t* const victory_metasprites[1] = {
victory_metasprite0
};
-31
View File
@@ -1,31 +0,0 @@
//AUTOGENERATED FILE FROM png2asset
// Conversion args: /victory.png -c /victory.c -bpp 2 -noflip -keep_palette_order
#ifndef METASPRITE_victory_H
#define METASPRITE_victory_H
#include <stdint.h>
#include <gbdk/platform.h>
#include <gbdk/metasprites.h>
#define victory_TILE_ORIGIN 0
#define victory_TILE_W 8
#define victory_TILE_H 16
#define victory_WIDTH 56
#define victory_HEIGHT 16
#define victory_TILE_COUNT 14
#define victory_PALETTE_COUNT 8
#define victory_COLORS_PER_PALETTE 4
#define victory_TOTAL_COLORS 32
#define victory_PIVOT_X 28
#define victory_PIVOT_Y 8
#define victory_PIVOT_W 56
#define victory_PIVOT_H 16
extern const metasprite_t* const victory_metasprites[1];
BANKREF_EXTERN(victory)
extern const palette_color_t victory_palettes[32];
extern const uint8_t victory_tiles[224];
#endif