I'm cross-posting this from the SDA forums; I apologize if this information is already known or common knowledge, but I couldn't readily learn anything about it while doing a quick search a few days ago. Anyway, RE: the fall-through-floors glitch
"kareshi, JC583, et al.: Floor drops still require extremely precise timing, you have to whip when falling off a 2-block high ledge at JUST the right frame, and then you'll fall through the floor, assuming you started falling with the correct y-subpixel value. Getting the y-subpixel value to be one of the correct values was what was causing floor drops to appear to be random. However, thanks to zbrannigan @ JC583's twitch stream, a lot of the mysteries have been unraveled. Here is what I have just figured out, with help from him.
Y subpixel memory address = 0336 This value only changes by multiples of 8, and once it hits 256, it wraps around to 0. So, in essence, 256=0. You can use an emulator like FCEUX to monitor this value and use it to determine if you can floor drop or not.
This address changes with any action Simon preforms that moves him along the y-axis. So, jumping, falling, using stairs, etc. Floor drops will only work if and only if 0336=00, 08, or 16. No other values will work. So, it needs to be one of 3 of the 32 possible values in order to work. Once you've determined that you have a subpixel value of 00, 08, or 16, then you must walk off a ledge of 2 blocks high, and whip IMMEDIATELY after walking off the edge. There is only 1 frame that this will work. If you get the frame right, you will see Simon's sprite glitch for 4 frames while falling (he reaches his arm back to whip, then ducks because he starts falling, but his arm is still floating behind him, readying his whip).
Now, how do we force a subpixel value that we want? Well, this is where the fun happens. You begin the game at a subpixel value of 0. Jumping straight up and down increments it by 128. Jumping up a ledge of 2 blocks increments it by 200. Whip jumping increments it by a different amount depending on which frame you whipped (jump, wait 1 frame, then whip results in +184; jump, wait 2 frames, then whip results in +240, etc). Using any staircase resets it to 0. Jumping up a ledge of 2 blocks AND whipping increments it by a different amount depending on which frame you whipped (jump up a ledge, wait 1 frame, then whip results in +8; jump up a ledge, wait 2 frames, then whip results in +64, etc).
Now, for example, if you want to drop of the ledge immediately to the left of Simon when you start the game, you have a few options to force a subpixel value that you need: You can jump up that ledge, wait 1 frame, then whip, and you'll land at the top of the ledge with a subpixel value of 8, allowing you to drop through the floor (this is what JC does in his latest WR run). You can also jump up the ledge (+200), then jump off the ledge (+128), then jump back on the ledge (+200), giving you a value of 16 ( (0+200+128+200) = 528 - 256 - 256 = 16) (subtracting 256 because the address simply rolls over at 256).
Using this information, you can set yourself up to have the proper subpixel address at any given ledge that you need to drop through. Granted, you still need to be able to whip immediately after dropping off the ledge in order to actually execute the floor drop, but this removes any randomness from the glitch. Some floor drops have more complicated setups than others, because the only thing I know of that will guarantee your subpixel value to be at 0 is using stairs, so after using any stairs, if there is a floor drop you need to execute before the next staircase, you must plan every jump/fall carefully in order to set it up properly.
Feel free to ask anymore questions about this trick. I feel I've got a decent understanding of how it works now, after playing and monitoring the memory address for a while, so I'll try to answer whatever else I can."
Also, I'll add in a copy/paste of my notes I took while researching this glitch:
0336=0 yes drop/1 frame window 0336 = ram address for y subpixel
8 yes 1 frame
16 yes 1 frame
24 no
32 no
40 no
48 no
56 no
64 no
72 no
80 no
88 no
96 no
104 no
112 no
120 no
128 no
136 no
144 no
152 no
160 no
168 no
176 no
184 no
192 no
200 no
208 no
216 no
224 no
232 no
240 no
248 no
jump straight up = +128
whip jump straight up = varies, depending on when you whip
jump while walking = +128
whip jump while walking = varies, depending on when you whip
jump while throwing holy water = varies, depending on when you throw
jump up 2 blocks = +200
walk off 2 blocks = +232
jump off 2 blocks = +128
using stairs = reset to 0
jump + whip 1 frame after jumping up 2 blocks = +8
jump + whip 2 frame after jumping up 2 blocks = +64
jump + whip 3 frame after jumping up 2 blocks = +120
jump + whip 4 frame after jumping up 2 blocks = +176
jump + whip 5 frame after jumping up 2 blocks = +232
jump + whip 6 frame after jumping up 2 blocks = +0
jump + whip 7 frame after jumping up 2 blocks = +56
jump + whip 8 frame after jumping up 2 blocks = +112
jump + whip 9 frame after jumping up 2 blocks = +168
jump + whip 10 frame after jumping up 2 blocks = +224
jump + whip 11 frame after jumping up 2 blocks = +24
jump + whip 12 frame after jumping up 2 blocks = +80
jump + whip 13 frame after jumping up 2 blocks = +136
jump + whip 14 frame after jumping up 2 blocks = +192
jump + whip 15 frame after jumping up 2 blocks = +16
jump + whip 16 frame after jumping up 2 blocks = +72
jump + whip 17 frame after jumping up 2 blocks = +128
jump + whip 18 frame after jumping up 2 blocks = +184
jump + whip 1 frame after jumping straight up= +184
jump + whip 2 frames after jumping= +240
jump + whip 3 frames after jumping= +40
jump + whip 4 frames after jumping= +96
jump + whip 5 frames after jumping= +152
jump + whip 6 frames after jumping= +208
jump + whip 7 frames after jumping= +8
jump + whip 8 frames after jumping= +64
jump + whip 9 frames after jumping= +120
jump + whip 10 frames after jumping= +176
jump + whip 11 frames after jumping= +232
jump + whip 12 frames after jumping= +32
jump + whip 13 frames after jumping= +88
jump + whip 14 frames after jumping= +144
jump + whip 15 frames after jumping= +200
jump + whip 16 frames after jumping= +0
jump + whip 17 frames after jumping= +56
jump + whip 18 frames after jumping= +112
jump + whip 19 frames after jumping= +168
jump + whip 20 frames after jumping= +224
jump + whip 21 frames after jumping= +24
jump + whip 22 frames after jumping= +80
jump + whip 23 frames after jumping= +136
jump + whip 24 frames after jumping= +192
jump + whip 25 frames after jumping= +248
jump + whip 26 frames after jumping= +48
jump + whip 27 frames after jumping= +104
jump + whip 28 frames after jumping= +160
jump + whip 29 frames after jumping= +216
jump + whip 30 frames after jumping= +16
jump + whip 31 frames after jumping= +72
jump + whip 32 frames after jumping= +128
jump + whip 33 frames after jumping= +128