of this game. A lot of things count for the improvement, such as a new route, better use of arrows, faster boss fights, lag-reduction, and more. More details can be found under the "Improvements" section below.
At the beginning of the year I was involved in little Darkwing Duck ROM hack project, so I learned a lot about the game structures. But somehow I didn't think about obsoleting old Famtasia movie here, mostly because Walker Boh's movie looked very solid, and I don't like obsoletions that are less than 10 seconds improvements.
Then, after some forum discussions Randil PM'd me and asked about teaming up, so here we are.
To say the least, it was very interesting experience. Randil makes challenging WIPs, and it was fun to search for improvements in runs that seem unimprovable at first.
From the very beginning I knew that the game can provide more arrows than we can use, so I never traded time for item drops, instead I frequently used 2-3 arrows (6-9 points) even for 1-frame timesaver.
At first I though that final record was gonna be 11:05+, but after discovering several big timesavers (like Bushroot battle) a little hope to cross 11 minutes mark has appeared.
Then I revised my old Choujin Sentai TAS and thus learned about subpixel optimization (plus became even more obessed with polishing up things). Because first three levels of DW run were made without this knowledge, I think the submission can be improved by more than dozen of frames. Plus, today I know how to reduce lag in third level even more. Also there still may be something we didn't notice. For example, there may be some other way to get stuck inside a wall, or whatever.
Right now I'm little tired of the game, so I don't think I'll be improving the run in observable future. How about you, Randil? ;)
Lag Counter Tool:
In this project we used rather interesting way to deal with in-game lag.
When Randil started tasing 1st level (Liquidator's sewers), he searched if there's strict memory address to determine moments of lag. Of course each game has RAM values that can be used as lag indicators, but it would be much better to have lag counter instead of just indicator. When the game carefully keeps track of all frames with lag, you can see whole picture, and on such "macro level" you'll be able to act strategically, and to find solutions that were much less obvious on micro-level.
At first sight, it's not really difficult to notice lag without tools, and even remember quantity of lagframes within some period of gameplay. But it's much harder to remember such quantities for each of, say, 10 input strategies, and it's even more impossible to analyze differences between these 10 fragments and to find key factors.
If humans had perfect memorizing ability, they could easily manipulate lag on macro level without tools. But that's not the case, so here's the receipt we used for handling lag in Darkwing Duck:
- 1st part is lag Counter - simple counter which increases every time when there's frame of lag.
- 2nd part is counter Storage. It's important (if not critical) to store lag counter somewhere in savestate, so that it will be automatically saved and loaded alongside with savestate. Not only it frees TASer from wasteful actions, but also it's very important to assotiate particular state of the counter with unique state of game. (helps to compare things and to find best input, just like with luck manipulation)
Oh well, too much theory. As clear from part2, implementing such tool on emulator level would bother with current FCM format, so I inserted this tool inside game code (also at first I didn't beleive this tool can really help much, and that was single trial).
According to my modifications, lag counter was stored in unused RAM address, NMI handler was constantly increasing this value, while joystick read subroutine was constantly decreasing it. When there's no lag, lag counter value (observed through Memory Watch) shouldn't change.
So! in fact, this whole movie was recored with hacked ROM, but as the hack was pretty accurate, it wasn't too difficult to make movie that syncs with both original and modified ROM. Well, there were two cases of desync, but that's even less than I expected (emulation is emulation, after all).
Everything was initiated with Randil inspiring me with idea of some natural lag counter being made by game developers for us. :) Using LagMeter ROM, we saved 185 frames of lag (comparing to currently published movie). That's 3 solid seconds of freezed picture! Seems, this tool really worked good.
I hope in future we'll have similar tool implemented in FCEU. You can read some more info about my dreamtool
here.
This was one very long project. I started this somewhere in April, almost exactly 4 months from now, so this was a long project. After doing a testrun, AnS appeared and showed in-depth knowledge of the game, as well as quite a few new tricks. I asked him to help me out on this, which was a good choise - it turned out that AnS was awesome on TASing this game, and it was much thanks to him that it's as optimized as it is.
Personally, I TASed this game as I TAS most games - frame by frame, constantly looking at memory watcher. I had memory watcher full of addresses this time, and I also optimized subpixels. This wouldn't have been possible at all without memory watching.
Although I started this project, AnS did most work on this run, so I'm putting him as main-author and myself as co-author.
All in all, I don't think I've ever worked so hard to frame perfect a game, only to see AnS improve it even more. :) It's not perfect though, since we found ways to improve the first few levels by a few frames. But neither of us feel like redoing it for those frames anyway, so we'll let it be. To put things short, here we have a very optimized run, which I'm proud of being part of.
NesVideoAgent: Hi! I am a robot. I took a few screenshots
of this movie and placed them here.
Here goes! Feel free to clean up the list.