Preview of coming attractions: here's the first level of Crystal Caves 2! This episode is significantly harder than the first one, which hopefully will make it a much more interesting TAS.
Link to video
I need a little feedback. I did two more levels, and after reviewing the recording a few times, I have some gnawing questions about methodology.
First, here's the video for reference:
Link to video
In level 2, starting at 2:44, I jump across the room to collect ammunition purely for entertainment value, otherwise, I'd be moonwalking in place for a really long time getting nothing accomplished. But after watching it a few times, I think if I avoid jumping back for the gem at 2:32, I can get that gem during the cross-over, and the frames saved avoiding that initial jump can instead be used to reach the block underneath the blue lever, meaning I can end the gravity reversal jumping from a 'higher' position.
Making this change will save negligible time, but in TAS there's no such thing as negligible time. The real problem is this means I'll need to completely re-record that section and the level afterward. Since I've done the routing already it won't take as long, but the prospect is still not appetizing. I assume that this is just part of the learning process, but is there any way to pragmatically maintain multiple drafts of a run? If I start re-recording from the breakpoint, I assume that I will lose all subsequent inputs and have to redo them? As far as I've seen there's no way to splice in a few different keystrokes to an existing run and shift the timestamps for subsequent input back a few milliseconds.
I think someone made an mod to the emulator precisely to solve your problem (being able to splice input files together easily). I forget what the mod is called.
Welcome to the pain that is JPC-rr. You are correct, if you start from a save state, you'll lose all inputs afterwards. I created some lua scripts to do exactly what you're looking to do: change a few inputs and keep the rest, but it's not perfect and still requires time to resolve desyncs. If there's a lot of work you'd have to redo, then it will be worth trying the scripts. If it's not much rework, then just doing the rework would be faster.
I'm slowly working on an improvement on this, but it's been very hard to find time to progress on it in the past few months. I'll share it as soon as it's done, but for now, either redoing your work or using the lua scripts to make modifications are your only viable options.
EDIT: Also, in your second level, is it possible to do the right side first, and then head back over to the left with the anti-grav time remaining?
I tried that would each of them, and the timing on their walk cycle works out such that I actually take two hits trying to walk through them. If I didn't have to stop for the jumps, it might be possible, and since I'll be recording this level anyway to make the change I proposed in level 2, I'll try again and see if there is an opportunity with the slightly modified timing. I agree that it's kind of painful to watch, especially since that level has extreme low gravity recoil.
I misread this at first because I thought you meant doing the right half of the level, but I see that you meant the right set of crystals on the second reverse gravity section. I just tested it playing casually in DOSBox, and you are indeed correct that that route is also workable. I'll adopt that method for the TAS route, I think.
I've re-done those 2 levels (with your improvements, thanks for the feedback!) and am now trying to crack a mystery.
This is level 16 (by the game's internal numbering system).
See that platform midway up the screen on the far left? The blue one with the yellow crystal on it?
I ran the game in DOSBox and had a little difficulty jumping onto it from the green hill, but got it on the 3rd try or so. The weird part is that now I'm trying to do it in JPC-RR, I... can't do it. At all.
There's a Let's Play I found that shows about how tricky this jump is; I've linked it here with a relevant timestamp. (Some cursing, if that's a concern for any reason)
Link to video
Generally, when Mylo is walking, I hit F 4 times before he advances a frame (probably not the right term, because the fade-in animation when entering a level does advance incrementally with a single F press, but I don't know the term to distinguish between a frame and and increment of movement). To find the optimal spot to jump from (most of the time) I'll advance 4 F-taps and try a jump, load the save state and try again 4 frames later.
But I've tested every single frame that can jump there. If it jumps too early, Mylo hits his head on the block with the hidden crystal, loses his momentum, and falls back onto the platform below. There are a few frames where he hits the next block, but falls before finding footing on the other platform. Normally, at this point, one increment of progress forward would be enough to get footing, but I hit a really strange point where now he hits right before the platform, but then falls straight down as if he goes one frame down before he goes one frame left.
I tried testing in-between frames by sending the jump command during each of the 4 frames before the animation changes, all the way from way too early to falling off the ledge, and none of the jumps succeed. I'm wondering if it also requires some kind of serendipitous alignment of animation frames? Could it be a problem with the emulation? Is there any way for me to do finer frame advancement?
I'm gonna sleep on it and see if I come up with any ideas, but for now, I'm stumped.
Sanity check: I used jpc-rr briefly, and I remember that unlike other emulators, it doesn't use frames by default, but amount of ms that has elapsed. You should make sure that each 'frame advance' is an increment of time smaller than or equal to the game's FPS. (Some games, like Jetpack, run at 70.086 fps, see http://tasvideos.org/PlatformFramerates.html ). IIRC, you can change how much ms a 'frame advance' advances in one of the drop-down menus.
Games with a fixed FPS tend to not have a concept of subframes or care about the mid-frame timing of your inputs. (I'm sure it could happen, though. Anyone know of an example? Besides rhythm games.)
If it's not that (you really have tried every frame and it still doesn't work), it may be due to subpixels? I don't know if Crystal Caves has subpixels or not, but in some games that have them, they are not necessarily set to 0 when you land or start a jump, so previous movement in the room could affect your trajectory when you decide to jump.
From what I can tell Crystal Caves doesn't use subpixels, but that did get me looking more closely at just pixels!
I did a little more experimentation to try out some different hypotheses. Every jump on my initial test assumed a running start; I made a save state, tried the jump, reloaded, moved forward one frame, saved, jumped, reloaded, moved, saved, jumped, etc. Using this method, I ascertained that frames from that starting position at that velocity will fail.
Next, I tried the jump from a standing position at various pixels and lacked the velocity to succeed.
So now I tested to see what exactly the rules of Mylo's velocity are. From a standing position, I continuously held the arrow key and moved 3 frames (12 F-presses) and took a snapshot of his position. Next, I reloaded the same starting position, moved one frame, released the key, passed one frame still, moved a frame, rested a frame, and moved a frame: 3 frames of movement separated by pausing. I took a snapshot. Finally, I reloaded, moved 2 frames continuously, stopped, moved one frame, and stopped. Positions 2 and 3 ended in the same spot, but position 1 stopped 2 pixels ahead.
Conclusion? My original trial testing each frame didn't test every pixel, because Mylo's full-speed movement advances more than one pixel at a time. So now I tried a series of different starting pixels, tested every frame from a running start, and finally found a frame with a successful jump.
This jump is going to be a pain in the neck if anyone wants to RTA this level. This single jump has probably tripled my re-record count.
Current progress: 5/16 levels run.
Link to video
I'm not entirely certain that the first damage boost in level 4 is the correct choice, but I'm not really sure what the most efficient method of measurement is without way more testing time than I can devote, and I can at least assess necessary damage boosts (e.g. walking through the eye beast at the end of level 4 or jumping on the spike in level 2).
Now to figure out the best routing between main map rooms, then finish the remaining levels!
Just a few more levels to go in volume 2, but here's my progress so far:
Link to video
This set is a lot more entertaining than the first episode; I've got a dinosaur chase sequence, rubbing noses with falling boulders, gentle nudges on deadly spikes, and... a few periods of waiting motionless for a moving platform because this game was clearly not intended for speedrunning.
Nice. I really liked how you just got ahead of the green monster after the time stop.
For the last level in your latest video, could you save time by hitting the red switch, going all the way to the end, collecting as much as you can from the end going back to the green door, but then leaving some behind and catching the elevator going up? You can then clear out all the gems behind the red door, then fall down to get the rest behind the green door. It would save you having to wait for the elevator to go all the way up and come back down.
I tried! The time spent waiting for the platform to come back up is longer than the wait for it to come down and make the jump, or the time spent repeating the run back into the corridor. Platform timing is definitely the most frustrating part of levels that include them!
The level after this one has the potential for a lot of backtracking as well, and I made a whole bunch of manual attempts to figure out the most effective route that minimized the need to go back and forth like that.
I’m not sure I understand why you’d have to wait for the platform to come back up. If you’re at the red door level, isn't it possible to jump down to the green door level without the elevator?
I meant to get from the mid level up to the red level. When you jump from the platform, you don't have enough time to get to the lever, open the red door, and get back out to jump on the platform to get up to that level. If you try to catch the platform to jump up to the red level at the first opportunity, you still lose time by backtracking.
Is that clearer?
At 9:32, could you take damage from the falling spikes to avoid backtracking? (Obviously you'd need to avoid damage later - maybe the black bird in the top left is avoidable?)
12:21 lolwut
Yep, thanks. It really appears as if it would work, as you just miss the platform by one second, which forces you to wait seven for it to come back. But, it sounds like you've tried it and it just won't work. That's too bad.
I'm not dead!
I had to take a break from finishing this because I was getting incredibly frustrated by this level. Then the usual day-to-day life intervened, but I decided to come back to the project with fresh eyes and finish the run.
My final product is complete!
Link to video
I'm not sure I want to submit this, though, because I'm not incredibly confident of the routing for the aforementioned level, and it might be more efficient to do the last 3 levels in reverse order from the way that I did in this recording. Whether or not it could be done better, I'd rather channel my efforts into another project than rebuild the pieces of this that could conceivably be improved.
Great work!
The movie does look good, so I encourage you to submit it and mention this as potential improvements. It's not uncommon for movies to get submitted (AND accepted) while including a short list of parts that could conceivably be improved.
Joined: 6/9/2005
Posts: 171
Location: Southern California
Were you trying to get the upper right area by the Snake and Eyehopper while under the effects of the Gravity power-up? It looks like it *might* be possible, but the timing would be really really tight.