Skip to content

qguv/undercooked

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

undercooked

build status

A cooking game for the 1989 Nintendo Game Boy (DMG-01). Should run on later models, too. Forever free and open source.

Play undercooked now in your browser, or download the ROM to play in an emulator or burn onto a Gameboy cartridge!

credits

Rachel did the amazing pixel art

Quint wrote the code and music

building

prerequisite packages:

package purpose
rgbds toolchain for cross-compiling for the gameboy architecture
imagemagick image correction tasks for sprites and tiles
ninja build system
python3 build system
  1. run ./configure to prepare build system (you only have to do this once)
  2. run ninja to compile
  3. run gameboy ROM at obj/main.gb

playing

  • you can run on real hardware with a flash cart like the GB USB 64M
  • you can run on your regular emulator of choice, zboy is fine
  • you can run on bgb, a very good emulator with a debugger, using wine (see this AUR package)

developing

  • if you run with bgb -nobatt -watch obj/main.gb, bgb will reload the newly built ROM whenever you run ninja to compile
  • if you add (or remove) a source file and want to link it into the built ROM (or remove the link), edit the build obj/main.gb line in meta/build.ninja.j2
  • run ./configure again if you ever need to rebuild the build system

naming conventions

addresses:

.jump_label                 ; jump labels within subroutines
;convenience_label          ; label for a section of code that's currently entered by fallthrough
.label_in_macro\@           ; jump labels within macros
SomeFunction:               ; a non-exported subroutine
SomeFunction__abcdehl:      ; a non-exported subroutine reading registers a, b, c, d, e, h, and l as arguments
SomeData                    ; exported data, probably array/string
_GBHW_ADDR or _GBHWADDR     ; gameboy hardware address defined in gbhw.inc
some_value                  ; ram address or compiler variable

values:

as3_freq                    ; music frequency (16-bit)
as3                         ; music note (8-bit index into NoteFreqs)
SOME_CONSTANT               ; equ-defined constant

releasing

  1. create and push a new tag vX.Y.Z
  2. edit and publish the draft github release that was just created for you