gameboy software for reading tarot cards
Find a file
2026-01-28 07:36:58 -05:00
card_art various changes and splash screen work 2026-01-28 07:36:58 -05:00
itchsrc all cards have art! 2025-12-03 16:30:02 -05:00
.gitignore attempt to write my own audio engine. didnt work well. 2025-04-03 10:59:18 -04:00
00TheFool.inc lots of little art fixes 2025-12-04 11:33:33 -05:00
01TheMagician.inc add some cards and bulk out the deck and fix some palettes 2025-10-11 11:21:48 -04:00
02TheHighPriestess.inc the great colors caper 2025-12-20 16:25:50 -05:00
03TheEmpress.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
04TheEmperor.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
05TheHierophant.inc the great colors caper 2025-12-20 16:25:50 -05:00
06TheLovers.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
07TheChariot.inc the great colors caper 2025-12-20 16:25:50 -05:00
08Strength.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
09TheHermit.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
10WheelOfFortune.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
11Justice.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
12TheHangedMan.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
13Death.inc lots of little art fixes 2025-12-04 11:33:33 -05:00
14Temperance.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
15TheDevil.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
16TheTower.inc add some cards and bulk out the deck and fix some palettes 2025-10-11 11:21:48 -04:00
17TheStar.inc lots of little art fixes 2025-12-04 11:33:33 -05:00
18TheMoon.inc fixing the moon on all emulators hopefully 2026-01-03 13:32:16 -05:00
19TheSun.inc various changes and splash screen work 2026-01-28 07:36:58 -05:00
20Judgement.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
21TheWorld.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
Async.inc various changes and splash screen work 2026-01-28 07:36:58 -05:00
Audio.inc working on splash screen, and introducing ANCHORS, for scheduling mid-frame callbacks 2026-01-20 16:45:38 -05:00
CardHelpers.inc various changes and splash screen work 2026-01-28 07:36:58 -05:00
CardLibrary.inc working on splash screen, and introducing ANCHORS, for scheduling mid-frame callbacks 2026-01-20 16:45:38 -05:00
coins01ace.inc queens done 2025-10-14 19:11:08 -04:00
coins02.inc small art fixes 2025-12-12 14:33:03 -05:00
coins03.inc small art fixes 2025-12-12 14:33:03 -05:00
coins04.inc fours are complete 2025-10-29 17:15:08 -04:00
coins05.inc small art fixes 2025-12-12 14:33:03 -05:00
coins06.inc small art fixes 2025-12-12 14:33:03 -05:00
coins07.inc small art fixes 2025-12-12 14:33:03 -05:00
coins08.inc small art fixes 2025-12-12 14:33:03 -05:00
coins09.inc small art fixes 2025-12-12 14:33:03 -05:00
coins10.inc small art fixes 2025-12-12 14:33:03 -05:00
coins11page.inc add some cards and bulk out the deck and fix some palettes 2025-10-11 11:21:48 -04:00
coins12knight.inc add some cards and bulk out the deck and fix some palettes 2025-10-11 11:21:48 -04:00
coins13queen.inc queens done 2025-10-14 19:11:08 -04:00
coins14king.inc short kings installed 2025-10-23 08:52:28 -04:00
CopyRange.inc gameboy color functionality. changes to card struct 2025-10-08 13:42:06 -04:00
CopyTiles.inc fixing the moon on all emulators hopefully 2026-01-03 13:32:16 -05:00
cups01ace.inc queens done 2025-10-14 19:11:08 -04:00
cups02.inc all twos and sketches for threes! 2025-10-25 12:20:12 -04:00
cups03.inc various changes and splash screen work 2026-01-28 07:36:58 -05:00
cups04.inc fours are complete 2025-10-29 17:15:08 -04:00
cups05.inc lots of little art fixes 2025-12-04 11:33:33 -05:00
cups06.inc sixes done! 2025-11-01 15:27:10 -04:00
cups07.inc 7s done 2025-11-19 18:45:24 -05:00
cups08.inc eights are done!!! 2025-11-22 13:09:37 -05:00
cups09.inc all cards have art! 2025-12-03 16:30:02 -05:00
cups10.inc all cards have art! 2025-12-03 16:30:02 -05:00
cups11page.inc lots of little art fixes 2025-12-04 11:33:33 -05:00
cups12knight.inc add some cards and bulk out the deck and fix some palettes 2025-10-11 11:21:48 -04:00
cups13queen.inc queens done 2025-10-14 19:11:08 -04:00
cups14king.inc short kings installed 2025-10-23 08:52:28 -04:00
curve_authoring.html minor art updates 2025-03-12 11:52:47 -04:00
gb-export.lua add up to 11 justice 2025-02-06 21:43:52 -05:00
gb_tarot_theme.inc got frustrated, wrote an audio engine 2025-04-07 12:20:57 -04:00
gb_tarot_theme.s3m i did so much. sorry. 2025-04-25 20:24:12 -04:00
gbmnopedie.flac i did so much. sorry. 2025-04-25 20:24:12 -04:00
gbmnopedie.mp3 i did so much. sorry. 2025-04-25 20:24:12 -04:00
gbmnopedie.s3m i did so much. sorry. 2025-04-25 20:24:12 -04:00
gbmnopedie.wav i did so much. sorry. 2025-04-25 20:24:12 -04:00
generate_animation_circling.py fixed colors leaving various screens 2026-01-14 10:50:03 -05:00
GraphicsManipulation.inc i have sinned and done way too much in a commit. sry. 2025-05-10 13:05:53 -04:00
hardware.inc refactor everything to use the websites format and more files 2025-01-08 14:03:54 -05:00
hardware_compat.inc finally finished the last card, the devil 2025-07-19 13:04:28 -04:00
label.kra fixed colors leaving various screens 2026-01-14 10:50:03 -05:00
label.kra~ fixed colors leaving various screens 2026-01-14 10:50:03 -05:00
label.png fixed colors leaving various screens 2026-01-14 10:50:03 -05:00
main.asm various changes and splash screen work 2026-01-28 07:36:58 -05:00
misc.py finally finished the last card, the devil 2025-07-19 13:04:28 -04:00
mod2gbt a lot of refactors, and waffling on audio engines. 2025-04-06 11:16:30 -04:00
Printing.inc minor fixes to main menu mostly 2025-10-04 14:45:17 -04:00
Random.inc i have sinned and done way too much in a commit. sry. 2025-05-10 13:05:53 -04:00
readme.md news about music 2026-01-16 08:44:06 -05:00
RecreatingCards.inc fixing the moon on all emulators hopefully 2026-01-03 13:32:16 -05:00
s3m2shoofmt.py i did so much. sorry. 2025-04-25 20:24:12 -04:00
ScreenCardBrowse.inc various changes and splash screen work 2026-01-28 07:36:58 -05:00
ScreenCardRead.inc button prompts and such... 2026-01-05 16:40:16 -05:00
ScreenMainMenu.inc various changes and splash screen work 2026-01-28 07:36:58 -05:00
ScreenShuffle.inc button prompts and such... 2026-01-05 16:40:16 -05:00
ScreenSplash.inc various changes and splash screen work 2026-01-28 07:36:58 -05:00
ScreenSpreadSelect.inc various changes and splash screen work 2026-01-28 07:36:58 -05:00
shoofles_audio_engine_test.s3m i did so much. sorry. 2025-04-25 20:24:12 -04:00
source.zip various changes and splash screen work 2026-01-28 07:36:58 -05:00
swords01ace.inc fancying up the shuffle screen so its clearer to users 2025-10-16 14:13:37 -04:00
swords02.inc all twos and sketches for threes! 2025-10-25 12:20:12 -04:00
swords03.inc lots of little art fixes 2025-12-04 11:33:33 -05:00
swords04.inc fours are complete 2025-10-29 17:15:08 -04:00
swords05.inc fives are finished 2025-11-01 11:44:52 -04:00
swords06.inc 7s done 2025-11-19 18:45:24 -05:00
swords07.inc small art fixes 2025-12-12 14:33:03 -05:00
swords08.inc 7s done 2025-11-19 18:45:24 -05:00
swords09.inc all cards have art! 2025-12-03 16:30:02 -05:00
swords10.inc all cards have art! 2025-12-03 16:30:02 -05:00
swords11page.inc add some cards and bulk out the deck and fix some palettes 2025-10-11 11:21:48 -04:00
swords12knight.inc lots of little art fixes 2025-12-04 11:33:33 -05:00
swords13queen.inc queens done 2025-10-14 19:11:08 -04:00
swords14king.inc short kings installed 2025-10-23 08:52:28 -04:00
theme.inc got frustrated, wrote an audio engine 2025-04-07 12:20:57 -04:00
wands01ace.inc queens done 2025-10-14 19:11:08 -04:00
wands02.inc all twos and sketches for threes! 2025-10-25 12:20:12 -04:00
wands03.inc itch web build and threes 2025-10-27 11:51:53 -04:00
wands04.inc fours are complete 2025-10-29 17:15:08 -04:00
wands05.inc fives are finished 2025-11-01 11:44:52 -04:00
wands06.inc 7s done 2025-11-19 18:45:24 -05:00
wands07.inc all cards have art! 2025-12-03 16:30:02 -05:00
wands08.inc files for nines through tens 2025-11-26 11:20:13 -05:00
wands09.inc all cards have art! 2025-12-03 16:30:02 -05:00
wands10.inc all cards have art! 2025-12-03 16:30:02 -05:00
wands11page.inc add some cards and bulk out the deck and fix some palettes 2025-10-11 11:21:48 -04:00
wands12knight.inc add some cards and bulk out the deck and fix some palettes 2025-10-11 11:21:48 -04:00
wands13queen.inc queens done 2025-10-14 19:11:08 -04:00
wands14king.inc short kings installed 2025-10-23 08:52:28 -04:00

This is a tarot deck for the Nintendo Game Boy (1989). I hand-coded it in assembly using gbdev.io's live rgbds interface. I made the art in Aseprite, using a script I heavily modified to export the data in a gameboy-compatible format for inclusion in the assembly source.

The entry point for this software is main.asm. I would love to have properly separated all the functionality into different asm files, but rgbds-live seems not to be able to link them together. So I used INCLUDE directives to split it up instead. Each file beginning wih Screen describes one screen of the app. Simple enough. I tend to organize apps into screens or scenes, with the main loop repeatedly calling the appropriate update and draw functions on a scene object, and a helper function to change what scene is loaded (and call setup and teardown, if applicable). It seemed natural enough. It doesn't lend itself to fancy scene-changing animations, but... I'm working with hand-coded assembly on the Game Boy (1989). Forgive me for not putting enough delight and pop! in the UI of my tarot project.

What is there to say about this project? The hardest part by far has been the art. I get into flow states programming really easily - major thanks to my spouse for keeping me from burning out on this project by enforcing working hours. The art has been a struggle. I did not realize how many drawings 22 pieces of art is. It's twenty two! That's a lot! I vaguely dread the idea of doing a whole deck. I'm going to avoid it for now.

The part of this project I'm most proud is the Async subsystem, which you can find defined, unsurprisingly, in Async.inc. It's a fully functioning multithreaded programming system, powered by the game boy's LYC interrupt - a "safe" time period is defined, as a subset of the vblank period, and whenever the LY counter reaches that region, the interrupt is used to switch to a second stack and resume execution of the second thread. The upshot of this is you can write totally normal-looking code, and if you call Async_Spawn_HL with the appropriate argument, it will then run that code only during the "safe" time period. This went through a lot of changes in development, initially without a second stack, so the second thread had to be written with weird compromises like disabling interrupts around function calls. But now it's proper, fully functional context switching!

Let me rephrase: you can have two simultaneous threads of execution, with their own stacks, and it will jump between them so that the second thread only executes during a safe subset of vblank. So you can write totally normal code that copies data to vram, and you don't have to keep track of when it's safe to write.

I'm really proud of some of the art. Especially the sun, the meteor, death, and strength.

Ah, I mentioned The Meteor! I changed Judgement to The Meteor to make the final six cards form a neat sequence of astral bodies. The meteor is depicted streaking down towards Earth, bringing destruction, devastation, a total reset, a game over. It's more oblique than Judgement but honestly, I'm the artist and I get to make the decisions. Maybe I just wanted to draw a meteor. Maybe it's a little bit of a Homestuck reference.

I agonized for a long time over how to integrate sound. I wanted at least sound effects and preferably a background music of some sort, but I'm not a very musical person. I tried GBT player and the Carillon editor/player, both found on gbdev.io. Unfortunately, neither suited my purposes, so I dedicated myself to the task of writing my own audio engine and data format. I cribbed the tooling (an s3m template file and the bones of a conversion script) from GBT player, but largely wrote it myself. Honestly, though it only took a couple days, writing this audio engine was a beast of its own work, and I'd love to write it up and distribute it at some point. ... Then I hemmed and hawed and struggled over writing music and eventually asked the lovely and incomparable skitterchomp to write some music for me. We're using hUGEtracker for it.