For TASers, this game is *extreme* luck-manipulating game. It is indeed a fight against random numbers and lags.
Of course, luck manipulation is mandatory to achieve a fast run in this game. The 16-bit random number
$40 controls over the luck. The random number increases every frame, and it is affected a little by the player's input. So, I made a number of bots with Lua scripting to find optimal solutions. And I analyzed some assembly codes to understand the game.
Basically, I manipulate luck by trial-and-error method. I let my bots generate random inputs, and bots continue the trials until they find the optimal solutions.
Lags often occur in this game because the random number affects the flow of codes. For example, when you go up/down to another floor, some lags can occur (probably, they are caused by the code initializing floor data). I tried avoiding lag as possible as I can, using bots.
In NES version, we can't create a Ninja/Lord at the start of the game. When we create a new character, we can get at most 29 extra points.
Teleporter never changes the floor. So I need a Ring of Movement to teleport to B10F.
The Ninja needs Epee of Excellence to hit Werdna. There is roughly a 2% chance that he decapitates Werdna with the weapon.
There is roughly a 5% chance that the Cleric dispells Vampire Lord or Vampire.
The Thief who exists from the start of the game is useless. To hit Werdna, the Ninja (changed from the Thief) must have 17 or 18 Strength and Epee of Excellence.
I don't touch the game switches. I think the wire-frame display would not be familiar to the users of NES version. And disabling music or sound would make the run tasteless.
The random number is changed by the routines which interact with the random number. Furthermore, the random number continues to be incremented while the game are waiting for NMI at every frame. So, the clock cycles needed by the codes executed at every frame affect the random number. (note: The NMI routine doesn't use RTI to return. It returns with RTS, restoring stack pointer from memory)
That's why player's inputs affect the random number. Inputs of direction keys are processed in the NMI routine, and the needed clock cycles depend on whether a player made inputs or not. So the random number changes by player's inputs. But, the random number changes only a little by a input at one frame, so we often need to make inputs for a certain period to manipulate luck.