Home » Blog » SaGa » Saga 2 Jukebox – Making Actual Progress

Saga 2 Jukebox – Making Actual Progress

I’ve been up to a few things the past week or so. First, here’s the fruit of my labor. I added background music to town 1, town 2, Ki’s Palace, and the first cave. Every piece of music in this clip is music I arranged and added into the game. I also improved a few of the tracks, like increasing the bass for The Forbidden Realm.

Chai Kingdom will not be the world 1 music, but you get the idea. I was mostly showing off how town music will work, as well as the music I’ve already made. I also made some improvements to the engine. Adding town music is very easy with Saga2Edit. I just need to replace the door scripts with other scripts that call the door script before changing the music. Although in some of the Saga 2 hacks, this will require expanding the amount of scripts available

Understanding How Instruments Work

To improve the engine, it is first necessary to understand how “instruments” work on the Gameboy. In short, there are no instruments. You modify the sound wave with different settings, then choose the notes you want to play. Here is a quick summary of how it works

Duty cycleAlters the sound wave to shift the tone. I think of it as the “material” of the instrument. Brass, strings, or hollow/wood
Volume envelopeShifts the volume of the note. Think of this as how a note is played. A quick strike, a long note that swells in volume, a flat note that is just held at a static volume, etc
vibratoAdds flavor to the sound wave. Like reverb or a bloom effect
Wave TableUsed for channel 3, it allows more complex sounds. I’m still understanding exactly how the engine handles these, although I managed to add some crazy sounding ones

For example, in my engine, the following “instruments” use these settings. I gave them plan English names to make setting instruments more intuitive.

InstrumentVibratoVolume EnvelopeDuty Cycle
XylophoneFlat – Does NothingStrikeHollow ($80)
ViolinQuiverSwellStrings ($40 or $c0)
French HornSwayBreathBrass ($00)

I also made an instrument tester, although I’ve updated a lot of these since recording the video (piano listed in it is more of a chime. piano should use the string duty cycle). I added melodies from my current music so I could hear them with notes that fit the instrument

With new and better organized settings, I was also able to get some music sounding much better that I had almost given up on. I still have a few tweaks I want to make, but I was able to grab the Mystic Quest Battle theme, which I REALLY want to have in the game

Next Steps

Currently, I’m trying to finalize all the instrument settings. They are mostly done, with the exception of “breath” which has audio pops in it for some reason. I’m also currently researching how to add more wave tables.

I also need to start testing more music in game. Sound effects mute audio in channels 1, 4, or both. I have most of my music optimized in the first video, but in the cave the menu interferes with the violin at the start of Fate in Haze. I just need to move it to channel 2.

Future Vision For the Engine

My real end goal is to create an engine that is easy to use for other rom hackers to use for gameboy music that comes with well over 100 tracks they can use. To make it as simple as I would like, I’m taking inspiration from Mystic Editor, which uses mml for the music.

My end result will look similar. The difference is I’ll have volume control like they have with octave, the ability to name instruments instead of just using the in game settings, and some other tweaks. I’ll have to decide how I want to label note lengths like dotted notes. I was thinking D for dotted and T for triplet at the end, but that might change. You’ll still have the ability to manually change instrument settings like vibrato and volume envelope if needed

Example:

— chai_kingdom_ch2:
TEMPO 65
INSTRUMENT: flute
VOLUME: 9
OCTAVE: 3
d4D, e8, g4, e4

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Leave the field below empty!