A Retro Game of flying birds that have to block a bat invasion
Tutto è partito da questo articolo fighissimo che però propone molte risorse solo per Windows o non più mantenute. Ho dovuto cercare un po' nei meandri dell'internet!
Il linguaggio di base è C! La libreria specifica per compilare in .gb è GBDK o meglio il suo repo GitHub un po' più mantenuto. Bisogna leggersi i vari README e istruzioni ed è un po' una menny all'inizio ma è fattibile.
Per testare le build io uso GBEmu
Una Wiki con i comandi della GBDK si può trovare qui Mentre qui c'è la documentazione "ufficiale"
Tutte le immagini utilizzate nel gioco non sono fatte di pixel, ma ciascun punto dell'immagine ha 4 possibili valori (2 bit), quindi in un byte ci stanno 4 punti dell'immagine e le immagini sono array di byte (char o UBYTE in C).
Per convertire un'immagine in un array di byte per il GameBoy sono riuscito a recuperare questo sito su cui carico delle immagini fatte con 4 livelli di grigio #FFFFFF
, #C0C0C0
, #797979
e #000000
che sono equidistanziati quindi sono sicuro che li mappa giusti.
Per le musiche sto usando questo tool online per creare un po' le melodie, ma poi è un po' una menny riportarle nel codice!
Dall'articolo iniziale linka questo progetto che ha dentro un file .gb da usare nell'emulatore per creare la musica e vedere i valori da scrivere nel codice, ma l'ho provato e non ci ho capito niente :D
L'idea sarebbe quella di farsi creare delle cassettine da questo sito che costano 10$ l'una quelle da 32KB.
Una cosa che mi farò arrivare appena torna disponibile è il Nanoloop One che serve sia per creare le musiche sia per contenere fino a due rom .gb da 32KB per poter testare il gioco sul vero GameBoy prima di farsi fare la cassetta finale.
Per questo progetto sono ben accetti contributi di vario tipo tra cui:
- Coding generale: scrivere il codice, anche non ottimizzato per fare qualcosa, dal riprodurre suoni all'animare una sprite.
- Code optimization: applicare tutti i dirty tricks che solo C ci regala per diminuire al massimo lo spazio di memoria occupato dal codice e dall'esecuzione del gioco, robe tipo dichiarare una sola variabile
unsigned char i
e usarla per tutti i ciclifor( i = 0; ...)
. - Data modeling: capire come mappare i vari dati dei vari elementi del gioco (ad esempio statistiche e stato dei vari personaggi e nemici) a livello di bit.
- Spriting: creare le varie sprite, i background, gli ostacoli, i nemici ecc. a livello di pixel art e frame delle animazioni.
- Musiche e suoni: creare le varie musiche, ma anche i vari effetti sonori
- Game design: in generale capire come strutturare il gioco, se farlo a livelli o stile arcade che continua finché perdi, come tematizzare le varie fasi del gioco, quali elementi includere e quando introdurli ecc.
- Story Telling: definire tutta la storia che spiega perché sti uccelli devono prendere a testare i pipistrelli
- Grafiche fiche: io volevo fare anche il librettino del gioco se riesce bene, fatto come quelli veri di una volta tutti colorati e che ti facevano vedere com'erano i personaggi oltre ai 4-5 pixel che vedevi poi sullo schermo! E poi anche tipo gli adesivi da attaccare alle cassettine e anche i loghi e i font da usare nel gioco stesso
- Marketing: se poi si riesce a combinare qualcosa mi piacerebbe fare un progettino Kickstarter per tirare su qualche soldo e stampare qualche centinaio di cassettine da mandare in giro anche solo per dire che lo abbiamo fatto!
- Tester: gente che gioca e ci dice cosa ne pensa con sincerità, ma senza dover per froza trovare qualcosa che non va
Qui alcuni punti dove trovare alcune cose all'interno del repository.
nel documento doc/info
c'è un'overview molto sintetica dell'idea iniziale con i vari tipi di uccelli e di pipistrelli e di ostacoli con relative caratteristiche speciali, power-ups che si possono trovare, suddivisione in livelli ecc.
nel file doc/data_formats
c'è la bozza di come sono suddivise le informazioni nei vari bit corrispondenti a ciascun tipo di entità.
nella cartella generation/sprites/files
ci sono tutte le sprite attualmente usate in formato .bmp
e anche .piko
che è il formato di PikoPixel.
La cartella generation
è un WIP non proprio IP in cui volevo fare degli script Node per convertire le sprite in byte array, dei file che rappresentano i livelli nelle relative strutture da includere nel codice ecc.
La pagina che vi ho condiviso con la DEMO è hostata sotto docs/