Submission #7523: DreamYao, J.Y & aiqiyou's NES Darkwing Duck in 10:43.11

System Nintendo Entertainment System Emulator FCEUX 2.2.2
Game Version USA Frame Count 38650
ROM Filename Darkwing Duck (U) [!].nes Frame Rate 60.0988138974405
Branch Rerecord Count 221816
PowerOn Authors DreamYao, J.Y, aiqiyou
Game Darkwing Duck
Submitted by aiqiyou on 6/5/2022 2:22:02 PM

Submission Comments

Floating arrow:

Floating arrow is to use the game screen refresh feature to stick the arrow on the wall of the previous game screen. The game screen is divided into 64 blocks with 8*8. When the character drags the screen to the right, the 8 blocks in the rightmost column will be refreshed from top to bottom frame by frame. Therefore, the bottom block is refreshed 7 frames later than the top block, which means that the bottom block is closer to the right edge of the current screen before being refreshed. Through our test, when the vertical coordinate of the arrow is greater than 190, it can stick on the brick of the penultimate layer, and then the game screen continues to scroll, we will see that the arrow stick in the air. Of course, due to the excessive lateral speed of the arrow, reasonable control is required to avoid the arrow flying out of the screen.

Arrow zip:

The moment the arrow stick on the wall, it will form a block. The character can stand on it or grasp it from below. If the character occupies the position where the arrow will stick on the wall in advance, the arrow will push the character away with a higher speed at the moment of adsorption. With this technique, we will use the arrow to get a 2-4 pixel zip every time we need the character to jump to a higher platform. Of course, we can also use this technique to squeeze the character into the ceiling and get a lot of instantaneous movement through the squeezing of the wall.

Luck control:

Due to the extensive use of arrow zip technique, we need more energy to release more arrows, which puts forward higher requirements for our luck control. During the whole game, the only factors that affect the luck related memory value are the global time and the actions of some enemies. Since the memory value related to luck will be inherited to subsequent stages, any change in the initial stage of the game will affect all luck values of the subsequent TAS production process. In addition, each enemy's death will refresh the luck value in the following 8 frames, but the luck will be restored after 8 frames, so the enemy's death will not affect the overall luck under normal circumstances. The memory value related to luck will not only affect the enemy's prop drop, but also affect the enemy's actions, game lag and other situations. Fortunately, the overall luck performance of our TAS this time has been good. The lag of the whole game has been effectively alleviated. The energy dropped by the enemy is just enough. We have also achieved some improvement by controlling the enemy's actions. That is why we hold a negative attitude towards the future improvement of the project. Maybe in the future, we can find some improvement in some details, but the subsequent impact caused by the change of luck value is uncontrollable. During the production process, we obtained 8 different luck values by changing the action of one enemy. For the whole game process, the different luck values generated by many enemies will be exponential.

Jump:

There are two kinds of jumping in the game. The common jumping height is related to the length of pressing the jumping key. The other kind of jumping is that when the character grasps the ring, platform or arrow, the jumping height is fixed and will not be affected by the key length. The jump control of the game is very complex. Even if the character stands on the ground, the sub-pixel of the character's vertical coordinate is always changing, which makes it very difficult to control the jump. At the same time, because the character always maintains the maximum lateral movement speed during the jump, we let the character always keep jumping forward throughout the video, which further increases the difficulty of jump control. In addition, the skill of arrow zip also depends on the appropriate vertical coordinates. Since most arrows will fall after generating 2 frames zip effect, the character cannot jump from the arrow after 2 frames zip in most cases, unless we can adjust to the most perfect vertical coordinates. Of course, we can press jump 1 frame in advance, so the success rate of jump will be much higher, but it will certainly reduce the arrow zip effect by 1 pixel. For us, in the whole production process of TAS, the control difficulty of jumping is far greater than that of luck control. Another kind of jump judgment is also very strange. When the character grabs the ring, platform or arrow to jump, the character cannot grasp the next ring, platform or arrow again during the rising process. We used this technique extensively in the sixth level. In the rising part, we deliberately shot the arrow, and then let the character grasp the arrow to jump. This can avoid the character grasping the platform, so as to save jumping time. At the same time, this jump will also produce a glitch that is sucked into the ceiling, which has high requirements for the sub-pixel of the character's vertical coordinate. This glitch was also used in the fifth stage of the previous TAS. After klmz reminded us, we also used it in the specific terrain of the sixth stage, which enabled us to regain the improvement of our TAS by about 1 second.

Special thanks to: klmz

Klmz put forward the use of the skill of jumping into the ceiling with the help of arrows in the sixth level, which makes it possible for our TAS to improve for about 1 second again. The new TAS is being made and will be updated later.

Screenshot suggest: 26543F.


浮空箭头bug:

浮空箭头是利用游戏屏幕刷新的特性,将箭头吸附在上一个游戏画面的墙壁上。游戏的画面被分割为8*8的64个块,当角色往右拖动屏幕时,最右边一列的8个块会从上往下逐帧刷新。因此,最下面的块要比最上面的块晚7帧刷新,这也就意味着最下面的块在被刷新之前更接近当前屏幕的边缘。通过我们的测试,当箭头的纵坐标大于190时,可以吸附在倒数第二层的砖块上,然后卷轴继续滚动,刷新出新的画面,就会看到箭头悬浮在空中。当然,由于箭头的横向速度过大,需要进行合理的控制,才能避免箭头飞出屏幕。

箭头zip:

箭头吸附在墙壁的瞬间,会形成一个块,角色可以站在上面,也可以从下面抓住它。如果角色提前占用箭头将要吸附在墙壁的位置,箭头会在吸附的瞬间以较大的速度推开角色。借助这个技巧,我们在每次需要角色跳上更高的平台时都会使用箭头来获得2到4像素的zip。当然,我们也可以使用这个技巧把角色挤压到上方的墙壁内,通过墙壁的挤压获得大量的瞬时移动。

运气:

由于箭头zip技巧的大量使用,我们需要更多的能量来释放更多的箭头,这样一来就对我们的运气操控提出了更高的要求。在整个游戏过程中,影响运气相关内存值的因素只有全局时间和部分敌人的动作。由于与运气相关的内存值会被继承到后续的关卡,所以在游戏初始阶段的一点变化,都会影响后续整个TAS制作过程的全部运气值。另外,每个敌人的死亡都会刷新后续8帧内的运气值,但是8帧后的运气会被恢复,因此敌人的死亡在正常情况下不会影响全局的运气。与运气相关的内存值不仅会影响敌人的道具掉落,还会影响敌人的动作、游戏滞后等多种情况。值得庆幸的是,我们本次TAS的整体运气表现已经非常不错了,整个游戏的滞后情况得到了有效的缓解,敌人掉落的能量也刚好够用,我们还通过控制敌人动作来获得了部分提升。正是如此,我们对本项目在未来的改进持有消极态度。或许在未来,我们能够发现某处细节上的部分提升,但是后续因运气值改变造成的影响是不可控制的。我们在制作过程中曾经通过改变1个敌人的动作,获得了8种不同的运气值,而对于整个游戏流程来说,众多的敌人产生的不同运气值变化将会是指数级的。

跳跃:

游戏的跳跃有两种,普通的跳跃高度与按下跳跃键的长度有关系。而另外一种跳跃是当角色抓在吊环、平台或箭头上时,跳跃的高度是固定的,不会受到按键长度的影响。游戏的跳跃操控十分复杂,即使是角色站在地上不动,角色Y坐标的亚像素也始终在变化,这使得对于跳跃的操控十分困难。同时,由于角色在跳跃过程中始终保持最大的横向移动速度,所以在整个录像中,我们让角色始终保持跳跃前进,这也进一步加大了跳跃的操控难度。此外,箭头zip的技巧也依赖于恰到好处的Y高度,由于大部分的箭头会在产生2帧zip效果后主动下落,这使得绝大多数情况下角色无法在产生2帧zip效果后从箭头上跳起,除非我们可以调整到最完美的纵坐标。当然我们可以提前1帧按下跳跃,这样跳起的成功率会高很多,但是必然会使得箭头zip效果减少1像素。对于我们来说,在整个TAS制作过程中,对于跳跃的控制难度要远远大于运气控制。另外一种跳跃的判定也非常奇怪,当角色抓住吊环、平台或者箭头进行跳跃时,角色在上升过程中无法再次抓住下一个吊环、平台或者箭头。我们在第六关大量使用了这个技巧,在上升的版面中,我们故意打出箭头,然后让角色抓住箭头进行跳跃,可以避免角色抓在平台上,以此来节约跳跃时间。同时,这种跳跃还会产生一种被吸入天花板的bug,这对角色Y坐标的亚像素有着较高的要求,这个bug在前纪录中的第五关也有运用,后经klmz提醒,我们在第六关的特定地形也进行了运用,这使得我们的TAS重新获得了1秒左右的提升。

特别感谢:klmz

klmz提出了借助箭头跳跃被吸入天花板的技巧在第六关的使用方式,这使得我们的TAS可能再次获得1秒左右的提升。新的TAS正在制作中,稍后我们会进行更新。

Memory: Claiming for judging.
Memory: Very good improvement to the publication! The zips were cool and the new midair arrow trick was also fun.
Accepting to Stars.

despoa: Processing...
Memory: Delaying due to incoming improvements.
Memory: Replacing file with 67 frame improvement and setting status back to accepted.

despoa: Processing...

Last Edited by despoa on 6/23/2022 11:21 PM
Page History Latest diff