Sonic and Sega Retro Message Board: Thunder Force II Music Hacking Tutorial In Progress - Sonic and Sega Retro Message Board

Jump to content

Hey there, Guest!  (Log In · Register) Help
Page 1 of 1
    Locked
    Locked Forum

Thunder Force II Music Hacking Tutorial In Progress Hacking Music in Game

#1 User is offline Dracula 

Posted 28 February 2016 - 06:56 PM

  • Posts: 599
  • Joined: 03-March 03
  • Gender:Male
  • Location:I'm watching you!
  • Project:Thunder Force II Music Hacking and Other Stuff
  • Wiki edits:12
Thunder Force II Music Hacking Tutorial
2/27/2016

I started this since yesterday while I was learning how to hack NES music and somehow, I learned how to do it in Sega Genesis games as well. Thanks with a little help from Exodus and BizHawk, I was able to test something out in Hex while the game is running. I believe that it's possible to hack music in Thunder Force 2,3 & 4.

The only thing to complete this is the main header and the Effect List: I might not understand how music works but some of you might understand it.

--------------------------------------------------------------------
Main Header?

00: ?
01: Music Volume
02: Main tempo modifier
03: Main pitch modifier
04: ?
05: ? same as 04?
06: ?
07: ?
08: ?
09: ?
0A: ?
0B: ?
0C: ?
0D: ?
0E: ?
0F: ?
--------------------------------------------------------------------
Volume Controll for each channel:

10: Volume for channel 1
11: Volume for channel 2
12: Volume for channel 3
13: Volume for channel 4
14: Volume for channel 5
15: Volume for channel 6
16: Volume for PSG 1
17: Volume for PSG 2
18: Volume for PSG 3

---------------------------------------------------------------------
Channel Pointer:

19: Pointer to channel 1
1B: Pointer to channel 2
1D: Pointer to channel 3
1F: Pointer to channel 4
21: Pointer to channel 5
23: Pointer to channel 6
25: Pointer to PSG 1
27: Pointer to PSG 2

---------------------------------------------------------------------
Value Definitions

$80-$DF Notes
$E0-$FF Coordination flags

---------------------------------------------------------------------
Note Value Equivalents: Notes is based off of OpenMPT and the values
is based off the game.

Notes Value

C-1: 80
C#1: 81
D-1: 82
D#1: 83
E-1: 84
F-1: 85
F#1: 86
G-1: 87
G#1: 88
A-1: 89
A#1: 8A
B-1: 8B

C-2: 8C
C#2: 8D
D-2: 8E
D#2: 8F
E-2: 90
F-2: 91
F#2: 92
G-2: 93
G#2: 94
A-2: 95
A#2: 96
B-2: 97

C-3: 98
C#3: 99
D-3: 9A
D#3: 9B
E-3: 9C
F-3: 9D
F#3: 9E
G-3: 9F
G#3: A0
A-3: A1
A#3: A2
B-3: A3

C-4: A4
C#4: A5
D-4: A6
D#4: A7
E-4: A8
F-4: A9
F#4: AA
G-4: AB
G#4: AC
A-4: AD
A#4: AE
B-4: AF

C-5: B0
C#5: B1
D-5: B2
D#5: B3
E-5: B4
F-5: B5
F#5: B6
G-5: B7
G#5: B8
A-5: B9
A#5: BA
B-5: BB

C-6: BC
C#6: BD
D-6: BE
D#6: BF
E-6: C0
F-6: C1
F#6: C2
G-6: C3
G#6: C4
A-6: C5
A#6: C6
B-6: C7

C-7: C8
C#7: C9
D-7: CA
D#7: CB
E-7: CC
F-7: CD
F#7: CE
G-7: CF
G#7: D0
A-7: D1
A#7: D2
B-7: D3

C-8: D4
C#8: D5
D-8: D6
D#8: D7
E-8: D8
F-8: D9
F#8: DA
G-8: DB
G#8: DC
A-8: DD
A#8: DE
B-8: DF
---------------------------------------------------------------------

Effect List:

E0: Instrument number
Parameters: E0 xx

E8: Pitch ?
Parameters: E8 xx

E9: ?
Parameters: E9 xx

EC: Loop; EC 00 is infinity loop.
Parameters: EC xx

ED: Fade in
Parameters: ED xx

The music list is here in this topic: http://forums.sonicr...95
This post has been edited by Dracula: 28 February 2016 - 07:08 PM

#2 User is offline vladikcomper 

Posted 07 April 2016 - 06:36 PM

  • Posts: 179
  • Joined: 13-June 09
  • Gender:Male
  • Location:Russia
  • Project:Sonic Warped
  • Wiki edits:1
Wow, I didn't know someone else is actually interested in T.S. Sound Driver! I just came across this topic by chance.

I've been reverse-engineering T.S. Sound Driver v.1.31 used in Thunder Force IV for years now. My goal was to achieve highly accurate music porting from Thunder Force games to my own sound driver. Currently, I have most of the driver's format and routines completely figured out.
My research is already complete enough to make it possible to convert music to other formats and program it from scratch. Moreover, a while ago (about half of a year now) I managed to get conversion quality so perfect you barely can tell the converted songs from their originals. This covers most of Technosoft games. I also attempted to write music from scratch for TF4, but it was more of a proof-of-concept and I didn't work much in that department.

From I can tell, in terms of BGM format, T.S. Sound Driver didn't change much from TF2 to TF4, except for PSG handling (early T.S. games, including TF2 have some weird extra flags in PSG patterns). But generally speaking, format is actually the same, so while I've been researching TF4 driver exclusively, the knowledge learned also worked perfectly for TF3 and TF2 (almost).
I can expand the information you provided here with my own research, for instance:

------------------
BGM Header format
------------------

	00h	b	Number of channels (always must be 09h = 6 FM + 3 PSG)
	01h	b	Volume (99 = max, 0 = min)
	02h	b	Tempo modifier
	03h	b	Pitch modifier
	04h	w	Volume table pointer
	06h	w	Channel tracks table pointer
	08h	w	Patterns table pointer
	0Ah	w	FM Voices bank pointer
	0Ch	w	PSG Voices bank pointer
	0Eh	w	End of file offset

	Channel tracks table stores offset for all 9 sound channels used by driver in the following order:
		FM1, FM2, FM3, FM4, FM5, FM6, PSG1, PSG2, PSG3
	Channel tracks cannot be skipped -- if the channel is unused, corresponding track should start with byte 0FFh (end of track marker).

	Each FM/PSG track refers to patterns from patterns table by table entry number. Both tracks and patterns can execute coordinate flags.


I was planning to release all my research eventually as soon as I get all the information organized and explained properly. But seeing it can actually help you with your tutorial and save a lot of your time, I don't mind sharing it with you. I hope you'll make a really good use of it:
https://dl.dropboxus...%20Research.txt
To be fair, it's a little messy, it needs some clean-up and some important information is missing or isn't explained properly. You see, I just used this file for general notes and documenting. I also have conversion tool for my custom sound driver that I've been working on for long. That tool has the rest of the stuff documented or otherwise cleared up in its code. I'm afraid I cannot release the tool; I wrote it for my own use for own own sound driver format. But I see you've figured a lot of stuff on your own already, excellent job! I believe you'll pick up the rest you need easily.

Good luck with your tutorial!~

#3 User is offline Shadow Hog 

Posted 08 April 2016 - 01:08 AM

  • "I'm a superdog!"
  • Posts: 4335
  • Joined: 05-November 06
  • Gender:Male
  • Location:Earth
  • Wiki edits:10
I assume Dragon's Fury uses a similar driver, then?

#4 User is offline vladikcomper 

Posted 08 April 2016 - 09:50 AM

  • Posts: 179
  • Joined: 13-June 09
  • Gender:Male
  • Location:Russia
  • Project:Sonic Warped
  • Wiki edits:1

Quote

I assume Dragon's Fury uses a similar driver, then?

Yes, Dragon's Fury driver is almost identical to both Thunder Force III and IV. The game also features remixes from other T.S. games in its hidden BGM slots (this includes Elemental Master, Herzog Zwei, TF2 and TF3).

#5 User is offline Dracula 

Posted 09 April 2016 - 01:16 PM

  • Posts: 599
  • Joined: 03-March 03
  • Gender:Male
  • Location:I'm watching you!
  • Project:Thunder Force II Music Hacking and Other Stuff
  • Wiki edits:12

View Postvladikcomper, on 07 April 2016 - 06:36 PM, said:

Wow, I didn't know someone else is actually interested in T.S. Sound Driver! I just came across this topic by chance.

I've been reverse-engineering T.S. Sound Driver v.1.31 used in Thunder Force IV for years now. My goal was to achieve highly accurate music porting from Thunder Force games to my own sound driver. Currently, I have most of the driver's format and routines completely figured out.
My research is already complete enough to make it possible to convert music to other formats and program it from scratch. Moreover, a while ago (about half of a year now) I managed to get conversion quality so perfect you barely can tell the converted songs from their originals. This covers most of Technosoft games. I also attempted to write music from scratch for TF4, but it was more of a proof-of-concept and I didn't work much in that department.

From I can tell, in terms of BGM format, T.S. Sound Driver didn't change much from TF2 to TF4, except for PSG handling (early T.S. games, including TF2 have some weird extra flags in PSG patterns). But generally speaking, format is actually the same, so while I've been researching TF4 driver exclusively, the knowledge learned also worked perfectly for TF3 and TF2 (almost).
I can expand the information you provided here with my own research, for instance:

------------------
BGM Header format
------------------

	00h	b	Number of channels (always must be 09h = 6 FM + 3 PSG)
	01h	b	Volume (99 = max, 0 = min)
	02h	b	Tempo modifier
	03h	b	Pitch modifier
	04h	w	Volume table pointer
	06h	w	Channel tracks table pointer
	08h	w	Patterns table pointer
	0Ah	w	FM Voices bank pointer
	0Ch	w	PSG Voices bank pointer
	0Eh	w	End of file offset

	Channel tracks table stores offset for all 9 sound channels used by driver in the following order:
		FM1, FM2, FM3, FM4, FM5, FM6, PSG1, PSG2, PSG3
	Channel tracks cannot be skipped -- if the channel is unused, corresponding track should start with byte 0FFh (end of track marker).

	Each FM/PSG track refers to patterns from patterns table by table entry number. Both tracks and patterns can execute coordinate flags.


I was planning to release all my research eventually as soon as I get all the information organized and explained properly. But seeing it can actually help you with your tutorial and save a lot of your time, I don't mind sharing it with you. I hope you'll make a really good use of it:
https://dl.dropboxus...%20Research.txt
To be fair, it's a little messy, it needs some clean-up and some important information is missing or isn't explained properly. You see, I just used this file for general notes and documenting. I also have conversion tool for my custom sound driver that I've been working on for long. That tool has the rest of the stuff documented or otherwise cleared up in its code. I'm afraid I cannot release the tool; I wrote it for my own use for own own sound driver format. But I see you've figured a lot of stuff on your own already, excellent job! I believe you'll pick up the rest you need easily.

Good luck with your tutorial!~


Wow! Thank you very much! I'll give you credit for it as well. You can also port a song from another T.S. sound driver without have to change a lot of stuff. I ported Thunder Force 4 stage 6 boss to Thunder Force 2 and it played very well.

Page 1 of 1
    Locked
    Locked Forum

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users