Name: | SMW Central Production 2 - Machine-Made Mayhem |
Authors: | KungFuFurby, Magi, Masashi27, Torchkas |
Added: | |
Insert Size: | 0x30CB bytes |
Type: | Song |
Sample Usage: | Many |
Source: | Original |
Duration: | 5:16 |
Featured: | No |
Description: | A long, upbeat, rave party-esque factory song that goes well with a rhythm-based level, a dance party-inspired level,a factory that focuses on heavy machinery or a very long factory level. Plays in Incineration Station and Musical Mechanisms. |
Tags: | athletic final industrial night urban |
Comments: | 10 (jump to comments) |
Rating: |
SMW Central Production 2 - Machine-Made Mayhem
SMW Music → SMW Central Production 2 - Machine-Made Mayhem
Turn on JavaScript to preview files without downloading them.
Comments (10)
There's a comment mentioning that a tick could be missed, especially if the song plays really fast and/or the game is lagging. Using a series of CMP : BCC to split up the song divided by these events (NSMB "bah") and knowing if the current tick is outside the range is one way it will never miss the given tick, even if it advances past it.
And, wait, the song was originally $C0 ticks per beat? This version is $30 ticks per beat.
Truth be told... I was going by the way the original SNES-side code was handling things on the level Musical Mechanisms. Musical Mechanisms "wraps around" every $C0 ticks using the internal multiplication/division registers that the SNES has (this is also AddmusicM's behavior, which increments the high byte and which this operation replicates on the SNES side to some degree). It only reads the remainder in this case when handling the level code: it otherwise doesn't need the quotient. That particular comment I had was to avoid a wraparound desynchronization because it was not a power of 2: instead, it is divisible by 3.
Here's the uberasm level code I made myself (the division is made by Akaginite) that detects a beat:
Info that I found:
Also, the pause SFX behavior it was adapted for was A Super Mario Central Production 2's. That game immediately stops the music on pausing, but plays the pause SFX. Stock AddmusicK has a different mechanism (but then again, it was changed to some degree after 1.0.5, which was the original stock AddmusicK version that was forked off of in the long run).
If you are tracking by raw tick counter and going after specific ticks, I highly recommend using bcc (less then) and bcs (greater than or equal to) instead of bne or beq.
There's a comment mentioning that a tick could be missed, especially if the song plays really fast and/or the game is lagging. Using a series of CMP : BCC to split up the song divided by these events (NSMB "bah") and knowing if the current tick is outside the range is one way it will never miss the given tick, even if it advances past it.
And, wait, the song was originally $C0 ticks per beat? This version is $30 ticks per beat.
Most of the other stuff from the initial port was either raw BRR files from other SNES games or were converted over from a non-SNES game. With regards to the non-SNES sources, I inherited the kick used during the first 20 seconds or so of the song, but I downsampled and looped it. I don't remember where the wind came from, but I also inherited that from the original port from the BRR that was already made from it.
Also, this song is almost as long as the full version of bad apple, just being a second shorter than it.
First, here's a breakdown...
- Masashi27 created the original version of the song.
- Magi revamped the song and made a MP3 render of it.
- Torchkas started porting it over, but didn't finish it. I ended up asking to collaborate (well... it kind of turned out that way: I provided my beta as things went on, though I don't remember anything else on the other side. I ended up redoing the sound design anyways), which was accepted. The process took longer than expected because of my own dissatisfaction of AddmusicK, causing me to go back to my fork (said fork, though more C++-side than SPC700-side since I decided it wasn't worth it to try to revamp the code since it was already custom in the first place), ended up being used in the final build). Torchkas's contribution in the final version was some MML for the first portion of the song (though I didn't take all of it in the long run) as well as some of the samples (with me doing some additional editing), hence the credit.
- I handled the final version of the song you hear here. Yes, it has a wavetable effect at the very beginning, courtesy of the filter steps. Although I did some customizations earlier, 3:00-5:16 in particular were mine (yeah, I may have gone overboard there...).
A few notes about this song for usage...
- The version you see here uses pure #optimized. Torchkas had asked I use the originals if I used the stock samples, which I partially accepted for the distorted guitar and slap bass (most of the other waveforms I didn't bother with, and on one of them I used my own smaller copy because I wasn't happy with the optimized one and the default one may or may not run into hardware pitch overflow issues, since I used a shrunken one). It's not like that here because AddmusicK 1.0.8 auto-optimizes non-sample group samples that aren't used in the music, and this would result in an ugly situation for SFX, especially since it has inconsistent handling when compiling for ROMs.
- The insert size is about 0x200 bytes larger than what it is in SMWCP2's ROM. This is because $DD's target note doesn't play nice with $FA $02, and I specifically patched that for SMWCP2 (it's a very small patch). Thank goodness I didn't squeeze too much out of this...
- Although I have a few safeguards in here when transitioning from other global songs that use echo (though some known bugs with those kind of interactions can make this situation a bit ugly), please do not enable echo for SFX with this song, since I use inconsistent FIR coefficients in the song. This also includes all zeroes to properly clear out the buffer at some points.