Musik in Videospielen »hacken« und neu einfügen

Musik aus Games hacken

Habt ihr schon mal versucht, die Musik aus verschiedenen Videospielen zu hacken? Langweilige oder nervtötende Musik ganz einfach gegen krasse Sounds ersetzen. Oder aber einfach ein paar Töne verändern; auch das ist möglich! Praktisch ist es vor allem dann, wenn Musik für eigene Games verwendet wird. Was ihr dazu braucht und wie das funktioniert, erfahrt ihr hier…

Alle hier aufgeführten Schritte zeigen lediglich auf, wie das Ganze funktioniert. Aufgefordert wird jedoch niemand, da das Hacken von Musikstücken, auch in Videospielen, verboten ist. Dieses Tutorial wurde von Justin N. geschrieben.

Ich möchte manchen von euch nicht die Stimmung ausreiben, aber Music Hacking ist wirklich nichts für Anfänger. Dennoch probier ich hier möglichst alles so zu erklären, dass auch ein totaler Noob es versteht. Das Tutorial benötigt also quasi keine Vorkenntnisse im Thema Music Hacking. Vorraussetzung ist, dass man weiß wie man mit dem Hex-Editor umgeht. Englisch Kenntnisse solltest ihr auch haben! Ich werde alles notwendige erklären um einen Song einzubauen, zu loopen und zum optimalen Klang im Game zu bringen.
Noch zur Info: Es gibt verschiedene Music Hacking Methoden. In diesem Tutorial erkläre ich wie ich es immer mache und beziehe mich dabei auf das Hacken von Pokémon Spielen bzw. der Musik. So, genug geredet!

Für das Hacken der Tracks benötigt ihr Programme wie Sappy 1.0/2005 oder Sappy 1.2/2006, mid2agb, SynthFont sowie einen HxD Hexeditor. Links werden aus urheberrechtlichen Gründen nicht herausgegeben – benutzt daher Google, um die Programme herunter zu laden.

Grundwissen, Infos und Begriffe
Für den der es noch nicht weiß: Man kann nur MIDI Dateien einbauen! Als zweites möchte ich darauf hinweisen, dass ihr nicht jeden Song einfach so einbauen kann. Dazu ist entsprechende Vorarbeit nötig! Es gibt nämlich technische Grenzen bei GBA Pokémon Spielen die nicht überschritten werden können. Die Grenzen sind folgende (diese gelten nur für Pokémon GBA Spiele; bei anderen GBA Spielen können die Grenzen anders sein): Es dürfen maximal 10 Tracks in eurem MIDI enthalten sein. Falls ihr mehr habt werden die Tracks über 10 Ingame ignoriert.

Vielleicht habt ihr im VBA schonmal gesehen (wenn ihr ein GBA Spiel emuliert), dass wenn ihr auf »Options, Sound« klickt, dort einige Häkchen zu sehen sind – wie folgt: Channel 1, Channel 2, Channel 3, Channel 4, DirectSound A und DirectSound B. Info: Zu DirectSound sagt man auch kurz »D/S« Falls ihr gerade zum Beispiel gerade Pokémon spielt, macht einfach mal die Häkchen bei D/S A und B weg. Wer den GB/GBC ein bisschen kennt wird sofort merken: Da werden ja genau so hässliche Piepstöne wie beim GB/GBC abgespielt.
Folglich kann man daraus schließen: Der GB/GBC besitzt die ersten 4 Kanäle auch, jedoch nicht die D/S Kanäle. Diese wurden nämlich erst beim GBA hinzugefügt.

Nochmals kurz eine weitere Info über die Kanäle und was sie für Töne spielen: Das Square1 und 2 sind so genannten »Square Wave« Töne, die jeweils ein ganz bisschen anders klingen. Vielleicht denkt jetzt wer: »Wozu gibt es denn einen Kanal der einen Rausch-Ton macht?« Eigentlich eine einfach zu beantwortende Frage: Dieser Kanal wird manchmal als Ergänzung für die Schlagzeug Spur benutzt. Falls ihr jetzt immer noch ein Fragezeichen in eurem Kopf ist, wartet erstmal ab. Ich werde später noch sagen wie man Sappy bedient und dann werde ich nochmals sagen wie der Rausch-Ton benutzt wird anhand eines schon im Spiel vorhandenen Songs.
So ich komm jetzt nochmals zurück zu den technischen Grenzen – in Zukunft werde ich jetzt nur noch über das Direct Sound Interface reden, da der A nur für rechts ist und B für links und das mag uns später beim Hacken nicht weiter interessieren:

  • Die Kanäle 1-4 können jeweils nur einen Ton gleichzeitig spielen
  • Das D/S Interface kann in Pokémon Spielen maximal 5 Töne gleichzeitig abspielen, da das Direct Sound Interface in Pokémon Games nur 5 Kanäle hat (die Drums werden auch über den D/S Interface wiedergegeben). Theoretisch könnte man die Anzahl der Direct Sound Kanäle erhöhen, was aber dazu führen könnte das das Spiel laggt. Wer jetzt ein bisschen gerechnet hat wird merken, dass man maximal 9 Töne gleichzeitig spielen kann.

So, zunächst sollte ihr euch einmal das Programm Synth Font starten. Öffnet zunächst euer MIDI und schaltet auf die Ansicht “MIDI Guru” um. Bei Plug & Play habt ihr nun eure Tracks (Spuren) vom MIDI im Überblick. Beim Notensatz könnt ihr, wie der Name schon sagt, die einzelnen Noten vom MIDI bearbeiten, löschen oder auch neue hinzufügen.
Ich möchte mal ein ganz kurzes Besipielbild zeigen an dem man sehen kann das man diesen, na ja nicht wirklichen Song, nicht einbauen kann, da er einfach zu viele Töne auf einmal spielt:


Wer jetzt anfängt zu heulen und meint er kann sein MIDI nicht einbauen weil es die technischen Grenzen überschreitet, sollte dies nicht gleich tun, weil noch Rettung in Sicht ist. Es gibt ja die Möglichkeit mit SynthFont MIDIs zu bearbeiten. Ich werde jetzt nicht genau erklären wie man mit Synth Font umgeht, weil das jetzt viel zu lange brauchen wird. Ich empfehle euch bevor ihr euer MIDI präparieren wollt, erstmal zu versuchen mit dem Programm umzugehen. Ich persönlich habe es auch irgendwie hingekriegt. Natürlich bin ich immer für Fragen offen.
Wenn ihr das Gefühl habt »Ja ich weiß wie man Noten bearbeitet oder löscht oder hinzufügt« ist, seit ihr schon weit gekommen. Nun liegt es an euch euer MIDI zu bearbeiten sodass es nie mehr als 8/9 Töne gleichzeitig spielt. 8 meine ich, weil es ja nicht üblich ist ein normales Instrument später als Rausch im Spiel klingen zu lassen. Ihr müsst euch beim Bearbeiten auch klarmachen dass man bei den Kanälen 1-4 immer nur einen Ton pro Kanal spielen könnt also auch in einem Track, den ihr gerade dazu benutzen wollt, nur eine Note. Bei dem D/S Interface ist es egal ob ihr 5 Noten gleichzeitig in einem Track spielt oder auf mehrere verteilt, jedoch dürfen am Ende nicht mehr als 5 Noten beim D/S Interface benutzt werden. Falls ihr eine Kampfmusik einfügen wollt, darf man nur 4 Noten beim D/S Interface benutzten weil die letzten Note/Ton für Soundeffekte während dem Kampf reserviert ist.

Nun habt ihr euch vielleicht vorhin schon die ganze Zeit gefragt: »Wie mach ich das denn, das später eine Note im Kanal 1/2/3/4/D/S-Interface abgespielt wird? Die Antwort liegt in den Instrumenten. Ihr müsst euch in euerem MIDI Instrumente für die Kanäle 1-4 reservieren, egal welche. Manchmal müsst ihr auch mehr als 4 Instrumente reservieren, denn es gibt ja verschiedene Arten wie zum Beispiel ein Ton im Kanal 1 abgespielt wird und das ist eben auch vom Instrument abhängig.
Bei einem 4-Bit Ton (Kanal 3) gibt es ja verschiedene Arten, was für Samples dort drin stehen. Wenn ihr im Song mehrmals Kanal 3 benutzten wollt (gleichzeitig geht nicht), jedoch mit verschiedenen Wave-Formen, müsst ihr euch für jede verschiedene Wave-Form ein Instrument reservieren.
Notiert euch dabei am besten immer welches Instrument ihr für die einzelnen Kanäle benutzen wollt, also zum Beispiel:

  • 80 – Lead 1 (Square) => Kanal 1 (Square1)
  • 81 – Lead 2 (Sawtooth) => Kanal 2 (Square2)
  • 84 – Lead 5 (charang) => Kanal 3 (Wave)
  • 127 – Gunshot => Kanal 4 (Noise)

Das bedeutet im Klartext:

  • Das Instrument “80 – Lead 1″ ist in Pokémon Spielen ein Standart für Kanal 1
  • Das Instrument “81 – Lead 2″ ist in Pokémon Spielen ein Standart für Kanal 2
  • Das Instrument “84 – Lead 5″ ist in Pokémon Spielen ein Standart für Kanal 3 ebenso wie “92 – Pad 5 (bowed)”
  • Das Instrument “127 – Gunshot” ist in Pokémon Spielen ein Standart für Kanal 4 ebenso wie “126 – Applause”

Selbstverständlich könnt ihr auch andere Instrumente benutzen, aber so ist es eben üblicher. Falls ihr eines eurer Instrumente später im D/S Interface wiedergeben lassen wollt, also als ganz normalen Ton, könnt ihr euer Instrument vorerst so lassen, allerdings sollte es nicht das selbe Instrument sein wie bei euren Channel 1-4 Kanälen.

Die Instrumente von eurem MIDI könnt ihr in SynthFont ändern indem ihr bei dem Register »Plug & Play« einen Track auswählt und dann auf MIDI Preset klickt.
In vielen Songs kommt es aber auch vor, dass die Instrumente sich in einem Track an einer bestimmten Stelle ändern. Diese Instrumente kann man ändern indem man einen Track auswählt und dann auf den »Select« Button drückt, der in der Spalte »MIDI Preset« zu sehen ist. Da hat man dann eine Auswahl von allen Instrumente die der Track benutzt (chronologisch geordnet).

Gut falls ihr das jetzt alles nicht verstanden habt lest es euch mehrmals genau durch und falls ihr es dann immer noch nicht versteht, fragt mich einfach uns sagt was ihr nicht versteht. Und falls ihr es jetzt alles verstanden habt seit ihr ein gewaltiges Stück weiter mit eurem Wissen.

Sappy für ein deutsches ROM kompatibel machen
Nun machen wir mal ganz wo anders weiter, aber das ist nicht der Grund, das alles was ihr oben gelernt habt wieder zu vergessen.
Nun ein wichtiges Kern-Tool das wir zum Music Hacking brauchen ist Sappy. Windows 7 Nutzer müssen sich leider die ältere und bug-freie Version von Sappy holen, da die neuere auf Win7 crasht. Falls ihr eine englische ROM hacken wollt, könnt ihr diesen Schritt überspringen. Falls nicht-englisches oder ein Deutsches hacken wollt müsst ihr folgendes tun:

  • Startet Sappy und und öffnet euer ROM
  • Nun solltet ihr die Fehlermeldung bekommen, dass das Spiel nicht bekannt ist
  • Ihr werdet gefragt ob Sappy nach der Songtable suchen soll. Beantwortet dies mit »Ja«
  • Nach einem Moment bekommt ihr die Meldung das die Songtable an 0xblablabla gefunden wurde.
  • Schließt nun Sappy und öffnet die Datei »sappy.xml« mit dem Editor.
  • Nun scrollt nach unten ihr solltet folgendes sehen:

Quellcode
<rom code=”XXXX” name=”POKEMON XXXX” songtable=”0xXXXXXX”>
<playlist name=”Main”/>
</rom>

Nun je nach dem was ihr für ein Spiel habt steht dort ein anderer ROM Code. Ändert nun die Zeile, in der  »<playlist name=”Main”/>« steht, in »<playlist name=”Main” steal=”XXXX”/>« um; Bei XXXX müsst ihr den selben ROM Code von eurem ROM eingeben nur mit einem E statt einem D. Dabei wird dann die Playlist von der Englischen Version geklaut. Speichert nun eure XML Datei ab und startet Sappy. Falls ihr nun einer Fehlermeldung bekommt »Error in the XML File«, habt ihr etwas falsch gemacht. Nun, falls alles geklappt hat ist euer Sappy nun mit dem deutschen ROM kompatibel und ihr könnt euch den Song anhören.

Jetzt habe ich oben gesagt, ich würde zeigen, wie der Channel 4 oder auch »Noise Channel« benutzt wird: Falls ihr eine Feuerrot ROM habt, wählt mal rechts oben in der Playlist den Song »Route Theme 3« aus. Klickt nun auf den obersten von diesen Grünen Pfeilen, um die erweiterte Ansicht zu aktivieren. In Rosa wird die aktuelle Instrument-Nummer angezeigt und in Rot die Dauer bis zum nächsten Event (das mit den Events mag uns aber nicht weiter interessieren…)
Wenn ihr den Song wiedergebt, dann seht ihr sofort, dass beim letzten Track das Instrument mit der Nummer 127 wiedergegeben wird. Was für ein Instrument war das doch gleich… genau es war “Gunshot” und wird mit dem Channel 4 wiedergegeben. Das sieht man daran, dass ganz rechts vom Track in Grün zu sehen ist »Noise«. Wichtig: Bei den Tracks wo gerade kein Ton gespielt wird, steht auch immer in der Regel etwas in Grün, das aber nicht wirklich stimmt. Ihr dürft also immer nur auf die Anzeige schauen, wenn auch gerade ein Ton abgespielt wird. Wie auch oben schon gesagt, wird Gunshot hier standardmäßig als »Noise« benutzt.
Nun könnt ihr mal bei dem Song »Route Theme 3« alle Tracks durch das Häkchen deaktivieren, außer den Letzten. Macht mal den Sound ganz laut und ihr werdet hören, wie geschickt ein »hässliches« Rauschen benutzt wird.

Voicegroups:
So jetzt fragen sich wahrscheinlich einige »Was ist eine Voicegroup?«. Zu Anfang kann man sagen: Eine Voicegroup ist eine Gruppe von Instrumenten, die benötigt werden, um Instrumente korrekt wiederzugeben. Eine weitere Eigenschaft von Voicegroups ist, dass in ihr steht, welchen Kanal ein bestimmtes Instrument benutzt. Eine Voicegroup hat eine Größe von 1536/0×600 Bytes und besteht aus 128 so genannten »Instrument Definitions«. Für jede benutzte Instrumenten-Nummer (also zum Beispiel bei Acoustic Grand: 0 oder bei String Ensemble 1: 48) gibt es eine Instrument Definition. Diese Instrument Definition sagt erstens aus, welchen Kanal eine Instumenten-Nummer benutzten soll, und zweitens wo sich die entsprechenden Samples zu den Instrumenten befinden.

Aber was genau ist denn ein »Sample«? Nun, ein Sample ist bei den Instrumenten wie eine Art Sounddatei, wo der Ton abgespeichert ist, der gespielt wird wenn das Instrument benutzt wird. Vielleicht wird sich auch einer fragen, warum ich denn jetzt auf einmal nur noch den Begriff »Instrumentennummer« benutze. Der GBA allein weiß nicht wenn ihr das Instrument Acoustic Grand – 0 benutzt, dass es es ein Klavier ist. Der GBA weiß nur die Nummer. Und deshalb gibt es die Instrument Definition die dem GBA zeigt, dass es ein bestimmtes Instrument ist und das es so wie das Sample, das sich an dem Offset 0xblablabla befindet, klingt. Ich könnte zum Beispiel auch in einer Instrument Definition für das Instrument 0 – Acoustic Grand Werte für eine Instrument Definition einfügen, die zu einem Sample von dem Instrument Trumpet zeigen. Wenn ich dann das Instrument Acoustic Grand in einem einzubauenden Song benutze, aber in der dazugehörigen Instrument Definition den Wert für Trumpet Angaben statt dem Klavier eine Trompete benutzt wird, wird die Instrumentnummer für das Klavier benutzt. Welche Instrument Definition benutzt wird bei einer bestimmten Instrumentennummer kann man so rausfinden (öffnet dazu den Windows Taschenrechner in der Wissenschaftlicher Ansicht und wechselt in den HEX-Mode:
Rechnet euere gewünschte Instrumenten Nummer in HEX um.
Multipliziert eure HEX Instrumentennummer mit 0xC und danach + dem Offset von der Voicegroup.
=>0xHex_Instrument_Nummer * 0xC + 0xVoicegroup_Offset.
0xC/12 meine ich, da jede Instrument Definition 0xC/12 Bytes lang ist.

Falls ihr eine Voicegroup in einer externen Datei habt und nicht in der ROM, rechnet ihr einfach 0xC * 0xHex_Instrument_Nummer. Die Aufgabe ist es nun euch eine Voicegroup zusammen zu basteln für euren Song, damit die entsprechenden Instrumente auch gespielt werde können. Ihr könnt auch selbstverständlich eine Voicegroup für mehrere Songs benutzen, jedoch müssen wir dann darauf achten, dass für jeden Song die passenden Instrumente da sind.
Ich empfehle auch eine Voicegroup in eine externen Datei zu packen und später die ganze Voicegroup einzufügen, weil es einfach übersichtlicher bleibt. Hier habe ich zunächst Instrument Definitions, die Kanäle 1, 2, 4 benutzen. 3 Ist nicht darunter, weil diese Werte nicht allgemein für jedes GBA Spiel gelten, da sie auch wiederum Pointer enthalten. Kanal 1 /Square 1, wird meistens auf dem Instrument 80 – Lead 1 (Square) verwendet, jedoch müsst ihr diesen Wert bei dem Instrument einfügen, den ihr euch am Anfang für den entsprechenden Kanal rausgesucht habt.
Kein Ausklingen des Sounds: Quellcode | 1 | 093C00000200000000000700
Langsames Ausklingen: Quellcode | 1 | 093C00000200000000060100
Schnelles Ausklingen: Quellcode | 1 | 093C00000200000000040100

Kanal 2/Square 2 (wird meistens auf dem Instrument 81 – Lead 2 (Sawtooth) verwendet, jedoch müsst ihr ebenfalls den Wert bei dem Instrument einfügen, den ihr euch am Anfang für Kanal 2 ausgesucht habt:
Kein Ausklingen: Quellcode | 1 | 0A3C00000200000000000700
Langsames Ausklingen: Quellcode | 1 | 0A3C00000200000000060100
Schnelles Ausklingen: Quellcode | 1 | 0A3C00000200000000040100

Zum Schluss möchte ich euch noch ein kleines Beispiel zeigen. Die Kampfmusik aus Pokémon Rot, Blau und Gelb:

Pokémon (Red, Blue, Yellow) – Trainer Battle – 8 Bit Remix


wallpaper-1019588
UNIQLO – Neue Kollektion zu Final Fantasy vorgestellt
wallpaper-1019588
Pokémon GO: Neue Funktionen vorgestellt
wallpaper-1019588
Dragon Ball Xenoverse 2 – Neue Charaktere für den „Future Saga“-DLC angekündigt
wallpaper-1019588
One Piece Odyssey erscheint für die Nintendo Switch