# Changelog

## Version 1.0 - 2014-04-07

- Initial release

## Version 1.0.1 - 2014-04-12

- Fixed incompatibility with PowerTool (conflicting NMI hijack)
- Fixed a bug that rendered #option smwvtable useless
- Fixed a bug that required a song using #option smwvtable to be looped
- Fixed a bug where using the $FA $05 or $FC commands in #amk 2 songs (where those commands were replaced with remote code) would cause the song to crash

## Version 1.0.2 - 2014-11-26

- Fixed a bug in parser 1 emulation mode that could causes crashes in certain circumstances and unpredictable behavior in others.
- Fixed a bug with the $F9 command that caused it to only take one byte of data instead of two.
- Added the ability to visualize the memory consumption of a song.

## Version 1.0.3 - 2015-04-28

- "I believe it's just a minor SFX fix." - Sinc-X

## Version 1.0.4 - 2015-07-20

- "this fixes a bug where using code insertion in 1DFC sound effects would cause an spc crash." - HuFlungDu
- Upgraded to Visual Studio 2015
- Fixed C++ header files in AddmusicK source

## Version 1.0.5 - 2017-02-27

- "This version fixes the bug that caused random music to play after the P-switch timer ran out on accurate emulators while using the SA-1." - Medic

## Version 1.0.6 - 2018-05-15

- "This version fixes the issue where certain error messages do not show up in the AddmusicK GUI, especially the one about missing sample groups." - HertzDevil
- Upgraded to Visual Studio 2017

## Version 1.0.7 - 2020-10-08

- "Fixes an issue with hardware timing after uploading SPC data" - Lui
- "This version fixes the bug where the music would break sometimes when pausing and unpausing **IMPORTANT NOTE: This adds a new freeRAM !FREERAM_FIX_PAUSE used in the asm\SNES\patch.asm which may need to be checked for conflicts**" - Medic
- "Added a fix for bank crossing issues on large SA-1 roms" - Vitor
- "This version fixes the bug where AMK would break the credits music." - Medic
- "This version alleviates some of the slowdown caused by higher tempos and/or frequent pitch bends." - KungFuFurby

## Version 1.0.8 - 2020-11-12

- "added my "Better Pause" fix to prevent songs that use long notes/legato from breaking when pausing. Also removed Medic's pause fix from 1.0.7 since it's obsoleted by this change. Do note that a new SFX was added in slot $2C in $1DF9, make sure you don't change it!" - KevinM

## Version 1.0.9 - 2023-08-28

This changelog is organized a little bit differently because of the massive number of modifications made to it.

- Overall
  - "Upgraded to Visual Studio 2019." - Atari 2.0
  - "The asar version has been updated from 1.33b to 1.81. The code and DLL integrations have also been updated accordingly to account for any changes and deprecations that have occurred between these versions." - Atari 2.0 and KungFuFurby
  - "Fixed a bug where the DLL file would never be used because asar was being called before the lookup would occur."- Atari 2.0
  - "This version makes AddmusicK's core compiler cross-platform." - HertzDevil and nyanpasu64
- Command Line
  - "-sfxdump and -dumpsfx can now be interchangeably used with each other: the former was in the documentation, and the latter was what was officially used in the C++ code." - KungFuFurby
  - "Fixed a bug where using -sfxdump/-dumpsfx while the lowest numbered local song did not exist outputted SPC files with no samples included." - KungFuFurby
  - "This version fixes a formatting error in -? help output." - nyanpasu64
  - "This version fixes a crash when using too many songs on the command line while generating SPC files." - nyanpasu64
  - "This version removes unnecessary reading of files supplied from CLI, which caused a crash while generating SPC files when there were zero global songs." - nyanpasu64
  - "Fixed a memory leak that was occurring while handling sample groups." - Atari 2.0
- Gameplay
  - "Fixed a bug where the Yoshi Drums were not being disabled when Mario teleports into a room without Yoshi without disembarking first through a cutscene or otherwise. This does add a new hijack at $02A763 in the ROM in order to do this, though, so be careful..." - KungFuFurby
  - "Fixed an issue with non-standard stage/boss clear fanfares when the P-Switch/Starman theme is active." - KevinM
  - "Fixed a bug where setting the P-Switch and/or Starman song IDs to zero would result in the song ID being zeroed out on every frame, preventing user code from modifying the song ID while a P-Switch and/or Star is going off." - KevinM
  - "This version prevents garbage from randomly appearing during Submap transitions." - Barrels O' Fun
  - "This version adds the option to have the P-Switch and Starman themes retrigger when recollecting a star or pressing another P-Switch. The option is enabled by default because it replicates vanilla SMW's behavior, though it can be turned off to replicate its behavior on AddmusicK 1.0.8 and earlier." - JUMP Team, SimFan96, KevinM, Anas and KungFuFurby
  - "Fixed a bug when pressing a P-Switch as the star timer was running out would retrigger the Starman theme until the timer completely ran out, then ran the P-Switch theme normally." - JUMP Team, SimFan96, KevinM, Anas and KungFuFurby
  - "Fixed a bug where the Welcome song would not play in a new save file, and instead the default level music played." - KungFuFurby
  - "Merged several patches together in tweaks.asm to resolve a conflict between them. The code modifications at $9723-$973F have been merged, which resulted in a few cuts due to a conflict: specifically, writing !Title to $9724 (overwritten by writing !Welcome to the same location) and skipping Bowser fight music at $9734 (overwritten by a BNE opcode to $9738 on a different patch)" - KungFuFurby
  - "Added some fastrom-related speedups for explicit JML/JSls when not using the SA-1." - KevinM
  - "Local songs are no longer reloaded while playing a level if they are triggered after playing a global song, provided that the local song ID that was last used still matches the ID requested." - lx5 and KungFuFurby
- Built-In Original Songs
  - "Added #spc tags to every global song." - KevinM
  - "Global songs have better optimization, saving 0xA3 (163) bytes total." - KevinM
  - "Fixed wrong note that played in "Bonus End" after the song was supposed to be over." - KevinM
  - "Fixed a note that was not properly keyed off after the goal whistle in the "Boss Clear" song." - KevinM
  - "Redid the Bowser Defeated and Bowser Zoom Out songs for better accuracy (replicating some of the bugs in the original song in the process) and to remove a couple of fractional note length rests in the process." - KungFuFurby
- BRR Samples
  - "This version removes redundant silent BRR blocks from the end of non-looping samples in the #default sample group, saving $17A bytes total." - Pinci and KungFuFurby
- Documentation
  - "Added an ARAM map page, complete with predecessor Addmusic memory usages." - KungFuFurby
  - "There is now a historical hex command reference in order to assist from adapting from past Addmusics, as well as documenting their former purposes. Not everything has an exact equivalent yet, though." - KungFuFurby
  - "Visualizations, which has been present since AMK 1.0.2, has now been documented and its folder is now included by default." - KungFuFurby
  - "This version now contains a more accurate ADSR envelope viewer." - HertzDevil
- Music Hex Commands
  - "Restored the Tremolo Off and Pitch Envelope Off hex commands, the latter having never actually been enabled in Vanilla SMW. However, the slots occupied don't match Vanilla SMW's because they were overwritten: instead, they are the $FD and $FE commands, respectively." - KungFuFurby
  - "$FB command is now fully functional across all channels. Previously it wasn't working because of a failure to use indexing in the assembly code. In addition, a double key on bug was corrected, and some fine print regarding setting up notes past !WaitTime (unless their lengths are quicker than !WaitTime in the first place) was added on to avoid unintentional clicks (particularly with glissando)." - KungFuFurby
  - "Added a new hot patch system through two new hex commands in the $FA section: $FA $7F (for presets) and $FA $FE (for individual patch bits). This is specifically designed to both replicate playback differences from past Addmusics (and vanilla SMW) as well as add fixes to music playback that won't break playback of past music that rely on these bugs." - KungFuFurby
  - "You can now use remote gain directly using $FC $WW $01 $XX $YY, where $WW is the gain value to set on trigger, $XX is the event type, and $YY is the number of ticks when using types 1 and 2. Note that unlike AMK Beta, you have to handle the restoration manually for the next note, but unlike AMK Beta, any remote code event type can be used." - KungFuFurby
  - "Two new remote code events have been added on: 7 disables non-key on remote code events, while 8 disables key on remote code events." - KungFuFurby
  - WARNING: The following changes may affect playback of your songs (and require $FA $7F $01 at the beginning of your song to take effect, though you can also individual patches by bit with $FA $FE xx...):
    - "The $DD command now accounts for per-channel transposition, whereas it previously only accounted for global transposition." - KungFuFurby
    - "GAIN is now the first thing written to the voice DSP registers when setting up an instrument. This prevents a problem with unexpectedly using a previous gain value (which can be a direct gain volume, and thus suddenly changes the volume value) while switching from ADSR mode to GAIN mode." - KungFuFurby
    - "Arpeggios now pause their sound output when going through rests. They resume upon another note playing." - KungFuFurby
    - "Readahead now looks inside subroutines ($E9 command) and superloops ($E6 command), rather than jumping over each one. There is a limit of one loop iteration each before exiting to avoid excessive reading of bytes." - KungFuFurby
    - "Echo writes are no longer enabled by default when initially setting up the echo buffer through the $FA $04 command (instead they are merely not modified). This most notably would affect the zero EDL case: if echo writes are not explicitly enabled beforehand, most commonly via the $F1 command, then there will no longer be an effect on the sound when using any echo-related DSP registers, because $FF00-$FF03 are no longer written to, which in turn allows extremely large songs to use that area without a fear of losing data." - KungFuFurby
    - "Fixed a bug where the $F3 command was failing to zero out the pitch base fractional multiplier. This is enabled by default when using #amm due to AddmusicM not supporting fractional pitch base multipliers at the time." - KungFuFurby
    - "Fixed a bug where glissando was not disabling itself after one note: instead, it was doing so after two notes." - KungFuFurby
    - "Fixed a playback inconsistency with Addmusic405 songs where rests could skip keying off notes if they were not encountered during readahead." - KungFuFurby
- Music MML Parser
  - "Fixed a fatal bug when the lowest channel ID defined is non-zero and a command not filtered out beforehand that outputs hex and/or note data is defined outside the scope of all of the channel markers." - KungFuFurby
  - "Fixed a bug where specifying an o after a $DD command would freeze AddmusicK during hex validation." - KungFuFurby
  - "Fixed a bug on the detection of the lowest note possible." - KungFuFurby
  - "Fixed a big bug where uppercase notes would refer to undefined arrays, meaning they would output wildly inconsistent data." - KungFuFurby
  - The parser has been updated to version 4 with these changes (some of these were inherited from Codec's AddmusicK Beta, which used version 3 - this version has not yet been fully implemented due to some extra requirements that are not yet satisfied by the stock AddmusicK build on the SPC700 side):
    - "Added remote command reset syntax via (!!0), (!!-1), (!!1), etc." - 6646
    - "Added fade support to the v (volume), t (tempo) and w (global volume) MML commands." - 6646
    - "Exact tick note lengths and default note lengths via the l MML command can now be used with note length modifiers for music." - KungFuFurby
    - "Fixed a bug where #halvetempo and #option dividetempo were not dividing the tempo ratio at all because they were immediately returning. Multiplication was working fine, though. Note that if the tempo ratio is 1, this will still immediately return since it is redundant." - KungFuFurby
    - "Added a new option directive: #option amk109hotpatch" - KungFuFurby
  - "Added bug exploitation warnings for songs prior to #amk 4, specifically affecting the utilization of the $FC command, using o in a target note after using a $DD command, using notes that were too low in pitch, and using uppercase letter notes. This is because these are allowed to happen in prior parser versions, but due to the amount of time that has passed between when #amk 2 debuted (with the initial release of AddmusicK), other users may be unaware of these bugs occurring and may still be using a previous version of AddmusicK. In addition, the uppercase note problem is particularly irreconcilable because it is caused by an out of bounds bug, which can vary from build to build when manually compiled." - KungFuFurby
  - "Added warnings for using fractional tick lengths caused by either note length divisors, dotted notes or triplets. They were already present when dividing by a tempo ratio." - KungFuFurby
  - "Upgraded the manual note warning. Now it identifies duration/quantization bytes and the phrase end marker, the last one being potentially fatal to the song if the .txt file was mislabeled with the wrong parser." - KungFuFurby
- SFX
  - "Both the jump and girder/grinder SFX from $1DFA now have exact replicas. For the jump SFX, the one from previous versions is still there as an alternative. Please note that these new SFX take SFX $1DF9 slots $2D-$2E and SFX $1DFC slots $36-$37: please do not change these IDs." - KungFuFurby
  - "Both 2B Jump and 35 Jump are now consistent with each other in that they don't use a ? marker in Addmusic_sound effects, as their data have been updated accordingly to let the program generate the end marker by default without having a redundant one contained inside." - KungFuFurby
  - "The old hardcoded SFX priority system has been replaced with a more soft-coded one stored directly in sound effect files. All SFX, including $1DFA SFX, have been adapted accordingly to utilize the SFX priority system. Although most of these priorities are not used by default, vanilla values are provided." - KungFuFurby
  - "The P-Switch SFX, which had existed earlier but had both not been programmed on the SNES-side and had some problems on the SPC-side, is now in full working condition, complete with updates to the SNES-side hijacks to account for whenever it is active." - KungFuFurby
  - "All SFX data has been optimized to remove redundant bytes across the board. In addition, $C7 is now fully functional and pitch envelope delays are now working, and 21 Valley of Bowser appears.txt in $1DF9 now properly restarts like vanilla SMW." - KungFuFurby
  - "1B Grinder click 2's data was relocated to 1A Grinder click 1, and then was removed in favor of adding a * marker to 1A Grinder click 1. The latter file was originally a blank text file that used a ? marker, which is pretty redundant as it goes to the next SFX instance without doing anything." - KungFuFurby
  - "The $FF SFX command has been updated to actually play the last note endlessly using the last saved note data, rather than just simply go back a few bytes and try and fetch the note again. This avoids any ambiguities caused by trying to scan backwards." - KungFuFurby
  - "Fixed various interferences between the SFX and instrument setup, arpeggio, pitch envelope, note, switching global songs, and fine tune (the last one dating all the way back to vanilla SMW). Note that one of the snippets of code, regarding noise frequency conflicts between SFX instances, has been made optional through asm/UserDefines.asm because it never actually happens in vanilla SMW since only one channel uses noise, and a second one has been made optional regarding allowing matching noise frequencies to stack on each other in case the user doesn't want an unexpectedly loud noise." - KungFuFurby
  - "Fixed a regression from 1.0.7 where playing noise in the same channel as the pause SFX was causing note sticking problems due to the FLG register getting overwritten." - KungFuFurby
  - "11 Pause, 12 Unpause and 12 Unpause (silent) have had their ASM relocated to the internal sound driver code, and thus they only contain a jmp opcode in their SFX instances. A copy of the original ASM (in optimized form) has been saved for reference and as an example." - KungFuFurby
  - "All SFX can now have their channels redefined through asm/UserDefines.asm. Vanilla values are provided, since they're different than what the default values were from past AMK versions." - KungFuFurby
  - "$1DFA SFX now use replica SFX sequences by default instead of just hard-coded ASM. The hard-coded ASM is still in there as a user define switch both for historical reasons and in case of a malfunction." - KungFuFurby
  - "The relocation for jump and girder SFX to either $1DF9 or $1DFC is now optional, rather than being required between these two locations. Now, if neither of them are true, $1DFA is the default, and the fixes in question ensure that these don't wreck too much havoc." - KungFuFurby
- SPC & ROM Compilation
  - "All user-redefinable variables now have a new home in asm/UserDefines.asm. This allows both SNES-side and SPC-side code to share defines put here." - KungFuFurby
  - "All user-redefinable variables no longer use the # character in them for easier use in conditional logic. This is instead handled in the ASM files themselves." - KungFuFurby
  - "Added the ability to filter out sound effects and the playback code through !noSFX in asm/UserDefines.asm." - KungFuFurby
  - "Global songs' echo delay values now act as the minimum echo buffer size to allocate a local song's, and therefore are now tracked to prevent memory overflows caused by a global song's echo buffer being too large, as opposed to a local song's." - KungFuFurby
  - "Made sample filtering more consistent between SPCs and ROMs by factoring in the user individually picking samples from sample groups (and thus inheriting their important flags), as well as having all user-defined samples be important." - KungFuFurby
  - "Fixed a bug where duplicate samples were being loaded in the same song when the important marker was set, causing the filesize of the song to increase." - KungFuFurby
  - "Fixed a serious bug where mixing .bnk and .brr files between songs was causing the entire ROM to fail to include the soundtrack due to an exception occurring." - KungFuFurby
  - "Fixed a false positive in detecting AddmusicM when the filesize of the sound driver + sound effects was $xx52 bytes. Now the entire RATS tag is scanned to avoid this situation." - KungFuFurby
  - "SPC files no longer have a one-byte stack underflow when being generated." - KungFuFurby
  - "Fixed a bug where looking for samples relative to the music file itself would fail because of the actual path being incorrectly constructed once it was located." - KungFuFurby
  - "GetSampleTableAddress on the SPC side has been optimized out in favor of writing directly to the DSP registers via the standard loading routine." - KungFuFurby
- SPC700-Side ASM
  - "The SPC-side assembly files have been modified to make tracking of raw memory locations in the $0000-$03FF section easier when searching the text files, mainly in between setp/clrp sections, but also just prior to calls for L_1075 due to the use of indirects inside this routine." - KungFuFurby
  - "Various code optimizations, some of them adapted from Akaginite's optimizations. In addition, Aikku contributed an optimization in the pitch code. As a result of these optimizations, $0380 and $0386 are no longer used by default due to being only a zero or non-zero case: instead, they have been consolidated into simply modifying opcodes/gates embedded directly within the code. In addition, $0383 has been freed since its purpose is now recycled by a different memory location." - KungFuFurby
  - "Fixed a critical bug where having a global song using echo and a local song setting up a buffer with an EDL size of 0 through the $FA $04 command would cause a sound driver crash. The main cause is not waiting for the echo buffer to finish after shrinking the EDL, and probably a misinterpretation of what happens when the EDL is zero... because the echo buffer writes are still on, and thus anytime the buffer is to be shrunk and relocated, the previous buffer must have done one round of writes." - KungFuFurby
  - "Fixed a bug where using a long chain of loops or label loops (or anything that causes readahead to try to read more than 256 bytes) would crash the sound driver." - KungFuFurby
  - "Fixed a typo in the code where !MaxEchoDelay was not being zeroed out prior to loading new data." - KungFuFurby
  - "Fixed a bug where turning off Yoshi Drums was not unmuting channels." - KungFuFurby
  - "A leftover from AddmusicM's behavior of how it handled Yoshi Drums, which currently doesn't affect anything else, has been modified to have its flag, stored in $0160, turn itself on if any channel has Yoshi Drums active, and otherwise be off." - KungFuFurby
  - "Corrected a bug where playing a different global song in the middle of a panning fade without initializing the panning would cause the panning to be slightly off center." - KungFuFurby
  - "Fixed a bug where the surround settings were not being properly cleared on song initialization." - KungFuFurby
- Historical Addmusic Adaptations
  - "Most non-native hex and MML commands from earlier Addmusics now output a warning. The exception to this rule is the $FA command in AddmusicM, which now outputs an error because of a conflict with the special pulse wave oscillation speed command." - KungFuFurby
  - "Fixed a bug where anticipation gain/remote gain conversions from the beta AMK version were not being fetched in the correct order due to the way they were initially organized." - KungFuFurby
  - "Fixed a conversion bug from Addmusic405 and AddmusicM songs where the percussion was outputting percussion note data on #6 and #7 instead of normal notes after the initial percussion note was defined." - KungFuFurby
  - "Fixed a conversion bug from Addmusic405 and AddmusicM songs where the & command was not properly factoring in a preceding tie, causing the intended delay effect to get lost." - KungFuFurby
  - "Fixed a conversion bug from AddmusicM where the transposition values were not being overwritten by the hard-coded instrument transposition table." - KungFuFurby
  - "Fixed a bug where the #pad command was only supporting two hex digits with #am4 songs." - KungFuFurby
  - "Revamped the anticipation gain/remote gain conversions due to the original design of the remote codes not being compatible with both of them running at the same time. Two reserved remote code events (5 and 6, of which 5 was originally reserved in the first place) are now used that can be used at the same time (and come with a feature to replicate the instrument restoration on key on without having to use a third remote code event), with two additional ones also created that can be used outside of these conversions." - KungFuFurby

## Version 1.0.10 - 2023-12-19

- Gameplay
  - "Split the Castle Destruction fanfare and Welcome songs into separate defines. Now they can use separate song IDs as needed: in Vanilla SMW they used the same ID, so they're still defined with matching IDs in the default settings." - KungFuFurby
  - "Added a user define to allow the Bowser fight music to override the default level music upon loading the Bowser fight." - KungFuFurby
  - "Added a user define to allow the Welcome music to override the default level music upon loading the intro level upon loading a new save file." - KungFuFurby
  - "Fixed a bug where the Yoshi Drum Hijack were conflicting with other SNES-side patches that used the PLB and RTL opcodes in this area." - KungFuFurby
- SPC & ROM Compilation
  - "Fixed a regression where duplicate samples were being assigned EMPTY.brr whereas they are expecting to still be the same sample. Now they use duplicate pointers so that they can be referred to at either internal sample ID. This also means that pre-existing cases from the sample groups will no longer have duplicate sample data loaded, meaning less memory consumption." - KungFuFurby
  - "Upgraded song-related memory overflow errors by no longer rounding them to the nearest $100 bytes and also identifying whether or not the echo buffer or the sample data caused the overflow." - KungFuFurby
- Historical Addmusic Adaptations
  - "Added a warning for using non-standard FIR coefficient table IDs, mostly because they won't sound consistent due to an out-of-bounds read situation. Addmusic405 songs already output an error." - KungFuFurby

Return to the main page