Geralt e7f550ce22 [Feature] Implement options menu and reading/writing values from/to the SRAM (#449)
* background

* Implement Options button

* Update main menu artwork

* add options menu tiles

* prepare options menu handling

* incorporate main menu refactor

* toto

* add all menu interactions

* do not reset selection_x in main_menu

* options struct

* fix rebase from ricfehr3's repo

* Implement high contrast cards

* Save/Load options values to SRAM

* load options on game_init and validate data within the load_options function

* Get changes from ricfehr3's PR

* recover fix for glitched ace

* clang format

* clang format

* clang format

* Save 500B of image data by using only minimal set of tiles instead of keeping final window in source file

* clang format

* clang format

* Implement Options button

* Update main menu artwork

* progress, leaving it alone for now until discussion

* make game_vars an extern

* Move options vars into their own struct

* rollback previous commit

* Implement save validation. Version check to come

* implement data validity + version check for game saves

* clang format

* Save position in rng sequence for consistent run after load

* fix rebase issues

* fix rebase issue

* remove unused/duplicate define

* Oops, made a mistake when testing PR #424

* encode high contrast palette into an image, and load it at game_start

* document save.c/h and correct typos

* correct alignment

* game speed and high contrast buttons working

* small cleanup

* sliders also work again now

* clang format

* Moved balatro_version extern declaration to version.h file

* removed unsused variable

* make showing ROM version a toggle

* move ante, round and money to the GameVariables struct

* Rename SaveCheckInfo struct to SaveHeader for clarity

* Add SaveHeader struct explanation

* clang format

* Revert unnecessary tileset optimization

* SFX now follows the sound volume slider

* clang format

* Music now follows volume slider

* Changed volume slider increment from 5 to 20 to avoid having the music sound too rough under 20% volume

* refactor main_menu.c to use SelectionGrid and Button structs

* clang format

* make a "new" save button so we don't save during the state transition

* clang format

* Reduced state transition flicker by only changing affine background to a different one

* Fix loading game too late in game init sequence

* First batch of suggestions from @MeirGavish

* Remove unnecessary intermediary buffers for high contrast palette swapping

* comment row warp hack for button input

* Add some of Copilot's suggestions

* rename balatro_version into gbalatro_version for rebranding reasons + version display erase screen fix

* remove unnecessary NULL check on `on_selection_changed` method

* implement small game speed arrow buttons animation

* factorize some code

* remove unnecessary data validation in load_game(), since we already checked the header

* Implement @MeirGavish 's suggestion regarding splitting the huge `on_update` function

* clang format

* implement @ricfehr3 's suggestion about keeping last selected button instead of using an obscure `on_boot` boolean

* Apply @ricfehr3's suggestions

* fix clang-format flags

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2026-05-02 14:28:52 -07:00
2026-04-27 20:04:18 -07:00
2026-03-09 11:17:17 +02:00
2026-04-04 23:58:08 -07:00
2025-08-25 07:32:44 -04:00
2026-04-04 23:58:08 -07:00
2026-03-09 11:17:17 +02:00

Balatro-GBA

Build Status Open Issues Pull Requests Discussions

Disclaimer

This project is a non-profit fan demake of Balatro for the Game Boy Advance, meant to recreate it as accurately as possible including all the visuals that make it satisfying to play. It is not affiliated with or endorsed by Playstack or LocalThunk and it is not to be sold. This version is a minimal tech-demo, intended for those who already own and know the official game. Refer to the Balatro wiki below for descriptions of game mechanics and joker effects. All rights remain with the original holders.

Balatro Wiki

Please buy the official full version from these sources below:

Balatro on Steam Balatro on Google Play Balatro on Apple App Store Balatro on Nintendo eShop Balatro on PlayStation Store Balatro on Xbox Balatro on Humble Bundle


Download ROM

https://github.com/user-attachments/assets/54a9e2e9-1a02-48d5-bb9d-5ab257a7e03b

Controls:

(D-Pad: Navigation)

(A: Pick Card/Make Selections)

When on the hand row during round

(L: Play Hand)

(R: Discard Hand)

(B: Deselect All Cards)

When on the joker row in the shop or during round

(L: Sell Joker)

(Hold A: Swap Owned Jokers or Playing Cards in the Shop or Round)

Contributing

If you would like to contribute, please read CONTRIBUTING.md.

Build Instructions:

-Docker-

A docker compose file is provided to build this project. It provides a standard build environment for this projects CI/CD and can also be used to build the ROM locally.

Some users may find this option to be the easiest way to build locally.

  • This option avoids setting up the development environment as described below.
  • No additional software besides docker desktop is required.

Step-by-Step

1.) Install docker desktop for your operating system.

2.) Open a terminal to this project's directory:

  • On Linux run UID=$(id -u) GID=$(id -g) docker compose up
  • On Windows run docker compose up
How do I open a terminal in windows?

From the file explorer, you can open a folder in powershell (a modern windows terminal):

  • hold 'Shift' and Right Click on the folder.

  • Select "Open PowerShell window here" from the popup menu.


3.) Docker will build the project and the ROM will be in the same location as step 7 describes below.

-Windows-

Video Tutorial: https://youtu.be/72Zzo1VDYzQ?si=UDmEdbST1Cx1zZV2

With Git (not required)

1.) Install devkitPro from https://github.com/devkitPro/installer by downloading the latest release, unzipping the archive, and then running the installer. You only need to install the tools for the GBA development so ensure you have it selected and install it to the default directory. You may need to create a temp folder for the project.

2.) Search for MSys2 in the Start Menu and open it.

3.) Install Git by typing this command: pacman -S git if you don't have it already installed

4.) Clone the project by putting git clone https://github.com/cellos51/balatro-gba.git in the MSys2 window.

5.) Use cd and drag the new folder into the window to add the file path and press Enter.

6.) Type make into the window and press Enter to start building the rom.

7.) After it completes, navigate through the build directory in the project folder and look for balatro-gba.gba and load it on an emulator or flashcart.

Without Git

Disregard Steps 3-4 and instead click the green code button on the main repository page and press Download Zip. Unzip the folder and place it wherever you like. Then continue from Step 5.

-Linux-

1.) Add the devkitPro repository using these instructions https://devkitpro.org/wiki/devkitPro_pacman

2.) Install devkitPro by running sudo pacman -S gba-dev and accepting all packages.

3.) Activate the devkitPro environment by running source /etc/profile.d/devkit-env.sh or opening a new shell.

4.) Follow instructions from the Windows tutorial starting from Step 3

-macOS-

1.) Install devkitPro installer using: https://github.com/devkitPro/installer and following https://devkitpro.org/wiki/devkitPro_pacman#macOS.

Note: You may have to install the installers directly from their url in a browser, as the installer script may not install correctly due to Cloudflare checks on their server. You can use one of the following urls:

Apple Silicon: https://pkg.devkitpro.org/packages/macos-installers/devkitpro-pacman-installer.arm64.pkg

Intel: https://pkg.devkitpro.org/packages/macos-installers/devkitpro-pacman-installer.x86_64.pkg

2.) Run sudo dkp-pacman -S gba-dev

3.) Verify that devkitPro is installed in '/opt/devkitpro'

4.) Add the following to your .bashrc or .zshrc (or export the variables in your shell session):

  • export DEVKITPRO=/opt/devkitpro
  • export DEVKITARM=$DEVKITPRO/devkitARM
  • export PATH=$PATH:$DEVKITPRO/tools/bin:$DEVKITPRO/pacman/bin

5.) Follow instructions from Windows tutorial step 4

Common Issues:

1. When I run make it errors out and won't compile!

  • Move the project folder to your desktop and then cd to it by dragging the folder into the terminal window. This error could be caused by a bad file path, placing the folder on the desktop is a failsafe.

2. I can't find the compiled rom!

  • Look for a folder called build inside the project folder and then find balatro-gba.gba.

3. The Game won't start!

  • Try a different emulator or if you are using original hardware, make sure the rom is not corrupted and try a different flashcart or SD Card. If this does not work, open an issue on the Github page because a recent commit may have broke the game.

4. It says I don't have Git or Make installed!

  • Use pacman -S git (not required) or pacman -S make although make should already be installed if you followed the instructions correctly.

Credits:

Game

This GBA implementation is based on Balatro which is designed and created by LocalThunk and published by Playstack. See repository contributors list for code contribution credits to this GBA implementation.

Music

Music arrangement is made by @cellos51 and @MeirGavish based on original Balatro soundtrack by LouisF and transcription by MrCrimit.

Imagery

Sprites and backgrounds are based on original Balatro imagery created by LocalThunk. See Joker Art Discussion for full credits for each joker sprite.

Sounds

For the mult and xmult sound effects: Toy records#06-E3-02.wav by poissonmort used under License: Attribution 4.0

All other sound effects were created by LocalThunk and are used under Creative Commons - CC0 license.

S
Description
No description provided
Readme 27 MiB
Languages
Logos 87.3%
C 10.7%
CSS 1.3%
JavaScript 0.2%
Makefile 0.2%