* 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