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

font

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.

background

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.

choice

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

music

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

sound

Plays a digitized sound.

stop

Stops the music and/or sound.

image

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.

wait

Waits for a few seconds.

create

Creates a global variable.

temp

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

set

Changes the current value of an existing variable.

if/elseif/else

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

goto_scene

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

window

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

flush

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.

clear

Allows to clear regions of the screen.

Planned commands

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

label

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

goto

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

scene_list

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

finish

Will jump to the next scene in the game.

video

Will play a full screen video.

Download

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

Development log

View all posts

Comments

Log in with itch.io to leave a comment.

(+1)

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.

(+1)

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. 

(+1)

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

(+1)

Thanks! I hope it proves useful. 😀