* Everything works, need to clean up
* cleanup
* fix rebase issue
* clang format
* docs
* clang format
* clang format
* address part of review
* Protect against edge case when discarding at end of hand
* Protect undiscard against popping a discarded card that doesn't exist
* Protect against out of bounds access to the `played` cards stack
* fix condition in `select_four_of_a_kind_cards_in_played_hand`
* change `get_played_top() + 1` to `get_played_size()`
* move `can_play/discard_hand` functions to round.c
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
* WIP
* WIP
* WIP
* WIP
* Tags are bugged but it's looking good
* Centering is bugged, almost there
* WIP
* Fixed centeriiiing, yaaaay
* good progress
* add proper '\n' support
* WIP descriptions
* All descriptions are there ^^
* missing 9-patch for pretty display
* WIP
* fix rebase issues
* Fix minor Run Setup screen issues
* Almost done, only one fix to go
* Aaaalmooost doooneeeee
* make desc frame size adaptative
* add rarity color and text
* final cleanup
* clang format
* clang format
* clang format
* clang format
* clang format
* Fix Joker update loop index
* Fix const and Bull description
* Fix unwanted button SFX
* fix tte colors
* Add misprint description
* Fix justified line length computation
* Add safeguards to tag parsing loop
* clang format
* Fix Ante bugged display at boss blind end
* Tweak suit colors
* Final fixes
* Simplified the way we print descriptions
* simplify further
* get rid of weird macro
* Fix Onwed joker price when holding A after showing its description
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
* initial commit
* wip
* WIP
* WIP
* clang format
* Choose Seed navigation mostly done
* seed input navigation done
* seed input done
* cleanup and clang format
* Implement base 10 to 36 conversions
* Enable seeded runs
* clang format
* show default deck sprite, name and description
* Rename Deck enum to DeckType
* Implement arbitrary 9-patch expand system
* Make 9-patch example smaller in the docs
* Improve NinePatchRect docs
* fix Deck back side sprite palette
* clang format
* Add last deck description
* clang format
* Fix 'Z' in seed input keyboard
* Fix rebase issue
* fix deck sprite not updating
* Documents static funcs in run_setup.c
* more documentation
* clang format
* Move Play button to the left in its row
* Tests WIP
* removing tests for random.h
* use the new StateMachine struct
* First wave of fixes
* Fix the 9-patch again
* Changed the base 36 logic so it's in big endian
* properly set end of base 36 string to '\0'
* typos
* fix cursor position after rolling a seed + fix random seed generation
* Make keyboard more intuitive to use
* static const var
* Address more comment from @ricfehr3
* clang format
* clang format
* clang format
* clang format
* clang format
* clang format
* clang format
* fix deck palette
* create the `DEF_SEED_KEYBOARD_BUTTON_OBJECT` macro
* Replace `expand_3x3` by a call to `expand_9-patch`
* clang format
* clang format
* clang format
* fix rebase iussue in state_machine.h
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
* initial additions
* Move current_blind to game vars
* tmp
* tmp
* tmp
* tmp
* tmp
* tmp
* tmp
* Compile but is broken
* temp fix for token location
* tmp
* Working, lets clean up
* remove todo
* Remove odd reroll blind variable
* fix skipping blind screen
* fix reroll
* remove magic for blind token locations
* clang format
* Cleanup button highlight in blind menu
* some cleanup
* Add layout file for global UI rects
* remove dead code
* Clang format
* clang format it up
* Move reset top left funct to gfx utils
* make note of soon-to-be removed vars
* Cleanup gamevars declaration
* Cleanup layout file
* Apply suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Add include for stdbool.h in common_ui.h
* Cleanup rect declaration
* Start moving state machine stuff to new file
* quick tmp
* oops, add new files
* working call list
* fixed pointer stuff
* working as per norm
* working replacement
* move defines to static const
* fix compile issue
* Add some missing "void"s
* Working new substates
* add statemachine to blind select
* Fix game restart statemachine leak
* clang-format
* Clang format
* Rework shop exit logic
* Use new state machine in shop
* Remove substates entirely
* Remove debug stuff
* Clang format
* document state machine better
* update list tests
* clang-format
* Update for PR
* Claaaaang format
* another clang-format
* Remove extra state in round_end
* cleanup docs for removals in lists
* clang-format... again
* update doxygen format
* Clang format
* Update list docs
* Update lists tests
* Fix bad conflict resolution
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* move all hand funcs to their new file. now to clean up
* WIP
* Cleanup + doc hand.h
* clang format
* Refactor loose variables in hand.c into a proper Hand struct
* Fix some more issues
* Apply *some* suggestions from code review
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* remove outdated comment
* fix rebase issue
* fix rng_info missing from g_game_vars init
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Extract rng manipulation to its own file
* clang format
* Get CPU cycles since game start to use for RNG
* change a few things
* clang format
* Implement suggestions from @ricfehr3
* clang format
* Fix rebase issue
* clang format
* Create RngInfo struct to hold seed and step
* clang format
* Make a note about rng_restore system not having been tested properly yet
* Apply suggestions from @ricfehr3
Co-authored-by: Rickey <ric@rf3.xyz>
* clang format
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
Co-authored-by: Rickey <ric@rf3.xyz>
* initial commit, DOES NOT COMPILE
* Rename joker interactions file to `joker_row`
* IT'S WORKIIING (now to make it pretty lol)
* fixed rebase issues
* fix rebase + undo state machine changes
* Document shop state functions
* clang format
* fix reroll cost not appearing on shop init
* Move generic SpriteObject text/price printing functions to sprite.c + some minor fixes
* Resolve weird defines/include order issue
* clang format
* Implement suggestions from @ricfehr3
* clang format
* clang format
* fix rebase
* Implement sugegstions from @ricfehr3
* Refactored shop to use the Button struct
* missed some memsets
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
* Initial round_end extraction
* move hands to game vars
* Checkpoint
* Finish removing all variables for state fns
* Move over round_end substate functions
* Move over round_end with compile
* working in general
* Fix round start state issue
* clang-format
* Fix clang format issue
* PR fixes and standardize types in game vars struct
* Clang-format
* Move game over (win/lose) state functions to their own file
* remove unused enum
* clang format
* Implement suggestions from @ricfehr3
* Fixing lack of highlighted button after skipping ablind
* factorize as much game over state code as possible
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
* background
* Implement Options button
* Update main menu artwork
* add options menu tiles
* prepare options menu handling
* incorporate main menu refactor
* toto
* add all menu interactions
* do not reset selection_x in main_menu
* options struct
* fix rebase from ricfehr3's repo
* Implement high contrast cards
* Save/Load options values to SRAM
* load options on game_init and validate data within the load_options function
* Get changes from ricfehr3's PR
* recover fix for glitched ace
* clang format
* clang format
* clang format
* Save 500B of image data by using only minimal set of tiles instead of keeping final window in source file
* clang format
* clang format
* Implement Options button
* Update main menu artwork
* progress, leaving it alone for now until discussion
* make game_vars an extern
* Move options vars into their own struct
* rollback previous commit
* Implement save validation. Version check to come
* implement data validity + version check for game saves
* clang format
* Save position in rng sequence for consistent run after load
* fix rebase issues
* fix rebase issue
* remove unused/duplicate define
* Oops, made a mistake when testing PR #424
* encode high contrast palette into an image, and load it at game_start
* document save.c/h and correct typos
* correct alignment
* game speed and high contrast buttons working
* small cleanup
* sliders also work again now
* clang format
* Moved balatro_version extern declaration to version.h file
* removed unsused variable
* make showing ROM version a toggle
* move ante, round and money to the GameVariables struct
* Rename SaveCheckInfo struct to SaveHeader for clarity
* Add SaveHeader struct explanation
* clang format
* Revert unnecessary tileset optimization
* SFX now follows the sound volume slider
* clang format
* Music now follows volume slider
* Changed volume slider increment from 5 to 20 to avoid having the music sound too rough under 20% volume
* refactor main_menu.c to use SelectionGrid and Button structs
* clang format
* make a "new" save button so we don't save during the state transition
* clang format
* Reduced state transition flicker by only changing affine background to a different one
* Fix loading game too late in game init sequence
* First batch of suggestions from @MeirGavish
* Remove unnecessary intermediary buffers for high contrast palette swapping
* comment row warp hack for button input
* Add some of Copilot's suggestions
* rename balatro_version into gbalatro_version for rebranding reasons + version display erase screen fix
* remove unnecessary NULL check on `on_selection_changed` method
* implement small game speed arrow buttons animation
* factorize some code
* remove unnecessary data validation in load_game(), since we already checked the header
* Implement @MeirGavish 's suggestion regarding splitting the huge `on_update` function
* clang format
* implement @ricfehr3 's suggestion about keeping last selected button instead of using an obscure `on_boot` boolean
* Apply @ricfehr3's suggestions
* fix clang-format flags
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
* Add basic common_ui background gfx functions
* Move game main menu to separate file
* clang format
* tmp commit basic docs
* clang format
* scope vars and cleanup
* Quick consistency update. Finalize.
This branch is based on: https://github.com/GBALATRO/balatro-gba/pull/363
Co-authored-by: emiyl <me@emiyl.com>
* Simplify global struct
* clang-format
* Add clang-format to subdirs
* Move timer definitions into their own file
* clang-format
* Fix action yml
* docs
* Update for PR
* Move game start to a state
* Remove lag switch
* Remove GameVariables pointer for callbacks
* Make game_vars a global
* move declaration of game vars in header
* Fix multiple game_vars
* fix for pr
* remove change_background in update again
* clang format
* Make bgCallbacks table static const
---------
Co-authored-by: emiyl <me@emiyl.com>
* 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>
* Introduce a ContainedHandTypes type
* Separate computing of hand_type and _contained_hand_types variables
---------
Co-authored-by: MathisMartin31 <mathis.martin31@gmail.com>
* 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>
* 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>
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.
- Introduced GAME_SPLASH_SCREEN state in game.h
- Implemented splash_screen_init and splash_screen_update functions in splash_screen.c
- Updated game.c to initialize with GAME_SPLASH_SCREEN and handle splash screen updates
- Removed old splash screen code from main.c