Giter Site home page Giter Site logo

birds-vs-bats's Introduction

Birds vs Bats

A Retro Game of flying birds that have to block a bat invasion

Ispirazione

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!

Librerie e Setup

C e libreria GBDK

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.

Emulatore

Per testare le build io uso GBEmu

Wiki

Una Wiki con i comandi della GBDK si può trovare qui Mentre qui c'è la documentazione "ufficiale"

Sprite to Data

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.

Suoni e musiche

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

Hardware

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.

Contributions

Per questo progetto sono ben accetti contributi di vario tipo tra cui:

  1. Coding generale: scrivere il codice, anche non ottimizzato per fare qualcosa, dal riprodurre suoni all'animare una sprite.
  2. 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 cicli for( i = 0; ...).
  3. 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.
  4. Spriting: creare le varie sprite, i background, gli ostacoli, i nemici ecc. a livello di pixel art e frame delle animazioni.
  5. Musiche e suoni: creare le varie musiche, ma anche i vari effetti sonori
  6. 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.
  7. Story Telling: definire tutta la storia che spiega perché sti uccelli devono prendere a testare i pipistrelli
  8. 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
  9. 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!
  10. Tester: gente che gioca e ci dice cosa ne pensa con sincerità, ma senza dover per froza trovare qualcosa che non va

Riferimenti nel codice

Qui alcuni punti dove trovare alcune cose all'interno del repository.

Info Generali

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.

Strutture dati

nel file doc/data_formats c'è la bozza di come sono suddivise le informazioni nei vari bit corrispondenti a ciascun tipo di entità.

Sprite e Grafiche di Gioco

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.

GitHub Page

La pagina che vi ho condiviso con la DEMO è hostata sotto docs/

birds-vs-bats's People

Contributors

carloduckma avatar onheiron avatar

Watchers

 avatar  avatar  avatar  avatar

birds-vs-bats's Issues

Aggiungere i pipistrelli!

I pipistrelli sono come gli ostacoli, ma si muovono più liberamente sullo schermo, avvicinandosi, allontanandosi e cambiando corsia.

Aggiungere altri tipi di ostacoli

Task trasversale per provare un po' tutto il giro:

  1. creare la sprite per un tipo di ostacolo
  2. convertirla in byte array di dati
  3. inserirla nel codice
  4. modificare il codice per gestire il nuovo ostacolo
  5. definire statistiche del nuovo ostacolo
  6. generare il nuovo ostacolo nel progredire del livello

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.