So a couple of things about Bxx. The reason why you "need" to put it on every channel is that otherwise the loop will only apply to the channel that it is on. That might actually be useful in some cases, but also Bxx might not always be the right way of doing loops anyway. Again using my medieval track as an example, I used the Bxx command on it, so its suppose to have a later restart point and I can compare what it looks like with the NESmaker converter vs the ggsound converter. (I was sort of gambling that Bxx would be fixed for NESmaker 4.5's version of the converter, but that is sort of besides the point)CutterCross wrote: ↑Sat Aug 10, 2019 6:41 pm- Looping with the Bxx (must be present in all channels, using unique patterns) command **
** Bxx effect is NOT supported by default, and can only be re-implemented by using GGsound's official ft_txt_to_asm Python script or the GGsound ft_txt_to_asm executable on this forum.
If you open up the AllSongs_WithSFX.asm file in the GameEngineData\Sound folder after importing the txt and exporting the rom, this is what the data for the frames of the first square channel would look like. I'll add some comments to make it what is going on clearer.
Code: Select all
MedievalTimes_square1: .db CAL,<(MedievalTimes_square1_0),>(MedievalTimes_square1_0) ; Each line is a frame for this channel. .db CAL,<(MedievalTimes_square1_0),>(MedievalTimes_square1_0) ; CAL is a ggsound opcode telling the engine to .db CAL,<(MedievalTimes_square1_0),>(MedievalTimes_square1_0) ; "call" the address defined by the next 2 bytes. .db CAL,<(MedievalTimes_square1_0),>(MedievalTimes_square1_0) ; The 2 bytes are the lo and hi bytes for the .db CAL,<(MedievalTimes_square1_5),>(MedievalTimes_square1_5) ; address of the start of the pattern. You can .db CAL,<(MedievalTimes_square1_2),>(MedievalTimes_square1_2) ; the pattern number and the end of the label .db CAL,<(MedievalTimes_square1_3),>(MedievalTimes_square1_3) ; for these bytes. .db CAL,<(MedievalTimes_square1_6),>(MedievalTimes_square1_6) .db CAL,<(MedievalTimes_square1_7),>(MedievalTimes_square1_7) .db CAL,<(MedievalTimes_square1_1),>(MedievalTimes_square1_1) .db CAL,<(MedievalTimes_square1_1),>(MedievalTimes_square1_1) .db CAL,<(MedievalTimes_square1_8),>(MedievalTimes_square1_8) .db GOT ; GOT is the ggsound opcode for "goto" .dw MedievalTimes_square1 ; Note that this is the same label as the one at the top.
Code: Select all
_MedievalTimes_square1: .db CAL,<(_MedievalTimes_square1_0),>(_MedievalTimes_square1_0) .db CAL,<(_MedievalTimes_square1_0),>(_MedievalTimes_square1_0) _MedievalTimes_square1_loop: ; Note this label that wasn't in the NESmaker output. .db CAL,<(_MedievalTimes_square1_0),>(_MedievalTimes_square1_0) .db CAL,<(_MedievalTimes_square1_0),>(_MedievalTimes_square1_0) .db CAL,<(_MedievalTimes_square1_5),>(_MedievalTimes_square1_5) .db CAL,<(_MedievalTimes_square1_2),>(_MedievalTimes_square1_2) .db CAL,<(_MedievalTimes_square1_3),>(_MedievalTimes_square1_3) .db CAL,<(_MedievalTimes_square1_6),>(_MedievalTimes_square1_6) .db CAL,<(_MedievalTimes_square1_7),>(_MedievalTimes_square1_7) .db CAL,<(_MedievalTimes_square1_1),>(_MedievalTimes_square1_1) .db CAL,<(_MedievalTimes_square1_1),>(_MedievalTimes_square1_1) .db CAL,<(_MedievalTimes_square1_8),>(_MedievalTimes_square1_8) .db GOT .dw _MedievalTimes_square1_loop ; Note that this is the new label, not the start label
So to summarize, if the end of your song in completely unique, Bxx is fine to use. If the last frame reuses any frames, it's better to edit the outputted asm file from the ggsound converter after the fact. Just be sure to make the changes to all of the channels.
Additionally, I haven't done this yet but I think you could also use the Bxx command to make pickup notes or a shortened intro frame because Bxx does tell the ggsound converter to stop reading the frame of that channel after that point. You would probably also have to edit the file to make it work.
Also you can't edit the AllSongs_WithSFX.asm file because it gets overwritten by NESmaker on export. If anyone doesn't feel like downloading the ggsound converter, I suppose you could make a copy of the AllSongs_WithSFX.asm after an export, do some edits to the copy, and then import the copy.
Ok, one more thing while I'm here. Not sure if this has been mentioned before, but if you do use the ggsound converter, don't use the note release command (pressing the '\' key in the pattern editor that results in a big equal sign). This will give you an error when you go to export your rom. Using the NESmaker converter this will result in the same output as a note cut (pressing the '1' key giving you a big dash in your pattern). You probably should just always use note cuts anyway especially considering ggsound doesn't support the function of the note releases anyway.