Language…
9 users online: anonimzwx, ASMagician Maks, CalHal, fanfan21, Green Jerry, kurtistrydiz, Phyll, Shiki_Makiro, StarWolf3000 - Guests: 122 - Bots: 94
Users: 69,207 (2,358 active)
Latest user: lapakspin99

Posts by KungFuFurby

KungFuFurby's Profile → Posts

Hello! KungFuFurby here. I found out via the NESDev forums.

I usually use a sound engine called SNESMod by Mukunda Johnson. I have hacked that sound driver before to add some extra features to it. My own sound engine is actually very early on in the prototype stage (right now, I have a series of file format specifications, and a sound driver that does produce sound and has a special event processor that can add and subtract items with doubly linked lists, but currently I have yet to reprogram the SPC700 timer, since I have figured out how to optimize my timer update code to just a few opcodes, and I have decided on the fastest 8000hz tick possible). Right now, I'm working on trying to compile a prototype version of a debugger produced by bazz for a currently very early version of a program called SNES Tracker. I'm very close to getting it to run... except that it crashes on startup (and I'm running Mac OS X 10.6.8, and the program uses C++11, meaning I have had to jump a lot of hurdles... yes, I prefer to keep it frozen in time since I prefer to use Rosetta for a few other programs...).

I actually fooled around with this game way back in 2012. My expertise is in producing music modifiers, and my time at SNESMusic.org has served me very well. I'm still making them to this day.

For the US version of F-Zero, I perfected the music modifier that nensondubois had started with the sub-tune ID (7E0046xx). You can modify the racing music using this code (numbers are in hexadecimal)...

80F7E3A2
80F7E400
80F7E5EA
839E68xx
This code only works when you start a race.
The range is 00-09 (and you must set the music ID to 06). The game crashes after 09.
I'm really surprised I got a silver (in challenge, and actually the best challenge cover entry) and a bronze (in originals)!

The one I earned the bronze for was a result of accidentally sending in the wrong song, meaning it was not optimized at all (specifically with volume balancing on the drums). For that song, I also deliberately went with the Secret of Mana/Seiken Densetsu 2 sample pack, primarily to blend in.

As for the silver entry... I actually had grander plans for it, but I ran into memory constraints. I was considering using a pitch modulation-based riff.

And I used a genuine copy of N-SPC on an original, straight out of the source, porting it over to asar so I could use it. The music was manually programmed in ASM, too, rather than converting it from something else, using the original defines for it.
Hello there, from the programmer of the current additions to the SPC side of AMK! There's actually a second modification in the AMK SPC-side ASM... namely, I discovered that an 8-bit overflow was causing ticks to become lost on the music end. I determined I could modify this to double its tolerance, which is what made it into the special version shown here. I can even push this further if I wanted to, by having more than one tick waiting to fire (when the Y register, not stored to $49, is greater than 1: I currently account for a non-zero Y register value, but it's only to trigger a single tick instantly. Note that I have to clear this out when a different piece of music plays to avoid notes rapidly firing away at the beginning, kind of like a more extreme version of what I ran into with certain songs in other sound drivers, namely Bitmasters in some cases and SOSDRV (Copya System/Office Koukan/System Sacom).). The last one is to poll the raw timer ($FD) more often. This would be needed if more than 15 raw timer ticks are on stand-by.

My fade magic is specific to this game collection, and with over 128 songs, may conflict on the 65816 side (unless you do direct writes to $2142 yourself). Note that I deliberately designed the fade to be backwards-compatible with Super Mario World by making $FF an exact match to the original. It also means that the faster fade speeds are the ones that get locked out on the 65816 side (not counting direct writes), not the slower fade speeds.

Plus, the fade command is designed to not conflict with the master volume, which is a problem that AMK had previously.
Originally posted by MarioFanGamer

Originally posted by yoshifanatic
As for the AMK stuff, I'm actually pretty lucky that not only do all 5 SMAS+W games and menu/title screen handle the SPC stuff the same way as SMW, but that SMAS uses mostly the same samples as SMW (albeit down-sampled versions, according to LadiesMan217). This meant implementing the addmusick engine would be a lot easier than if someone were to try this on some other game that communicates with the SPC700 differently. And the fact that the samples are roughly the same means that music porters don't need to make SMAS+W specific ports, unlike something like Yoshi's Island. Getting AMK to work with SMAS+W may not have happened if all 5 games had a wildly different implementation of communicating the the engine (thankfully, the only thing that differed is what RAM addresses are used as the mirrors).

I had a feeling that SMAS reuses SMW's sound engine and, ignoring the songs, only adds two new samples (a trumpet and timpani) and sound effects.


That's not completely correct. The game previously used two builds on the SPC side: one dedicated to Super Mario World (which is almost an exact match to the original game: the main difference is that it has a new command that zeroes out the echo volume, keys off all notes, stores zeroes to a few memory locations, activates the IPL boot ROM via the CONTROL register, then jumps to the IPL boot routine at $FFC0, done by sending $F0 to $2141), and one dedicated to all of the other games, which is effectively standard N-SPC/Kankichi (meaning it's a later version than what Super Mario World uses, and the VCMDs start at $E0 rather than $DA), with music banks allocated to each of the games (except for Lost Levels, which uses Super Mario Bros.' music, and Super Mario Bros. 3 has two music banks, and the main menu has its own unique music bank).

Due to the different VCMD formats between the two games, this means I would have to do a complete sound driver swap in order to play Super Mario World music any earlier... if that was even possible. It's far easier to do with just one sound driver.

Waialae no Kiseki (Japanese version only: the US version is just standard N-SPC/Kankichi throughout the game) is an even more extreme case of sound driver swapping, as it uses a completely new sound driver for the music while playing a game of golf. Otherwise, it falls under standard N-SPC/Kankichi.

Originally posted by LadiesMan217

Originally posted by MarioFanGamer
I find it really impressive how you managed to make AMK work with SMAS. Too bad there hasn't been anyone to modify AMK's source code, though.

This is indeed sad, however we managed to work with a few people to make minor adjustments such as KungFuFirby's edits and a slowdown tolerance along with some of Lui and Catfish's fixes. Not sure how much I'm allowed to say about this but Intron (alongside with KunFuFirby I think) is working on implementing something into AMK quite a few people have been asking for which will be implemented into SMAS amk too for a missing feature but I'll let them talk about it should they wanna reply.


Yes, the feature in question is in development, and the developer info is correct: Intron is doing the main programming for that. I have no further commentary at this time integration-wise.
Orig09's cause of corruption is a truncated SPC file: namely, omitting data past a certain point due to it being all zeroes, which is illegal for a SPC file due to the DSP registers being stored from $10100-$10200 in the SPC file (with or without the IPL boot program at $101C0).
Hello, everybody! This is KungFuFurby, SNES musician, and I've been working on what I technically call a fork of AddMusicK, called AddMusicKFF. I've been low-key about this (I've been more active on this utensil on the SNESLab Discord servers than the SMWCentral Discord servers, actually), and this is certainly a WIP, but I'm going to debut it on the forums for the Winter 2021 C3.

To be continued in the Resource & Tool Releases Forum



What is AddMusicKFF?


AddMusicKFF is a fork of AddMusicK by Kipernal. I'm not bumping the version number unlike the others due to me having seen two past cases of doing so, and me admittedly realizing that I don't want to join the conflict myself. Plus, I'm intending on maintaining backward compatibility with the older Addmusics.
This actually originated when I created a slowdown fix for AddMusicK for Super Mario All-Stars + Super Mario World that got officially implemented in the standalone version on Super Mario World, debuting on 1.0.7. I also implemented fades to any volume for compatibility for Super Mario All-Stars and the original ID is backward compatible with Super Mario World (that hasn't been ported over yet partially because on the 65816 end, I introduce a conflict past 128 songs, and partially because that code can be improved somewhat by utilizing unused memory locations).

What have you already done?


Merged in
  • Fixed a softlock bug caused by readahead trying to go past 256 bytes. From a technical standpoint, I forced the Y register to zero, and instead incremented the pointer itself.
  • Lots of fixes related to arpeggio:
    • Failure to use indexed storages, particularly with the type ID, was causing various malfunctions on all channels except the first (#0).
    • Don't key on notes immediately by using the KON register: the sound driver can do that for you, meaning I utilize the sound driver's internal key on queue, so to speak. Plus, it causes a double key on by mistake. (Thanks to musicalman for catching this bug!)
    • CPUIO1 (referring to SNES-side memory location $2141 and SPC700-side memory location $F5) sound effects (referring to command IDs $01 and $04) were causing the arpeggio to stop playing completely due to the memory locations being zeroed out.
  • Updated the internal changelog HTML file to reflect version 1.0.8.
  • Performed a cleanup of SFX data to remove unused generated bytes. Most were related to generating redundant zero bytes, but in two cases, the data was not properly edited, and thus contained duplicate data from somewhere else. Plus, for the jump SFX, I removed a redundant volume byte, since both left and right values were the same.
  • Implemented exact tick length support and dotted notes for the default note length (l) directive. (Special thanks for Masterlink for suggesting the dotted note portion and Exodust for adding it to the Github repository's list) I was also asked to do ties, but I decided against doing so due to a conflict with the actual sound driver's tie command (referring to $C6).
    • Implemented dotted notes with exact tick lengths (grouped with the l directive exact tick additions).


Not merged in (available in a pull request)
  • Have readahead look inside subroutines and loop sections. This ensure that long chains of subroutines don't cause a long series of bytes being read before finally finding a note or tie command that is well past what was expected to be read, and may or may not key off the note as intended. It hasn't been merged in yet due to me not knowing what songs on the site have attempted to take advantage of that particular bug.
  • Having an arpeggio play while a rest commmand is supposed to be active felt a bit unnatural to me, so I added in some code so that there can be a gap. Interestingly, this was technically noted in the commentary. The arpeggio will also start right back up when you play the next note. I'm not certain if anyone has attempted to utilize this particular bug yet...
  • Pitch slide to note commands (referring to the $DD command) failed to account for per-channel transposition. (Thanks to musicalman for catching this bug!) Again, I have no idea if anyone was utilizing this bug.
  • New accurate versions of the jump SFX (CPUIO1 SFX ID $01) and what I have dubbed the new grinder click 2 SFX (CPUIO1 SFX ID $02). I'm wondering if I should go through with an outright replacement of the jump SFX... hence why it's currently not merged in.
    Update 1/10/21: Added old jump SFX as Jump (alt), at  Kevin and Anas's suggestion.
  • A bunch of new VCMDs, albeit a bit more mundane for now...
    • $F4 $0A - SMW Velocity Table
    • $F4 $0B - Pitch Modulation Toggle
    • $F4 $0C - Yoshi Drums On
    • $F4 $0D - Yoshi Drums Off
    • $F4 $0E - Echo On
    • $F4 $0F - Echo Off
    • $F4 $10 - Pitch Modulation On
    • $F4 $11 - Pitch Modulation Off
    • $F4 $12 - Legato On
    • $F4 $13 - Legato Off
    • $F4 $14 - Light Staccato On
    • $F4 $15 - Light Staccato Off

    For those of you wondering why I added these, except for Pitch Modulation (which had no toggle, so I added it on myself), all of these were previously only available in toggle form (except for Velocity table, which wasn't actually a toggle per se as setting a fixed value, so I added its inverse). That meant that you could switch them back and forth between on and off every time the VCMD triggers, but not actually force them to a value.

    • $F4 $16 - SNES Sync Toggle (No Reset)
    • $F4 $17 - SNES Sync On (With Counter Reset)
    • $F4 $18 - SNES Sync Off (With Counter Reset)
    • $F4 $19 - SNES Sync Pause
    • $F4 $1A - SNES Sync Resume
    • $F4 $1B - SNES Sync Reset
    • $F4 $1C - SNES Sync Increment

    Sync is also only available in toggle form, and its default behavior is to reset the counter every time it is initialized. Thus, I came up with these commands to give some more control.


Other
  • Compiled a list of all memory locations prior to the actual SPC700 program (mostly referring to $0000-$0500) used in both the original sound driver and Addmusics, past and present. Special thanks goes to Masterlink for providing some archival Addmusic versions (particularly the beta AddMusicK versions) and an example of the special wave feature used in AddMusicM.


What are you planning to do?


  • Add actual phrase support. I recorded my proposal on how to implement it here.
  • Bring back the special wave from AddMusicM! I'm still working out how to do this, because this is going to require a sample slot to be allocated in the directory, and thus requires a C++-side modification.
  • SFX priority, done as a VCMD exclusively for SFX. The original game had a few pieces of SFX that I documented that could not be interrupted until they finished playing.
  • Get pitch envelope delays working for SFX. I found out they were completely non-functional in both the original and AddMusicK, which makes one of the bytes in the pitch envelope VCMDs in the SFX (referring to VCMD IDs $DD and $EB) essentially do nothing.
  • Consolidate the two jump SFX instances into one pointer-wise. Due to being in two different collections, this requires that I modify the C++ code.
  • Add music/song groups. Just have to work this one out to ensure that they all load correctly and make sure that the same song in multiple groups can be handled properly. (Thanks  imamelia for the request!)
  • Plenty more... just got to figure out which ones to go for.


What quirks/possible bugs do you know about?


  • The readahead code, when accounting for subroutines and loop sections, has exposed a potential conflict between the instrument set command, the rest command, and the type 3 remote control event due to a failure to fire the KOFF register. Namely, $DA ?? $C7 with remote control event type 3 active causes remote control event type 3 to fire, followed one tempo tick afterwards by the instrument setup routine. Unusual... I have determined that without the type 3 remote control event factoring in that this is done by design, since normally the KOFF register fires first when the rest goes off, thus allowing for a better transition to the next instrument. (Thanks Masterlink for providing me with an example)


What bugs do you know about and are planning to fix?


  • CPUIO0's (referring to SNES-side memory location $2140 and SPC700-side memory location $F4) and CPUIO3's (referring to SNES-side memory location $2143 and SPC700-side memory location $F7) sound effects are failing to properly play their pitch envelopes when an arpeggio is playing in the same channel.
  • CPUIO1's (referring to SNES-side memory location $2141 and SPC700-side memory location $F5) sound effects (referring to command IDs $01 and $04) wrecking havoc in general, even more so than CPUIO0's (referring to SNES-side memory location $2140 and SPC700-side memory location $F4) sound effects and CPUIO3's (referring to SNES-side memory location $2143 and SPC700-side memory location $F7) sound effects. The instrument ID is not even properly restored unlike the other cases!
  • SPC dumps of noise SFX generated by AddMusicK don't actually function because they fail to set the noise frequency for some unusual reason.
  • The ADSR/GAIN commands (referring to VCMDs $ED and $FA $01) have an unexpected side effect due to the ordering of the writes of DSP registers. This mainly involves having the previous gain value being a fixed volume set value, but there are other side effects.


Do you have compiled binaries?


You can find the latest compiled binary for Windows here. (Thanks  Atari2.0!)



View the project here on Github



Note that I recommend updating Asar to version 1.71.

The makefile was adapted from HertzDevil's fork of AddMusicK, since one didn't exist before. I'll also admit I am utilizing the AM405Remover from that fork as well, but only on my own local copy: I've left the original as-is in the repository.
Earthworm Jim 2? Does that mean that you disassembled a Bitmasters sound driver variant in the process? I'm already aware of Plok from the Discord discussions.

I ask because I myself have only done some reverse engineering on Home Alone (and a little bit of the Mask, though I've abandoned that for now so that I can do these by version order), which is the earliest game (and the first version) to use the Bitmasters sound driver.
Originally posted by Falconpunch
AddMusicK has grown so tiring to use. I'm glad somebody is making an effort to make it better and/or make a new tool for music insertion!


Not completely new: I'm just updating the originals.

Originally posted by Atari2.0
I can help with compilation of the binary, if needed.


Thanks! The only catch is that this is probably going to be constantly updated as I receive bug reports and apply code updates. Thus, I am uncertain of the "on demand" nature at the moment.
Sure, I'll test my knowledge! For whatever reason, I think of MC Ballyhoo from Mario Party 8 (likely not an exact match).
Originally posted by Atari2.0
Originally posted by KungFuFurby

Originally posted by Atari2.0
I can help with compilation of the binary, if needed.


Thanks! The only catch is that this is probably going to be constantly updated as I receive bug reports and apply code updates. Thus, I am uncertain of the "on demand" nature at the moment.

Well that's unimportant, I can setup an automatic build system if needed. The GUI is super easy to compile actually, the binary aswell, I can compile the binary for both linux and windows, if need be just dm me on discord at Atari2.0#1706


Alright. Having an automatic build system would not be a bad idea, considering that I haven't set one up before. Just remember that I never updated the Visual Studio files... I'll go ahead and DM you on Discord.
I'll allow requests, but I can't guarantee their implementation, if only because I've got quite the list on my end not revealed here and I have to make sure to iron out technical difficulties with the sound driver (and the conversion utensil).
Originally posted by Anas
Originally posted by KevinM
I saw your fork when you just made it and seems like you've already done tons of work between fixes and new features, which is pretty cool. I know of some more bugs that would be nice to have fixed (mostly regarding sound effects), so if you're interested I can PM you. Keep up the good work!

Edit: about the jump SFX, I don't see why not replacing it, but maybe also keep the old one in there if someone wishes to use that one instead, similarly to what this (unnecessary) update did.


Agree. I think the fixed one should be default though. (Also, because of how incredibly minuscule my update was, I removed it.)


Yup, I obsoleted the update in question due to my data optimizations.

Alright, I'll re-introduce the old version of the jump SFX. They'll be given new IDs, though. Also, I'm zeroing out the delay parameter (it's an 8 in the original data, and the only one that even did that) in anticipation of implementing the SFX pitch envelope delay effect, because it never worked in both the vanilla version (referring to the original SMW sound driver prior to all of the modifications) and, to my knowledge, all of the Addmusics before.

I can't help but think that the old jump SFX could, in theory, be used for Luigi if one were to make a two player hack with Mario and Luigi where the two are running around at the same time.
That's actually one of the thoughts I had was to do something like that. Helps that I have a tendency to make unique jingle variants all over the place myself due to sometimes wildly different samples being utilized, kind of like how the later SNES Donkey Kong Country games do it.

The catch is how to handle the same song in multiple groups...

If I have everything start from a zero memory location and fill in the blanks, it requires a good deal of 65816 code to pull off and needs to be updated for every pointer-based VCMD that gets accounted for (there's a running tally of which ones to do), but it will do the trick. I can also do something similar for SFX groups that get swapped in and out along with their samples.

Without this, it's duplicate data galore due to pointer differences. Also, I may need extra RAM to track which music and SFX IDs are actually loaded to avoid complications if I were to automatically track this stuff.

And the original Super Mario World can be my test case, since I have exact IDs. And it has a huge default music group set to really test it out, although it has no global songs by default.
Varies on a case-by-case basis.
Fun fact: Frogger actually uses Ren and Stimpy: Buckeroo$'s sound data.
I just accidentally realized that C3 could be a good place for me to show some of my disassembly work outside of Super Mario World, after realizing what Yoshifanatic was doing. I completed disassemblies of two SPC700 sound drivers, both which are unique to one game (albeit the other technically has a second version, but the modifications are massive, as in switching from playing all of the music in the SPC700 to instead sending one note at a time from the SNES, making it undumpable in the SPC format in the classic sense):

Frantic Flea SPC700 Sound Driver Disassembly
RPM Racing SPC700 Sound Driver Disassembly

Both of these were actually completed in October 2019 and March 2020, respectively, but they haven't had a wide release yet outside of the SNESLab Discord server.

Both are designed to be compiled with asar. In both cases I skipped over the instrument data if there was any, but I did document them otherwise (including said skipped instrument data).

Note that these are only the SPC700 sound drivers, and by my own admission, they are compiled more as implantable into a SPC file rather than an actual ROM at this time.
These make a replica of the original sound driver binary (minus instrument data and plus some zeroes at the beginning due to how I made these). I haven't included any of the other binary data such as samples and the actual music data: I'm only focusing on the program itself, sort of like what was done with loveemu's disassemblies.

The symbol file that is compiled will give you the memory location of every single variable used in the sound driver. Some of them I have left as simply "MEMxxxx" because I didn't find a use for it, and I marked it accordingly.

Also, RPM Racing doesn't actually use MIDI, as I have since determined. It was a mis-identification by me at the time.
Hello, everybody! This is KungFuFurby, SNES musician, and I've been working on what I technically call a fork of AddMusicK, called AddMusicKFF. This thread is a continuation of the Winter C3 2021 thread.

I have also made a Summer C3 2021 update thread that contains a summary of the progress made here, as well as some info on an AddmusicK 1.0.9 release candidate that was revealed there.

A second update thread was made for Winter C3 2022.

A third update thread was made for Summer C3 2022.

A fourth update thread was made for Winter C3 2023.

A fifth update thread was made for Summer C3 2023.

A sixth update thread was made for Winter C3 2024.

A seventh update thread was made for Summer C3 2024.

AddmusicK 1.0.9 was finalized on 10/5/23 with its approval by moderation as the next release of AddmusicK after having frozen most updates on 7/25/23.
AddmusicK 1.0.10 was finalized on 2/25/24.
AddmusicK 1.0.11 was finalized on 9/8/24.

What is AddMusicKFF?


AddMusicKFF is a fork of AddMusicK by Kipernal. I'm not bumping the version number unlike the others due to me having seen two past cases of doing so, and me admittedly realizing that I don't want to join the conflict myself. Plus, I'm intending on maintaining backward compatibility with the older Addmusics.
This actually originated when I created a slowdown fix for AddMusicK for Super Mario All-Stars + Super Mario World that got officially implemented in the standalone version on Super Mario World, debuting on 1.0.7. I also implemented fades to any volume for compatibility for Super Mario All-Stars and the original ID is backward compatible with Super Mario World (that hasn't been ported over yet partially because on the 65816 end, I introduce a conflict past 128 songs, and partially because that code can be improved somewhat by utilizing unused memory locations).

What have you already done?








What are you planning to do?


  • Add actual phrase support. I recorded my proposal on how to implement it here.
  • Consolidate the two jump SFX instances into one pointer-wise. Due to being in two different collections, this requires that I modify the C++ code.
  • Add music/song groups. Just have to work this one out to ensure that they all load correctly and make sure that the same song in multiple groups can be handled properly. (Thanks  imamelia for the request!)
  • Plenty more... just got to figure out which ones to go for.


What quirks/possible bugs do you know about?


I suspect that these were done by design in the original program, meaning I don't have as many plans to change the code to correct these quirks. However, they are documented since they're "gotcha" cases. In addition, in some of these cases, I can't repair these quirks without updating the parser version, because they would break previous songs.
  • The readahead code, when accounting for subroutines and loop sections, has exposed a potential conflict between the instrument set command, the rest command, and the type 3 remote control event due to a failure to fire the KOFF register. Namely, $DA ?? $C7 with remote control event type 3 active causes remote control event type 3 to fire, followed one tempo tick afterwards by the instrument setup routine. Unusual... I have determined that without the type 3 remote control event factoring in that this is done by design, since normally the KOFF register fires first when the rest goes off, thus allowing for a better transition to the next instrument. (Thanks Masterlink for providing me with an example!)
  • The parser does macro substitutions immediately after the $ character, meaning trying to utilize raw hex-like numbers as a macro substitution will conflict with this particular instance. (Thanks brickblock369 for providing me with an example!)
  • If your macro substitution definition begins with an r or a ^, then if the last note is the same character as the first character of a macro substitution, then the substitution will fail because AddmusicK combines rests and ties, thus accidentally filtering out the first character. Note that this also goes across spaces and lines! Note that this is a quirk for AddmusicK's parser only: it is noted as a potential conversion bug from AddmusicM, which also supported substitutions, but did the substitutions before parsing any of the notes, whereas AddmusicK parses them on the fly. (Thanks Anas for providing me with an example and Masterlink for notifying me about this!)


What bugs do you know about and are planning to fix?


See the Github issues list.

Do you have compiled binaries?


You can find the latest compiled binary for Windows here. (Thanks  Atari2.0 for setting this up and hosting the binary!)
As of 2/7/21, two files are available:
  • AMKFF_latest.zip - Contains the latest version containing all merged changes.
  • AMKFF_latestbeta.zip - Contains the majority, if not all unmerged changes, for those that want a more bleeding edge experience with the program (and if you want to catch some bugs in the process caused by my changes). The branch that contains all of these changes that I have merged into this package is called bleeding-edge.
The SPCs and stats folder were not properly included prior to 3/20/21 due to being empty on distribution, and thus being excluded from the git repository. This has been resolved via a stub file being created in those folders, thus allowing them to be included by default again as an "empty" directory. (Thanks codfish1002 for notifying me of this!)

All builds as of 3/25/21 contain asar 1.81 instead of 1.71.
As of 5/22/22, the main AddmusicK command line binary is now automatically compiled through MinGW-w64, citing a problem with the build produced by Visual Studio 2019 regarding characters not being properly processed and an off-by-one error on the AMK version detection. After fixing a memory leak and an out-of-bounds error, on 5/24/22, I restored the Visual Studio 2019 build as AddmusicKVS2019.exe for comparison purposes. Still working out the kinks,
but you can compare the two! After all, stability is key!
(Thanks Anas, Masterlink and  Anorakun for notifying me that the Visual Studio 2019 builds were malfunctioning!)
The Appveyor script was changed on 6/4/23 due to an update in the website's security hosting the builds.
The outermost layer folder was missing prior to 8/28/23 due to a mistake in the zip creation process omitting this detail, and instead all of the folders were included individually causing zip extraction processes to sometimes put them all out without an enclosing folder. (Thanks werneta for notifying me about this!)
As of 9/9/23, asar.dll is now included along with the .exe file, since if it can be run, overall execution is faster and warnings won't be output. (Thanks  Atari2.0 for requesting this!)

There are two new builds that are currently being concurrently updated with the master branch after having been created at the start of Summer C3 2021:
  • AddmusicK1.0.9_latestRC.zip is the latest release candidate build for AddmusicK 1.0.9. A special AddmusicK1.0.9 branch, branched off of the master branch, was created especially for this occasion. This branch is no longer being updated with the finalization of AddmusicK 1.0.9 on 10/5/23.
  • AddmusicK1.0.9_latestRCbeta.zip is like the above build. Initially, it was designed to include all four of the changes that might require some remoderation (and thus was stored in the AddmusicK1.0.9bleeding-edge branch) as indicated in the Summer 2021 C3 thread, as well as also include the remote gain/anticipation gain restoration, which was affected by one of the issues mentioned above. That usage was obsoleted by the addition of the hot patch VCMD. It may contain some testing material for new stuff intended to be added on to 1.0.9, but ever since I merged in both the hot patch VCMD and remote gain/anticipation gain restorations, this branch is basically identical to the standard release candidate. It does not contain other bleeding-edge branch changes either. This branch is no longer being updated with the finalization of AddmusicK 1.0.9 on 10/5/23.


This build was first created on 10/20/23 in preparation for setting it up as a prerelease candidate:
  • AddmusicK1.0.10_latestRC.zip is the latest release candidate build for AddmusicK 1.0.10. A special AddmusicK1.0.10 branch, branched off of the master branch, was created especially for this occasion.


As of 1/11/24, there is now a bleeding-edge variant of the above build:
  • AddmusicK1.0.10_latestRCbeta.zip is like the above build, but it is based off of the AddmusicK1.0.10bleeding-edge branch, which has some things that are planned to, but are not quite ready to be included in the release candidate. Please note that they may have some quirks and/or safety issues to iron out.


This build was first created on 6/5/24 in preparation for setting it up as a prerelease candidate:
  • AddmusicK1.0.11_latestRC.zip is the latest release candidate build for AddmusicK 1.0.11. A special AddmusicK1.0.11 branch, branched off of the master branch, was created especially for this occasion.


There is also a bleeding-edge variant of the above build initially created on 6/7/24 created at the same time since some changes didn't make the cut:
  • AddmusicK1.0.11_latestRCbeta.zip is like the above build, but it is based off of the AddmusicK1.0.11bleeding-edge branch, which has some things that are planned to, but are not quite ready to be included in the release candidate. Please note that they may have some quirks and/or safety issues to iron out.
  • View the project here on Github

    Note that I recommend updating Asar to version 1.91. The version currently included in the Github repository is 1.91, whereas the version included in a stock AddMusicK build is internally identified as v1.33, which is older than the oldest surviving version hosted on this website! The makefile was adapted from HertzDevil's fork of AddMusicK, since one didn't exist before.

Tag (ul) was not closed.
Thanks for the win for the best tool thread! I'm keeping it going beyond C3 as well, as I immediately copied the stuff (and continued updating it) in the Resource & Tool Releases forum.
I happen to have ripped SPCs of this game that you're not going to find anywhere else (I'm going to pass myself). Thus, I'm adding not one, not two, but three SPC files straight out of the game to assist with the sampled portion. Unfortunately, the raw data format is compressed within the SPC file itself, meaning it's decompressed on the fly, and my own analysis is a bit on the incomplete side (though I do know how it's decompressed). Each one has individual sections, but the channels are dynamically allocated.

Get Ready For This (In-Game Variant)
Get Ready For This (Original Variant)
Get Ready For This (Unused Variant)

The SPCs are of the same thing, but with the following differences...
  • One of them is the in-game variant, using a mixture of "It's In The Game" and a hockey player getting smacked around as the samples. Both are from the EA Sports logo.
  • One of them is my own restored orignal variant (this is NOT an AMK port, but rather reconstructed straight out of the game via me manually modifying the sample IDs that are loaded). Turns out a couple of samples from the actual song were supposed to be utilized, and something went wrong during the process of putting them in: they made it into the ROM, but they failed to actually make it into the game due to an incorrect ID used.
  • The last one is an unused variant, using claps. There are also volume differences in here.