TASVideos

Tool-assisted game movies
When human skills are just not enough

Submission #6144: aiqiyou & Mzscla's NES Moai Kun in 12:57.29

Console: Nintendo Entertainment System
Game name: Moai Kun
Game version: JPN
ROM filename: Moai Kun (J).nes
Branch:
Emulator: FCEUX 2.2.2
Movie length: 12:57.29
FrameCount: 46714
Re-record count: 127761
Author's real name: 赵超越 & 程嘉军
Author's nickname: aiqiyou & Mzscla
Submitter: aiqiyou
Submitted at: 2018-11-08 15:26:23
Text last edited at: 2018-11-09 12:00:25
Text last edited by: aiqiyou
Download: Download (9386 bytes)
Status: new
Submission instructions
Discuss this submission (also rating / voting)
List all submissions by this submitter
List pages on this site that refer to this submission
View submission text history
Back to the submission list
Author's comments and explanations:

(Link to video)
I and Mzscla improved Randil's TAS by 7287 frames. Mainly by means of new strategies, new skills, new glitch and efforts to save lags. The game has a total of 56 stages, and we have improved in 53 stages.

New glitch:

If we get pink friends or butt roundstones before their falling, a new pink friend or roundstone will appear. When we rescue a pink friend in the game, memory values will be subtractive, when the memory value is changed to 0, we can get in the door and pass this stage. By this glitch we can avoid traveling too many routes to rescue pink friends in many stages. And in some stages it could provide faster routes pass the stage with extra roundstones (such as stage 7,27and51). This is the key to saving a lot of time in our TAS.

The original plan for the glitch was to install a bomb underneath a pink friend or a roundstone, and rescue the pink friend or butt the roundstone as soon as the bomb exploded. Also this is the only way to get an extra roundstone. But in the actual TASing process, we found the other way to get extra pink friends, that is through the fall of other objects to delay the falling speed of the pink friends. Bricks, roundstones, bombs, and other pink friends' fall can all delay the next pink friend's fall, and then we just need to jump and hit the bricks at the foot of the pink friend, rescue it before its fall. For example, in Stage 9 we used the fall of other pink friends, in Stage 10 we used the bomb's fall, in Stage 28 we used the brick's fall, in Stage 44 we used the roundstone's fall. Here's one more point: We can only rely on the free fall of roundstones. If we butt the roundstone, it roll to the end of the platform and fall down, this will not delay the falling speed of the pink friends. In addition, at Stage 33, we used another way to made this glitch: pushing the roundstone under the pink friend and jump up before the little man fall down. In Stage 46 when two pink friends are aligned up and down, we rescue the below one first, and then jump up before the fall of the above one. We can get more bombs in all of these ways, but we don't really need too many bombs, only once at Stage 48.

New tricks:

1. Fall and tumble:

When you fall from the height, you will tumble. Whether or not you tumble is determined by the time you fall in the air. So if you can accelerate your descent, you can fall from a higher place without tumble. When you fall against a wall or brick, you jump up facing the wall first and then back to the wall at the appropriate frame. This technique is similar to inhaling the wall, but you need to move away from the wall when you are about to be inhaled. This technique allows you to drop up to 12 pixels in a frame (up to 4 pixels in a normal frame). Of course, you can also stand on the wall to let the falling memory value zero and then fall again, such as 1236 frames, which applies only to a single brick or to the top of multiple bricks connected up and down, otherwise it will be sucked inhaled in the wall.

When you are inhaled into the wall, the game determines that you are in a state of falling. That is to say, if you stay in bricks for too long, you will tumble when you come out. Of course, the memory value for recording your fall time becomes zero when it is greater than 255, so if you have to stay longer in the brick, you won't tumble by coming out at the right time.

2. L+R:

L+R is a very good skill. When you stand on the ground and press L+R, you will face left. When you press L+R in the air, you will face the right side. When we cross the wall to the left, walljumping with the left wall, and jump to the stone near us on the left, Randil's way is to jump up and press right. But we used L+R in our TAS, which saves 1 frames in many places.

In addition, when we press left + right in the air, our abscissa will remain unchanged. When we jump up with left or right,the distance between the take-off pixels and the landing pixels is always odd, no matter how many directions you press in the air. Through left + right, this value can be changed into even numbers, which also makes the accuracy of our TAS more precise. For example, the L+R at 4473 frame.

3. Head butt pixel push:

This has been used many times in the TAS of Randil, but we have extended its scope of application. When we need to cross the wall, we can jump up at a greater distance, butt the brick and then turn around, In general, you can save 2 frames per time, such as 14105 frames. When we leave the ceiling, we jump forward and turn around and butt the brick to create more displacement, which saves 2 frames at a time, such as 6357F.

4. Jump:

Each jump will save 1 frame. At the moment you take off, you move forward 2 pixels. When we are approaching the ceiling, we can press the jump. At this time, we can hear the jump, but the character will not take off, which can save one frame, such as 7284F. When you press the jump before leaving the ceiling, the character will jump one pixel higher and land a few frames later. With this technique, you can span two bricks at a time, and you need to avoid this in many places, because it will increase your time in the air, such as 3690 frame. The height of walljumping is usually one frame higher, it is same as the takeoff height before you leave the ceiling.

5. Headache:

In Randil's TAS, he mentioned this. If the we butt six bricks (including roundstones) in a maximum 192 frame period, Moai will have a headache, this makes you unable to attack within 480 frames. The timing of these 192 frames is recorded by D8 memory value. The memory value is increased by 1 points per 16 frames, and 0-11 is a cycle. When you press A or B on a particular frame, D8 memory value increases by an extra point, so the period is often less than 192 frames. In addition, pause before the D8 memory value increases will prolongs the period.

In Randil's TAS, he effectively avoided headaches. Usually when we attack in situ, we can move after 15 frames. But if we happen to have a headache when we top this brick, we can move immediately. Usually, using this technique can save us 15 frames at most. But if we encounter a lot of falling bricks or boulders, we can use headaches to jump up before their falling. This also provides us with faster routes at some stages, such as the 4th, 44th, 48th and 52nd checkpoints.

6. Attack on the ice

When we attack in situ on the ice, push down will keep the character move forward. Randil's TAS used this point, but it was not mentioned in his description.

7. Periodicity of the game:

We called 1b memory value ‘RND’. Bombs explode only when RND is a multiple of 4. Some monsters only spit bats when RND is a multiple of 8 (e.g. Stage 14). Butted roundstone only land when RND is a multiple of 4. D8 memory value only increases by 1 when RND is a multiple of 16. Of course, in addition to the D8 memory value, other situations may change by pause. We can also pause to make the game still, but it does not affect the bomb explosion and the falling of roundstones. Through this, many lags can be solved. For example, at Stage 8, I used once pause before the bomb exploded. This pause did not affect the clearance time, but it could save 1 lag in this stage.

Similar to the 21-frame rule of SMB, we can save lags by slowing down the previous stages few frames when we can't save another bomb or roundstone cycle at the stage. For example, we saved 2 lags by waiting for one frame at Stage 37, and also ensured that we could have a headache when we butt the last brick. If we did not wait for this frame, the bomb at Stage 38 would explode one frame slower. In the balance between the periodicity of the game and how to deal with lag, we spend a lot of time to minimize the lag without affecting the clearance time.

8. Push value:

When you push a roundstone, dc memory value will increase, and when this value is greater than 30, it will push the roundstone forward. In general, this value can be saved, which was also used in Randil's TAS. Preserved push values will disappear in special situations, generally when the character is still, such as walljumpings, when you stick to the wall, the push values will return to zero. When you jump up to a roundstone that is falling freely, the push value may be zero. If you press L+R+A while you jump, you can save it.

9. Attacks by enemies:

the first attack of monsters, whether swords or bats, is uncontrollable, while the remaining attacks can be avoided by operation, avoiding superfluous attacks by monsters will save lags.

Special thanks: zyr2288 and klmz.

Zyr2288 helped us to find the relationship between D7 memory and D8 memory, so that we can control headache. klmz helped us improved the 4th and 44th stages, respectively, 5F and 108F.

Screenshot

The screenshot suggest is in frame 43760.

Stage aiqiyou&Mzscla Randil Frame Saved Total
1 445 448 3 3
2 955 960 2 5
3 1702 1763 56 61
4 2580 2688 47 108
5 3196 3304 0 108
6 4014 4127 5 113
7 4824 4999 62 175
8 5465 5657 17 192
9 6583 6872 97 289
10 7073 7481 119 408
11 8255 8730 67 475
12 9661 10164 28 503
13 10278 10781 0 503
14 11326 11831 2 505
15 11920 12425 0 505
16 12771 13281 5 510
17 13734 14259 15 525
18 14482 15048 41 566
19 15443 16160 151 717
20 16848 17580 15 732
21 17857 18619 30 762
22 18521 19301 18 780
23 19093 19959 86 866
24 19894 20885 125 991
25 20426 21516 99 1090
26 21043 22138 5 1095
27 21972 23247 180 1275
28 22711 24178 192 1467
29 23560 25073 46 1513
30 24410 26190 267 1780
31 25270 27054 4 1784
32 26109 27945 52 1836
33 26787 28693 70 1906
34 27962 30163 295 2201
35 29207 31417 9 2210
36 30647 33397 540 2750
37 31285 34086 51 2801
38 31914 34823 108 2909
39 32807 35835 119 3028
40 33493 36596 75 3103
41 34398 37546 45 3148
42 35660 39077 269 3417
43 36341 39891 133 3550
44 37206 41053 297 3847
45 37941 41791 3 3850
46 38633 43216 733 4583
47 39556 44147 8 4591
48 40702 45639 346 4937
49 41373 46330 20 4957
50 42128 47184 99 5056
51 43088 48271 127 5183
52 43827 49262 252 5435
53 44438 50020 147 5582
54 45279 50980 119 5701
55 45986 52101 414 6115
56 46714 54001 1172 7287

我和Mzscla将Randil的TAS提升了7287帧。主要借助于新的策略,新的技巧,新的BUG和在节约lag上面所下的功夫。游戏共计56个关卡,我们在53个关卡中获得了提升。

新BUG:

我们在小人或者圆石下落之前吃到小人或者顶走圆石,这时会有一个新的小人/圆石出现并正常下落。而游戏通关的判定是当你吃到小人时,内存值做减法,当某个内存值为0的时候就可以通关。所以通过这个BUG可以在部分关卡避免走过多的路去吃小人,而且在部分关卡可以通过多一个圆石来提供更快速的通关路线(如第7关、27关和51关)。这是我们可以提升大量时间的关键所在。

卡出该BUG最初始的方案是在小人或者圆石下方安装炸弹,当炸弹爆炸的瞬间吃到小人或者顶走圆石。对于卡出双圆石来说,这是唯一的途径。但是在实际制作过程中,我们发现了其他卡双小人的办法,那就是通过其他物体的下落来延迟小人的下落速度。石块、圆石、炸弹以及其他小人的下落都会延迟下一个小人的下落,这样我们可以在起跳的同时顶碎小人脚下的石块,在其即将下落之前卡出BUG。例如:第9关我们借助其他小人的下落来卡出双小人,第10关我们利用炸弹的下落卡出双小人,第28关我们借助石块的下落卡出双小人,第44关我们利用到了圆石的下落卡出双小人。这里补充一点:圆石只有在自由下落时才可以卡出双小人,也就是我们需要炸掉或者顶碎圆石下面的砖块让圆石自由下落,如果是将圆石水平方向顶走,圆石移动到平台尽头下落,是无法卡出双小人的。另外,33关我们用到了另一种卡双小人方式:推动小人脚下的圆石,在小人下落前起跳。46关当两个小人上下排列时,我们先吃到下面的小人,在上面小人下落前起跳也可以卡出该BUG。 我们可以利用所有卡双小人的方法来获得更多的炸弹,但是实际上我们并不需要这么多炸弹,只有在48关我们使用过一次。

新技巧:

1、关于摔伤:

当你从高处掉下时你会摔伤,是否摔伤取决于你在空中下落的时间。所以如果你能加速下落的速度,就可以让你从更高的地方掉下来而不会摔伤。当你贴着墙或者砖块下落时,你首先面向墙起跳,然后在合适的帧背对着墙,这种技巧类似于吸入墙内,但是你需要在即将被吸入时按远离墙的方向。通过这个技巧可以让你在一帧内最多下落12个像素点(正常状态下1帧最多下落4个像素点)。当然你也可以贴住墙站立,让下落计时内存值归零后再下落,如1236帧,这种情况只适用于单独的一块砖或者上下相连的多块砖中最上面的一块,否则会被吸入墙内。

当你被吸入墙内时,游戏判定你处于下落状态。也就是说如果你在砖块中停留的时间过长,出来时会摔伤。当然,记录你下落时间的内存值在大于255时会变成0,所以如果你不得不在砖块中停留更长的时间,在合适的时候出来是不会摔伤的。

2、左右冲突键:

左右冲突键是非常好用的一个技巧。当你站在地面上按左+右时,你会面向左。当你在空中按左+右时,你会面向右。当我们向左穿墙、向左二段跳、跳上左边离我们很近的石块时,Randil的方式是起跳后按右。而我们的TAS是按左+右,这样在很多地方会节约1帧。 另外,当我们在空中按左+右时,我们的横坐标会保持不变。当我们正常起跳时,起跳像素点到落地像素点的距离总是奇数,无论你在空中按了多少方向。而通过左+右,可以让这个数值变为偶数,这也更加精确了我们TAS的精度。如4473帧的左加右。

3、顶砖块的位移:

当你顶碎一块砖,顶走一个圆石,或者顶一个不能顶碎的砖块时,你的X轴坐标会被瞬间移动到一个固定的值。这一点在Randil的TAS中多次用到,但是我们延伸了它的适用范围。当我们需要穿墙时,我们可以在更远处起跳,在空中顶一下砖块再转身,这样可以在瞬间增加最多3个像素点的位移,一般来说每次都可以节约2帧,如14105帧。 当我们离开天花板时,我们向前起跳,转身顶砖块来造成更多的位移,这样每次也可节约2帧,如6357帧。

4、跳跃:

每次跳跃都会节约1帧。当我们将要走近天花板时,我们可以按跳,这时我们会听到起跳的声音,但是角色并不会跳起来,这样也可以节约1帧,如7284F。 当你在离开天花板之前按跳跃,角色会跳的更高1个像素点,也会更晚几帧落地。通过这个技巧可以一次跨越2块砖,同时在很多地方需要避免这种情况的出现,因为这会增加你在空中的时间,如3690帧。 当你二段跳时,第二次跳跃的高度通常是要更高一帧的,与离开天花板之前起跳高度相同。

5、头疼

:在Randil的TAS中,他提到了这一点。如果玩家在一个最多192帧的周期内顶6块砖(包括圆石),就会头疼,使你在480帧内无法攻击。这192帧的计时由D8内存值记录,该内存值每16帧增加1点,0-11为一个周期。当你在特殊的帧按A或者B时,D8内存值会额外增加1点,所以这个周期往往小于192帧。另外,在D8内存值增加之前暂停可以延长这个周期。

在Randil的TAS中,他有效地避免了头疼的出现。但是他疏忽了头疼的好处就是没有攻击硬直。当我们原地攻击时,我们在15帧之后才可以移动。但是如果我们顶这块砖的时候刚好出现了头疼的情况,我们就可以立即移动,一般情况下利用这个技巧可以让我们节约最多15帧。但是如果我们遇到了上下排列的多块可以下落的砖块或者圆石,我们可以利用头疼在跳起来顶碎砖块之后顺着这排砖块跳上去,这也在部分关卡为我们提供了更快的路线,如第4、44、52关。

6、在冰面上攻击:

在冰面上原地攻击后按下,角色会保持向前移动。Randil的TAS用到了这一点,但是在介绍中并未提及。

7、游戏的周期性:

炸弹只会当RND为4的倍数时爆炸,部分怪物只有在RND为8的倍数时吐蝙蝠(如14关),横向顶的圆石只会当RND为4的倍数时落地,D8内存值只有在RND为16的倍数时增加1。当然,除了D8内存值,其他情况都可能因为暂停而改变,我们也可以通过暂停,让游戏画面静止,但是不影响炸弹的爆炸和圆石的下落。通过这一点,可以解决很多lag。例如第八关,我在炸弹爆炸前使用了一次暂停,这次暂停没有影响通关时间,但是可以节约后面的1点lag。

同时,类似于超级马里奥兄弟的21帧规则,当我们在某一关无法再提升一个炸弹或者圆石的周期时,我们可以在前面几关慢几帧来节约lag。比如:我们在37关等了1帧节约了2点lag,同时也确保了我们可以在顶最后一块砖时候头疼,如果我们不等这1帧,38关的炸弹会更慢1帧爆炸。在游戏的周期性与如何处理lag的权衡中,我们花费了大量时间,尽可能地在不影响通关时间的前提下把lag处理到最低。

8、push值:

当你推动圆石时,某个内存值会增加,当这个值大于30时,会将你面前的圆石推动一格。通常来说这个值是可以保存的,这一点在Randil的TAS中也有用到。保留的push值会在特殊情况下消失,一般来说在角色静止的时候会消失,比如二段跳的时候,当你贴在墙上的一瞬间push值会归零。当你跳上一个正在自由下落的圆石时,push值可能会清零,如果你在起跳时同时按住左+右,可以将其保留。

9、怪物的攻击:

怪物的攻击,无论是吐剑还是蝙蝠,第一次是不可控制的,而剩下的攻击可以通过操作来避免,避免怪物多余的攻击节约lag。

特别感谢:zyr2288和klmz。

zyr2288帮助我们查到了D7内存和D8内存之间的关系,使我们可以控制头晕;klmz帮我们改进了第4关和第44关,分别提升了5F和108F。

Similar submissions (by title and categories where applicable):