Compare commits

...

269 Commits
jokers ... main

Author SHA1 Message Date
MeirGavish
a488d523f0
Update bug report template (#447)
Some checks are pending
Build and Deploy Doxygen Docs / docs (push) Waiting to run
Added a new option for specifying builds from source in the bug report template and added issue type bug.
2026-04-26 12:52:34 -07:00
Elliot Tester
35b6169fd7
Optimize Damping Coefficient (#444)
Some checks failed
Build and Deploy Doxygen Docs / docs (push) Has been cancelled
* Optimize Damping Coefficient

* Added Rounding + Moved Constants

* Added Comments and Made Rounding not use a magic number

* adjust epsilon

* Adjusted Documentation
2026-04-23 19:17:23 +03:00
MeirGavish
a3ef7b1493
Fixed blind sprite flip issue by removing affine attribute (#439)
Some checks failed
Build and Deploy Doxygen Docs / docs (push) Has been cancelled
Deploy Nightly / Run Build ROM Workflow (push) Has been cancelled
Deploy Nightly / Deploy nightly (push) Has been cancelled
2026-04-17 19:45:45 +03:00
Geralt
db27962623
Implement boss blind graphics (#352)
Some checks failed
Build and Deploy Doxygen Docs / docs (push) Has been cancelled
* Created sprite bank for all blinds

* progress city, it's a beatiful city that progress city!

* Sprite appears in blind selection screen

* Added all blind colors

* fix magic numbers + disable boss reroll

* Fix boss blind token not moving after a reroll

* fix always rolling the Needle due to choosing too early for the rng seed to be set

* No need for affine sprite for blind tokens, regular is enough

* address Copilot's review 1/2

* address Copilot's review 2/2

* correct Blind Tokens/Types

* Index palette colors into the files instead of code

* Fix blind sprites (flip bug not solved)

* Fix magic number, tile index and Mark colors

* load boss blind palette only when changing spritesheet

* Adressing clang format and ease of modification of the blinds' list

* Removed some magic numbers


---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2026-04-16 11:52:39 +03:00
Rickey
a31eccba20
Fix dos line endings in shell script (#434)
Some checks failed
Build and Deploy Doxygen Docs / docs (push) Has been cancelled
2026-04-06 21:39:34 -07:00
Umut Paklacı
1e1394ec21
Fix shop reroll button's horizontal movement (#316) (#425)
Some checks are pending
Build and Deploy Doxygen Docs / docs (push) Waiting to run
* Add optional exit indexes to selection grid rows & fix shop reroll button movement (#316)

- Added has_exit_idx and exit_idx to SelGridRowAttributes to simulate subgrid-like behavior that was desired in shop reroll button
- Add logic to use exit index if given inside selection_grid_move_selection_horz()
- Add joker focus logic to shop_reroll_row_on_selection_changed()

* clang-format fix

* clang format fix #2

errors due to version mismatch in local fixed (i hope)

* important fix: check x instead of y for next_roudn_btn_sel_x

was checking y against an X value

* changed commenting

* selection_grid.h clang-format fix

* changed commenting again

trying to make docs understandable

* set shop selection rows explicit

Co-authored-by: Rickey <ric@rf3.xyz>

* syntax fix

* clang format fix onceagain

* guard clause when moving down from jokers

---------

Co-authored-by: Rickey <ric@rf3.xyz>
2026-04-05 23:19:08 -07:00
Elliot Tester
481a869ebc
Make doxygen look good! (#414)
Some checks are pending
Build and Deploy Doxygen Docs / docs (push) Waiting to run
* Basic Doxygen Awesome Support

* Add logo for Doxygen aswell as a Project Brief

* Better Catch Phrase

* Moved Doxygen Awesome into it's own folder

* Included The MIT LICENSE inside the doxygen-awesome directory

* Color Tweaks

* add doxgen-awesome light/dark mode toggle

* fragment copy button extension for doxygen

* add github corner

* Create VERSION file for doxygen-awesome

* Update doxygen/doxygen-awesome/VERSION

Co-authored-by: Rickey <ric@rf3.xyz>

---------

Co-authored-by: Rickey <ric@rf3.xyz>
2026-04-04 23:58:08 -07:00
Rickey
2c9264bdcb
Update CONTRIBUTING guide to inform of hosted docs (#422)
Some checks failed
Build and Deploy Doxygen Docs / docs (push) Has been cancelled
* Update CONTRIBUTING guide to inform of hosted docs

* update link to match rest of doc
2026-04-03 12:17:03 +03:00
Umut Paklacı
535601b514
Add build archival script with timestamped snapshots (.gba, .elf, .map) (#420)
Some checks failed
Build and Deploy Doxygen Docs / docs (push) Has been cancelled
* added .sh script for copying output files under folder

* Update scripts/save_build.sh

Co-authored-by: Rickey <ric@rf3.xyz>

* Partial save functionality, comments & game name env variable

* indentation fixes

* exit with error val

Co-authored-by: Rickey <ric@rf3.xyz>

* make save_build.sh executable

---------

Co-authored-by: Rickey <ric@rf3.xyz>
2026-04-01 19:14:00 -07:00
Elliot Tester
12ec71ba2c
Doxygen Auto Build and Deploy (#417)
* add Doxygen build and Github Pages deploy workflow

* Fixed typo in Workflow

* Rename docs.yml

* Rename doxygen_ci_workflow.yml
2026-04-01 17:26:32 -07:00
Rickey
f46395b9d0
Add basic common_ui background gfx functions (#415)
* Add basic common_ui background gfx functions

* clang format

* document common_ui.h

* Remove unused tonc header

* Fix header guard name convention

* more header cleanup

* claaaaanggggg format
2026-03-31 21:04:47 -07:00
Rickey
91bc9b949e
Update github action versions (#418) 2026-03-31 21:34:06 +03:00
MeirGavish
18f70714ce
Increased number of audio channels to 14 (#409) 2026-03-29 20:04:25 -07:00
Elliot Tester
ff2c792a3b
Corrected Sprite Indices for Droll and Crafty Jokers (#413) 2026-03-29 15:09:35 -07:00
Rickey
835e44e4db
Introduce the game variables struct (#338)
Co-authored-by: emiyl <me@emiyl.com>

* Introduce the game variables struct

* Fix clang format

* Move game variables into their own file
2026-03-29 14:32:21 -07:00
MeirGavish
34fb0b22db
Fixed Shortcut joker ID for #410 (#411) 2026-03-29 11:19:09 -07:00
Geralt
5cf9e2674d
Implement arbitrary-sized joker spritesheets (#285)
* Convert static joker sprites indexes to maps for dynamic spritesheets size

* tmp commit

* reorder Joker spritesheets

* more reordering

* Joker maps, will test later

* More reorders and palette optimizations. Sprites now work

* Fix Joker gfx

* Format joker.c

* Fix rebase error

* Integrate Shoot the Moon art

* format

* format

* removing useless GBAL_UNUSED from photograph Joker effect func

* Tidy up joker.c variables formatting

* Fix magic number

* Add context for map in joker.c

Co-authored-by: Rickey <ric@rf3.xyz>

* Update source/joker.c

Co-authored-by: Rickey <ric@rf3.xyz>

* Apply suggestion from @ricfehr3

Co-authored-by: Rickey <ric@rf3.xyz>

* format

* reduce clutter in joker_effects.c file by defining a macro for forward static declarations of joker effect funcs

* refactored some maps in joker.c to make it more concise

* clang format

* adding back how to mark functions as unused when Jokers don't have a sprite yet

* format

* Remove comment about unused functions for Jokers without art

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
Co-authored-by: Rickey <ric@rf3.xyz>
2026-03-28 17:58:05 -07:00
MeirGavish
461584b674
Music - up to measure 46 (#322)
Some checks failed
Deploy Nightly / Run Build ROM Workflow (push) Has been cancelled
Deploy Nightly / Deploy nightly (push) Has been cancelled
* Music - Added portamento and note stops to the lead melody

* Added OpenMPT .bak files to .gitignore

* Music - Expanded the module 2x for more accurate quasi-triplet + added 2-3 measures

* Music - Added pitch bend and fixed decorative note

* Music - Added measures 31-32

* Fixed wrong G/D chord sample

* Music - added measures 37-38

* Music - Added echo quasi-square

* Music - layered the quasi-square with the keyboard

* Music - small reduction to quasi-square volume

* Music - more volume adjustments

* Music - added measures 39-32 (triad chords)

* Music - raised the triad chords one octave

* Added missing repetition measures 33-36

* Music - More repetition measures 43-46

* Music - fixed pitch bend in measure 30

* Music - Added tremolo to the lead synth

* Revert "Music - Added tremolo to the lead synth"

This reverts commit 3ffee46845.

* Music - reduced the triad chords by an octave

* Music - Added lead melody fade-out and reduced triad chords volume

* Music - Added channel 7, and unused channel 8

* Increased the triad chords volume back

* Music - Added panned backing chords (used all 8 channels)

* Music - Added all the panned backing chords

* Music - fixed last echo note

* Music - Added background fifth drown to triad chords

* Music - reduced panning of panned chords

* Updated music arrangement credits in README
2026-03-09 11:17:17 +02:00
MeirGavish
1d71be674d
Changed the capitalization of hand names and centered them (#391) 2026-03-08 15:31:19 +02:00
MeirGavish
45b2275b68
Fixed round counter not resetting on game over + removed unused variable (#394)
* Fixed round not resetting on game over + removed unused variable
2026-03-07 11:45:49 +02:00
Elliot Tester
2e6e033f1f
Cleaned up Disclaimers (#386)
Some checks failed
Deploy Nightly / Run Build ROM Workflow (push) Has been cancelled
Deploy Nightly / Deploy nightly (push) Has been cancelled
* Cleaned up Disclaimers

* Apply disclaimer wording suggestion from @MeirGavish


---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2026-03-02 19:42:16 +02:00
MeirGavish
25b706789d
Updated CONTRIBUTING.md with scope and art sections (#388)
* Updated CONTRIBUTING.md with scope and art sections

Added sections on project scope and art contribution guidelines.
2026-02-26 15:47:20 +02:00
MeirGavish
37a29440de
Sprite documentation addendum note (#381) 2026-02-11 23:42:10 -08:00
Rickey
0bc140b4e8
Document sprite.h w/ minor optimizations / fixes (#379)
* Rename Sprite to SpriteInfo

---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2026-02-11 16:55:56 +02:00
MeirGavish
b292d227f9
Fix round start top left blind panel animation background (#377)
* Refactored helper sides copying code in expand 3x3 code

* Implemented main_bg_se_copy_expand_3w_row()

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-31 08:13:54 +02:00
MeirGavish
0f9ebd56f6
Changed L and R keys to play and discard respectively (#374)
* Changed L and R keys to play and discard respectively, removed sorting key in favor of on-screen buttons

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-28 19:08:47 +02:00
Geralt
fe4820cf65
Fix cards in deck count shifting when too few cards remain (#370)
* fix

* fix deck size/max size text not getting erased

* add TODO for future deck size overflow fix

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2026-01-26 09:22:20 +02:00
Geralt
339d8dc79f
Fix selecting a card by accident when moving too fast on round start (#369)
* fix bug

* make timers ints instead of uints

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2026-01-26 05:36:31 +02:00
MeirGavish
97bf8b3efd
Added sort by rank/suit buttons (#351)
* Added definitions for sorting buttons (cherry pick, does not compile)

* Re-applied changes lost in merge

* Added sort buttons functionality (cherry-pick, has issues)

* Fixed sort buttons issue

* Removed stray code from merge

* clang-format

* Removed code from merge error

* Removed unused function from merge error

* Removed "E" typo from "SUIT" button

* Changed all the 2x5 S's in the UI to be 1 pixel wider at 3x5

* Revert "Changed all the 2x5 S's in the UI to be 1 pixel wider at 3x5"

This reverts commit f70e0d5ab7.

* Changed the width of the "SUIT" button to be consistent with the "RANK" button
2026-01-24 10:06:51 +02:00
Geralt
02799ddc54
Optimize "whole hand" conditions checks for Joker effects (#213)
* Introduce a ContainedHandTypes type

* Separate computing of hand_type and _contained_hand_types variables

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2026-01-22 14:22:48 +02:00
MeirGavish
8e1867d235
Switch example gameplay gif to updated video in README (#366) 2026-01-19 09:22:42 +02:00
MeirGavish
fd2235d2f6
Update control instructions in README.md (#365) 2026-01-19 09:22:09 +02:00
Emma
fc5767c96e
Reset selection_y after blind skip (#362) 2026-01-16 08:11:47 +02:00
MeirGavish
bb82ab69af
Encoded palette indexing in background pngs (#350) 2026-01-15 17:09:04 -08:00
MeirGavish
5300846f73
Refactored to use selection grid during round (#348)
* Added wrapping to selection grid

* Added return value to on_selection_changed to allow aborting on wrap

* Extracted button code to button.c/.h

* Bounds checking changes for selection_grid_move_selection_horz()

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Rickey <ric@rf3.xyz>
2026-01-15 20:32:09 +02:00
MeirGavish
b7cc3ec5d6
[Optimization] Slow score lerping from 60 to 30 FPS (#336) 2026-01-14 16:43:53 -08:00
Horváth Balázs
11dafe26ac
Fix Four Fingers joker effect persisting after game over (#359)
* Fix four fingers joker effect stuck after game over

* Fix game_over_on_exit() not removing owned jokers
2026-01-11 23:18:40 +02:00
MeirGavish
d56528bc5a
Changed to custom Balatro font by @MathisMartin31 (#340)
* Changed to custom Balatro font by @MathisMartin31

* Made tweaks to the font

* Tweaked F and y
2026-01-07 17:54:43 -08:00
MeirGavish
db9879b5b5
Added blind score requirement and reward in blind select screen (#282)
* Added blind select requirement and rewards printing

* Broke game_blind_select_print_blinds_reqs_and_rewards() into separate functions
2026-01-06 11:06:24 +02:00
MeirGavish
34889988a9
Added documentation to get_played/hand_distribution (#343)
* Added documentation to get_played/hand_distribution

* Documented get_played_distribution() behavior
2025-12-28 11:20:30 -08:00
MeirGavish
6575fc7f94
Update the truncate number function to use decimal point (#333)
Some checks failed
Deploy Nightly / Run Build ROM Workflow (push) Has been cancelled
Deploy Nightly / Deploy nightly (push) Has been cancelled
* Fixed to truncate as "1.234M" instead of "1234K"

* Optimized by switching to strings to avoid divisions

* Changed FP constants to strings

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-23 07:52:30 +02:00
MeirGavish
f76c25614c
Change selection grid to maintain relative horizontal position when switching rows (#329)
* Change selection grid to maintain relative horizontal position when switching rows

* clang-format

* Fixed joker selling index error

* Protect against division by 0 and removed redundant fixed point conversions.
2025-12-21 22:00:08 -08:00
Rickey
955a0942f1
Add contributing guide (#334)
* Add contributing guide

* small format changes for CONTRIBUTING.md

* Update CONTRIBUTING.md

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

* Update CONTRIBUTING.md with more clang-format

* Move stuff around for CONTRIBUTING

* Update VScode instructions

* Remove recommendation for formatOnSave

* Update the clang-format thing again

* Update CONTRIBUTING.md

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-12-21 17:27:03 -08:00
MeirGavish
8fb0813cf5
Fixed incorrect swapped font mapping for .2 and .3 (#332) 2025-12-19 12:18:33 -08:00
Rickey
1da8e0332e
document splash_screen.h (#331) 2025-12-19 11:22:21 +02:00
Rickey
628c0c992d
Introduce decimal point font (#314)
* Introduce decimal point font

* Add png of font

* Add getting a decimal point str from int

* Move font out of utils

* Clang format

* set Readme.md as main page in docs

* Add font generator

* kind of fix font

* Fix image oddities

* Added pip install pillow to build_ci_workflow

* Added ensurepip

* Update Docker/CI for font generation

* Fix CI

* Fix CI forreal

* Another CI fix

* Fix directory name for rom

* Adjust directory

* Dummy commit for test

* Revert "Dummy commit for test"

This reverts commit b607085c13.

* dos2unix and update .gitignore

* Delete the generated font file

* Delete the generated font file

* remove dot from font

* Update include/font.h

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-12-18 18:19:01 -08:00
Geralt
faa75a4eea
Swap Cards in Hand (#280)
* card sorting

* Added refactor from @MeirGavish

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-18 15:14:28 +02:00
Rickey
9a2d128e87
Fix url for nightly (#323) 2025-12-18 05:36:33 +02:00
MeirGavish
34419a589f
Music - Fixed wrong G/D chord sample (#321)
* Fixed wrong G/D chord sample

* Added openmpt .bak files to .gitignore
2025-12-16 22:47:58 +02:00
Copilot
b146bb667b
Add parentheses to timer macro expressions (#319)
---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MeirGavish <34395426+MeirGavish@users.noreply.github.com>
2025-12-16 11:43:07 +02:00
MeirGavish
e90f23661d
Sound effects for score accumulation and blind menu pop-up (#313) 2025-12-16 10:32:04 +02:00
MeirGavish
177a3a9741
Fixed bug where the mult wasn't truncated (#315) 2025-12-16 09:53:50 +02:00
MeirGavish
f095bf7024
Added documentation for selection_grid.h (#309)
* Added documentation for selection_grid.h

* Fix clang-format

* Update include/selection_grid.h

Co-authored-by: Rickey <ric@rf3.xyz>

* Added NULL-checks for selection_grid_move_selection_horz/vert()

---------

Co-authored-by: Rickey <ric@rf3.xyz>
2025-12-15 21:16:25 -08:00
MeirGavish
81e6b7ab31
Button sound effect (#312)
* Removed magic number for CARD_FOCUS_SFX_PITCH_OFFSET_RANGE
2025-12-13 16:10:15 +02:00
MeirGavish
8a9750b0b3
Used proper text centering for price printing and consolidated functions for printing and erasing (#308) 2025-12-13 09:03:06 +02:00
MeirGavish
ae5369b8fe
Added C standard gnu23 to the makefile (#288)
* Added C standard gnu23 to the makefile

* Added gnu23 standard to all test modue makefiles

* Added installation of latest gcc version to tests workflow

* Fixed typo in previous commit

* Made GCC 14 installation conditional and moved from the workflow to the script

* Extracted GCC version check to external script for CI and created tests README

* Added #!/bin/bash

* Make check_gcc_version.sh executable
2025-12-12 18:46:03 -08:00
MeirGavish
9bffe5c9a9
Refactor - remove selected from SpriteObject (#305) 2025-12-12 18:44:26 -08:00
Tygyh
440efe1ce1
Update .gitignore with .idea and codeQL directories (#310) 2025-12-12 12:26:33 +02:00
MeirGavish
16b24a0bf9
Updated splash screen with new organization URL (#306) 2025-12-10 23:00:46 -08:00
Marcel Schulz
f9ed858549
[Fixed] Joker shop price not properly erased on purchase (#286) 2025-12-11 08:39:09 +02:00
MeirGavish
1e1fe85b88
Merge pull request #227 from GBALATRO/music_relayer_chords
Music - Relayered chord samples
2025-12-11 07:02:20 +02:00
MeirGavish
0698d27ce9 Music - Switched to 44.1kHz chord samples 2025-12-11 07:00:38 +02:00
MeirGavish
a4e1fab100 Music - Switched chords to C-based samples (+reused some frames instead of copy-pasted ones) 2025-12-11 07:00:38 +02:00
MeirGavish
d22fcb0056 Music - Relayered chord samples 2025-12-11 07:00:38 +02:00
MeirGavish
d96bc9b1c2
Renamed GBLA_UNUSED -> GBAL_UNUSED and updated RowOnKeyTransitFunc documentation (#292) 2025-12-10 17:17:28 -08:00
MeirGavish
5a4856ec82
Refactor - removed tile_mem obj charblock index magic number (#293) 2025-12-10 17:13:59 -08:00
Rickey
2fb9e6d633
Clang format joker files and def files (#257)
* Clang format joker files and def files

* Fix blind usage of GBLA_UNUSED macro

* Add final files for clang-format (main.c and selection_grid.h)

---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-12-10 09:41:24 +02:00
Rickey
35ecbf33ae
Format and document utility files (#246)
Some checks failed
Deploy Nightly / Run Build ROM Workflow (push) Has been cancelled
Deploy Nightly / Deploy nightly (push) Has been cancelled
* Format and document utility files

* Add Doxyfile

* small updates for cleanup

* Final touches for util docs

* Replace `_` with `s_` for static functions

* update for clang-format changes

* Update include/audio_utils.h

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

* Apply suggestions from code review

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

* Update include/audio_utils.h

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

* Update include/graphic_utils.h

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

* Make clang-format happy :)

* Update gitignore for doxygen

* restor graphic_utils.c to main

* update graphics utils

* tmp

* tmp

* get it to compile

* fix some bad merge mistakes

* Fix clang format

* Apply suggestions from code review

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

* make clang-format happy

---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-12-07 12:56:39 -08:00
MeirGavish
7bd510ee5f
Update README for consistency in capitalization 2025-12-07 15:37:28 +02:00
MeirGavish
cf746c597e
Update README with joker swap controls
Added controls for swapping jokers in the shop.
2025-12-07 15:36:43 +02:00
Geralt
bf66f96844
Add swapping order of Owned Jokers (#258)
* swap Jokers

* Hide score properly

* add key_released to inputs triggering selection_grid process input

* format code

* Add suggestions and bug fixes from @MeirGavish

* Add comment

* format selection_grid

* toto

* format

* format

* Turned clang-format off for selection grid rows

* revert reroll bug fix, already adressed

* format selection_grid.c

* Move conditions around in game.c

* typo

* Attempt at fixing braced initializer indent format

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-12-07 02:58:50 -08:00
Rickey
a82bd671de
Separate clang-format test into its own workflow (#283)
* Rework workflow dependencies
2025-12-06 23:59:55 +02:00
Geralt
687d77e18a
Improve Face Cards sprite art (#284)
* Tweaks by @MeirGavish

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-12-06 16:33:23 +02:00
MeirGavish
28ff6c81ef
Fixed bug where reroll button is triggered by any key (#279) 2025-12-05 10:06:43 +02:00
MeirGavish
9f170f298d
Restored removed joker shop availability check function (#276) 2025-12-04 18:21:10 -08:00
Rickey
291edaf4f2
Clang format and refactor game.h/c + update Bracket Alignment to BlockIndent (#259)
* Refactor and clang-format game.h/c

* Updated clang-format AlignAfterOpenBracket: BlockIndent and ColumnLimit: 100 and refactored all files accordingly

---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-03 13:49:31 +02:00
MeirGavish
43d837571e
Truncate Scores (#269)
* Fixed score truncation erasure, and centering for chips, mult, score and "temp score

* Added centering for money

* Added tests for truncate_uint_to_suffixed_str()

* Fixed u32 bug with get_digits

* Fixed score flames for large numbers

* Small change to update documentation

* Added 1 pixel on to score rect on the left to make room for full character tile + reset_top_left_panel_bottom_row() refactor

* Replaced directional defines with enums

* Updated ante_lut comment

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-12-02 08:28:36 +02:00
Geralt
07cab81ba1
Fix Wrathful Joker missing pixel (#272)
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-12-01 09:34:30 +02:00
Geralt
10e75f18ae
remove triboulet from code (#266)
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-11-30 18:11:48 +02:00
MeirGavish
2d7394f03e
Fixed corners for Banner joker (#271) 2025-11-30 17:57:05 +02:00
Tygyh
8bba449196
Convert BG_ID_* defines to enum BackgroundId (#265)
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2025-11-30 08:53:51 +02:00
Geralt
0953a430c4
Implement Seltzer and Joker Expiration effect (#252)
* Add Seltzer art

* Implement Joker expiration

* Add exception to copying Jokers + Seltzer message fix

* Move all scoring logic to joker_object_score away from check_and_score_joker_for_event

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-11-30 08:52:42 +02:00
Geralt
435a9a0a1d
Refactor JokerEffect scoring (#245)
* Remove usage of memcmp for JokerEffect null check

* Added suggestions from @ricfehr3

* Add suggestions from @MeirGavish


---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-11-28 19:03:47 +02:00
Rickey
1cacabdff6
Clang format pool (#255)
* Update comment prefix + add github action

* Clang Format pool

* fix clang format version

* Fix pool clang format
2025-11-27 10:41:13 -08:00
Rickey
184ee719b3
Clang format card.c/h (#256) 2025-11-26 00:52:04 +02:00
Rickey
09dd996181
Clang Format Blinds (#253)
* Quick cleanup on bitset docs

* Clang format blind.h/c

* Replace `_` with `s_` for functions

* Fix newline size for macros.

* Fix format for ci

* Add macro for "unused" attribute
2025-11-25 13:47:44 -08:00
Rickey
2c32ff69e3
Clang format hand analysis (#261)
* Clang format hand analysis

* Update source/hand_analysis.c

Co-authored-by: MeirGavish <meir.gavish@gmail.com>

---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-11-25 13:45:07 -08:00
Rickey
e910aee184
Clang format list (#254)
* Finish clang-format on lists
2025-11-25 11:32:50 +02:00
Rickey
6db35b0f95
Clang format sprite (#262) 2025-11-24 23:26:47 +02:00
MeirGavish
4a5753c068
Merge pull request #260 from ricfehr3/clang-format-splash-screen
Clang format splash screen
2025-11-24 07:58:36 +02:00
Rickey Fehr
fcb2337fa2 Clang format splash screen 2025-11-23 18:43:45 -08:00
MeirGavish
f51380c93c
Added sound effects for chips, mult, and xmult (#229) 2025-11-22 07:27:43 +02:00
Geralt
408c264e85
Modify blueprint and brainstorm implementation to fix retrigger bug (#244)
---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-11-21 20:09:07 +02:00
MeirGavish
4567a8e1ad
Added credits to readme (#247)
* Added credits to README.md
2025-11-21 16:04:31 +02:00
Geralt
2fb41e533c
Make Chips, Mult and Score unsigned and protect against overflow (#212)
---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-11-20 12:39:15 +02:00
Rickey
47b1bac31f
Add list_swap() and list_insert() functions (#232)
* Add list_swap() and list_insert() functions

* Update docs for list_swap

* Add test case and fix list insert bug

* Fix silly bug with list length on insertion

* Initial changes for pr

* Add reverse iterator and update test for it

* Cleanup iterator next function

* update tests to cover list_get_at_idx
2025-11-18 18:19:00 -08:00
Rickey
a4caa44580
Add clang format and used it for bitset (#240)
* Add clang format file .clang-format

* Use clang format on bitset


---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-11-18 08:56:32 +02:00
MeirGavish
f3f375cef1
Banner Joker art update by @GreenNinja2525 (#242) 2025-11-16 20:18:14 +02:00
Geralt
1ac55692e9
Break up the played cards scoring loop into several functions (#224)
* rename PLAY_PLAYING state into PLAY_STARTING

* make discarded_card and sound_played global variables

* Broken up cards_score state update

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-11-16 17:33:01 +02:00
MeirGavish
557e591c31
Merge pull request #223 from cellos51/integrate_photograph
Integrated Photograph joker art by @MathisMartin31
2025-11-13 08:38:28 +02:00
Geralt
1f3d3bffbd
Fix bug occurring when a retriggered card has a non-scoring card to the left (#218)
---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-11-12 16:06:37 +02:00
MeirGavish
28043bd7ca Integrated Photograph joker art by @MathisMartin31 2025-11-12 14:11:16 +02:00
Geralt
4183f563ab
Implement cards held in hand effects (#205)
* Adapt existing Jokers to the Held Card mechanic + effect display location

* Add suggestions from @ricfehr3

* Add suggestions from @MeirGavish

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-11-12 13:18:53 +02:00
Rickey
e0cffab768
Update list implementation to work with memory pools (#168)
* Introduce indexed list implementation

* Fix CI tests for pool

* Take bitset out of pool

* Replace joker bitset interactions with wrappers

* Add bitset tests

* Add test to gitignore

---------

Co-authored-by: rfehr-idexx <ric-fehr@idexx.com>
2025-11-11 17:56:21 +02:00
MeirGavish
d5f59e904b
Fixed game stuck due to interest bug + cleanup refactor (#214)
Co-authored-by: MeirGavish <34395426+MeirGavish@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MeirGavish <34395426+MeirGavish@users.noreply.github.com>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
2025-11-07 00:33:52 +02:00
MeirGavish
64dd586df8
Optimized score lerping by changing the number of steps to a power of 2 (#211) 2025-11-06 12:15:07 +02:00
Geralt
e7eaa82c9d
Add flaming effect when exceeding score requirements (#210)
* Fix grit palette swapping

* Add suggestions from @MeirGavish

---------

Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-11-04 12:31:09 +02:00
Rickey
ecd98d0626
Merge pull request #208 from ffrank89/patch-1
Add gba-dev pacman installation instructions to README.md
2025-11-03 22:13:06 -08:00
Geralt
df674a73a6
Iterate over Hanging Chad"s art by @MeirGavish (#209)
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
2025-11-03 09:34:18 +02:00
MeirGavish
247d1339c0
Update Hanging Chad art (#207) 2025-11-03 08:42:10 +02:00
MeirGavish
ada2650c50
New Run Button (#206)
* New Run Button

* Refactor - replaced cashout copies with main_bg_se_copy_expand_3x3_rect() - WIP (Palette still messed)
2025-11-03 07:34:46 +02:00
ffrank89
d8acb99665
Add gba-dev pacman installation instructions to README.md
Rearranged installation steps for clarity and added a command to install gba-dev.

I ran into the following error before running the added command:

Makefile:9: /opt/devkitpro/devkitARM/gba_rules: No such file or directory
make: *** No rule to make target `/opt/devkitpro/devkitARM/gba_rules'.  Stop.
2025-11-02 22:38:40 -05:00
MeirGavish
fbf8cba9db
Merge pull request #203 from ricfehr3/hotfix/nightly-zip-creation
Junk directories on release zip
2025-11-02 08:34:15 +02:00
Rickey
438df88316
Add download button (#196)
* Add download button

* Update README.md
2025-11-02 08:29:40 +02:00
Rickey Fehr
73abe5b6ce Junk directories on release zip 2025-11-01 21:19:00 -07:00
theturtlemafia
03273de829
Adds Shortcut and Four Fingers (#95)
* adds shortcut joker

* adds Four Fingers joker, and combination support for Four Fingers + Shortcut

---------

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-11-01 16:28:40 +02:00
Geralt
eb815b7820
Refactor of scoring flow, Joker Callbacks and Card Retriggers (#160)
* Remove Baseball Card for now, will have to wait a future PR

* Removed cards held in hand joker scoring stage - should be in another PR

---------

Co-authored-by: MonteCrysto <mathis.martin31@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-11-01 15:50:52 +02:00
Rickey
2c532b5bd8
Merge pull request #197 from ricfehr3/hotfix/fix-nightly-permissions
Fix permissions issue for nightly workflow
2025-10-31 23:37:11 -07:00
Rickey Fehr
fa52350146 Fix permissions issue for nightly workflow 2025-10-31 23:22:33 -07:00
MeirGavish
dfe6edad88
Refactor - Replaced magic number copies with main_bg_se_copy_rect() (#192) 2025-11-01 08:12:20 +02:00
Rickey
9dc0905c93
Merge pull request #195 from ricfehr3/update-issue-template
Update issue template for bug reports
2025-10-31 22:30:37 -07:00
Rickey
d32d567c2b
Add nightly rom releases (#182)
* Add nightly rom releases

* Begin testing CI

* Add tests workflow

* Move release tag workflow

* Fix upload logic for intermediate artifact

* Fix variable add names

* Update build CI

* Update nightly upload location

* Add git hash to output

* Update upload location again

* Update name to have a date

* Adjust date format for consistency
2025-10-31 22:00:15 -07:00
Rickey Fehr
4af345c567 Update issue template for bug reports 2025-10-31 20:53:54 -07:00
Elliptical
8c00fbdeb1
Update issue templates 2025-10-31 21:53:52 -04:00
MeirGavish
b472ce2bad
Changed the order of suits to match the original Balatro (#189) 2025-10-30 11:18:36 +02:00
JustinL-12
c510e78704
Implement Interest (#144)
* Implemented Interest

* Very carefully applied changes from PR #144 to implement interest and fixed magic numbers

---------

Co-authored-by: JustinL-12 <jlong30@uic.edu>
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-29 20:43:26 +02:00
JustinL-12
b38433d191
Weight jokers by rarity in the shop (#152)
* Added weight for the rarity of jokers in the shop

* Includes manual conflict resolution

---------

Co-authored-by: JustinL-12 <jlong30@uic.edu>
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-27 19:18:48 +02:00
MeirGavish
5a3e891e43
Merge pull request #178 from cellos51/allow_additional_joker_testing
Added option for a second test joker
2025-10-25 15:22:52 +03:00
MeirGavish
b01e9e5f01 Added option for a second test joker 2025-10-25 15:18:23 +03:00
MeirGavish
a083d3de74
Moved pool file out of external definition and replaced it with a flag (#176)
* Moved pool file out of external definition and replaced it with a flag
2025-10-22 22:43:02 +03:00
MeirGavish
e45c1eeb22
Merge pull request #172 from cellos51/start_music_after_splashscreen
Changed music to start after Splash Screen
2025-10-22 06:41:29 +03:00
MeirGavish
9b568e8e1a Moved undefined game state to enum end (more xmacro idiomatic) 2025-10-21 12:50:18 +03:00
MeirGavish
9c78094399 Fixed invalid access to game state array 2025-10-21 12:49:02 +03:00
MeirGavish
0b848cd72e Merge branch 'main' into start_music_after_splashscreen 2025-10-21 12:25:07 +03:00
MeirGavish
8a4242e81e
Merge pull request #132 from ricfehr3/feature/replace-malloc-with-pools
Feature/replace malloc with pools
2025-10-21 12:03:52 +03:00
Rickey
52b1af576f
Update source/pool.c
Update for PR fix magic number

Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-10-20 18:07:48 -07:00
Rickey Fehr
517d40c294 Cleanup for PR, return old sprite tracker 2025-10-19 15:52:36 -07:00
MeirGavish
462c040e9a Changed the check in game_change_state() to full bounds checking 2025-10-19 11:45:48 +03:00
Rickey Fehr
e40f3c989f Fix memory map script 2025-10-18 17:35:53 -07:00
Rickey Fehr
af3d69bcfb Rename def files 2025-10-18 17:28:35 -07:00
Rickey Fehr
a5c5f9cb15 Add timings to memory test 2025-10-18 17:23:59 -07:00
Rickey Fehr
ab07c9af04 Hotfix going out of bounds 2025-10-18 17:09:22 -07:00
Rickey Fehr
09f6c35496 Fix slight bug with false positives on pool test 2025-10-17 18:08:20 -07:00
Rickey Fehr
138792df48 Add memory pool test, fix bugs 2025-10-17 18:05:36 -07:00
Rickey Fehr
16059ab632 Update for PR
Readd sprite tracker to not reuse indices
check for capacity when returning pool entries
Update script for printing memory map
2025-10-17 16:55:09 -07:00
Rickey Fehr
d499abe2c4 Cleanup for PR 2025-10-17 16:55:09 -07:00
Rickey Fehr
d78e04c6b5 Fix style, tiny error, and typo 2025-10-17 16:55:09 -07:00
Rickey Fehr
5e2bd9a59a Update memory map script and cleanup 2025-10-17 16:55:09 -07:00
Rickey Fehr
a1e73be3fc Update github actions to print the memory map 2025-10-17 16:55:09 -07:00
Rickey Fehr
06cd13a17f Centralize location of memory pools
This commit centralizes the location of memory pools and adds an
associated script (scripts/get_memory_map.sh) to read the memory map.
2025-10-17 16:55:09 -07:00
Rickey Fehr
72c0a6c4a9 Optimize bit operations, style fix, cleanup 2025-10-17 16:55:07 -07:00
Rickey Fehr
e00c51502b Replace Malloc With Pools
This commit introduces an object pool and replaces instances of malloc with pools where sensible.
2025-10-17 16:54:09 -07:00
MeirGavish
53d2e53d78 Changed music to start after Splash Screen 2025-10-17 13:43:21 +03:00
MeirGavish
f725c5e1b8
Merge pull request #155 from drewjohnson2/stateRefactor
State refactor
2025-10-17 11:51:24 +03:00
Drew
d6ebda657a Additional PR feedback 2025-10-16 14:48:59 -05:00
Drew
f77a715845 Some PR feedback 2025-10-14 23:08:42 -05:00
Drew
3a6e004fc6 Rebase and some PR feedback 2025-10-14 10:44:21 -05:00
Drew
b9af95d770 Fixing some constant names after a rebase. 2025-10-14 10:26:09 -05:00
Drew
597dc62e24 Rebasing onto main. Switching to KEY_ANY to restart after a game over 2025-10-14 10:26:09 -05:00
Drew
0f154741ed Renaming a function, fixing a call to memcpy16. Replacing magic numbers with enum values 2025-10-14 10:26:09 -05:00
Drew
3071e512c4 Just some cleanup 2025-10-14 10:26:09 -05:00
Drew
dbef1dacdc Added the ability to restart the game after a game over.
The function that handles this is the on_exit of the game lost state. This function is not meant to
be permanent, but is just a placeholder while we decide what we actually want to do when game over is
reached.
2025-10-14 10:26:05 -05:00
Drew
6d66ccbb61 Replaced the substate switch statements with function tables. 2025-10-14 10:24:42 -05:00
Drew
4e1f418a8d Preparing for rebase 2025-10-14 10:20:43 -05:00
Drew
fb35397238 Cleanup 2025-10-14 10:20:43 -05:00
Drew
04ffb0d4dd A little bit of scope creep here.
Renamed some of the state functions to include the word 'on'. Also
replaced the switch statement in set_hand() with a lookup table
access. This lookup table contains the chips, mult and display name
for a given hand. Some may not like these changes, so we can easily
roll back if need be.
2025-10-14 10:20:43 -05:00
Drew
121bbc01d5 Refactored state machine.
Added a state info map which keeps track of a particular state's on_init, on_update and on_exit functions.
A few of the on_update functions have sub-states, which create extremely long switch statements.
Not sure if perhaps the best route would be to keep the switch statements but break the cases into individual
functions or if we should keep track of substates. The latter sounds like it could get complicated and really
messy quick. Problem for another day.
2025-10-14 10:20:40 -05:00
MeirGavish
6dce57e197
Merge pull request #145 from pansythoughts/main
kind of fixed how game_speed behaves
2025-10-14 13:57:40 +03:00
MeirGavish
b5b7c856d6
Merge pull request #133 from ricfehr3/refactor-blinds
Cleanup, Refactor blinds into a map
2025-10-14 13:46:27 +03:00
Rickey Fehr
ef048791c1 Separate out graphics and add ability change boss 2025-10-13 23:36:27 -07:00
Rickey Fehr
f885fa9164 Fix Iterating over every blind instead of 3 max 2025-10-13 23:36:27 -07:00
Rickey Fehr
54d955d1e7 Update for PR 2025-10-13 23:36:27 -07:00
Rickey Fehr
3c2dd0edba Rename blind enums to represent their type
This commit prefixes the enums `BlindType` and `BlindState` with their
types for clarity
2025-10-13 23:36:27 -07:00
Rickey Fehr
7ee07bb34c Refactor blind into a map 2025-10-13 23:36:27 -07:00
alex
f463ba99a0 changed how game_speed affects hand score animations 2025-10-13 20:28:52 -07:00
alex
767e21d5fa made the lerped temp score expression clearer 2025-10-13 20:26:20 -07:00
alex
d108836b6a changed how game_speed affects hand score animations 2025-10-13 20:24:20 -07:00
MeirGavish
f36fa5e998
Merge pull request #169 from cellos51/implement_joker_testing
Implement joker testing
2025-10-13 21:27:42 +03:00
MeirGavish
71de180871 Merge branch 'main' into implement_joker_testing 2025-10-13 20:59:17 +03:00
MeirGavish
8c25089966 Allow defining an ID for a joker to always appear in shop and be tested 2025-10-13 20:58:44 +03:00
alex
56c33b2eef made the lerped temp score expression clearer 2025-10-11 23:45:02 -07:00
alex
cf7c9dc7c3 fixed typo 2025-10-11 13:36:43 -07:00
MeirGavish
d7f64d3570
Merge pull request #166 from cellos51/integrate_joker_art
Added art for Jokers Bootstraps by @MathisMartin31 and @noctowlhoot and Pareidolia by @NoWhammies10 and @MeirGavish (jokers rearranged for palette optimization)
2025-10-09 23:54:56 +03:00
MeirGavish
9d1a51884f Added art for Jokers Bootstraps by @MathisMartin31 and @noctowlhoot and Pareidolia by @NoWhammies10 and @MeirGavish (jokers rearranged for palette optimization) 2025-10-09 23:42:07 +03:00
MeirGavish
609e1f19b6
Merge pull request #159 from MathisMartin31/main
Add Pareidolia and Acrobat Jokers
2025-10-09 20:43:36 +03:00
Geralt
ce5150bffb
Update joker_effects.c
Temporarily remove Pareidolia from shop until @MeirGavish can add the artwork for it
2025-10-09 18:57:10 +02:00
Geralt
ce6d2049f8
Update game.h
Fix missing `is_joker_present` rename into `is_joker_owned`
2025-10-09 14:52:41 +02:00
Geralt
f14f200cb0
Update joker_effects.c
Remove the "unused" attribute from joker effect functions that was added by mistake during merge
2025-10-09 14:50:18 +02:00
Geralt
c4f22be9b9
Update joker.h
Restoring the Brainstorm Joker ID, deleted by mistake while adding the Pareidolia Joker ID
2025-10-09 14:46:57 +02:00
MeirGavish
30638b65e2
Merge pull request #164 from ricfehr3/hotfix/hand-input-order
Fix softlock related to #163
2025-10-09 15:16:56 +03:00
MeirGavish
94cb898bb9
Merge pull request #134 from drewjohnson2/magic_numbers
Magic numbers
2025-10-09 11:18:02 +03:00
Rickey Fehr
73ec9a40d3 Fix softlock related to #163 2025-10-08 20:29:11 -07:00
Geralt
6787fab0c2
Merge branch 'main' into main 2025-10-08 23:25:24 +02:00
Drew
f752793caa Shop light specific macros for color 2025-10-08 16:16:23 -05:00
MeirGavish
9b6c77ea3f
Merge pull request #119 from Nanrech/pr-fix
Add blueprint and brainstorm jokers
2025-10-08 22:46:01 +03:00
MeirGavish
4b35b2f7d8 Added art for jokers Blueprint and Brainstorm by @NoWhammies10 and @GreenNinja2525 2025-10-08 22:40:15 +03:00
Nan
23a14cb76e
Update source/joker_effects.c
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-10-08 20:41:09 +02:00
Nan
8ae4968539 Remove duplicated entries 2025-10-08 18:52:10 +02:00
Nan
9ae53bddb8 Fix errors introduced by latest commits 2025-10-08 18:39:49 +02:00
Nan
af72fe5749 Fix conflicts
Attempt 1
2025-10-08 18:21:55 +02:00
Nan
7e17419811
Merge branch 'main' into pr-fix 2025-10-08 18:11:20 +02:00
Nan
fec243b482
Update source/joker_effects.c
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-08 17:59:27 +02:00
Nan
324478845d
Update source/joker_effects.c
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-10-08 17:58:11 +02:00
Nan
0dbde481d5
Update source/joker_effects.c
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-10-08 17:57:50 +02:00
Nan
bc44de0493
Update include/joker.h
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-10-08 17:57:20 +02:00
MeirGavish
f257ec03af
Merge pull request #150 from ricfehr3/docs/update-docs-docker
Update docs for docker
2025-10-08 10:32:11 +03:00
Drew
4e0d72ca8a PR Feedback 2025-10-08 01:27:15 -05:00
MonteCrysto
aa5ebd13fc Add suggestions from @MeirGavish 2025-10-08 08:14:54 +02:00
Rickey Fehr
cca015238d Update docs for docker 2025-10-07 20:30:11 -07:00
MeirGavish
296c489562
Merge pull request #162 from cellos51/integrate_joker_art
Integrate joker art
2025-10-08 00:45:09 +03:00
MeirGavish
ae40949008 Fixed Bull border corner transparency 2025-10-08 00:18:30 +03:00
MeirGavish
77f76bd4ef Removed "unused" attribute from integrated jokers 2025-10-08 00:05:37 +03:00
MeirGavish
a0f1ef7780 Added art for xmult hand jokers The Duo The Trio, The Family, The Order, and The Tribe by @MathisMartin31 2025-10-07 23:52:49 +03:00
MeirGavish
73c2db6b69
Merge pull request #143 from ricfehr3/feature/ci-release-on-tag
Add uploading ROM on tag push
2025-10-07 23:04:19 +03:00
MeirGavish
c529c4be69 Added art for jokers Abstract Joker by @MathisMartin31 and Bull by @NoWhammies10 and @GreenNinja2525 2025-10-07 21:26:43 +03:00
MonteCrysto
8cd86f1640 Merge remote-tracking branch 'upstream/main'
And add NULL Acrobat Joker effect
2025-10-07 20:18:41 +02:00
MeirGavish
46936c1878 Added art for jokers Raised Fist by @MathisMartin31 and Reserved Parking by @NoWhammies10 2025-10-07 21:13:31 +03:00
MeirGavish
22ddd83931
Merge pull request #138 from Seafoamm/main
Add macOS setup instructions
2025-10-07 16:20:01 +03:00
MeirGavish
f7c68934f7
Merge pull request #146 from noctowlhoot/main
Added more Jokers all outside of scope, some with art available already from MathisMartin31
2025-10-07 13:01:48 +03:00
MeirGavish
4fc0fbf5a8
Merge pull request #139 from mannodermaus/wrap-hand-input-on-oob-movement
Wrap around hand selection when going out of bounds horizontally
2025-10-07 12:56:53 +03:00
noctowlhoot
0187b5f78e
Update source/joker_effects.c
Co-authored-by: MeirGavish <meir.gavish@gmail.com>
2025-10-07 20:24:00 +10:30
MonteCrysto
0cfe0e5126 Added forgotten base price for the Acrobat Joker 2025-09-30 23:51:46 +02:00
MonteCrysto
b7a94fa085 Fix some issues (I actually forgot to compile) 2025-09-30 23:34:11 +02:00
MonteCrysto
de7c9d4d60 Add a "get_num_hands_remaining" function and implement the Acrobat Joker 2025-09-30 23:06:13 +02:00
MonteCrysto
c781ee9666 Add a "is_card_face" function to take into account if Pareidolia is present 2025-09-30 22:47:00 +02:00
Drew
1f40279a36 Created a define for a screen entry horizontal flip. 2025-09-30 00:09:53 -05:00
Drew
a6dd95ab0a Added a few more defines 2025-09-28 16:03:04 -05:00
Drew
cc95554db7 Added constants for timer values. The names on these might be bad. 2025-09-28 16:03:04 -05:00
Drew
34d885674c Finished adding palette memory indexs to an enum 2025-09-28 16:03:04 -05:00
Drew
99ecd424f4 Added enum values for some of the palette bank indexes 2025-09-28 16:03:04 -05:00
MeirGavish
f579c13ceb
Merge pull request #149 from GreenNinja2525/main
Fix Dynamic Badges (Hopefully) [Now Safe to Merge]
2025-09-27 21:44:27 +02:00
MeirGavish
8dbcadac59
Merge pull request #153 from ricfehr3/feature/add-version
Add git hash baked into ROM for bug reports
2025-09-27 21:41:09 +02:00
Wheeler
46944e5699
Merge branch 'cellos51:main' into main 2025-09-27 15:22:41 -04:00
Rickey Fehr
88726cbb39 Add script to get version 2025-09-24 20:49:01 -07:00
Rickey Fehr
36bcf0fa30 Move version into C file 2025-09-24 20:44:13 -07:00
noctowlhoot
b8a441f971
Update joker_effects.c
updated jokers into joker registry
2025-09-24 22:53:54 +09:30
Rickey Fehr
56bbc2ff9a Add defaults for GIT_HASH and GIT_DIRTY 2025-09-23 21:41:55 -07:00
Rickey Fehr
ebe789aa52 Add git hash baked into ROM for bug reports 2025-09-23 16:15:50 -07:00
alex
daba462575 fixed a division thingy 2025-09-23 12:45:09 -07:00
alex
ad9358547d main 2025-09-23 12:44:03 -07:00
alex
f57c37b900 fixed a divison thingy 2025-09-23 12:40:26 -07:00
alex
7bafc260dd fixed game_speed, now using fixed point and keeping game_speed static 2025-09-22 22:04:51 -07:00
Wheeler
3888a198c8
Change to Shields.io Badges
Hopefully this allows them to update properly. Shields.io is way more reliable and updates on its own. Hopefully this works!
2025-09-22 22:38:57 -04:00
Rickey Fehr
e58208e13d Add uploading ROM on tag push 2025-09-22 14:27:50 -07:00
MeirGavish
74739d87ed
Merge pull request #123 from drewjohnson2/main
Adding an x macro to cut down on some boilerplate.
2025-09-22 23:15:56 +02:00
Drew
e620697917 Renamed joker_table.h to def_joker_gfx_table.h. Removed an unnecessary constant 2025-09-22 16:06:45 -05:00
Wheeler
8d278b0c19
Fix Dynamic Badges (hopefully)
I think I fixed the dynamic badges, it just needed a maxAge parameter to properly tell GitHub to recache the data. I can't really test this as it is set to refresh each badge every 2 hours. I also fixed some minor formatting in the build instructions. I also added a discussions badge so people can read through them before contributing.
2025-09-22 12:44:20 -04:00
noctowlhoot
26db4e1aa0
Update joker_effects.c
fixed triboulet - was triggering for jacks also, rem
2025-09-22 21:42:15 +09:30
noctowlhoot
66c6b91222
Merge pull request #1 from noctowlhoot/noctowlhoot-patch-1
Update joker_effects.c
2025-09-22 20:54:44 +09:30
noctowlhoot
591485a5ac
Update joker_effects.c
I was unsure of the significance of the number immediately after joker rarity in the joker registry, so I haven't put the joker effects in there. If anyone can tell me what the significance of that number is I can add them in :)
2025-09-22 20:49:35 +09:30
alex
301f5a2a53 kind of fixed how game_speed behaves 2025-09-21 23:49:24 -07:00
alex
6e60cf5970 kind of fixed how game_speed behaves 2025-09-21 23:16:50 -07:00
Marcel Schnelle
a9f44e74d4 Wrap around hand selection when going out of bounds horizontally 2025-09-21 17:50:51 +09:00
Seafoamm
2c2cb17f74 Add macOS setup instructions 2025-09-21 00:25:51 -07:00
MeirGavish
9dc5f7ccc3
Merge pull request #116 from HeadedBranch/main
Add install instructions for linux
2025-09-18 21:44:30 +02:00
Drew
7c377fca94 Making joker_gfxTiles and joker_gfxPal static 2025-09-17 15:35:21 -05:00
Drew
c4e804234b Moving macro into pool definition 2025-09-17 15:01:26 -05:00
Drew
3dc959c17d Converting joker_gfxTiles and joker_gfxPal to pools 2025-09-17 14:35:00 -05:00
Drew
2c5bc3b5dd Adding an x macro to cut down on some boilerplate.
This should make adding additional jokers require a little less
typing. Additional jokers will need an entry in /include/joker_table.h
2025-09-15 21:36:20 -05:00
MeirGavish
27e91fb4a4
Merge pull request #121 from drewjohnson2/main
Removed redundant copy of shadow buffer into OAM.
2025-09-15 23:50:50 +03:00
Nan
2669afbae2 Merge branch 'main' of https://github.com/cellos51/balatro-gba 2025-09-15 21:46:48 +02:00
MeirGavish
a16065439e
Merge pull request #117 from ricfehr3/main
Add docker support
2025-09-15 22:30:21 +03:00
Rickey Fehr
5b76cbfad0 Add cache for docker compose container 2025-09-14 15:15:42 -07:00
Rickey Fehr
074f1956aa Update Github Actions CI to use Docker Compose 2025-09-14 15:15:10 -07:00
Drew
e8e945b17d Removed redundant copy of shadow buffer into OAM. 2025-09-14 13:50:38 -05:00
Nan
35c0d383c5 Add blueprint and brainstorm jokers
Implements blueprint and brainstorm to the game, but leaves the implementations commented out as they are still missing assets.
2025-09-13 22:18:31 +02:00
Rickey Fehr
b27c94e5bd Add docker support
Add docker support via a docker compose file with included instructions.
2025-09-11 12:59:52 -07:00
Isaac Hesslegrave
1562e4f9c7
Add step to activate correct shell variables 2025-09-11 08:36:37 +00:00
Isaac Hesslegrave
c2ef5b15d4
Add install instructions for linux 2025-09-11 08:27:42 +00:00
164 changed files with 19090 additions and 3882 deletions

56
.clang-format Normal file
View File

@ -0,0 +1,56 @@
BasedOnStyle: LLVM
IndentWidth: 4
UseTab: Never
# Allman brace style
BreakBeforeBraces: Allman
AllowShortBlocksOnASingleLine: false
AllowShortIfStatementsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortLoopsOnASingleLine: false
# Pointer alignment
PointerAlignment: Left
# Column limit
ColumnLimit: 100
# Case labels
IndentCaseLabels: true
# Include sorting
SortIncludes: CaseSensitive
IncludeBlocks: Regroup
ContinuationIndentWidth: 4
AlignArrayOfStructures: Left
PackConstructorInitializers: Never
SpaceBeforeParens: Custom
SpaceBeforeParensOptions:
AfterControlStatements: true
AfterFunctionDefinitionName: false
AlignOperands: AlignAfterOperator
BreakBeforeBinaryOperators: None
IndentPPDirectives: None
AlignConsecutiveMacros: Consecutive
BinPackArguments: false
BinPackParameters: false
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AlignAfterOpenBracket: BlockIndent
PenaltyBreakBeforeFirstCallParameter: 0
ReflowComments: true
SpacesInLineCommentPrefix:
Minimum: 1
Maximum: 1
PenaltyReturnTypeOnItsOwnLine: 99999999
AlignEscapedNewlines: Left
BracedInitializerIndentWidth: 0

33
.github/ISSUE_TEMPLATE/bug_report.md vendored Normal file
View File

@ -0,0 +1,33 @@
---
name: Bug report
about: Create a report to help us improve
title: "[BUG]"
labels: bug
type: bug
assignees:
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior.
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
Any helpful screenshots or videos
**What version**
- **Nightly**: If you downloaded the ROM you can provide either the ROM name, or the name of the zipfile
- **Mainline Release**: Please provide the name of the release (**Joker Build**, **Itemless Build**, etc)
- **Built From (Unmodified) Source**: Please specify the branch (e.g. main) and latest commit in your build. If you modified the code, make sure it reproduces in unmodified code before reporting.
- **I Don't Know**: Upload a zip of the rom you used. Alternatively, please try to use the `build_bug_report.py` script in the `scripts/` directory. If there is no output from that, then try to recreate your bug with a new version.
**What Emulator or Platform were you playing on**
- e.g. mgba, flashcart
**Additional context**
Add any other context about the problem here.

View File

@ -2,60 +2,77 @@ name: Build CI
on:
push:
branches:
branches:
- main
pull_request:
branches:
- main
workflow_dispatch:
inputs:
clear-cache:
description: 'Clear docker cache before running'
type: boolean
default: false
workflow_call:
inputs:
upload-build-artifact:
required: true
type: boolean
default: true
jobs:
build:
runs-on: ubuntu-latest
clang-format-job:
name: Run clang-format test
uses: ./.github/workflows/clang_format_ci_workflow.yml
unit-tests-job:
name: Run unit tests
uses: ./.github/workflows/unit_tests_ci_workflow.yml
build:
name: Build ROM
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set devkitPro environment variables
run: |
# Installing to home directory to avoid permission denied on caching
echo "DEVKITPRO=/home/runner/devkitpro" >> $GITHUB_ENV
echo "DEVKITARM=/home/runner/devkitpro/devkitARM" >> $GITHUB_ENV
export PATH=$DEVKITARM/bin:$DEVKITPRO/tools/bin:$PATH
# Caching to avoid excessive request to the devkitpro server from a runner because they
# eventually block and result in permission denied 403.
# If that happens it takes like 2 hours until you can make requests again
- name: Cache devkitPro toolchain
id: cache-devkitpro
uses: actions/cache@v4
with:
path: /home/runner/devkitpro
# Using a manual key version suffix - v{num}, if changes are made that make the
# cache stale and require a refresh, just bump the version number so there's
# a cache miss. The key needs to match in the "Save devkitPro to cache" stage
# so you need to bump the number there too...
key: devkitpro-${{ runner.os }}-v1
uses: actions/checkout@v6
- name: Set up devkitARM (if not cached)
if: steps.cache-devkitpro.outputs.cache-hit != 'true'
run: |
sudo apt update
wget https://apt.devkitpro.org/install-devkitpro-pacman
chmod +x install-devkitpro-pacman
sudo ./install-devkitpro-pacman
mkdir -p "$DEVKITPRO"
sudo dkp-pacman -Sy --noconfirm gba-dev
# Copy from installed directory to cacheable directory
sudo cp -r /opt/devkitpro "/home/runner"
sudo chown -R $USER:$USER "/home/runner/devkitpro"
- name: Save devkitPro to cache
if: steps.cache-devkitpro.outputs.cache-hit != 'true'
uses: actions/cache/save@v4
- name: Get docker image cache
uses: actions/cache@v5
with:
path: /home/runner/devkitpro
key: devkitpro-${{ runner.os }}-v1
path: /tmp/docker-cache
key: docker-images-${{ hashFiles('docker-compose.yml') }}
- name: Clear docker cache (if requested)
if: github.event.inputs.clear-cache == 'true'
run: |
echo "Clearing Docker cache..."
rm -rf /tmp/docker-cache
echo "Docker cache cleared"
- name: Load or pull images
run: |
if [ -f /tmp/docker-cache/gbalatro.tar ]; then
echo "Loading Image"
docker load -i /tmp/docker-cache/gbalatro.tar
else
echo "Pulling Image"
docker compose build gbalatro
mkdir -p /tmp/docker-cache
docker save $(docker compose config | grep image: | awk '{print $2}') -o /tmp/docker-cache/gbalatro.tar
fi
- name: Export UID/GID for Compose
run: |
echo "UID=$(id -u)" >> "$GITHUB_ENV"
echo "GID=$(id -g)" >> "$GITHUB_ENV"
- name: Build the project
run: |
make
run: docker compose -f docker-compose.yml run --rm gbalatro sh -c "make -j$(nproc) && ./scripts/get_memory_map.sh"
- name: 'Upload Artifact'
if: ${{ inputs.upload-build-artifact }}
uses: actions/upload-artifact@v6
with:
name: build-out
path: build
retention-days: 5

View File

@ -0,0 +1,20 @@
name: Run Clang Format Test
on:
workflow_dispatch:
workflow_call:
jobs:
run-test:
name: Verify code formatting
runs-on: ubuntu-latest
steps:
- name: Install clang-format
run: |
sudo apt-get update
sudo apt-get install -y clang-format
- name: Checkout repository
uses: actions/checkout@v6
- name: Run clang-format
run: clang-format --dry-run -Werror include/*.h source/*.c

View File

@ -0,0 +1,32 @@
name: Build and Deploy Doxygen Docs
on:
push:
branches: [main]
pull_request:
branches: [main]
permissions:
contents: write
jobs:
docs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Doxygen
run: sudo apt-get install -y doxygen graphviz
- name: Build Doxygen documentation
run: doxygen Doxyfile
- name: Deploy to GitHub Pages
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./doc/html
publish_branch: gh-pages

View File

@ -0,0 +1,43 @@
name: Deploy Nightly
permissions:
contents: write
on:
schedule:
- cron: '0 2 * * *' # run at 2 AM UTC
workflow_dispatch:
jobs:
build-job:
name: Run Build ROM Workflow
uses: ./.github/workflows/build_ci_workflow.yml
with:
upload-build-artifact: true
nightly:
name: Deploy nightly
needs: build-job
strategy:
fail-fast: false
runs-on: ubuntu-latest
steps:
- name: Download the build output
uses: actions/download-artifact@v8
with:
name: build-out
path: build
- name: Package Release
run: mv build/balatro-gba.gba build/balatro-gba_nightly_$(date +'%+4Y%m%d')_$(cat build/githash.txt).gba && zip -j release build/*.gba
- name: Deploy release
uses: WebFreak001/deploy-nightly@v3.2.0
with:
upload_url: https://uploads.github.com/repos/GBALATRO/balatro-gba/releases/258698380/assets{?name,label}
release_id: 258698380
asset_path: ./release.zip # path to archive to upload
asset_name: nightly-gbalatro-$$.zip # name to upload the release as, use $$ to insert date (YYYYMMDD) and 6 letter commit hash
asset_content_type: application/zip
max_releases: 7
ignore_hash: false # Only upload unique versions

View File

@ -0,0 +1,30 @@
name: Release On Version Tag
on:
push:
tags:
- "v*"
jobs:
build-job:
name: Run Build ROM Workflow
uses: ./.github/workflows/build_ci_workflow.yml
with:
upload-build-artifact: true
release:
name: Release Tagged Version
runs-on: ubuntu-latest
needs: build-job
steps:
- name: Download the build output
uses: actions/download-artifact@v8
with:
name: build-out
path: build
- uses: softprops/action-gh-release@v2
if: ${{ startsWith(github.ref, 'refs/tags/') }}
with:
files: |
build/balatro-gba.gba

View File

@ -0,0 +1,21 @@
name: Run Unit Tests
on:
workflow_dispatch:
workflow_call:
jobs:
run-unit-tests:
name: Run Unit Tests
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Check and install GCC version
run: ./ci_scripts/check_gcc_version.sh
- name: Run Unit Tests
run: cd tests && ./run_tests.sh

14
.gitignore vendored
View File

@ -1,6 +1,16 @@
/.vscode
/.idea
/build
/saved_builds
/.vs
_codeql_detected_source_root
*.sln
*.vcxproj*
/balatro-gba/x64/**
*.vcxproj*
/balatro-gba/x64/**
/tests/bitset/build
/tests/list/build
/tests/pool/build
doc
tests/util/.vscode
tests/util/build
audio/*.bak

103
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,103 @@
# Developer Guide
Thank you for reading this. Below is a quick summary of expectations and tips to contribute.
## Scope
We are limiting the scope of the project in order to not compete with the original Balatro and avoid a takedown by Playstack.
We limited the scope to 52 jokers and reached that limit so currently there is no plan to add more jokers.
See [the scope discussion](https://github.com/GBALATRO/balatro-gba/discussions/355).
## Art
Before contributing art or if you need art for a code contribution check the [existing additional art thread](https://github.com/GBALATRO/balatro-gba/discussions/131) and the [joker art discussion](https://github.com/GBALATRO/balatro-gba/discussions/69) (though as said no more jokers are currently planned).
Note that there are color limitations for sprites and backgrounds resulting due to the GBA hardware. Sprites may not use more than 16 colors per sprite including transparency.
Backgrounds may use more colors but notice that their palette is encoded in their PNGs and new colors need to be added manually to the palette. [See relevant PR](https://github.com/GBALATRO/balatro-gba/pull/350).
## CI Checks
On pull-requests, various checks will be performed:
1. **Formatting**: `clang-format` will be ran on every `.c/.h` file with [this configuration](https://github.com/GBALATRO/balatro-gba/blob/main/.clang-format). Failures will cause the CI to fail.
2. **Unit Tests**: Unit tests are required to pass and are located in the repo [here](https://github.com/GBALATRO/balatro-gba/tree/main/tests).
3. **Rom Build**: The ROM must successfully build with the `make -j$(nproc)` command.
## Code Style
Besides the automatic formatting checks from `clang-format`, there is a looser set of code style rules. These are not strictly required, but is encouraged to be followed.
The following details the code style rules including the enforced clang-format style.
[Link in wiki](https://github.com/GBALATRO/balatro-gba/wiki/Code-Style-Guide)
## Documentation
Doxygen is used to build docs that can be opened in browser.
We host the docs for the main branch on github [here](https://gbalatro.github.io/balatro-gba)
You can also choose to build the docs yourself [Link in wiki](https://github.com/GBALATRO/balatro-gba/wiki/Documentation-for-Developers)
## Tools
### clang-format
Running `clang-format` locally is recommended before submitting a PR as it will fail the **CI Checks** if not properly formatted. It is recommended either:
1. Run `clang-format` periodically and only commit formatted code.
2. Run `clang-format` as a separate commit on larger changes, and review each modified hunk.
Either way, just ensure you manually review automatic changes.
#### VSCode
The recommended setup for VSCode is to install the [**clangd**](https://marketplace.visualstudio.com/items?itemName=llvm-vs-code-extensions.vscode-clangd) extension. It will provide helpful information in VSCode and can be used to format the code automatically according to the `.clang-format` file with **`Ctrl+Shift+I`**
There is an option to enable `"editor.formatOnSave"` in the VSCode `settings.json` file. You can also do this by opening the settings menu (`File->Preferences->Settings`) and searching `format on save`.
#### Manually
If installed locally and you'd prefer to use it in your shell. You can do the following
```sh
# List warnings
clang-format --dry-run -Werror include/*.h source/*.c
# Modify all files inplace
clang-format -i include/*.h source/*.c
# Or just one
clang-format -i include/blind.h
```
#### Disabling Formatting
Sometimes `clang-format` rules need to be broken, like in the case of the [joker registry](https://github.com/GBALATRO/balatro-gba/blob/8fb0813cf5f7235b6450dc9a76252dda4d9b4a27/source/joker_effects.c#L333) and other tables or maps. If it makes sense, you can wrap code in `// clang-format off` and `// clang-format on`:
- **Without clang-format**:
```c
// clang-format off
const table_of_tables =
{
{ TABLE_A, 1, tableAMap },
{ TABLE_B, 2, tableBMap },
{ TABLE_C, 3, tableCMap },
{ TABLE_D, 4, tableDMap },
{ TABLE_E, 5, tableEMap },
{ TABLE_F, 6, tableFMap },
{ TABLE_G, 7, tableGMap },
}
// clang-format on
```
- **With clang-format**:
```c
const table_of_tables =
{
{TABLE_A, 1, tableAMap}, {TABLE_B, 2, tableBMap}, {TABLE_C, 3, tableCMap},
{TABLE_D, 4, tableDMap}, {TABLE_E, 5, tableEMap}, {TABLE_F, 6, tableFMap},
{TABLE_G, 7, tableGMap},
}
```
### Custom Scripts
In the repo we use custom scripts located in the [`scripts`](https://github.com/GBALATRO/balatro-gba/tree/main/scripts) directory.
🟡 **Note**: `python3` and `bash` are required for these scripts.
- **get_hash.py**: Get git hash from ROM.
- **generate_font.py**: Generate a font manually.
- **get_memory_map.sh**: Print the memory map of the pre-allocated pools.
- **save_build.sh**: Save a timestamped copy of build outputs (.elf, .gba, .map).
## Debugging
It's recommended to use [mGBA](https://mgba.io/) for ROM testing and debugging. As it provides a [`gdbserver`](https://en.wikipedia.org/wiki/Gdbserver) via the `-g` flag `mgba -g build/balatro-gba.gba`. You can connect via `gdb` or here is a [great guide for vscode](https://felixjones.co.uk/mgba_gdb/vscode.html).

6
Dockerfile.gbalatro Normal file
View File

@ -0,0 +1,6 @@
FROM devkitpro/devkitarm:20251117
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y \
python3-pil

3025
Doxyfile Normal file

File diff suppressed because it is too large Load Diff

View File

@ -25,30 +25,37 @@ LIBTONC := $(DEVKITPRO)/libtonc
# the makefile is found
#
#---------------------------------------------------------------------------------
TARGET := $(notdir $(CURDIR))
BUILD := build
SOURCES := source
INCLUDES := include
DATA :=
MUSIC := audio
GRAPHICS := graphics
TARGET := $(notdir $(CURDIR))
BUILD := build
SOURCES := source source/game
INCLUDES := include include/game
DATA :=
MUSIC := audio
GRAPHICS := graphics
FONT := font
#---------------------------------------------------------------------------------
# options for code generation
#---------------------------------------------------------------------------------
ARCH := -mthumb -mthumb-interwork
CFLAGS := -g -O3 -Wall -Werror\
GIT_DIRTY := $(shell git diff-index --quiet HEAD -- || echo "-dirty")
GIT_HASH := $(shell git rev-parse --short HEAD || echo "undef")
GIT_C_FLAGS := -DGIT_HASH=\"$(GIT_HASH)\" -DGIT_DIRTY=\"$(GIT_DIRTY)\"
CFLAGS := -g -O3 -Wall -Werror -std=gnu23 \
-mcpu=arm7tdmi -mtune=arm7tdmi \
-ffast-math -fomit-frame-pointer -funroll-loops \
$(ARCH)
CFLAGS += $(GIT_C_FLAGS)
CFLAGS += $(INCLUDE)
CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions
ASFLAGS := -g $(ARCH)
LDFLAGS = -g $(ARCH) -Wl,-Map,$(notdir $*.map)
LDFLAGS = -g $(ARCH) -Wl,-Map,$(notdir $*.map),--undefined=balatro_version
#---------------------------------------------------------------------------------
# any extra libraries we wish to link with the project
@ -76,7 +83,8 @@ export OUTPUT := $(CURDIR)/$(BUILD)/$(TARGET)
export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
$(foreach dir,$(DATA),$(CURDIR)/$(dir)) \
$(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir))
$(foreach dir,$(GRAPHICS),$(CURDIR)/$(dir)) \
$(foreach dir,$(FONT),$(CURDIR)/$(dir)) \
export DEPSDIR := $(CURDIR)/$(BUILD)
@ -84,6 +92,7 @@ CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
PNGFILES := $(foreach dir,$(GRAPHICS),$(notdir $(wildcard $(dir)/*.png)))
FONTFILES := $(foreach dir,$(FONT),$(notdir $(wildcard $(dir)/*.png)))
BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
ifneq ($(strip $(MUSIC)),)
@ -111,7 +120,9 @@ export OFILES_SOURCES := $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
export OFILES_GRAPHICS := $(PNGFILES:.png=.o)
export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) $(OFILES_GRAPHICS)
export OFILES_FONT := $(FONTFILES:.png=.o)
export OFILES := $(OFILES_BIN) $(OFILES_SOURCES) $(OFILES_GRAPHICS) $(OFILES_FONT)
export HFILES := $(addsuffix .h,$(subst .,_,$(BINFILES))) $(PNGFILES:.png=.h)
@ -124,16 +135,22 @@ export LIBPATHS := $(foreach dir,$(LIBDIRS),-L$(dir)/lib)
.PHONY: $(BUILD) clean
#---------------------------------------------------------------------------------
$(BUILD):
$(BUILD): build/gbalatro_sys8.s
@[ -d $@ ] || mkdir -p $@
@$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
@echo "$(GIT_HASH)$(GIT_DIRTY)" > $@/githash.txt
#---------------------------------------------------------------------------------
build/%.s: $(FONT)/%.png
@echo Building font
@mkdir -p $(BUILD)
@python3 scripts/generate_font.py -i $< -o $@
#---------------------------------------------------------------------------------
clean:
@echo clean ...
@rm -fr $(BUILD) $(TARGET).elf $(TARGET).gba
#---------------------------------------------------------------------------------
all: $(BUILD)

123
README.md
View File

@ -1,21 +1,20 @@
# Balatro-GBA
[![Build Status](https://img.shields.io/github/actions/workflow/status/cellos51/balatro-gba/build_ci_workflow.yml?style=flat&logo=github&branch=main&label=Builds&labelColor=gray&color=default&v=1)](https://github.com/cellos51/balatro-gba/actions)
[![Open Issues](https://custom-icon-badges.demolab.com/github/issues/cellos51/balatro-gba?logo=bug&style=flat&label=Issues&labelColor=gray&color=red&v=2)](https://github.com/cellos51/balatro-gba/issues)
[![Pull Requests](https://custom-icon-badges.demolab.com/github/issues-pr/cellos51/balatro-gba?logo=git-pull-request&style=flat&label=Pull%20Requests&labelColor=gray&color=indigo&v=3)](https://github.com/cellos51/balatro-gba/pulls)
[![Build Status](https://img.shields.io/github/actions/workflow/status/cellos51/balatro-gba/build_ci_workflow.yml?style=flat&logo=github&branch=main&label=Builds&labelColor=gray&color=default&maxAge=7200)](https://github.com/cellos51/balatro-gba/actions)
[![Open Issues](https://img.shields.io/github/issues/cellos51/balatro-gba?style=flat&color=red&label=Issues&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48cGF0aCBmaWxsPSJ3aGl0ZSIgZD0iTTggOS41YTEuNSAxLjUgMCAxIDAgMC0zIDEuNSAxLjUgMCAwIDAgMCAzWiI+PC9wYXRoPjxwYXRoIGZpbGw9IndoaXRlIiBkPSJNOCAwYTggOCAwIDEgMSAwIDE2QTggOCAwIDAgMSA4IDBaTTEuNSA4YTYuNSA2LjUgMCAxIDAgMTMgMCA2LjUgNi41IDAgMCAwLTEzIDBaIj48L3BhdGg+PC9zdmc+)](https://github.com/cellos51/balatro-gba/issues)
[![Pull Requests](https://img.shields.io/github/issues-pr/cellos51/balatro-gba?style=flat&color=indigo&label=Pull%20Requests&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48cGF0aCBmaWxsPSJ3aGl0ZSIgZD0iTTEuNSAzLjI1YTIuMjUgMi4yNSAwIDEgMSAzIDIuMTIydjUuMjU2YTIuMjUxIDIuMjUxIDAgMSAxLTEuNSAwVjUuMzcyQTIuMjUgMi4yNSAwIDAgMSAxLjUgMy4yNVptNS42NzctLjE3N0w5LjU3My42NzdBLjI1LjI1IDAgMCAxIDEwIC44NTRWMi41aDFBMi41IDIuNSAwIDAgMSAxMy41IDV2NS42MjhhMi4yNTEgMi4yNTEgMCAxIDEtMS41IDBWNWExIDEgMCAwIDAtMS0xaC0xdjEuNjQ2YS4yNS4yNSAwIDAgMS0uNDI3LjE3N0w3LjE3NyAzLjQyN2EuMjUuMjUgMCAwIDEgMC0uMzU0Wk0zLjc1IDIuNWEuNzUuNzUgMCAxIDAgMCAxLjUuNzUuNzUgMCAwIDAgMC0xLjVabTAgOS41YS43NS43NSAwIDEgMCAwIDEuNS43NS43NSAwIDAgMCAwLTEuNVptOC4yNS43NWEuNzUuNzUgMCAxIDAgMS41IDAgLjc1Ljc1IDAgMCAwLTEuNSAwWiI+PC9wYXRoPjwvc3ZnPg==)](https://github.com/cellos51/balatro-gba/pulls)
[![Discussions](https://img.shields.io/github/discussions/cellos51/balatro-gba?style=flat&color=blue&label=Discussions&logo=data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiIgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2Ij48cGF0aCBmaWxsPSJ3aGl0ZSIgZD0iTTEuNzUgMWg4LjVjLjk2NiAwIDEuNzUuNzg0IDEuNzUgMS43NXY1LjVBMS43NSAxLjc1IDAgMCAxIDEwLjI1IDEwSDcuMDYxbC0yLjU3NCAyLjU3M0ExLjQ1OCAxLjQ1OCAwIDAgMSAyIDExLjU0M1YxMGgtLjI1QTEuNzUgMS43NSAwIDAgMSAwIDguMjV2LTUuNUMwIDEuNzg0Ljc4NCAxIDEuNzUgMVpNMS41IDIuNzV2NS41YzAgLjEzOC4xMTIuMjUuMjUuMjVoMWEuNzUuNzUgMCAwIDEgLjc1Ljc1djIuMTlsMi43Mi0yLjcyYS43NDkuNzQ5IDAgMCAxIC41My0uMjJoMy41YS4yNS4yNSAwIDAgMCAuMjUtLjI1di01LjVhLjI1LjI1IDAgMCAwLS4yNS0uMjVoLTguNWEuMjUuMjUgMCAwIDAtLjI1LjI1Wm0xMyAyYS4yNS4yNSAwIDAgMC0uMjUtLjI1aC0uNWEuNzUuNzUgMCAwIDEgMC0xLjVoLjVjLjk2NiAwIDEuNzUuNzg0IDEuNzUgMS43NXY1LjVBMS43NSAxLjc1IDAgMCAxIDE0LjI1IDEySDE0djEuNTQzYTEuNDU4IDEuNDU4IDAgMCAxLTIuNDg3IDEuMDNMOS4yMiAxMi4yOGEuNzQ5Ljc0OSAwIDAgMSAuMzI2LTEuMjc1Ljc0OS43NDkgMCAwIDEgLjczNC4yMTVsMi4yMiAyLjIydi0yLjE5YS43NS43NSAwIDAgMSAuNzUtLjc1aDFhLjI1LjI1IDAgMCAwIC4yNS0uMjVaIj48L3BhdGg+PC9zdmc+)](https://github.com/cellos51/balatro-gba/discussions)
This is an attempt to recreate the game **'Balatro'** as accurately as possible, including all of the visual effects that make Balatro feel satisfying to play.
This **tech-demo/proof of concept** is strictly limited in content to a minimal version of Balatro and will **NOT** recreate the full game. **This version is intended for people who already own and know how the official full game works.** Please refer to the Balatro Wiki if you need help understanding certain mechanics or abilities.
### 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.
<a href="https://balatrowiki.org/">
<img src="https://custom-icon-badges.demolab.com/badge/Balatro%20Wiki-194c84?logo=bigjoker&logoColor=fff" alt="Balatro Wiki" width="155">
</a>
### Disclaimer: This project is NOT endorsed by or affiliated with Playstack or LocalThunk
#### This is a non-profit community fan project solely aimed to recreate a minimal version of Balatro on the Game Boy Advance as a tribute to the full Balatro and is not intended to infringe or draw sales away from the full game's release or any of the established works by Playstack and LocalThunk.
#### All rights are reserved to their respective holders.
### Please buy the official full version from these sources below:
[![Balatro on Steam](https://custom-icon-badges.demolab.com/badge/Balatro%20on%20Steam-194c84?logo=steam&logoColor=fff)](https://store.steampowered.com/app/2379780/Balatro/)
[![Balatro on Google Play](https://custom-icon-badges.demolab.com/badge/Balatro%20on%20Google%20Play-414141?logo=Google-play&logoColor=fff)](https://play.google.com/store/apps/details?id=com.playstack.balatro.android)
[![Balatro on Apple App Store](https://custom-icon-badges.demolab.com/badge/Balatro%20on%20Apple%20App%20Store-0D96F6?logo=app-store&logoColor=fff)](https://apps.apple.com/us/app/balatro/id6502453075)
@ -24,21 +23,73 @@ This **tech-demo/proof of concept** is strictly limited in content to a minimal
[![Balatro on Xbox](https://custom-icon-badges.demolab.com/badge/Balatro%20on%20Xbox-107C10.svg?logo=xbox&logoColor=white)](https://www.xbox.com/en-US/games/store/balatro/9PK087LNGJC5)
[![Balatro on Humble Bundle](https://img.shields.io/badge/Balatro%20on%20Humble%20Bundle-%23494F5C.svg?logo=HumbleBundle&logoColor=white)](https://www.humblebundle.com/store/balatro?srsltid=AfmBOoqS2De8T4kizzWxJS1pbvQosJ_bYCl4qvC6LA1YLPAh4sZ8vJqO)
<!-- The Gif is a little blurry but I think it looks fine -->
<img src="example.gif" alt="Example GIF" width="800">
---
<a href="https://github.com/cellos51/balatro-gba/releases/">
<img src="https://img.shields.io/badge/Download_ROMs_from_the_Releases_tab-8A2BE2?&logo=github" alt="Download ROM" width="500">
</a>
---
https://github.com/user-attachments/assets/54a9e2e9-1a02-48d5-bb9d-5ab257a7e03b
### Controls:
(D-Pad: Navigation)
(A: Pick Card/Make Selections)
(B: Deselect All Cards)
#### 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)
(R: Sort Suit/Rank)
(Hold A: Swap Owned Jokers or Playing Cards in the Shop or Round)
# Contributing
If you would like to contribute, please read CONTRIBUTING.md.
(D-Pad: Navigation)
# **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](https://docs.docker.com/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`
<details>
<summary><i>How do I open a terminal in windows?</i></summary>
---
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.
---
</details>
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)
@ -57,6 +108,36 @@ Video Tutorial: https://youtu.be/72Zzo1VDYzQ?si=UDmEdbST1Cx1zZV2
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!**
@ -70,3 +151,17 @@ Disregard Steps 3-4 and instead click the green code button on the main reposito
#### 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](https://louisfmusic.com/) and [transcription by MrCrimit](https://musescore.com/user/8237321/scores/14590660).
## **Imagery**
Sprites and backgrounds are based on original Balatro imagery created by LocalThunk.
See [Joker Art Discussion](https://github.com/cellos51/balatro-gba/discussions/69) for full credits for each joker sprite.
## **Sounds**
For the mult and xmult sound effects: [Toy records#06-E3-02.wav by poissonmort](https://freesound.org/s/253249/) used under License: Attribution 4.0
All other sound effects were created by LocalThunk and are used under Creative Commons - CC0 license.

BIN
audio/button.wav Normal file

Binary file not shown.

BIN
audio/chips_accum.wav Normal file

Binary file not shown.

BIN
audio/chips_card.wav Normal file

Binary file not shown.

BIN
audio/chips_generic.wav Normal file

Binary file not shown.

Binary file not shown.

BIN
audio/mult.wav Normal file

Binary file not shown.

BIN
audio/pop.wav Normal file

Binary file not shown.

BIN
audio/xmult.wav Normal file

Binary file not shown.

17
ci_scripts/check_gcc_version.sh Executable file
View File

@ -0,0 +1,17 @@
#!/bin/bash
# Check GCC version and install GCC 14 if needed
check_gcc_version() {
if command -v gcc &> /dev/null; then
gcc_version=$(gcc -dumpversion | cut -d. -f1)
if [ "$gcc_version" -lt 14 ]; then
echo "GCC version $gcc_version detected. Installing GCC 14..."
sudo apt-get update
sudo apt-get install -y gcc-14
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-14 100
echo "GCC 14 installed and set as default."
fi
fi
}
check_gcc_version

11
docker-compose.yml Normal file
View File

@ -0,0 +1,11 @@
services:
gbalatro:
image: gbalatro:dev
build:
context: .
dockerfile: Dockerfile.gbalatro
working_dir: /balatro-gba
volumes:
- ./:/balatro-gba
user: "${UID-1000}:${GID-1000}"
command: ["sh", "-c", "make -j$(nproc)"]

13
doxygen/custom.css Normal file
View File

@ -0,0 +1,13 @@
.github-corner:hover .octo-arm {
animation: octocat-wave 560ms ease-in-out;
}
@keyframes octocat-wave {
0%, 100% { transform: rotate(0); }
20%, 60% { transform: rotate(-25deg); }
40%, 80% { transform: rotate(10deg); }
}
@media (max-width:500px) {
.github-corner:hover .octo-arm { animation: none; }
.github-corner .octo-arm { animation: octocat-wave 560ms ease-in-out; }
}

View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2021 - 2023 jothepro
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,13 @@
Project: doxygen-awesome-css
Source: https://github.com/jothepro/doxygen-awesome-css
Version: snapshot
Commit: d52eafe
Imported-by: SuperbMuffin
Date: 2026-04-02
Notes:
- Imported as a snapshot (no git submodule)
- There are no dependencies on external resources besides images. Posing no security issue that would require consistent updating.

View File

@ -0,0 +1,138 @@
// SPDX-License-Identifier: MIT
/**
Doxygen Awesome
https://github.com/jothepro/doxygen-awesome-css
Copyright (c) 2021 - 2025 jothepro
*/
class DoxygenAwesomeDarkModeToggle extends HTMLElement {
// SVG icons from https://fonts.google.com/icons
// Licensed under the Apache 2.0 license:
// https://www.apache.org/licenses/LICENSE-2.0.html
static lightModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FCBF00"><rect fill="none" height="24" width="24"/><circle cx="12" cy="12" opacity=".3" r="3"/><path d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg>`
static darkModeIcon = `<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#FE9700"><rect fill="none" height="24" width="24"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27 C17.45,17.19,14.93,19,12,19c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z" opacity=".3"/><path d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg>`
static title = "Toggle Light/Dark Mode"
static prefersLightModeInDarkModeKey = "prefers-light-mode-in-dark-mode"
static prefersDarkModeInLightModeKey = "prefers-dark-mode-in-light-mode"
static _staticConstructor = function() {
DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.userPreference)
// Update the color scheme when the browsers preference changes
// without user interaction on the website.
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged()
})
// Update the color scheme when the tab is made visible again.
// It is possible that the appearance was changed in another tab
// while this tab was in the background.
document.addEventListener("visibilitychange", visibilityState => {
if (document.visibilityState === 'visible') {
DoxygenAwesomeDarkModeToggle.onSystemPreferenceChanged()
}
});
}()
static init() {
$(function() {
$(document).ready(function() {
const toggleButton = document.createElement('doxygen-awesome-dark-mode-toggle')
toggleButton.title = DoxygenAwesomeDarkModeToggle.title
toggleButton.updateIcon()
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => {
toggleButton.updateIcon()
})
document.addEventListener("visibilitychange", visibilityState => {
if (document.visibilityState === 'visible') {
toggleButton.updateIcon()
}
});
$(document).ready(function(){
document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
})
$(window).resize(function(){
document.getElementById("MSearchBox").parentNode.appendChild(toggleButton)
})
})
})
}
constructor() {
super();
this.onclick=this.toggleDarkMode
}
/**
* @returns `true` for dark-mode, `false` for light-mode system preference
*/
static get systemPreference() {
return window.matchMedia('(prefers-color-scheme: dark)').matches
}
/**
* @returns `true` for dark-mode, `false` for light-mode user preference
*/
static get userPreference() {
return (!DoxygenAwesomeDarkModeToggle.systemPreference && localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)) ||
(DoxygenAwesomeDarkModeToggle.systemPreference && !localStorage.getItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey))
}
static set userPreference(userPreference) {
DoxygenAwesomeDarkModeToggle.darkModeEnabled = userPreference
if(!userPreference) {
if(DoxygenAwesomeDarkModeToggle.systemPreference) {
localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey, true)
} else {
localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey)
}
} else {
if(!DoxygenAwesomeDarkModeToggle.systemPreference) {
localStorage.setItem(DoxygenAwesomeDarkModeToggle.prefersDarkModeInLightModeKey, true)
} else {
localStorage.removeItem(DoxygenAwesomeDarkModeToggle.prefersLightModeInDarkModeKey)
}
}
DoxygenAwesomeDarkModeToggle.onUserPreferenceChanged()
}
static enableDarkMode(enable) {
if(enable) {
DoxygenAwesomeDarkModeToggle.darkModeEnabled = true
document.documentElement.classList.add("dark-mode")
document.documentElement.classList.remove("light-mode")
} else {
DoxygenAwesomeDarkModeToggle.darkModeEnabled = false
document.documentElement.classList.remove("dark-mode")
document.documentElement.classList.add("light-mode")
}
}
static onSystemPreferenceChanged() {
DoxygenAwesomeDarkModeToggle.darkModeEnabled = DoxygenAwesomeDarkModeToggle.userPreference
DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled)
}
static onUserPreferenceChanged() {
DoxygenAwesomeDarkModeToggle.enableDarkMode(DoxygenAwesomeDarkModeToggle.darkModeEnabled)
}
toggleDarkMode() {
DoxygenAwesomeDarkModeToggle.userPreference = !DoxygenAwesomeDarkModeToggle.userPreference
this.updateIcon()
}
updateIcon() {
if(DoxygenAwesomeDarkModeToggle.darkModeEnabled) {
this.innerHTML = DoxygenAwesomeDarkModeToggle.darkModeIcon
} else {
this.innerHTML = DoxygenAwesomeDarkModeToggle.lightModeIcon
}
}
}
customElements.define("doxygen-awesome-dark-mode-toggle", DoxygenAwesomeDarkModeToggle);

View File

@ -0,0 +1,66 @@
// SPDX-License-Identifier: MIT
/**
Doxygen Awesome
https://github.com/jothepro/doxygen-awesome-css
Copyright (c) 2022 - 2025 jothepro
*/
class DoxygenAwesomeFragmentCopyButton extends HTMLElement {
constructor() {
super();
this.onclick=this.copyContent
}
static title = "Copy to clipboard"
static copyIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M0 0h24v24H0V0z" fill="none"/><path d="M23.04,10.322c0,-2.582 -2.096,-4.678 -4.678,-4.678l-6.918,-0c-2.582,-0 -4.678,2.096 -4.678,4.678c0,-0 0,8.04 0,8.04c0,2.582 2.096,4.678 4.678,4.678c0,-0 6.918,-0 6.918,-0c2.582,-0 4.678,-2.096 4.678,-4.678c0,-0 0,-8.04 0,-8.04Zm-2.438,-0l-0,8.04c-0,1.236 -1.004,2.24 -2.24,2.24l-6.918,-0c-1.236,-0 -2.239,-1.004 -2.239,-2.24l-0,-8.04c-0,-1.236 1.003,-2.24 2.239,-2.24c0,0 6.918,0 6.918,0c1.236,0 2.24,1.004 2.24,2.24Z"/><path d="M5.327,16.748c-0,0.358 -0.291,0.648 -0.649,0.648c0,0 0,0 0,0c-2.582,0 -4.678,-2.096 -4.678,-4.678c0,0 0,-8.04 0,-8.04c0,-2.582 2.096,-4.678 4.678,-4.678l6.918,0c2.168,0 3.994,1.478 4.523,3.481c0.038,0.149 0.005,0.306 -0.09,0.428c-0.094,0.121 -0.239,0.191 -0.392,0.191c-0.451,0.005 -1.057,0.005 -1.457,0.005c-0.238,0 -0.455,-0.14 -0.553,-0.357c-0.348,-0.773 -1.128,-1.31 -2.031,-1.31c-0,0 -6.918,0 -6.918,0c-1.236,0 -2.24,1.004 -2.24,2.24l0,8.04c0,1.236 1.004,2.24 2.24,2.24l0,-0c0.358,-0 0.649,0.29 0.649,0.648c-0,0.353 -0,0.789 -0,1.142Z" style="fill-opacity:0.6;"/></svg>`
static successIcon = `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path d="M8.084,16.111c-0.09,0.09 -0.212,0.141 -0.34,0.141c-0.127,-0 -0.249,-0.051 -0.339,-0.141c-0.746,-0.746 -2.538,-2.538 -3.525,-3.525c-0.375,-0.375 -0.983,-0.375 -1.357,0c-0.178,0.178 -0.369,0.369 -0.547,0.547c-0.375,0.375 -0.375,0.982 -0,1.357c1.135,1.135 3.422,3.422 4.75,4.751c0.27,0.27 0.637,0.421 1.018,0.421c0.382,0 0.749,-0.151 1.019,-0.421c2.731,-2.732 10.166,-10.167 12.454,-12.455c0.375,-0.375 0.375,-0.982 -0,-1.357c-0.178,-0.178 -0.369,-0.369 -0.547,-0.547c-0.375,-0.375 -0.982,-0.375 -1.357,0c-2.273,2.273 -9.567,9.567 -11.229,11.229Z"/></svg>`
static successDuration = 980
static init() {
$(function() {
$(document).ready(function() {
if(navigator.clipboard) {
const fragments = document.getElementsByClassName("fragment")
for(const fragment of fragments) {
const fragmentWrapper = document.createElement("div")
fragmentWrapper.className = "doxygen-awesome-fragment-wrapper"
const fragmentCopyButton = document.createElement("doxygen-awesome-fragment-copy-button")
fragmentCopyButton.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon
fragmentCopyButton.title = DoxygenAwesomeFragmentCopyButton.title
fragment.parentNode.replaceChild(fragmentWrapper, fragment)
fragmentWrapper.appendChild(fragment)
fragmentWrapper.appendChild(fragmentCopyButton)
}
}
})
})
}
copyContent() {
const content = this.previousSibling.cloneNode(true)
// filter out line number from file listings
content.querySelectorAll(".lineno, .ttc").forEach((node) => {
node.remove()
})
let textContent = content.textContent
// remove trailing newlines that appear in file listings
let numberOfTrailingNewlines = 0
while(textContent.charAt(textContent.length - (numberOfTrailingNewlines + 1)) == '\n') {
numberOfTrailingNewlines++;
}
textContent = textContent.substring(0, textContent.length - numberOfTrailingNewlines)
navigator.clipboard.writeText(textContent);
this.classList.add("success")
this.innerHTML = DoxygenAwesomeFragmentCopyButton.successIcon
window.setTimeout(() => {
this.classList.remove("success")
this.innerHTML = DoxygenAwesomeFragmentCopyButton.copyIcon
}, DoxygenAwesomeFragmentCopyButton.successDuration);
}
}
customElements.define("doxygen-awesome-fragment-copy-button", DoxygenAwesomeFragmentCopyButton)

View File

@ -0,0 +1,20 @@
/* SPDX-License-Identifier: MIT */
/**
Doxygen Awesome
https://github.com/jothepro/doxygen-awesome-css
Copyright (c) 2021 - 2025 jothepro
*/
@media screen and (min-width: 768px) {
#MSearchBox {
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - var(--searchbar-height) - 1px);
}
#MSearchField {
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 66px - var(--searchbar-height));
}
}

View File

@ -0,0 +1,105 @@
/* SPDX-License-Identifier: MIT */
/**
Doxygen Awesome
https://github.com/jothepro/doxygen-awesome-css
Copyright (c) 2021 - 2025 jothepro
*/
html {
/* side nav width. MUST be = `TREEVIEW_WIDTH`.
* Make sure it is wide enough to contain the page title (logo + title + version)
*/
--side-nav-fixed-width: 335px;
--menu-display: none;
--top-height: 120px;
--toc-sticky-top: -25px;
--toc-max-height: calc(100vh - 2 * var(--spacing-medium) - 25px);
}
#projectname {
white-space: nowrap;
}
@media screen and (min-width: 768px) {
html {
--searchbar-background: var(--page-background-color);
}
#side-nav {
min-width: var(--side-nav-fixed-width);
max-width: var(--side-nav-fixed-width);
top: var(--top-height);
overflow: visible;
}
#nav-tree, #side-nav {
height: calc(100vh - var(--top-height)) !important;
}
#top {
display: block;
border-bottom: none;
height: var(--top-height);
margin-bottom: calc(0px - var(--top-height));
max-width: var(--side-nav-fixed-width);
overflow: hidden;
background: var(--side-nav-background);
}
#main-nav {
float: left;
padding-right: 0;
}
.ui-resizable-handle {
display: none;
}
.ui-resizable-e {
width: 0;
}
#nav-path {
position: fixed;
right: 0;
left: calc(var(--side-nav-fixed-width) + 1px);
bottom: 0;
width: auto;
}
#doc-content {
height: calc(100vh - 31px) !important;
padding-bottom: calc(3 * var(--spacing-large));
padding-top: calc(var(--top-height) - 80px);
box-sizing: border-box;
margin-left: var(--side-nav-fixed-width) !important;
}
#MSearchBox {
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)));
}
#MSearchField {
width: calc(var(--side-nav-fixed-width) - calc(2 * var(--spacing-medium)) - 65px);
}
#MSearchResultsWindow {
left: var(--spacing-medium) !important;
right: auto;
}
#nav-sync {
bottom: 4px;
right: auto;
left: 300px;
width: 35px;
top: auto !important;
user-select: none;
position: fixed
}
}

File diff suppressed because it is too large Load Diff

106
doxygen/header.html Normal file
View File

@ -0,0 +1,106 @@
<!-- HTML header for doxygen 1.16.1-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="$langISO">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen $doxygenversion"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
<!--BEGIN PROJECT_ICON-->
<link rel="icon" href="$relpath^$projecticon" type="image/x-icon" />
<!--END PROJECT_ICON-->
<link href="$relpath^tabs.css" rel="stylesheet" type="text/css"/>
<!--BEGIN FULL_SIDEBAR-->
<script type="text/javascript">var page_layout=1;</script>
<!--END FULL_SIDEBAR-->
<script type="text/javascript" src="$relpath^jquery.js"></script>
<script type="text/javascript" src="$relpath^dynsections.js"></script>
<!--BEGIN COPY_CLIPBOARD-->
<script type="text/javascript" src="$relpath^clipboard.js"></script>
<!--END COPY_CLIPBOARD-->
$treeview
$search
$mathjax
$darkmode
<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" />
$extrastylesheet
<!-- ... other metadata & script includes ... -->
<script type="text/javascript" src="$relpath^doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript" src="$relpath^doxygen-awesome-fragment-copy-button.js"></script>
<script type="text/javascript">
DoxygenAwesomeDarkModeToggle.init()
DoxygenAwesomeFragmentCopyButton.init()
</script>
</head>
<body>
<!--BEGIN FULL_SIDEBAR-->
<div id="side-nav" class="ui-resizable side-nav-resizable"><!-- do not remove this div, it is closed by doxygen! -->
<!--END FULL_SIDEBAR-->
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!-- GitHub Corner -->
<a href="https://github.com/GBALATRO/balatro-gba" class="github-corner" aria-label="View source on GitHub" target="_blank">
<svg width="80" height="80" viewBox="0 0 250 250"
style="fill:#715292; color: #1C1D1F; position:fixed; top:0; border:0; right:0; z-index:9999;"
aria-hidden="true">
<path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"/>
<path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.9,78.6 120.9,78.6
C119.1,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3
C122.9,97.6 130.6,101.9 134.4,103.2"
fill="currentColor" style="transform-origin:130px 106px;" class="octo-arm"/>
<path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6
C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0
C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1
C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4
C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9
C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5
C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9
L141.0,136.5 C139.8,137.8 141.6,141.9 141.8,141.8 Z"
fill="currentColor" class="octo-body"/>
</svg>
</a>
<!--BEGIN TITLEAREA-->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<!--BEGIN PROJECT_LOGO-->
<td id="projectlogo"><img alt="Logo" src="$relpath^$projectlogo"$logosize/></td>
<!--END PROJECT_LOGO-->
<!--BEGIN PROJECT_NAME-->
<td id="projectalign">
<div id="projectname">$projectname<!--BEGIN PROJECT_NUMBER--><span id="projectnumber">&#160;$projectnumber</span><!--END PROJECT_NUMBER-->
</div>
<!--BEGIN PROJECT_BRIEF--><div id="projectbrief">$projectbrief</div><!--END PROJECT_BRIEF-->
</td>
<!--END PROJECT_NAME-->
<!--BEGIN !PROJECT_NAME-->
<!--BEGIN PROJECT_BRIEF-->
<td>
<div id="projectbrief">$projectbrief</div>
</td>
<!--END PROJECT_BRIEF-->
<!--END !PROJECT_NAME-->
<!--BEGIN DISABLE_INDEX-->
<!--BEGIN SEARCHENGINE-->
<!--BEGIN !FULL_SIDEBAR-->
<td>$searchbox</td>
<!--END !FULL_SIDEBAR-->
<!--END SEARCHENGINE-->
<!--END DISABLE_INDEX-->
</tr>
<!--BEGIN SEARCHENGINE-->
<!--BEGIN FULL_SIDEBAR-->
<tr><td colspan="2">$searchbox</td></tr>
<!--END FULL_SIDEBAR-->
<!--END SEARCHENGINE-->
</tbody>
</table>
</div>
<!--END TITLEAREA-->
<!-- end header part -->

BIN
font/gbalatro_sys8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

1
graphics/blind_gfx0.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx0.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 393 B

1
graphics/blind_gfx1.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx1.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx10.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 364 B

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx11.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 383 B

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx12.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx13.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 345 B

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx14.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 356 B

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 343 B

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx17.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

1
graphics/blind_gfx2.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx2.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

1
graphics/blind_gfx3.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx3.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 380 B

1
graphics/blind_gfx4.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx4.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 357 B

1
graphics/blind_gfx5.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx5.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 367 B

1
graphics/blind_gfx6.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx6.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 387 B

1
graphics/blind_gfx7.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

1
graphics/blind_gfx8.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx8.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 378 B

1
graphics/blind_gfx9.grit Normal file
View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -pn 16

BIN
graphics/blind_gfx9.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 B

View File

@ -1 +0,0 @@
-gB4 -Mw4 -Mh4 -p!

Binary file not shown.

Before

Width:  |  Height:  |  Size: 597 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -1 +1 @@
-gB4 -Mw4 -Mh4 -m! -pn16
-gB4 -Mw4 -Mh4 -m! -pn16

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 7.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -m! -pn 16

BIN
graphics/joker_gfx15.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -m! -pn 16

BIN
graphics/joker_gfx16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

View File

@ -0,0 +1 @@
-gB4 -Mw4 -Mh4 -m! -pn 16

BIN
graphics/joker_gfx17.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1000 B

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 927 B

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 961 B

After

Width:  |  Height:  |  Size: 7.5 KiB

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 B

Some files were not shown because too many files have changed in this diff Show More