Advanced Dungeons & Dragons: Heroes of the Lance (ntscus) (nes) [Any %] [Single Segment] [Deaths] [0:04:45]
Run Information
Completion Date July 12, 2020
State Published
Runner 'ktwo'
Tag Deaths
Links
Verification Thread
Run Comments

Disclaimer
I did this run on a Powerpak. In case it matters for future reference, I used a ROM with checksum 4f46d1de7d0afba7c04361e499748382.

SDA history
19-Jun-2013 - 0:05:19 by ktwo (http://www.archive.org/download/2013-11-24-SDA_Speed_Runs/
06-Jun-2019 - 0:05:11 by ktwo (http://www.archive.org/download/2019-08-16-SDA_Speed_Runs/

Background
I first speedran this game back in 2013. I had no previous history with the game and have to this date never played it casually to try and explore the rather big map. I first picked the game as an "easy" speedrun to try out a new recording setup on.

My first run (a 5:19) was therefore quite improvable and the route wasn't particularly well researched. A few years later, 'Vriaeliss' published a 5:17, containing an improved route in the second floor. With the possibility to "easily" save 5.5 seconds, I decided to pick up the game again. This time, I ended up with a 5:11. Overall, it was a much cleaner product than the 5:19.

Fast-forward to 2020. 'Arc' publishes a new TAS of the game, which included two major time-savers. The first was a different route in floor 1. In all fairness, a straight-forward route that should have been found way earlier. The second improvement was less obvious. The previous runs relied on casting "Protection From Evil" (PFE) to get through the dragons in floor 2 and 3. However, PFE runs on a timer, meaning it had to be repeatedly re-activated from the menu. What 'Arc' showed was that if Goldmoon is in front of the party, she can cast spells without having to enter the menu each time. The perfect spell for this purpose is "Hold person", which shoots a projectile that immobilizes the target allowing you to run through (assuming the projectile hits...).

Both of 'Arc's findings were easy to implement in real-time speedruns. And again, I decided to see if I could lower the time. Especially since sub-5 min initially looked like a possibility. However, after some more detailed routing and attempts to back it up, sub-5 seemed to still be out of reach, but not by much. I eventually managed a low 5:02, which was around what I had been hoping for. But there was something weird about that run... I briefly had Raistlin in front of the party. He walks at half the speed, but moves at the same speed as the others when jumping. So naturally I jumped while he was in front, which led me to accidentally overshoot one of the doors by a lot. That should logically have cost a lot of time and seemed incompatible with the time I got. When I analyzed what had happened, I realized I had come across a major time saver that would comfortably bring the time well below 5 minutes! By jumping to a door and holding up while in the air, you'll speed up the door transition correspondingly. Implemented everywhere, we were talking about 15-20 seconds to save!

It's a bit ironic that after having grinded out this game until I reached my goal time, the run that was supposed to be the final one ended up stumbling across a major trick that would have me start all over again... Getting a new run with the jump trick was just another fairly straight-forward grind, which resulted in the run you just watched (or maybe are about to watch).

Game Mechanics
This is mostly going to be a copy-paste from my previous run comments. Since those aren't easily accessible any longer, I feel it's worth repeating them here (with some minor updates). Note that not all of them are relevant for this speedrun.

  • All characters move at the same speed. A walking speed of one and a running speed of two. However, Raistlin (the cowled guy) can only walk. His jumps are at the speed of two though.
  • The characters have different jump distance. This doesn't really impact the time, but is important to remember to avoid over- or undershooting when jumping to doors if an attempt ends up with a different character in front. For the casual player, it's also worth mentioning that jumping over pits becomes considerably easier not having Sturm or Goldmoon in front (the short jumpers).
  • Right before the screen stops scrolling in a room, the character's screen position starts to change. For a few movement frames, you're then going to move at double the speed. Referred to as the "double-speed trick". In a few rooms, with enemies in very specific positions, this can be used run through enemies.
  • There is a short animation when landing a jump, which costs one movement frame (= 2-3 actual frames) compared to simply running. Jumping often helps to faster get through enemies though (based on experience, but the game mechanics behind the hit RNG are not yet described).
  • Damage taken when hit is random. Some enemies will always hit you. Some enemies will never hit you. Some enemies will sometimes hit you, but can be sometimes ran/jumped through. The RNG is an important factor in the latter case. Some enemy types are more of an obstacle than others, but even individual enemies seem to be able to act in specific ways that are not characteristic of that type. For such a short game, it's no big problem though. One just has to learn the behavior of all the enemies along the path.
  • Many enemies that normally hit you can be clipped through by bringing up the menu just before impact (I will refer to this as "menu clipping"). This is only useful when the menu has to be brought up anyways (bringing up the menu is always at least 1.5 s).
  • When a character dies, the screen will flash black before you resume control again. This costs ~0.7 seconds. By bringing up the menu "close" to when the character dies, you jump directly into the menu, saving those 0.7s compared to dying and then opening the menu normally. This trick is not consistent as the time window for it to work is anywhere from 0 frames (so not possible at all) to 10-15 frames. I'm not sure what determines the available time window and why it's many times not possible at all.
  • In order to cast clerical spells, you need a hero with the blue crystal staff in the front row (one of the top four characters). Most of the spells are only available if it's Goldmoon holding the staff though.
  • If Goldmoon is in the front row, but not first, each spell use requires a trip to the menu. However, if Goldmoon is first in the party, the "projectile" spells allow her to use them repeatedly as a regular ranged attack, without having to go into the menu each time.
  • In order to defeat the final dragon, you must have a hero with the blue crystal staff in front of the party (top left). Goldmoon starts with the staff, but three other characters can also wield it in case Goldmoon dies (but only after some slow dabbling in the menu, so not useful for a speedrun).
  • If you hold up while jumping and landing inside a door's hitbox, you will decrease the door transition time correspondingly. This can save up to 35 frames per door. To get the 35 frames, you need to jump from as far away as possible and just land inside the door's hitbox.
  • When you exit the menu, the game will put you in an x-position calculated by removing the modulus 16 of the position you had before the menu. That was probably a convoluted way of saying that by entering the menu on the right x-position, you can teleport a few pixels. Referred to as "menu teleportation".

Run comments
This run isn't really comparable to the previous runs due to the new techniques being used. Below is instead a fairly detailed room-by-room commentary. Probably too detailed for most readers, but hopefully useful for someone interested in speedrunning this game. There are several route options that have been considered. I won't go into detail on all of them. The SDA forum thread
contains more information of what has been considered and why the one used in this run was chosen despite faster routes being possible (at least in theory).

Floor 1

  • 1-2 - The game's RNG is reset at the start of each attempt and the movements leading up to the warrior are bufferable. So you will always jump through him this way (you get stuck by trying to run through him though).
  • 1-3 - The only variability added to the RNG is the pixel you took the previous door transition on. There are only a few relevant ones. This is the best outcome with a small knock-back and health loss (there are a few neighboring pixels giving this result, so it's pretty easy to get though).
  • 1-4 - The dwarf is normally a really annoying enemy that frequently gets you stuck. There is also too much variability from the previous rooms so it's difficult to manipulate. To avoid the difficulties in this room, the menu clip trick is used. I anyways need to switch characters at some point early on. The dwarf will sometimes still be able to kick you after the menu, but it's more of an exception.
  • 1-5 - The green guy might shoot you and might deal body damage. So there are basically four outcomes. Each hit costs ~0.1s, so not a big deal. Getting hit once is acceptable in my book. It's not too uncommon to avoid hits, but I've tried some sessions to reset on any hit and that got a bit grindy for my taste.

Floor 2

  • 2-1 - Here I used the double-speed trick, described above, to run through the troll. I'd say it works maybe one time out of three or four and appears to be pure RNG? I haven't been able to figure out the game mechanics behind, but it seems to somehow be connected to some frame-dependent RNG that makes the troll move slightly irregularly. It typically saves almost a second to avoid getting hit by the troll, so this quickly became a big reset point during the attempts.
  • 2-2 - The upwinds are triggered by the global timer in $383. There is not much variation in time between attempts up to this point, so if I'm on pace, I know I will always barely make the jump across the pit before the upwinds. The first green enemy was problematic for me for a long time until I started employing the "run back-and-forth" tactic that I had seen in the TASes. Statistically speaking, I'd say that has improved this spot. Getting through without getting hit, like in this attempt, requires a bit of luck though. The second green guy is sometimes more to the right, to the point of actually blocking the door. It's not too big of a problem, but it happens now and then.
  • 2-3 - The ghost can shoot 0-2 projectiles (RNG). No projectiles is very uncommon though, so getting one is perfectly fine. Another detail is that the projectiles sometimes move slowly. This will prevent you from jumping to the door for the most time save.
  • 2-4 - This skeleton is often a bit problematic and likes to get you stuck. This run had the best outcome though.
  • 2-6 - Just like the enemy in 1-5, you might get shot and you might take body damage. Most common is one hit, while no hits is very uncommon. Two hits was not the best, but the time loss is small.
  • 2-7 - Both enemy encounters can range between a minor knockback or seriously getting stuck. I got a good, but not the best, encounter against the warrior, while I got the best outcome against the skeleton.
  • 2-8 - This room is the reason for switching characters early in the run and putting four characters in front of Goldmoon. I'm not sure how the fire hitboxes work, but they deal the most damage of any enemy in the game and will always kill off a few of your characters. The ideal outcome here is that Sturm (blue guy) and Raistlin (brown guy) are killed simultaneously, saving a death animation. That's pretty uncommon though and unfortunately I didn't get it in this attempt. That's the single biggest improvement potential in this run.
  • 2-9 - Normally, I have Tanis (gray guy) in front at this point and go with the "run back and forth tactic" from 2-2 on the green guy. In this attempt, Raistlin was in front, which means I need to constantly jump to avoid losing time. Getting him killed against the green guy was expected because of his low health. Raistlin's death allowed me to quickly sneak by with Tanis. Then we have the first of three dragon encounters along the route. This one is special as it's the only one you pass from right to left. For unknown reasons, this means you can jump through it. It works something like half of the time, I would say. I'm not sure where jumping twice before the dragon comes from and I've tried to cut it down to 0 or 1, but it seems to have a negative impact on the consistency, so I just do the two jumps and accept that it looks a bit odd.
  • 2-10 - There are a few options in this room that are worth mentioning. The first is that it's one or two tenths of a second faster to kill off Tanis by running into the pit from the left instead of from the right. The next thing is where to do the menu trip. When you're moving right to left, you can use the menu teleportation to gain a few pixels for free. The other consideration is the door transition. You can get the same type of time save as the door jump trick when exiting the menu. Since you can't jump to the door from afar, going into the menu in front of the door saves time in the door transition. So the choice is between gaining a few pixels or speeding up the door transition. It turns out that the latter is ~0.2s faster. Finally, the menuing was sloppy in this attempt. My fingers are usually a bit cramped at this point from pressing the d-pad, so I'm used to not getting optimal menu work, but this was worse than average. Better finger speed could definitely cut a few tenths off the menu time.

Floor 3

  • 3-1 - All spiders, except the one in 3-11, are harmless and can consistently be run through without risk.
  • 3-2 - Having Goldmoon in front shooting the "Hold person" spell has completely transformed floor 3. The spell is not guaranteed to hit, so quite a lot of attempts are going to be ruined by missed attacks though.
  • 3-7 - The hold person spell will fly too slowly in this room and would require you to stop and lose time for it to connect with the troll. There are two other options. Either a regular attack or trying to jump through it. Before the jump to door trick was found, I attacked the troll and had a good success rate at it. But after implementing the jump to door trick, I just couldn't seem to get the attacks to connect. I therefore moved over to jump through it (assuming I had enough health). Jumping through enemies should normally be faster than attacking, but you can easily get "stuck" on an enemy and then it's slower. In this attempt I got through with not too much knockback, and I was also fortunate to have enough health to survive.
  • 3-9 - This is a pretty tricky room to do optimally and there are several things to consider. The spells move too slowly in this room, so you're always forced to wait a bit. The later you cast the spell, the better (but if you're too close to the dragon, Goldmoon will do a normal attack instead of casting the spell). The other consideration is that if you start running towards the dragon too early, the dragon will back off, taking even more time for the spell to connect and increasing the risk of getting hit. Getting hit by the dragon before the spell has connected is also risk. You can randomly take damage from both the dragon's breath or take a body hit. The tighter you play, the higher the risk. I got a little unlucky in this attempt and took a body hit with a minor knockback. It's possible to even start running slightly earlier and avoid getting hit, but it's RNG. Overall, this room could have been 0.2-0.3s faster.
  • 3-11 - The fly speed of the Hold person spell is a problem in this room as well, but if cast in the right position, it can still be used on the warrior. The spider afterwards is one of a kind. It looks the same as the other spiders, but this one can't be run through.
  • 3-14 - The flying speed of the Hold person spell is too slow, so a regular attack is required on the first troll. Or you can try to jump through it, but trolls deal a lot of damage, so that's very risky. In this attempt, I got unlucky and missed the attack, but then got really lucky all things considered and only got a minor knockback when running through. Still, 0.15s lost.

In summary, the first floor could have been 0.2s faster. The second floor maybe a second faster (most of it coming from Sturm and Raistlin dying at the same time and then to a lesser extent polishing the menuing a bit). A few tenths of a second are possible to squeeze out of floor 3 (maybe up to half a second?).

Final thoughts
The execution in this run is not complicated, so there really should only be a minimum of execution mistakes. Of all the time losses in this run, the only noticeable one I'd like to take responsibility for is the menuing in floor 2. A few tenths of a second could be saved there. The rest is mainly up to the RNG the game gives you. And there is lots of it. However, the variation isn't that big. Especially all completed floor 1 and 3 attempts should be very close to each other time-wise.
There is a bit more variation in floor 2 though. Roughly 2.5s based on the attempts I've had reaching floor 3. And this was my second best floor 2 split (0.2s behind the best). However, as mentioned above, perfect luck could probably push the time down by a second, but the odds of getting favorable outcome everywhere are slim.
Overall, I'm happy with this time. Getting a good floor 2 split takes a bit of grinding and then you still need a lot of things to go your way in floor 3 to finish out the run. I wouldn't mind getting back for more if some new time saver is found, but until then I feel I'm done with this game.