Editing Creating cave music
Jump to navigation
Jump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.
The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision | Your text | ||
Line 3: | Line 3: | ||
The BMS file type is a sequenced music format used in many games. For the cave music in Pikmin 2 however, it is specially-formatted. It mainly contains many short snippets of musical information to be randomized. | The BMS file type is a sequenced music format used in many games. For the cave music in Pikmin 2 however, it is specially-formatted. It mainly contains many short snippets of musical information to be randomized. | ||
− | The CND files are the actual "songs"; they take specific groups of snippets from a BMS file, and endlessly puzzle-piece them together to form a coherent piece of music. | + | The CND files are the actual "songs"; they take specific groups of snippets from a BMS file, and endlessly puzzle-piece them together to form a coherent piece of music. |
− | This guide will function as a walkthrough for creating your own randomly sequencing cave song. | + | This guide will function as a walkthrough for creating your own randomly sequencing cave song. All of the editing will be done in hexadecimal. |
''Requirements:'' | ''Requirements:'' | ||
Line 11: | Line 11: | ||
* A MIDI to BMS converter, like [[Pikmin 2 custom music|flaaffy]]. You will be generating a lot of tiny BMS files, to turn them into "gestures". | * A MIDI to BMS converter, like [[Pikmin 2 custom music|flaaffy]]. You will be generating a lot of tiny BMS files, to turn them into "gestures". | ||
* A basic understanding of hexadecimal, and a hex editor. An editor that can dynamically resize the window is ideal (HxD on Windows, or Hex Fiend on MacOS are fantastic examples). | * A basic understanding of hexadecimal, and a hex editor. An editor that can dynamically resize the window is ideal (HxD on Windows, or Hex Fiend on MacOS are fantastic examples). | ||
− | |||
− | |||
== Overview of file functions == | == Overview of file functions == | ||
Line 59: | Line 57: | ||
== Gesture set contents == | == Gesture set contents == | ||
A ''gesture set'' is a group of many gestures.<br> | A ''gesture set'' is a group of many gestures.<br> | ||
− | Here, we list each gesture set's contents (which | + | Here, we list each gesture set's contents (which are... the locations of gestures!). Each gesture set begins before with <code>00</code> and ends with <code>FFFFFF</code>.<br><br> |
Here is an example of how the gesture set list should be formatted:<br> | Here is an example of how the gesture set list should be formatted:<br> | ||
<code>000210 00022A 000258 000281 FFFFFF 0002B4 0002D9 000303 000331 FFFFFF 000355 FFFFFF 000361 FFFFFF 0003A8 0003C2 0003F0 000419 FFFFFF 00044C 000471 00049B 0004C9 FFFFFF 0004ED FFFFFF 000543 FFFFFF 000580 FFFFFF 00059E FFFFFF</code><br> | <code>000210 00022A 000258 000281 FFFFFF 0002B4 0002D9 000303 000331 FFFFFF 000355 FFFFFF 000361 FFFFFF 0003A8 0003C2 0003F0 000419 FFFFFF 00044C 000471 00049B 0004C9 FFFFFF 0004ED FFFFFF 000543 FFFFFF 000580 FFFFFF 00059E FFFFFF</code><br> | ||
Line 92: | Line 90: | ||
Gestures use same the note/music information as standard BMS songs.<br> | Gestures use same the note/music information as standard BMS songs.<br> | ||
− | You should have converted all your MIDIs into BMS files. Open up one of your converted BMS files, and look for the first note/pitch value. If you used [[Pikmin 2 custom music|flaaffy]], this will most likely be somewhere after <code>0x1B</code>, <code>0x1C</code>, or <code>0x1D</code>. The note's pitch value will | + | You should have converted all your MIDIs into BMS files. Open up one of your converted BMS files, and look for the first note/pitch value. If you used [[Pikmin 2 custom music|flaaffy]], this will most likely be somewhere after <code>0x1B</code>, <code>0x1C</code>, or <code>0x1D</code>. The note's pitch value will be followed by a <code>01</code>. Copy this note, all the way to the end of the sequence, which should be <code>FF</code>. |
<gallery mode="packed-hover" widths=600px> | <gallery mode="packed-hover" widths=600px> | ||
File:Copy_pasting_BMS_info.png|The value "2D" here is the hex value of a certain pitch, and the very first note of the sequence. Copy this, all the way to "FF". | File:Copy_pasting_BMS_info.png|The value "2D" here is the hex value of a certain pitch, and the very first note of the sequence. Copy this, all the way to "FF". | ||
Line 104: | Line 102: | ||
So, how do we choose how often gestures will play? Will a gesture play every beat? Every 1/2 a beat? You will need to add a timetable for that! | So, how do we choose how often gestures will play? Will a gesture play every beat? Every 1/2 a beat? You will need to add a timetable for that! | ||
A timetable is a sequence that dictates when gestures should play. A timetable ends with <code>FFFF</code>. You can make a timetable as complex as you like.<br> Some examples of timetables you can use are:<br> | A timetable is a sequence that dictates when gestures should play. A timetable ends with <code>FFFF</code>. You can make a timetable as complex as you like.<br> Some examples of timetables you can use are:<br> | ||
− | * <code> | + | * <code>0780FFFF</code> Play a gesture every 16 beats.<br> |
− | * <code> | + | * <code>03C0FFFF</code> Play a gesture every 8 beats.<br> |
− | * <code> | + | * <code>01E0FFFF</code> Play a gesture every 4 beats.<br> |
− | * <code> | + | * <code>03C003C003C001E001E001E001E003C0FFFF</code> This sequence will play a gesture every 8 beats (3x), play a gesture every 4 beats (4x), then play a gesture for 8 beats (1x), in that order.<br> |
− | * <code> | + | * <code>00F0FFFF</code> Play a gesture every 1/2 note (every 2 beats).<br> |
− | * <code> | + | * <code>0078FFFF</code> Play a gesture every 1/4 note (every beat).<br> |
− | * <code> | + | * <code>003CFFFF</code> Play a gesture every 1/8th note.<br> |
− | * <code> | + | * <code>001EFFFF</code> Play a gesture every 1/16th note.<br> |
− | * <code> | + | * <code>003C0078001EFFFF</code> This sequence will play a gesture for an 1/8th note, play a gesture for a 1/4 note, then play a gesture for a 1/16th note, in that order.<br> |
Considering that <code>001E</code> (30 in decimal) is a 1/16th note, you can create any specific timing you want. Just add another 30 to the value for each additional sixteenth note in length.<br> | Considering that <code>001E</code> (30 in decimal) is a 1/16th note, you can create any specific timing you want. Just add another 30 to the value for each additional sixteenth note in length.<br> | ||
− | For example, Soil 1's enemy mix piano plays a | + | For example, Soil 1's enemy mix piano plays very rapidly; its timetable uses a value of 90, which looks like <code>005AFFFF</code>. The gestures last for three sixteenth notes.<br> |
You can insert your timetables anywhere at the end of your BMS. | You can insert your timetables anywhere at the end of your BMS. | ||
<gallery mode="packed-hover" widths=250px heights=250px> | <gallery mode="packed-hover" widths=250px heights=250px> | ||
Line 205: | Line 203: | ||
* Immediately next in the sequence will be a value that indicates when the cutoff begins. Calculate the difference between "81E0" and the previous value you had just inserted. 81E0 - 0078 = 8168 (in decimal, 33248 - 120 = 33128). I will put <code>8168</code> next in my sequence. | * Immediately next in the sequence will be a value that indicates when the cutoff begins. Calculate the difference between "81E0" and the previous value you had just inserted. 81E0 - 0078 = 8168 (in decimal, 33248 - 120 = 33128). I will put <code>8168</code> next in my sequence. | ||
My sequence is now <code>0078 8168 FFFF</code>; this will play a gesture normally for 1 beat, but then immediately cut it off after that 1 beat.<br> | My sequence is now <code>0078 8168 FFFF</code>; this will play a gesture normally for 1 beat, but then immediately cut it off after that 1 beat.<br> | ||
− | Putting an additional <code>81E0</code> in the sequence right after will | + | Putting an additional <code>81E0</code> in the sequence right after will the silence for another 4 beats. You can keep putting <code>81E0</code> right after several times in a row if you want depending on how long you want the silence to last, until the next gesture. |
[[Category:Pikmin 2]] | [[Category:Pikmin 2]] |