Coleco Dragonfire in 01:40.6 by Noxxa
Game objectives
- Emulator used: BizHawk 2.2.2
- Heavy luck manipulation
- Endless game - plays until difficulty caps out (round 21)
About the game
Dragonfire is a 1982 video game published by Imagic, developed for Atari 2600, Intellivision, Commodore 64, Apple II, ZX Spectrum, ColecoVision and more. The objective of the game is for the player to run over a castle drawbridge while avoiding fireballs and other obstacles, and then grab treasures guarded by a dragon who spits more fireballs at the player. Leave the room, rinse and repeat until lives run out. Other obstacles include a moving drawbridge, an archer firing arrows at the player, and a troll inhabiting the treasure room.
Difficulty progression and completion criteria
As the game progresses and more levels are beaten, the game gets incrementally harder.
The following difficulty changes are applied as the level number increases:
- At any level, in the bridge section, fireballs go from the left to the right side of the screen - one high one, and one low one. The high one must be ducked under, and the low one must be jumped over. The high fireballs move faster than the low ones, and two fireballs always appear immediately at the start - therefore, the player always must first duck under one fireball and then jump over another. In the treasure rooms, the dragon lies at the bottom of the screen, firing fireballs in random upwards angles. The delay between dragon fireballs slowly decreases every level. Only two dragon fireballs may be on screen at a time.
- On level 3, the drawbridge in the bridge section opens up, requiring the player to jump over it. Collision is very vague however, and it often is still possible to just walk over thin air to proceed. Also, in the treasure room section, a troll starts to appear. Hitting the troll's sword is death, but otherwise touching the troll defeats it.
- On level 6, the archer at the top left of the bridge section starts to fire arrows to random positions on the bridge. The drawbridge stops opening up. Also, in the treasure room section, when one particular treasure is collected, an arrow will fly at the player from the left side.
- On level 9, the drawbridge starts to open up again, alongside the archer firing arrows.
- On level 10, the treasure room dragon will only fire directly at the player, and no longer randomly.
- On level 12, drawbridge fireballs start having less delay between them with every level.
- On level 16, treasure room fireball delay reaches a minimum cap - the delay time remains the same for subsequent levels.
- On level 21, drawbridge fireball delay reaches a minimum cap - the delay time remains the same for subsequent levels.
After this, rounds repeat with the same difficulty statistics. The game never crashes or kill-screens; after beating level 255 the level counter overflows back to 0.
Technical details
Memory addresses relevant to fireball delays are as follows: (hex addresses in Main RAM unless noted otherwise)
- 01DF - current level
- 01B8 - drawbridge bridge delay (counts down after the drawbridge is retracted)
- 01BC - drawbridge upper fireball delay (counts down after fireball goes off screen)
- 01C0 - drawbridge lower fireball delay (counts down after fireball goes off screen)
- 01B0 - treasure room fireball delay (counts down at any time while in treasure room)
Delays are stored in ticks; not necessarily equal to frame rate (sometimes multiple ticks are processed per frame), but close enough to be comparable.
The drawbridge bridge, if active, always has a fixed delay of 62 ticks, regardless of level. The archer, if active, has no delay; he always fires immediately after the previous arrow has touched the ground, regardless of level.
Drawbridge fireballs are stored between (system bus) addresses 8ED8-8EE2 (upper; range from 96 to 16 at level 1-11 to level 21+ respectively) and 8EE3-8EED (lower; range from 255 to 42 at level 1-11 to level 21+ respectively). The speeds of the fireballs themselves are constant and do not change at any level.
Treasure room fireball delay is stored at (system bus) address 8CD6, at value 40 decremented by the current level count, with a lower cap of 16.
Dragon fireball tracking is done by checking if the current level is 10 or greater; if true, it will aim fireballs directly at the player. Otherwise, it will call the RNG at 01E9-01EA, and randomly decide whether to aim at a random spot or directly at the player. A higher level increases the chance that the dragon will fire at the player. Intended fireball direction (velocity) is stored at 01F6 (y)/01F7 (x).
Treasure room goblins and arrows, besides their activation, do not have any level-related changes.
About the run
Following above difficulty notes, this movie plays from level 0 through to level 21.
The bridge sections have little variety in them; duck under first fireball, run a few frames and jump over the second, run over the drawbridge (regardless of whether it's actually opened or not; it's pretty buggy), and onto the next area. There are only a few caveats; one, if an archer is present, he must be luck-manipulated not to shoot an arrow to the left side (this would block player progress). Second, in later levels, the second upper fireball spawns soon enough that the player cannot reach the exit before it appears, so he needs to duck a second time.
The treasure room areas are more interesting. Treasure positions are completely randomized. The RNG for this only changes once every approx. 5 frames (depending on tick rates), which means that room compositions are relatively limited without spending excess time on luck manipulation. This means that "perfect" room compositions are effectively impossible to manipulate, so I just have to manipulate the best layout that can be gotten quickly enough, making every room quite unique. Besides getting a favorable treasure layout, collecting each treasure while getting past the dragon fireballs, arrows, and sometimes the troll also makes routing each room interesting. There are a lot of different possibilities in every room, so lots of testing different room layouts and routing was required.
Often times, I can be seen wasting some time in the bridge sections; this is for luck manipulation for the treasure rooms.
Tricks
General notes
- Timing is a bit unstable. The game loop runs in ticks, which run independently from video framerate at a non-constant rate. This makes the game very timing-sensitive.
- Some timers also carry over between screens, resulting in small frame rules. Combined with the sensitive timing of above point, this means similar situations (like the bridge sections) sometimes have subtle changes that very slighly change how they must be approached. For instance, generally the player can run for 3 frames after ducking under the first high fireball in a bridge section, but sometimes it can be a frame more or less.
- Input is (generally) only processed every other frame. This is again dependent on ticks.
Treasure room entry corner boost
There's a small corner boost at the start of a treasury room; pressing up+left from the starting position will cause the player character to zip to the left by about one character length. This is not always beneficial, however; if the first target it downward instead of leftward, going for this would lose time instead.
Screenshots
Thanks for watching!
ThunderAxe31: Everything seems to indicate that level 21 is the last one available. After beating it, the game proposes the very same level settings endlessly. Even the dragon's colour stops changing.
The audience reception was borderline, probably because the movie resulted a bit repetitive. However, I must note that this game is notable for its extreme difficulty, so the run results in a very clear example of tool-assisted gameplay, which is exactly the sort of material we want to highlight. Accepting for Moons.