TASVideos

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

Submission #4706: Ferret Warlord, Dacicus, Alyosha's NES Wizards & Warriors III: Kuros: Visions of Power in 17:25.61

Console: Nintendo Entertainment System
Game name: Wizards & Warriors III: Kuros: Visions of Power
Game version: USA
ROM filename: Wizards & Warriors III - Kuros - Visions of Power (USA).nes
Branch:
Emulator: FCEUX 2.2.2
Movie length: 17:25.61
FrameCount: 62840
Re-record count: 17224
Author's real name: David M
Author's nickname: Ferret Warlord, Dacicus, Alyosha
Submitter: Alyosha
Submitted at: 2015-05-27 01:32:48
Text last edited at: 2015-06-08 14:36:09
Text last edited by: fsvgm777
Download: Download (9649 bytes)
Status: published
Click to view the actual publication
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:
Wizards & Warriors 3 is the next game in the series following Kuros in his quest to defeat Malkil after the events in Ironsword. The current run is a minor improvement over the published run using a well known trick.

Game objectives

  • Emulator used: FCEUX 2.2.2
  • Beats the game as fast as possible.

Comments

Another slight modification to Ferret Warlord's original run. Despite trying a vast variety of different ideas, I was only able to implement a known improvement and fix a slight oversight to save a total of just over 30 frames.

However I was able to work out why the last boss dies, clearing up a bit of the mystery in Dacicus' original submission of this glitch.

Stage by stage comments

The known improvement is building momentum before entering the third wizard's guild after being kicked out as the thief. Dacicus mentioned this in the thread.

As for why Malkil dies in the end. Here is the offending code:

   $B2A8:BD 3C 03  LDA $033C,X @ $033D = #$4F                   A:04 X:01 Y:91 S:FD
   $B2AB:C9 50     CMP #$50                                     A:4F X:01 Y:91 S:FD
   $B2AD:B0 AD     BCS $B25C                                    A:4F X:01 Y:91 S:FD
   $B2AF:AD 0C 04  LDA $040C = #$00                             A:4F X:01 Y:91 S:FD
   $B2B2:D0 A8     BNE $B25C                                    A:00 X:01 Y:91 S:FD
   $B2B4:A9 01     LDA #$01                                     A:00 X:01 Y:91 S:FD
   $B2B6:8D 0C 04  STA $040C = #$00                             A:01 X:01 Y:91 S:FD
   $B2B9:A9 C0     LDA #$C0                                     A:01 X:01 Y:91 S:FD
   $B2BB:99 A4 03  STA $03A4,Y @ $0435 = #$02                   A:C0 X:01 Y:91 S:FD
Register Y was given Kuros' X subpixel position at a previous point. This block of code only occurs when the room designator (stored in $00B6) is 5 (the last bosses room.) The game performed this check just before this code is called. $033D contains the Y coordinate of Kuros' fireball. The check it performs comparing it to #$50 only fails when you launch a fireball behind you (by holding B and pressing the direction opposite to which you are standing.) Why is a fireball programmed to travel higher this way? I do not know. Anyway this skips the jump to $B25C, the normal exit point. Instead, we get a strange piece of code that tells #$C0 to be stored in $03A4,Y = $0435. $0435 happens to be Malkil's attack pattern, which ranges from 0-5. The game checks what pattern he is currently in, but ends the fight when it finds no match (being $#C0)

As mentioned, this code is specific to this boss fight. I do not know what the original intention was. Other boss fights do not have similar checks.

Other comments

There are several jumps in this run that are not performed optimally. If Kuros jumps and lands in just the right way, he does so without crouching and therefore recovers his max speed slightly quicker. However despite my best efforts, I was never actually able to save frames due to these small improvements, due to subpixels and boss patterns being thrown off. The best example of this is the beehive trick. I had thought I saved a frame with an improved jump only to lose it once I reached the area where the beehive is ordinarily glitched away only to jump right into it. So perhaps there is a slim chance ~5 more frames could be saved in this run, if somehow these jumps could actually save time.
Tompa: Judgy!
Tompa: It's really impressive how optimal the almost 10 years old run is! But frames were saved, and it's all good. Accepting as an improvement to the published run.

fsvgm777: Processing.


Similar submissions (by title and categories where applicable):