{"id":22835989,"url":"https://github.com/bjatkin/flappy-boot","last_synced_at":"2026-01-22T11:11:14.493Z","repository":{"id":65697791,"uuid":"586335865","full_name":"bjatkin/flappy-boot","owner":"bjatkin","description":"a flappy bird clone for the GBA","archived":false,"fork":false,"pushed_at":"2024-09-02T04:53:17.000Z","size":3474,"stargazers_count":21,"open_issues_count":3,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-10T21:34:32.970Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bjatkin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2023-01-07T19:13:33.000Z","updated_at":"2025-07-28T23:49:02.000Z","dependencies_parsed_at":"2023-02-18T21:30:54.352Z","dependency_job_id":"accfcd1d-291a-4894-9e86-97fcb4c60c15","html_url":"https://github.com/bjatkin/flappy-boot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bjatkin/flappy-boot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjatkin%2Fflappy-boot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjatkin%2Fflappy-boot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjatkin%2Fflappy-boot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjatkin%2Fflappy-boot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bjatkin","download_url":"https://codeload.github.com/bjatkin/flappy-boot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bjatkin%2Fflappy-boot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28661882,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-22T01:17:37.254Z","status":"online","status_checked_at":"2026-01-22T02:00:07.137Z","response_time":144,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-12T23:00:49.830Z","updated_at":"2026-01-22T11:11:14.488Z","avatar_url":"https://github.com/bjatkin.png","language":"Go","funding_links":[],"categories":["Gaming"],"sub_categories":["Instrumentation and control with sensors and actuators"],"readme":"# Flappy Boot\n![flappy boot title](https://github.com/bjatkin/flappy-boot/blob/main/assets/title.png)\nOh No! Hermes, the Olympian god, seems to have dropped on of his winged boots from the heavens!\nBetter hurry and find your way back to him, but beware of the many Roman columns that stand in your way.\n\nThis is a flappy bird clone written from scratch for the GBA.\nIt is open source and fairly well commented so feel free to use it as a jumping off point for your own project.\nIf you would like to learn about this project check out [this presentation](https://youtu.be/mrWJZSVSRVQ?si=653ayqaEtqz5xB6o) on makeing GBA games in Go.\n\n\n# Play Me\n![flappy boot gameplay](https://github.com/bjatkin/flappy-boot/blob/main/assets/gameplay.gif)\nYou can play this game on [itch.io](https://aanval.itch.io/flappy-boot-advance).\nitch.io will allow you do download the gba rom to play on any gba emulator.\nIt also contains a web build so you can play it in your browser.\nThe web player is a customer emulator built using [ebitengine](https://ebitengine.org/).\nYou can look at the emulator code [here](https://github.com/bjatkin/flappy-boot/tree/main/internal/emu).\n\n# Project Structure\nThis project has the following structure.\n* assets: png assets and mockups for the game\n* cmd: tools used as part of game development\n    * image_gen: conversion tool used to generate GBA compatible graphics from png image files.\n    * lut: look up table generation for the sin function.\n* gameplay: all gameplay related code.\n* internal: internal engine code. The core logic that the game is built on top of.\n    * fix: the fixed point number type used extensivly through the project. It is has 24 whole number bits and 8 fractional bits.\n    * alloc: memory allocators for the gba's VRAM and Paletts memory.\n    * assets: generated assets that are used directly in the engine.\n    * display: display and color related code for the engine.\n    * emu/ppu: a simple ppu emulator that allows standalone and web builds.\n    * key: key codes for input handling.\n    * lut: look up tables for the sin function.\n    * math: some simple math focused utilities.\n    * game: the code for the game engine.\n    * hardware: GBA hardware related code, includes things like hardware registers and memory offsets.\n        * audio: some of the basic audio registers. (unused)\n        * display: display related registers.\n        * dma: registers for direct memory access. (unused)\n        * key: input related registers.\n        * memmap: gba memory layout and register access. \n        * sprite: oam and palette memory.\n        * timer: some of the basic gba timer registers. (unused)\n        * save: registers and memory related to save data on the GBA. It specifically supports FRAM style hardware.\n* config.yaml: configuration for the image_gen tool.\n* wasm: all code related to the frontend web build.\n\n# Running Flappy Boot\nFlappy Boot can be run in 3 different modes:\n1) as a standalone game using an emulated PPU\n2) as a wasm build using wasm and npm\n3) as a GBA ROM inside an emulator/ or on actual hardware\n\nYou can build all these files for all these targets using the `./build` script.\nNote that you should only run `./build` from the root directory of the repo otherwise it will fail.\n\n### Standalone\nThe Standalone build can be built using the normal go build tool.\nYou will need to include the `standalone` and `local` build tags however.\n```sh\ngo build -tags=standalone,local .\n```\nwhen run this game will create a `flappy_boot_stand.sav` file, which contains the high score save data.\n\n### Web\nYou can build the flappy bird file for `.wasm` using the following command.\n```sh\nenv GOOS=js GOARCH=wasm go build -tags=standalone,web -o wasm/flappy_boot.wasm github.com/bjatkin/flappy_boot\n```\n\nIf this is the first time building the wasm file you will nee to run\n```sh\nnpm init\n```\n\nYou can play this in a browser by entering the `wasm` directory and then running\n```sh\nnpm run dev\n```\n\nnote that the PPU emulator doesn't quite performe as well as the standalone or emulated versions of the game.\nFor the best experience, you should play one of the other verions.\n\n### GBA ROM\nFirst ensure you have the [tiny-go complier](https://tinygo.org/getting-started/install/) installed.\nThis is the complier that this project uses and you will not be able to complie without it.\n\nNext you'll likely want to install the `mgba-qt` eumlator.\nThis is not required however, and any GBA emulator can be used to run flappy boot.\n\nIf you have `mgba-qt` available to run from your terminal you can simply run the `./run` shell file.\nThis will test all the code, re-generate all assets files, complie the code, and then start the game in `mgba-qt`.\n\nIf you do not have this emulator installed you'll need to run the `./build` shell file instead\nThis performs all the same steps as `./run` however, it will not attempt to start the game.\nInstead it will create a file called `flappy_boot.gba`.\nThis `.gba` file can then be run with any sutiable GBA emulator.\n\n# References\nThis project was made possible because of the awesome [tiny go complier](https://tinygo.org/),\nas well as those who worked to get support for the [GBA compile target](https://tinygo.org/docs/reference/microcontrollers/gameboy-advance/).\n\nFlappy boot was built with the help of a couple of really excelent GBA programming resources.\nThese are both tailored for C/C++ development on the GBA but still provied great general knowledge.\n* [TONIC](https://www.coranac.com/tonc/text/toc.htm)\n* [GBATEK](https://problemkaputt.de/gbatek.htm)\n\nThe GBxCart RW was used to flash flappy boot to a phisical repoduction cart.\n* [GBxCart RW](https://www.gbxcart.com/)\n\nThere are also several talks related to the development of this project.\n* [Go West 2023](https://www.youtube.com/live/5qvfAc1C2Kg?si=mJF-05vCzNOkdn4z\u0026t=5955)\n* [Forge Utah Go Users Group](https://youtu.be/mrWJZSVSRVQ?si=SfUO3th8HURi0uJj)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjatkin%2Fflappy-boot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbjatkin%2Fflappy-boot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbjatkin%2Fflappy-boot/lists"}