GameBoy (Color) port of the GTA San Andreas arcade game Duality
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Thomas B b22286dc16 add single debug value printing for dmg 3 hours ago
.github/workflows dont add debug build to actual releases 1 month ago
.vscode add emulicious and debugging support for kate 1 month ago
artwork fix off-by-one pixel error in cart artwork. add some text to webpage. 1 month ago
data add continue / save-game feature 2 weeks ago
docs add continue / save-game feature 2 weeks ago
src add single debug value printing for dmg 3 hours ago
util some dmg optimizations 2 weeks ago
.gitignore tweak makefile and put acceleration logic back in bank 0 (crashed real hardware but worked in most emulators) 3 weeks ago
COPYING add licensing stuff 2 months ago
Makefile no space at start of cartridge header game name 2 weeks ago
README.md add heal and damage sfx 2 weeks ago

README.md

Duality

ROM Web

My first homebrew GameBoy game. A port of the GTA San Andreas Arcade Game Duality.

Try it out online!

Cartridge

Getting Started

You need the GBDK-2020 to build the ROM and Gearboy, SameBoy, Emulicious or BGB to emulate it comfortably. Then just build a debug version and run it in the emulator, with debug symbols already loaded.

make run
make sgb_run
make bgb_run

Use SameBoy to test out the SGB border feature. Also see below for symbolic debugging with Emulicious.

For the release build, simply add GBDK_RELEASE=1 to your make invocation after running make clean.

make clean
make GBDK_RELEASE=1 run

You can also directly write to a flashcart using flashgbx with make flash.

IDE Integration

I’m using Kate which supports VSCode-style LSP and debugging with integrated plugins.

To generate a compile_commands.json for LSPs using bear run:

make compile_commands.json

You can also debug using Emulicious. Add something like the following to your Kate Debugger user configuration:

{
    "dap": {
        "emulicious": {
            "url": "https://emulicious.net/",
            "run": {
                "command": ["emulicious", "-remotedebug", "${#run.port}"],
                "port": 0,
                "redirectStderr": true,
                "redirectStdout": true,
                "supportsSourceRequest": true
            },
            "configurations": {
                "launch (debug)": {
                    "request": {
                        "command": "launch",
                        "mode": "debug",
                        "program": "${file}",
                        "cwd": "${workdir}",
                        "stopOnEntry": true
                    }
                }
            }
        }
    }
}

Unfortunately you will have to edit the hard-coded paths in .vscode/launch.json, I haven’t been able to use variables there for some reason.

For hard debugging cases the reverse stepping feature of the debugger in GameRoy may come in handy.

License

The source code of this Duality GameBoy clone is licensed as GPLv3. A copy of the license can be found in COPYING.

It uses the GBDK-2020 libraries and is based on their example code. The files sgb_border.c and sgb_border.h are copied directly from their sgb_border example.

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

See <http://www.gnu.org/licenses/>.

The util/cvtsample.py script is based on a GBDK example.

The 8x8 font is public domain.

The included cartridge label graphic in artwork/cart_label.xcf is based on the ‘Cartridge-Label-Templates’ by Dinierto licensed as CC0.

The included cartridge graphic in artwork/cartridge.xcf is based on the ‘Front-End-Assets’ by Duimon.