Cacoma Knight is an action/puzzle game where you need to cut the board into pieces. Each cut will paint the smaller section, until enough of the board is painted. In this run, I save lots of time mostly from cutscenes, load time, and lag. However, nearly every level is improved as well thanks to a number of tactical changes.
Major Strategy Differences from existing run:
Version:
I use the Japanese version of the game. For the most part, the games are identical. However there are some differences that are useful for a speedrun. First off: There are three less levels in the J version. Levels 6-1, 6-2, and 6-3 from the USA version are removed, resulting in only 18 levels instead of 21. World 7 is then renamed as world 6.
It makes the most sense to compare (J) level 6 to (USA) level 7. USA level 6 appear to be the added levels.
- 6-1 (J) requires 75%, compared to 7-1(USA) requires 86%
- 6-2 (J) requires 80%, compared to 7-2(USA) requires 86%
- 6-3 (J) requires 90%, compared to 7-3(USA) requires 88%.
Thus the (J) version is shorter, and a bit easier on 6-1/6-2 but a bit harder on 6-3. This is worth roughly 1 minute of savings due to having 3 less levels.
The (J) version also loads levels MUCH MUCH faster. It's about 1 second of saved loading time on every level, for a total of 18 seconds over the run. Both versions are poorly coded and contain a lot of lag/loading frames, but the (J) version seems at least better.
Additionally, as with many games, the (J) version has less frames spent on text. This only effects the villain's speech and is neglible, but it helps.
Characters:
I choose the 2 fast characters, instead of the previous run which used 1 medium and 1 fast. The game is poorly coded, so this actually increases the lag of the game on some levels. Many levels, however, are not effected. Some levels have few enemies, in which case the choice of faster character does not add more lag. Some levels have tons of enemies/bullets, in which case the level would have lagged regardless of the character choice. Therefore we only actually turn out worse on the few levels which fall inbetween those two extremes: The levels that contain a medium number of enemies such that having a fast character is enough to lower the FPS from 60->(30-40). Since picking this character requires entering a new menu, we hope to be able to save at least ~200 frames during the run from level time alone. I succeeded, so the choice is correct.
Mirror Fragments:
The initial reason for this run, is I noticed that the previous run collected mirror fragments, however these are actually a HUGE time waste. Avoiding collecting mirror fragments will skip the cinematic between levels, resulting in a savings of ~10 seconds per world. This nets about ~50 seconds in our run. Additionally, since we care about the treasures we get, it forces us to change our strategy on the levels. Having 2 fast characters makes this run more flexible in terms of strategies as well.
Tactical Improvements:
Avoid Vertical Box Shape:
The game is poorly coded, as I mentioned. After enclosing a box, the game must lag while it calculates which side of the line encloses a smaller area. While intuitively, we might think the time should be based on the area alone, it actually is affected by the shape too. A verticle rectangle takes longer than a horizontal one. Therefore, you save frames by getting more horizontal lines whenever possible. This is likely due to an optimization in the flood fill algorithm (go read wikipedia if you're curious).
Avoid Vertical Movement:
Similarly, the game does NOT like when players move vertically, and this causes more lag than moving horizontally. This matters on the "inbetween" levels where we want to carefully control the lag from moving too fast.
Movement on Sidelines:
You can choose to move on the sidelines at a slow speed (without drawing). You can't do this while drawing a line in the field. However, this means that at the beginning of each level, you have a bit more leeway when manipulating lag rather than having a character stand still entirely.
Lag Manipulation:
The game prefers to run at 60, 40, or 30FPS. Sometimes you can manipulate the game that is running at 30 FPS to go up to 40 FPS when the game is actually somewhere between those two values. (Likely the designers didn't want it switching frame-rate too often, so it tries to sit at one of those three levels).
Enemy Removal:
The spiral pig can be stunned when it runs into your line. This reduces lagby a lot. Other large enemies can also be destroyed if they are inside the box when it complete. However, the trade off of making a small box to get rid of the enemy is hard to balance, so I don't do it in this run (though killing an owl was almost worth it).
AI Manipulation:
The AI can be manipulated. The primary thing I manipulate is the pink rings on the last level. They fly towards the player, so by manipulating your position you can cause them to change path, and fail to collide with the line (collision in this game is also badly programmed, if you haven't noticed the pattern).
Items:
The speed boots is a very good item for a speed run. It doubles the speed of even the fastest character. However it's only used on one level, because it needs to be near the edge for it to have usefulness. A future runner should highly consider whether they can manipulate item drops to be near the corners, which would vastly improve the run (if possible).
Previous Techniques:
Aim for Minimum Percent:
This is fairly self explanatory. The flood-fill algorithm is really slow, but it's optimized to end once it determines which side is smaller. So, by aiming for the least percent, you are actually aiming to reduce the lag frames. In my case, I don't worry too much about getting the exact number, as long as it's the fastest variation. This is due to horizontal rectangles being faster, so exact percentages which require irregulare shapes are not any faster.
Level Breakdown:
WarHippy (total) | (WH section) | Meerkov (total) | (section difference) | (Net Difference) | |
---|---|---|---|---|---|
begin | 0 | 1286 | 0 | 286 | 286 |
1.1 | 1286 | 449 | 1572 | -28 | 258 |
(load) | 1735 | 538 | 1993 | -66 | 192 |
1.2 | 2273 | 449 | 2465 | -25 | 167 |
(load) | 2722 | 540 | 2889 | -67 | 100 |
1.3 | 3262 | 463 | 3362 | 3 | 103 |
(load) | 3725 | 1123 | 3828 | -651 | -548 |
2.1 | 4848 | 465 | 4300 | 29 | -519 |
(load) | 5313 | 545 | 4794 | -73 | -592 |
2.2 | 5858 | 461 | 5266 | -25 | -617 |
(load) | 6319 | 537 | 5702 | -65 | -682 |
2.3 | 6856 | 591 | 6174 | -28 | -710 |
(load) | 7447 | 1122 | 6737 | -649 | -1359 |
3.1 | 8569 | 498 | 7210 | -22 | -1381 |
(load) | 9067 | 557 | 7686 | -84 | -1465 |
3.2 | 9624 | 492 | 8159 | -20 | -1485 |
(load) | 10116 | 539 | 8631 | -66 | -1551 |
3.3 | 10655 | 632 | 9104 | -40 | -1591 |
(load) | 11287 | 1134 | 9696 | -660 | -2251 |
4.1 | 12421 | 500 | 10170 | -25 | -2276 |
(load) | 12921 | 556 | 10645 | -82 | -2358 |
4.2 | 13477 | 506 | 11119 | 15 | -2343 |
(load) | 13983 | 559 | 11640 | -85 | -2428 |
4.3 | 14542 | 600 | 12114 | 0 | -2428 |
(load) | 15142 | 1128 | 12714 | -655 | -3083 |
5.1 | 16270 | 639 | 13187 | -44 | -3127 |
(load) | 16909 | 555 | 13782 | -76 | -3203 |
5.2 | 17464 | 558 | 14261 | -50 | -3253 |
(load) | 18022 | 565 | 14769 | -86 | -3339 |
5.3 | 18587 | 628 | 15248 | -65 | -3404 |
(load) | 19215 | 1130 | 15811 | -35 | -3439 |
6.1 | 20345 | 797 | 16906 | -175 | -3614 |
(load) | 21079 | 526 | 17528 | -47 | -3661 |
6.2 | 21618 | 915 | 18007 | -174 | -3835 |
(load) | 22400 | 544 | 18748 | -65 | -3900 |
6.3 | 22953 | 834 | 19227 | -73 | -3973 |
(load) | 23673 | 1127 | 19988 | -977 | -4950 |
- Note: I compared level 6 (USA) against level 6(J) even though they are different. Notice that 6(J) is harder than 6(USA) but I still saved time on each stage in world 6 anyway. I removed the times for world 7 since now there is nothing to compare to.
Final Time: 19988
WarHippy Time: 28416
Total Savings: 8428 frames (2 minutes and 20.5 seconds), 29.6% of total time!
GoddessMaria: Judging...
GoddessMaria: As far as the matter of running on the Japanese version over the US version due to having 3 less levels in comparison, it is still considered valid for submission. That being said, the author has done well in optimizing the previous run where applicable. Audience reception, however, was lukewarm thus disqualifying it from Moons. Despite that, it is still acceptable under Vault rules and it does beat the game in faster time as an Any% run should. Therefore...
Accepting to Vault as improvement to the currently published movie.
feos: Pub.