Adding New Song Definitions to songs.dta

When you add customs to a GH2 disc, you'll have to edit two of three files to make the song work in-game:

  1. songs.dta, which is the main song data file that defines audio, charts, quickplay guitarist/guitar/venue, channel mappings, and...well, song stuff
  2. Either campaign.dta or store.dta to get your song to appear either in the tiers or in the bonus tracks section

We're focusing on songs.dta today. (I'm assuming you've read that dtab tutorial and gotten a DTA out of your songs.dtb, or used ArkHelper to convert all the game's scripts automatically).

A word of notice: Use Onyx's converter

This is the manual way to add new songs to GH2, which I still think is useful to have written down. Now, though, there's a more automated way to do it which I strongly recommend, and that's using the Onyx Music Game Toolkit. Onyx will take in CH or RB format .mid and .chart and Vorbis audio, convert them, and add them to your ARK exactly how they should be. It's a far more convenient method than the one I'm about to show you.

You can get the Toolkit at Onyxite's GitHub. Tons of people in MiloHax already use it and love it, and they'll help you out if you still need it. Seriously, don't do work you don't have to if you're just a casual who wants to play some CH songs in GH2. Onyx is a far more foolproof method of doing so, and it's also a GUI, unlike our current methods of toying with ARKs and scripts.

If you're still keen on learning the manual way (for more control or for the ability to debug the songs.dta file, for example), read ahead.

Organizing your audio and chart in the game files

All songs in GH2 are referred to by a shortname, which is a shrunken version of the actual song name. Here's a few from the base game to give you an idea of the naming conventions:

  • badreputation: The full song name, no spaces
  • cantyouhearme: Major parts of the song title for very long ones, no apostrophes
  • dead: Full song name, no punctuation
  • hangar18: Full song name, numbers allowed
  • psychobilly: Major word in the title
  • tonightimgonna: Major parts of the song title, no apostrophes

There's not necessarily a length the shortname needs to be, but keep it short, and don't use anything except numbers and letters. Shortnames are also always lowercase. Go ahead and come up with one for your song. Say you're doing a custom chart (or an RB2 port!) for Megadeth's "Peace Sells". peacesells would make a fine shortname, so let's roll with that example.

Shortnames aren't just used in the songs.dta file, they're also the names of the files for that song on-disc. Purely technically speaking, they don't have to be, but I'd strongly recommend you don't confuse yourself and keep things the same name. All the files for our "Peace Sells" custom will be have peacesells in the name.

You only technically need two files to get the song in-game, the audio (in VGS format) and the chart (in MIDI format). A fully decked-out song has a maximum of six files, the chart, the audio, a singer facial animation file (the .voc file, which is just loaded from whatever the chart name is), and three practice mode audio files which contain pitch-shifted audio for the game's three practice speeds. A fully decked-out "Peace Sells" custom would therefore have six files:

  • peacesells.vgs
  • peacesells.mid
  • peacesells.voc
  • peacesells_p85.vgs
  • peacesells_p65.vgs
  • peacesells.p50.vgs

Again, you only technically need the first two. The game can work without separate practice mode audio, and the game will work just fine if the .voc doesn't exist. The singer's face simply won't animate (no great loss there).

Either way, in your ARK, go into the songs folder, make a new folder named your new shortname (so in our example, a peacesells folder in songs), and throw all of the files you've got in it. Use some of the folders already in songs as a reference to make sure you've got things named right.

Now that we've got stuff organized, we can write the definition for it.

Writing your song definition

Time to open up your songs.dta. It'll be in your config folder in the ARK. It's not strictly necessary just to get a song in-game, but if you're curious about the format of a Data Array script like this, I've written a primer on its format that you can read at your leisure. To make things easier though, I'm just gonna give you a skeleton song definition you can make changes to.

(newsong
         (name
            "New Custom GH2 Song")
         (artist
            "Artist")
         (caption performed_by)
         (song
            (name songs/newsong/newsong)
            (tracks
               ((guitar
                  (2 3))
               (bass 4)))
            (pans
               (-1.0 1.0 -1.0 1.0 0.0))
            (vols
               (0.0 0.0 0.0 0.0 0.0))
            (cores
               (-1 -1 1 1 -1))
            (midi_file songs/newsong/newsong.mid))
         (anim_tempo kTempoMedium)
         (preview 2000 5000)
         (quickplay
            (character_outfit metal1)
            (guitar lespaul)
            (venue big)))

Some notes about this definition:

  1. Obviously, change all the instances of newsong to whatever your shortname is.
  2. (caption performed_by) controls whether the song is an "as made famous by" or an "as performed by". You can set this to any random string name, or get rid of the (caption) array entirely to make it the former. Just delete that entire line.
  3. This is mapped to a five-channel VGS file, stereo band, stereo guitar, mono bass. If you have a VGS with fewer channels, the game will crash, so make sure your VGS file has five channels.
  4. The (preview 2000 5000) array, I've set intentionally very short and early in the song to make sure that, even without changing it, your game doesn't crash. This is in milliseconds if you'd like to set a custom preview time.
  5. The entire (quickplay) array sets which guitarist, guitar, and venue is used in quickplay. If you're modding Guitar Hero II Deluxe, quickplay flow lets the player set these instead, so don't worry about it.
  6. Though the game supports separate practice mode audio of course, I haven't defined it in this skeleton definition since I figure most people won't be using it. If you want it, go ahead and read my songs.dta format reference for all the specifics.

Contrary to what I've long thought, your songs.dta file doesn't need to be alphabetical by shortname or separated out into sections—you can simply paste this in at the very top of the file and it'll work. Then all you need to do is edit one of the other two files to add your newly-defined song to the setlist.