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 9e6b2ee09a start work on mirroring background on scroll (still disabled) 1 month 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 add some sprites to cart artwork 1 month ago
data remove small status sprites again, split map and window code 1 month ago
docs add some sprites to cart artwork 1 month ago
src start work on mirroring background on scroll (still disabled) 1 month ago
util add wav file conversion and playback 1 month ago
.gitignore add sgb border support 1 month ago
COPYING add licensing stuff 2 months ago
Makefile always draw ship sprite, no bg map attributes, re-use palettes for status. 1 month ago
README.md readme typo 1 month 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.

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 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.