Vargen Crown is June’s ZX81 Program

A good game concept in theory, but its execution is riddled with frustration.


“Jealous of Vargen’s accomplishments, a rival kingdom has attacked and kidnapped your king. As head Knight, you mount a quest to return the King, hidden somewhere in the forest by his captors. But hurry! The King's ransom has a time limit. Can you find the King in time and restore the Vargen Crown?”

Sounds great right? An adventure game set in a single screen. I had high hopes for Vargen Crown. Castles, keys, and puzzles, our program of the month covered the basics of adventure. Using just the ZX81 cursor keys, playing it will leave you unsatisfied and, I suspect, quite frustrated. It’s too bad as the game has a decent look to it. I chalk it up to being a young programmer, but that's not an excuse. Still interested? Let’s dig in and see what makes this game tick.

Although I want to start by getting telling you why this game is bad, I also don’t want to spoil it yet. Instead, I first want to tell you why I designed it this way. Bear with me and, if you’re still lost getting into the castle, I’ll explain it all in due time. If you’re still impatient, jump to the end for the spoilers.

It’s about discovery.

It’s hard to call Vargen Crown (VC for short) an open world game, but in many ways that’s what it is. Presented with a pair of castles and a timer, it should be obvious where to start. But something is blocking that castle door. What do you do now? Where do you go? Better figure it out as that timer is ticking down.

Much like more modern games, I wanted the player to experiment and figure out what to do. Sitting down to play it all these years later, it didn’t take me long to figure out how to move. Yet, I had no clue what to do next. Wandering aimless around the screen, it didn’t take long to get frustrated. And I wrote it!

…playing it will leave you unsatisfied and, I suspect, quite frustrated.

To be fair, this was 1984. A year before I was punching programs on a PDP-11’s teletype. My first programs just printed pictures or calculated your age. Now, I was designing an adventure game that would play out on a single screen. Limited by age and experience, I did my best.

Good intentions aside, VC just doesn’t have much to do. Once you know how to play, there isn’t any replay value. Besides bad design decisions—more on that later—I didn’t make good coding decisions either. The game is horribly slow.

The making of a slow game.

Given the relative simplicity of the game, I am surprised at how unresponsive it is. What there is to do is stuffed into each move, causing the game to bog down. To compensate, I turned to the FAST command. Although it speeds things up, it causes an annoying flicker on a real ZX81 and is best avoided.

The code itself is pretty difficult to read, even for ZX81 BASIC. This is due to two reasons. First, it will help you to know that the game changes when you bump into things. For example, touching the key will open the castle. To determine what you touch, I grab the value of what is at the location you are trying to move to as follows:

 360 PRINT AT X,Y;
 370 LET P=PEEK (PEEK 16398+256*
PEEK 16399)

The problem is that I have to then compare that number to what you hit. For example the inverse “O” of the key has the code of 168. That’s pretty cryptic and it wouldn’t have been hard to use CHR to convert to a string. Doing so would not only have made reading VC easier, but it would have been faster too.

The second problem is that I crammed all the logic into a single FOR loop. Lines 250–480, almost half of the program, take up all the game logic. Only nine lines, the puzzle code at 510–590, is done outside of the loop. No wonder I had to use FAST.

Remember to simplify.

VC uses a variable, O, to maintain the state of the game. I’m either checking it or changing it. Hind sight is always better and I can definitely see ways to drop those IF statements. The easiest would be to move the logic into the code that tests for changes. Doing so would remove five lines of code.

On the changing state front, I actually modified it in 1998 when I first entered the program. In the original version of VC, I had put all the logic into a single line using ZX81’s boolean logic. Tight as that code was, it was fraught with errors. I broke that code out into separate IF statements. This not only got rid of the bad logic, it also made VC easier to read.

That said, I could have even done away with that change. Since each state is linear, I could change the test for what you touch into a variable. That way, VC is only taking action when there is something worth doing. This change would add a bit more complexity to the program, but speed is king here.

These and a few other improvements would have improved the program’s speed. As a bonus, none of the changes would compromise game play. Now, if only that was better.

Improving the game play.

Speaking of game play, I still owe you how to beat the game. trying to find that elusive key? Here’s a hint: you need to be on line eight. Yes, you need to be on a specific row or column when moving to expose the key or the crown. For whatever reason, I thought that moving a specific way would be a great way to hide things. It isn’t. Instead, it is a gimmick that at best is time consuming. At its worst it’s annoying.

Still trying to find that elusive key? Here’s a hint: you need to be on line eight.

If you think that is bad, the next part is worse. I print a random sequence of charters at the top of the screen. Okay, go touch them and they change. Ah, you’ve found the puzzle! So, keep touching them, in different orders, to see if you can figure out what the sequence should be. It’s random each time so I can’t tell you what it is.

Worse, with each touch I change other characters in the puzzle. Because of that, you can’t just try all the sequences. There aren’t many. Mind you, I had taught myself how to solve a Rubik’s Cube back in the 5th grade so I thought I was being clever. Instead, it too is annoying. Even worse, you can change the sequence in a way that will prevent you from solving the puzzle. Also not fun.

Later, I did make the crown a bit easier to find. Originally you had to be on line 17 which isn’t easy to count out. I moved the test to be along the floor. Just move all the way south and traverse east and west until it appears. Touch the tip and you can head home for the win.

Oh, just in case you are still looking for the key, here’s how. You count out 8 from the left side, about three spaces past the castle, and move north and south to reveal it. Unlike other games I’ve used this shortcut in, running over the key or crown won’t expose it. Yeah, I told you this would be frustrating.

One more thing. There is actually a score. The game repeats until you die—apparently for failing to save the king. When you do die, I tell you the score. Given nothing about the game changes, not even the time, I doubt you’ll ever see a score. Even I gave up after my first win.

Oh, and that score, it’s bogus. Each moves gives you from 0–2 points—yes zero. When you complete the story, VC awards you the time left on the clock, adding it to your score. That is actually a better scoring mechanism. To be honest, though, I could have left the score out and no-one but me would have noticed.

Making it better, again.

Although flawed, there is still hope for VC. Besides the fixes mentioned, there is also plenty of memory left to work with. For example, adding a combat system would help. I mean, it just makes more sense—really you just wander around to find the crown?

Plus, if done right the open world concept starts to make sense. You now would have something else to do in the world and could, theoretically, ignore the main quest. In fact, if the combat actually dropped items or added time, it would propel the game forward.

I’d rather add the combat above and find another way to introduce objects.

If I still wanted to keep the hidden object puzzle, adding a “glint” to the game as a clue would help. Perhaps blinking on a row or column to show where to go. That would, unfortunately, slow the game down. I’d rather add the combat above and find another way to introduce objects.

I’d also remove the object puzzle, relying on other ways to find the crown. Besides being buggy, it just disappears without any clues telling you want to do next. The puzzle should fit into the story. As it is, the puzzle feels thrown in just to give you something to do.

Although I can think of some other ways to improve the game, I actually like the single screen design. VC just needs more to do to make it fun. If I had to, I could use MCODER to improve the speed, but without better game play it isn’t worth the effort.

And that, my friends, is Vargen Crown. Do you agree with my assessment, or am I being too harsh? Let me know in the comments!

Comments on this article:

No comments so far.

Write a comment:

Type The Letters You See.
[captcha image][captcha image][captcha image][captcha image][captcha image][captcha image]
not case sensitive