Blue coins can be collected more than once if collected on the final frame of the switch timer when BLUE_COIN_SWITCH_RETRY is enabled. Fixing this on its own isn't enough though, as the blue coin switch also doesn't check for whether that coin was collected when it resets.
This allows hack collaborators to toggle debug features such as TEST_LEVEL without the need of pushing it up and negatively impacting other hack contributors. This is also useful for general HackerSM54 development, since it may be desirable to have PUPPYPRINT_DEBUG enabled by default or to not have to worry about pushing config defines up to a development branch that risk getting merged later on.
To use, simply create a new config_local.h file and place it in the config folder. Add #pragma once to the top of the file and add all the defines you wish! If you wish for something to be undefined when it's enabled by default, simply use #undef as opposed to a commented out #define. Use a combination of #undef and #define if you wish to change an existing value of a define. This local configuration will be completely ignored if DISABLE_ALL is being used in config_debug.h.
Regarding HackerSM64 Development: All feature developers are still responsible for making sure their features work in all scenarios regardless of whatever they have toggled in this file by default. This config file may be convenient but it is not an excuse to not properly test your changes!
rnc1 has noticeably slower load times in vanilla than yay0 does. gzip and mio0 are pretty useless and can be yeeted from the repo, but that's not part of this PR's scope.
• Changed the generic object death function to now also check that an object has landed and is over lava before killing it. Previously it would die instantly if it was above lava which resulted in objects randomly dying above lava
• Also changed the same function to kill a non-buoyant and killable object (e.g. goombas) right when it touches water. Previously it would slowly sink to the bottom and then instantly die upon touching the floor underwater which is strange.
• Changed where lava checks are done so they are done in the same place as other object flag checks. This avoids bugs where e.g. objects die when touching the edge of a platform that is over lava, because the ground flags are updated, then the object's floor is updated to be over the lava, and then the lava move flags are updated causing the object to think it is over lava and touching ground at the same time (making it die)
• Fixed the coin flicker define for regular non-bully coins because apparently it just never worked and no-one noticed? Only the coins that come from bullies worked with this define and I guess people only ever tested coins in lava with bullies. I rewrote the coin behavior to be a little closer to the bully one. I think in the future the two types of moving coins could easily be merged into one object, they don't act visibly different at all.
Tested the PR with a lot of goombas being dropped into lava/water and also this stuff is in Mario Builder so I've been testing it there too. Feel free to test more.
* Move audio TTLs to improve dcache
Saves over 100us even when audio is idle
* Improve additional audio runtime by reducing some unnecessary float math
* Pause channel/layer processing on sfx channels when idle
* Fix possible floating point UB/crash with gPitchBendFrequencyScale