A downloadable tool

Github repo: https://github.com/haroldo-ok/choice4genesis

This is a ChoiceScript clone that generates Sega Genesis ROMs. If can be used for visual novels or simple multimedia presentations.

It takes a bunch of scripts and images and, from that, it generates SGDK-compatible .c and .res files. Those are then compiled into a Sega Genesis compatible ROM, which can be run on an emulator or even on real hardware.

The syntax of the scripts is somewhat based on ChoiceScript, but it is not exactly the same.

Please note that this is an early work and progress, and it is not as stable or user-friendly as it is planned to become.

Example script:

* font "damieng.com - Hourglass font.png"
* background "Blue Hedgehog.png"
* create intVar, 1
* create boolVar, true
* temp localInt, 2
* set localInt, intVar + 3
* create playingMusic, false
* choice
    * if playingMusic
        # Stop the music
            * stop music, sound
            OK, music is stopped.
            * set playingMusic, false
    * elseif FALSE
        This should not appear
        This should not play
        * music "Actraiser - Fillmore.vgm"
    * else
        # Play some music
            * music "Actraiser - Fillmore.vgm"
            OK, playing Fillmore, from Actraiser.
            * set playingMusic, true
    # Play a voice
        * sound "ready.wav"
        OK, playing a digital voice.
    # Show a smiley
        * image "Smiley.png", at(30, 3)
        OK... showing a smiley!
    # Fourth choice
        This is a test.
        Second line.
        Third line.
        * choice
            # Yet another choice
                You chose this.
            # One more choice
                You chose that.
    # Increment a number
        * set intVar, intVar + 1
        The value is now ${intVar}!
    # More options...
        * choice
            # Test window
                * window from(1, 1), to(10, 4)
                Window 1
                * flush nowait
                * window from(29, 1), size(10, 6)
                Window 2
                * flush nowait
                * window default
                Returning to the default window
                * flush
                * clear background, foreground
                Clearing everything
            # Go to another scene
                * goto_scene test

Full documentation of the commands

Available at: https://github.com/haroldo-ok/choice4genesis/blob/main/README.md

Commands implemented so far


Loads a .png file containing the 8x8 font. Note that the image must be paletized, with 16 colors. Future versions of this tool will probably convert the image automagically.


Loads a .png file as a background image. Note that the image must be paletized, with 16 colors. Future versions of this tool will probably convert the image automagically.


Presents a menu to the user, allowing to choose between multiple options.


Starts playing a .vgm/.xgm music in the background.


Plays a digitized sound.


Stops the music and/or sound.


Allows drawing a small image in .png format somewhere in the background. Note that the image must be paletized, with 16 colors. Future versions of this tool will probably convert the image automagically.


Waits for a few seconds.


Creates a global variable.


Creates a local variable. temp variables are only visible inside the scene file that created them.


Changes the current value of an existing variable.


Allows a certain block of code to only be executed on a given condition.


Jumps to a different scene. The scene files are located on the script directory, and have the .choice extension.


Allows to configure the region of the screen that will be used for the text popups and menus.


Immediately shows the contents of the current text buffer on the text window; if passed the flag nowait, does not wait for a button press.


Allows to clear regions of the screen.

Planned commands

The tool accepts those commands, but, at the moment, they don't do anything.


Will allow to mark a place where the goto command can jump to.


Will jump to a given label from anywhere on the same scene.


Will configure the default sequence in which the scenes will be played.


Will jump to the next scene in the game.


Will play a full screen video.


choice4genesis-0.12.0-standalone.7z 171 MB
choice4genesis - v0.12.0 - transpiler.7z 6 MB
choice4genesis-0.11.2-standalone.7z 170 MB
choice4genesis - v0.11.2 - transpiler.7z 5 MB
choice4genesis-0.11.1-standalone.7z 170 MB
choice4genesis - v0.11.1 - transpiler.7z 5 MB
choice4genesis - v0.11.1 - simple demo rom.bin 256 kB
choice4genesis-0.11.0-standalone.7z 170 MB
choice4genesis - v0.11.0 - transpiler.7z 5 MB
choice4genesis-0.10.0-standalone.7z 107 MB
choice4genesis - v0.10.0 - transpiler.7z 4 MB
choice4genesis - v0.10.0 - simple demo rom.bin 256 kB
choice4genesis-0.9.1-standalone.7z 107 MB
choice4genesis - v0.9.1 - transpiler.7z 4 MB
choice4genesis-0.9.0-standalone.7z 107 MB
choice4genesis - v0.9.0 - transpiler.7z 4 MB
choice4genesis - v0.9.0 - simple demo rom.bin 256 kB
choice4genesis-0.8.0-standalone.7z 107 MB
choice4genesis - v0.8.0 - transpiler.7z 4 MB
choice4genesis - v0.8.0 - simple demo rom.bin 256 kB

Development log

View all posts


Log in with itch.io to leave a comment.


Will this work or is it possible to make this work for Game Gear games?

Regardless of the answer, it's nice to see a VM creation tool for the Genesis. Will try this soon. :)

(1 edit)

Thanks for the review! For now, it won't work for GG games, but it should be possible to adapt it, since it is mostly generating C code. Maybe in the future..

Until then, one possible alternative would be to use twee2sam, since the Game Gear can run Master System games.


Thanks for the response!

Yeah, I haven't actually worked out how to use twee2sam. Then again, a lot of basic coding eludes me since I overthink a lot of simple stuff. My biggest hurdle is trying to figure out where to put certain coding lines.

For example: where do I put the code for making a character move and where do I out the coding for how to interact? Does it matter? If so, how much?

Stuff like that. 


Wow! Just what I've been dreaming of. Can't wait to test it out.


Thanks! I hope it proves useful. 😀