THUNDER FORCE2/Tutorials: Difference between revisions

From Data Crystal
Jump to navigation Jump to search
No edit summary
 
(11 intermediate revisions by 3 users not shown)
Line 1: Line 1:
==Music Hacking==
{{Tutorials}}
{{todo|Merge contents with [[Thunder Force II (Genesis)/Tutorials]]}}
 
==Music Hacking for Thunder Force 2 or any Techno Soft Games for Sega Genesis==
===BGM Header format===
===BGM Header format===


Line 54: Line 57:
Channel tracks cannot be skipped -- if the channel is unused, corresponding track should start with byte 0FFh (end of track marker).
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.
Each FMtrack refers to patterns from patterns table by table entry number. Both tracks and patterns can execute coordinate flags.


D2: Volume for channel 1
D2: Volume for channel 1
Line 76: Line 79:
===Channel Tracks Table===
===Channel Tracks Table===
<pre>
<pre>
19: Pointer to channel 1
19: Pointer to channel 0
1B: Pointer to channel 2
1B: Pointer to channel 1
1D: Pointer to channel 3
1D: Pointer to channel 2
1F: Pointer to channel 4
1F: Pointer to channel 3
21: Pointer to channel 5
21: Pointer to channel 4
23: Pointer to channel 6
23: Pointer to channel 5
25: Pointer to PSG 1
25: Pointer to PSG 1
27: Pointer to PSG 2
27: Pointer to PSG 2
I just learned on how to repeat a pattern. The set up looks like this:
Note: this part is from asm from scratch.
Channel_0:
          db repeat_pattern, 000h
If the number sets to $00, then it will repeat pattern_0. If the number sets to $10, then it will repeat pattern_10 like this:
Channel_0:
          db repeat_pattern, 010h
Still in progress right now.


Sharp X68000 Version
Sharp X68000 Version
The Channel Track Pointer starts at $01D2
The Channel Track Pointer starts at $01D2
E2: Might be the setup or something. It's different than the Genesis version.


$01D2: w ?
$01D2: w ?
Line 97: Line 117:
$E0-$FF Coordination flags - Same As the Sharp X68000 Version but it might be different.
$E0-$FF Coordination flags - Same As the Sharp X68000 Version but it might be different.
</pre>
</pre>
===Note Editing===
<pre>
This is how the note is set up in the game:
nC0, x, y, z
nC0 or whatever
I'm not sure what x & y is but z is the Volume.
</pre>


===Music Notes Value===
===Music Notes Value===
<pre>
<pre>
Same as the Sharp X68000 Version.
Same as the Sharp X68000 Version.
Example: "nC0 - C-0" and "nC0s - C#0".


C-1: 80
nC0 080h
C#1: 81
nC0s 081h
D-1: 82
nD0 082h
D#1: 83
nD0s 083h
E-1: 84
nE0 084h
F-1: 85
nF0 085h
F#1: 86
nF0s 086h
G-1: 87
nG0 087h
G#1: 88
nG0s 088h
A-1: 89
nA0 089h
A#1: 8A
nA0s 08ah
B-1: 8B
nB0 08bh


C-2: 8C
nC1 08ch
C#2: 8D
nC1s 08dh
D-2: 8E
nD1 08eh
D#2: 8F
nD1s 08fh
E-2: 90
nE1 090h
F-2: 91
nF1 091h
F#2: 92
nF1s 092h
G-2: 93
nG1 093h
G#2: 94
nG1s 094h
A-2: 95
nA1 095h
A#2: 96
nA1s 096h
B-2: 97
nB1 097h


C-3: 98
nC2 098h
C#3: 99
nC2s 099h
D-3: 9A
nD2 09ah
D#3: 9B
nD2s 09bh
E-3: 9C
nE2 09ch
F-3: 9D
nF2 09dh
F#3: 9E
nF2s 09eh
G-3: 9F
nG2 09fh
G#3: A0
nG2s 0a0h
A-3: A1
nA2 0a1h
A#3: A2
nA2s 0a2h
B-3: A3
nB2 0a3h


C-4: A4
nC3 0a4h
C#4: A5
nC3s 0a5h
D-4: A6
nD3 0a6h
D#4: A7
nD3s 0a7h
E-4: A8
nE3 0a8h
F-4: A9
nF3 0a9h
F#4: AA
nF3s 0aah
G-4: AB
nG3 0abh
G#4: AC
nG3s 0ach
A-4: AD
nA3 0adh
A#4: AE
nA3s 0aeh
B-4: AF
nB3 0afh


C-5: B0
nC4 0b0h
C#5: B1
nC4s 0b1h
D-5: B2
nD4 0b2h
D#5: B3
nD4s 0b3h
E-5: B4
nE4 0b4h
F-5: B5
nF4 0b5h
F#5: B6
nF4s 0b6h
G-5: B7
nG4 0b7h
G#5: B8
nG4s 0b8h
A-5: B9
nA4 0b9h
A#5: BA
nA4s 0bah
B-5: BB
nB4 0bbh


C-6: BC
nC5 0bch
C#6: BD
nC5s 0bdh
D-6: BE
nD5 0beh
D#6: BF
nD5s 0bfh
E-6: C0
nE5 0c0h
F-6: C1
nF5 0c1h
F#6: C2
nF5s 0c2h
G-6: C3
nG5 0c3h
G#6: C4
nG5s 0c4h
A-6: C5
nA5 0c5h
A#6: C6
nA5s 0c6h
B-6: C7
nB5 0c7h


C-7: C8
nC6 0c8h
C#7: C9
nC6s 0c9h
D-7: CA
nD6 0cah
D#7: CB
nD6s 0cbh
E-7: CC
nE6 0cch
F-7: CD
nF6 0cdh
F#7: CE
nF6s 0ceh
G-7: CF
nG6 0cfh
G#7: D0
nG6s 0d0h
A-7: D1
nA6 0d1h
A#7: D2
nA6s 0d2h
B-7: D3
nB6 0d3h


C-8: D4
nC7 0d4h
C#8: D5
nC7s 0d5h
D-8: D6
nD7 0d7h
D#8: D7
nD7s 0d8h
E-8: D8
nE7 0d9h
F-8: D9
nF7 0dah
F#8: DA
nF7s 0dbh
G-8: DB
nG7 0dch
G#8: DC
nG7s 0ddh
A-8: DD
nA7 0deh
A#8: DE
nA7s 0dfh
B-8: DF
</pre>
</pre>


===Coordination flags===
===Coordination flags===
<pre>
<pre>
Might be the same as the Sharp X68000 Version.
E0 - LoadInstrument
E0 - LoadInstrument
E1 - SetPan
E1 - SetPan
Line 236: Line 271:
Credits goes to vladikcomper for the info on this. Thanks!
Credits goes to vladikcomper for the info on this. Thanks!
</pre>
</pre>
{{Internal Data}}

Latest revision as of 02:35, 25 June 2024

Chip tiny.png The following article is a Tutorial for THUNDER FORCE2.

Hmmm...
To do:
Merge contents with Thunder Force II (Genesis)/Tutorials

Music Hacking for Thunder Force 2 or any Techno Soft Games for Sega Genesis

BGM Header format

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

Credits goes to vladikcomper for the info on this. Thanks!

Sharp X68000 Version
00: w ?
02: w Pointer to instrument ?
04: w ?
06: w ?

Research is still in progress!

Volume Controll for each channel

10: Channel Volume

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.


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

Sharp X68000 Version
D2: Channel Volume

Channel tracks table stores offset for all 9 sound channels used by driver in the following order:
		channel 1, channel 2, channel 3, channel 4, channel 5, channel 6, channel 7, channel 8, channel 9
                channel 10, channel 11, channel 12, channel 13, channel 14, channel 15, channel 16
	Channel tracks cannot be skipped -- if the channel is unused, corresponding track should start with byte 0FFh (end of track marker).

	Each FMtrack refers to patterns from patterns table by table entry number. Both tracks and patterns can execute coordinate flags.

D2: Volume for channel 1
D3: Volume for channel 2
D4: Volume for channel 3
D5: Volume for channel 4
D6: Volume for channel 5
D7: Volume for channel 6
D8: Volume for channel 7
D9: Volume for channel 8
DA: Volume for channel 9
DB: Volume for channel 10
DC: Volume for channel 11
DD: Volume for channel 12
DE: Volume for channel 13
DF: Volume for channel 14
E0: Volume for channel 15
E1: Volume for channel 16

Channel Tracks Table

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

I just learned on how to repeat a pattern. The set up looks like this:
Note: this part is from asm from scratch.

Channel_0:
          db repeat_pattern, 000h

If the number sets to $00, then it will repeat pattern_0. If the number sets to $10, then it will repeat pattern_10 like this:
 
Channel_0:
          db repeat_pattern, 010h

Still in progress right now.


Sharp X68000 Version
The Channel Track Pointer starts at $01D2

E2: Might be the setup or something. It's different than the Genesis version.


$01D2: w ?
$01D4: w Pointer to channel

Value Definitions

$80-$DF Notes - Same as the Sharp X68000 Version.
$E0-$FF Coordination flags - Same As the Sharp X68000 Version but it might be different.

Note Editing

This is how the note is set up in the game:

nC0, x, y, z
nC0 or whatever

I'm not sure what x & y is but z is the Volume.


Music Notes Value

Same as the Sharp X68000 Version.
Example: "nC0 - C-0" and "nC0s - C#0".

nC0	080h
nC0s	081h
nD0	082h
nD0s	083h
nE0	084h
nF0	085h
nF0s	086h
nG0	087h
nG0s	088h
nA0	089h
nA0s	08ah
nB0	08bh

nC1	08ch
nC1s	08dh
nD1	08eh
nD1s	08fh
nE1	090h
nF1	091h
nF1s	092h
nG1	093h
nG1s	094h
nA1	095h
nA1s	096h
nB1	097h

nC2	098h
nC2s	099h
nD2	09ah
nD2s	09bh
nE2	09ch
nF2	09dh
nF2s	09eh
nG2	09fh
nG2s	0a0h
nA2	0a1h
nA2s	0a2h
nB2	0a3h

nC3	0a4h
nC3s	0a5h
nD3	0a6h
nD3s	0a7h
nE3	0a8h
nF3	0a9h
nF3s	0aah
nG3	0abh
nG3s	0ach
nA3	0adh
nA3s	0aeh
nB3	0afh

nC4	0b0h
nC4s	0b1h
nD4	0b2h
nD4s	0b3h
nE4	0b4h
nF4	0b5h
nF4s	0b6h
nG4	0b7h
nG4s	0b8h
nA4	0b9h
nA4s	0bah
nB4	0bbh

nC5	0bch
nC5s	0bdh
nD5	0beh
nD5s	0bfh
nE5	0c0h
nF5	0c1h
nF5s	0c2h
nG5	0c3h
nG5s	0c4h
nA5	0c5h
nA5s	0c6h
nB5	0c7h

nC6	0c8h
nC6s	0c9h
nD6	0cah
nD6s	0cbh
nE6	0cch
nF6	0cdh
nF6s	0ceh
nG6	0cfh
nG6s	0d0h
nA6	0d1h
nA6s	0d2h
nB6	0d3h

nC7	0d4h
nC7s	0d5h
nD7	0d7h
nD7s	0d8h
nE7	0d9h
nF7	0dah
nF7s	0dbh
nG7	0dch
nG7s	0ddh
nA7	0deh
nA7s	0dfh

Coordination flags

Might be the same as the Sharp X68000 Version.

E0 - LoadInstrument
E1 - SetPan
E2 - PSGEffect
E3 - SetSlideSpeed
E4 - AMS_FMS_Speed
E5 - SkipPatterns_or_Sync
E6 - SetArgument
E7 - AlterArgument
E8 - AlterNote
E9 - AlterVolume
EA - AlterTempo
EB - SetFreqDisplacement
EC - SetRepeat
ED - SetFadeSpeed

F0 - DisableAMS_FMS
F1 - EnableAMS_FMS
F2 - DisablePSGNoise
F3 - EnablePSGNoise
F4 - SetPortamentoMode0
F5 - SetPortamentoMode1
F6 - SetPortamentoMode2
F7 - SetPortamentoMode3
FD - repeat_pattern

Credits goes to vladikcomper for the info on this. Thanks!