The crumbling ledges in CV3 crack at different speeds, in case you didn't notice. It takes 16 "steps" (Game Maker users know what I'm talking about) of contact with a crumbling ledge to normally crack the block, and 80 steps (roughly 1.25 second uninterrupted) to force it to collapse. However, in the Catacombs and mountains (stages 7 and 10 in the coding), ledges crumble twice as fast - it takes 8 "steps" to crack and 40 steps (roughly 3/4 a second) to collapse.
Also, only the last 14 tiles per screen (256 pixels or 16 tiles) may be crumbling ledges. The two leftmost tiles of a room cannot crumble and are always walls. Because the RAM addresses are reserved for other things, this rule applies for all screens. Also, the tiles are sorted by x-coordinates, so no two tiles can vertically overlap. Note in a vertical stage the rules are slightly different.
So this is acceptable (O is solid, X is crumbling, _ is skipped):
OO_XXO__XXOO__OO________________
________________OOOOOOOOOOOOOOOO
______________XX________________
But this is not:
XXOO__X_X_OO_XXXXXXX__OOOOOOOOOO
______XXXXXX____X_XX_X________OO
For vertical rooms, I think the addressing is a composite of the x and y coordinates. I haven't actually tackled that part yet, since I did all my testing in the Catacombs and it's purely horizontal.
Leaving one screen such that a crumbled tile is no longer visible will reset that tile, but the crumble counter for that tile will not be reset. Perhaps this was due to an oversight on Konami's part, or it could be that the tiles start at 4 instead of 12 for this very reason. Since the counter does not reset, if the counter was 3 steps away from collapsing the ledge before leaving the screen, it will now be 3 steps away from the first crack, which in the grand scheme of things is a negligible amount of time. This also means one tile's crumble counter will affect the any other tiles using the same crumble counter.
Guess it's not useless trivia for anyone recreating CV3.
(it's too hot to sleep, so i went back to cracking code and noticed this_)
To give a rough idea of how the ledges were handled:
find tile map cell for tile under player
-if it is 4 (fresh) or greater than 11 (cracking)...
--find the player's x coordinate in the screen
---divide by 16 and use that value to index the timer
----add 1 to the timer, if it reaches the limit...
-----change tile map to 12 or increase by 1 if greater than 11
------if it's 16 (#10), then destroy that tile