Speedrunning Arkista's Ring: A Dummy's Guide

TL;DR FAQ

Why do you sometimes use items when there seems to be no point (Frex: Holy wands with no undeads)?

I'm clearing my inventory. Enemies will never drop a consumable item if your inventory is full, so you have to have an empty slot WHEN you kill an enemy that drops a bag. If I'm doing this, I need something.

Why does the key sometimes appear when you use a Holy Wand or Thunder Wand, even with no foes on screen?

Those items impact the entire stage. When I do this, I know I've killed enough enemies to make the keybearer appear, and know the item will kill them, no matter where they are.

How did you heal yourself while your death animation / the death jingle was playing?

You have a very small window (about half a second) after taking fatal damage in which you can pause the game. If you do it on time, you can use a healing potion to save yourself, even though you've technically died. Since healing potions fill your health completely, you get the biggest bang for your buck by waiting until you're dead to use them.

Why do you sometimes fire in the wrong direction, walk stupidly into enemies, or miss picking up items?

The controls in Arkista's Ring are VERY strange. You can only move on a static grid, but you can turn around and go back to the tile you left before reaching the one you're moving to. While you're moving between tiles, you can't turn, however... so this sometimes leads me to giving an input to turn, and Christine not actually turning.

Why do different monsters of the same type seem to take a different number of hits before dying?

Some monsters share the same sprite. For example, there's three types of ninja, but they all use the same ninja sprite. You can only tell the difference by memorizing which one is which, or watching how they behave. One type of ninja typically dies in one hit, while another can take up to ten to kill.

Why does your damage change each run? Last run a certain enemy died in one hit, this run it needs two.

It's invisible, but you have a damage stat that can go up as you pick up bags. There's absolutely no way to tell what my damage stat is unless I pause the game and bring up the character screen, which I don't be doing during a speedrun.

Introduction

Arkista's Ring is an old school NES top down shooter-RPG published in 1989. You play the role of Christine: a green-haired elf-girl who sets off on a journey with a woefully inadequate set of equipment and the hopes of just finding better stuff along the way. This is not always the case.

Arkista's Ring is a game of adapting to your situation. Everything is random and a perfect RNG run is statistically impossible. You have to adjust to what you're given, make guesses, and take chances; striking a balance between saving time on one level by using items, and having those items available next level-- or hoping you find replacements.

CornShaq said it best during his world record run: "If the game gives you one thing, it won't give you another". That's a mantra to become familiar with as you run, or watch runs of, Arkista's Ring. You simply don't kill enough enemies to get everything you need, and have to be aware of this fact.

Progression

AR takes place in four "loops" of 31 stages. Each loop is the exact same 31 stages, but with harder and faster monsters each loop. At current, speedrunners are only interested in the first loop of the game as loops two through four would just be more of the same.

In each stage, you are tasked with finding a key and unlocking a door to the stage's exit. This is done by killing enemies until a special enemy (which I call the "keybearer") appears. The keybearer is just a normal enemy most of the time, so the only way to know which enemy it is is through experience. However some levels spawn a unique boss as the keybearer, making it obvious.

Once the keybearer is killed, a key will appear in a designated location on the map. Once the key is collected, locked doors can be opened. On almost all stages of the game, getting the key is mandatory for reaching the exit.

As you kill enemies, they have a chance to drop bags. These bags can contain useless things like points, or useful power-ups like items, gear, or rare unique trinkets. More on that later.

Manipulating Foes

Enemies in AR are smart. Christine cannot turn to face another direction without moving that way a full tile, and the enemy AI is coded to exploit this. Enemies will move out of your line of fire and aim to approach you from the side, where turning to face them would result in taking damage. Learning to account for this by using terrain to your advantage, and striking early is critical.

In addition to this, smooth routes through a level can be disrupted by bag drops. Usually a fresh enemy will spawn once a current enemy is killed, but if a bag is dropped, it must be collected or disappear before the next enemy will appear. This can cause delays as the runner is forced to go get the bag, or wait, for the next enemy in the chain to show up.

Speaking of chains: enemies in AR spawn in a static list. Once one enemy dies, regardless of which one, the next enemy in the list appears; same enemy, same place, every game. This means the keybearer will always appear in the same place, after a certain number of enemies are killed, every time. Part of routing AR is deciding which enemies are the fastest to hunt down and place you in a good position to kill the keybearer.

This renders a stage's route to something along the lines of "How do I kill X enemies, the keybearer, get the key, and exit the fastest?".

Items

Items are the usable items in the bottom left boxes. Every item has an immediate, consumable effect.

Of these items, Fire Wands are critical for certain stages (the run is just OVER if you don't have one), Ninja Stunners are necessary in the final stages of the game, Thunder Wands have a select few uses, and Holy Wands are almost useless; they can accelerate a few stages and produce some free bag drops, but that's it.

You start the game with four item slots, but can get up to seven from bags.

Gear

Gear comes in two flavors: invisible upgrades to your bow's range and damage, and armor that extends your life bar. It's impossible to tell at a glance what your current bow and arrow level are; you just have to guess based on your range and damage. Your armor, however, appears as extensions on your health, and each piece represents one additional hit point. You can have up to five pieces, ending in the cape. Having the cape means you're capped out on health.

On top of that, there's three "Trinket" items that appear below your health:

Bag Logic

Bags can contain:

A new enemy will not spawn until the bag dropped by the last enemy is picked up (though you can kill a different enemy to continue the chain). Each pickup causes a very momentary pause in the game. Probably a second lost every ten bags.

Which enemies drop bags seems to be static. My runs seem to always produce bags when the same enemies are killed (though this is hard to keep track of on some stages). Meaning an optimized run should take into account what monsters drop and what monsters don't; especially given the fact that dropping a bag off your route means you need to leave your route to pick it up, or wait for it to vanish.

If a category of drop above is invalidated (frex: your inventory is full, your bow is fully upgraded, etc), it seems the game falls back to making that bag a single heart refill instead. This causes hearts to appear more commonly toward the end of the game, when your equipment is fleshed out.

Inventory is an odd creature. If you kill an enemy while your inventory is full, any would-be consumable item drops will be health instead. If you kill an enemy, then fill up your inventory before grabbing the bag, they'll be points.

The final boss of the game, in Stage 31, will always drop a bag, but it will always contain Arkista's Ring. This is the only way to get it. You DO NOT need to pick up Arkista's Ring to finish the loop.

Random Exits

If getting the right gear, right enemy patterns, and right items isn't enough, the end of the game has several stages in which the RNG can troll you by moving the exit. If you step on a false exit, there's a chance of spawning additional enemies.

Stage 30 can sink a run. If you end up checking all eight stairs before finding the real one, you've lost a minute and a half to two minutes. This is why I try very hard not to get attached to a run, no matter how well it's going.

Getting A Perfect Run

In a nutshell, a perfect run of AR is impossible. There's so many RNG-based events that you could play your entire life and not see it. A perfect run would look like this, all imapcted by the RNG:

I estimate, if you get an absolutely perfect run handed to you by the RNG, you can complete the first loop in 12:00. As of this writing, the world record is 12:27.

RNG Manipulation

This might get a bit technical...

Every random operation in the game (stair placement, bag contents, some enemy movement) pulls from a single entropy source located at $072F. This value increments every frame of gameplay. While gameplay is active (you can move Christine), this value increments by 87. When the game is paused in any manner (end-level animation, inventory menu, select menu, stage intro), the value only increments by 1.

The cause for this behavior is a subroutine run by the code only while gameplay is active. This subroutine grabs a seemingly random address from the ROM ($C8A0, map tile data AFAICT) and adds it to the counter. The value of this address is 84, but the subroutine also increments the X register a few times before saving it back to $072F. It's all very strange.

Anyway, about 10 frames after you press 'A' to begin a new stage, the value in $072F is grabbed, manipulated, and stored in $0724. This address represents which exit is the real exit and seems to be a simple integer relationship. For each possible value, there's one staircase in the level represented. The values make no sense logically; the stairs aren't in any order, but if you... for example... get '7' on Stage 30, you'll get the God RNG, every time.

$072F also manipulates bag contents and monster AI. Freezing that value to 00 will result in a rather amusing situation where every bag will drop a fire rod, and monsters will only move north unless they can't, or they detect you.

What's this all mean for a speedrun? Jack shit. Since your entropy source is incrementing every frame, and by a different amount depending on what you're doing, you'd need the ability to have frame-perfect input for everything you do. As soon as you're a frame off in a single input, you've lost track of what's in $072F with no way to get it back.

Furthermore my basic testing of how $072F gets massaged into what's stored in $0724 shows that being just one frame off can move the stairs away from where you expect; I didn't bother finding the subroutine that actually does this, since seeing major differences in stair location from just one frame of error was enough to prove to me that RNG manipulation by a human is not possible.

The only useful bit of info I got from this is a confirmation that Stage 05's exit is NOT randomly determined. Upon entering Stage 05, $0724 remains 00. This demonstrates that the exit is not selected by the game code at all. Random selection always populates a non-zero value into $0724.