Dragon Quest, again

Foreword

There are a few things about Dragon Quest 1 which makes it special. First, Toriyama is a great designer. Just compare the DQ slimes to slimes in other games. Toriyama's slimes can work as actors, whilst still being very simple. No one cares much about the Zelda 1 slimes, Druaga slimes, Hydlide slimes, etc. I think he understands how to "animate" characters in a very immediate way, as well as giving them a trait which make them stand out from the crowd. The skeletons have that big skull for example. Another interesting design is that of the Orc which was probably made before our modern orc/ork had manifested and settled.

Where were I? Ah, yes, the second thing that I like about DQ1 is how the player can move about quite freely, with few door&key puzzles blocking the way. It's similar to Zelda 1 in that respect. Monster difficulty is a more important limiter.

As far as game mechanics goes, DQ1 is pretty simple. Because of this, I think it could be adapted into some sort of random generated, play-and-forget game where resuming a game or starting a new one will be easier than in a story heavy, 60hr game. There's no big plot, no player-herding, and the setting and monster fauna is lighthearted and fun.

I have an old DQ project [link removed] but decided it was time to update it.

Devlog

End of March

Doodles

Adapting the designs to my chibi proportions, and taking some liberties, changing details around. I might do weak, normal, strong version of some designs, and alternative versions. For example, the might be baby Wyverns, adult ones, and Greater ones, and Star Wyverns as a special. I like skeletons, so I'm gonna do a few versions of those, perhaps putting the greater skeleton into a heavy armor similar to that of the regular blue knight.

Dragon Quest concepts by Arne

Thoughts on plot

The plot needs to explain the lone hero setup, and a few other things. Here's the general idea:

When the bad guy appears, he floods the land with monsters. Armies and "chosen one" move out, but are killed. This explains why people don't care much about the few roaming heroes which remain. People have holed up in the more well fortified cities which remain (a lot are found in ruin). I'd like to scale the game, with trading, warring kingdoms, mining and crafting, etc, but for now I'll keep it somewhat simple.

Plot twist: Perhaps the chosen one was the bad guy in disguise, leading the armies into a trap. Not much replay value in that story though. Perhaps the nature of the bad guy varies. It was an imp of hell rising to power, a corrupt king, etc. This gives the player some sort of reveal to look forward to. In Diablo 1 there are these mini bosses who vary from game to game, so a solution like that could work.

Map reveal test

I'm just doing an 8 neighbor map reveal here, I think it'll be enough. I'm playing around with the idea of having a pet which can fight alongside the player, and if it can fly it will increase the map reveal radius. Perhaps forests can shrink the radius to a single tile, suggesting that it's hard to see far in a forest. Another idea is to have character skills which change the radius, so a forest ranger might see farther in a forest, and be safer from enemies.

Anyways, the player starts with an inaccurate map (black for unexplored, or brown (map paper) for loosely charted areas). As he moves about, the true terrain and special landmarks are revealed. Some NPCs will even pay for map charting and discoveries, and some sell better maps which is useful early on. This would encourage the player to explore more, and not just move between visible landmarks.

However, repeated play throughs might make this feature less interesting, so I started thinking about random maps. This lead me to...

Map generation test

This went better than expected. At first I thought I'd do this complicated continental simulation, but instead I opted for a solution with roaming clouds, raining down land masses by adjusting their spray nozzles and headings. I absolutely wanted to stay away from perlin noise because it just looks so bland.

Writing a random map generator is a massive undertaking, perhaps. The map not only has to look good, with interesting shapes, rivers, mountain ranges, big deserts, themed areas (like an easter island, or minos maze), it also must be traversable, and populated by people who understand it. You have to watch out for nasty diagonals, orphaned noisy tiles, and fakey looking chunks.

However, I believe some of these things can be solved. The cloud solution sort of worked, and the different cloud formations moving about can create different land chunks, or "kingdoms". I'm putting mountain ranges and other barriers between these kingdoms. I also subtract terrain to make crater lakes and more interesting contours.

Later, I can make forest clouds, hill clouds, swamp clouds, and figure out a way to make sensible rivers. Each kingdom can be associated with a monster tier, and theme which determines how it's dressed up (march, forested, lakes...). The climate can determine if the kingdom is a desert, jungle, temperate or cold. The kingdoms can also have names, and NPCs there can be aware of the nature of their domains. I can calculate the size of a kingdom by simply counting tiles. Small kingdoms and large kingdoms might get a special treatment.

Minor quests and world descriptions can be made by placing treasures and landmarks first, then generating NPCs in nearby towns who will blab about them. For example, if a dungeon with an item is placed, a fetch-quest NPC can be but into a nearby town.

But what about traversability? I'm not sure if it's a problem in a DQ1 style game, because just like in Zelda 1, you were pretty free to roam around. I can imagine being able to climb mountain ranges (though it might require certain skills and gear (and there could be nasty monsters there). Oceans can be sailed, and perhaps some kingdoms generate a instant travel harbors (though that would require flood fill/path finding to determine contacts and distances/fares). Harbors with more connections should look larger, so isolated harbors don't appear out of place. Harbors shouldn't be placed too close to each other of course (by easily traversible land distance). I really do need to write that pathfinding routine. However, harbors might not be feasible if monsters are preventing trade, so I might skip them.

The difficulty level (tier) could radiate outwards from the player's starting position. The player starts in a small town.

Population (Encounters)

This class is almost done. I keep the monster populations in a 4D array, and by jiggling it a bit I can cause monsters to stray or spill over from one place to the next. I never liked how monster encounters were so monotonous in most RPGs.

Population[PLAIN, TEMPERATE, TIER1, SLOT3] = BLUE_SLIME

Monsters are more likely to spill over from the Terrain dimension (e.g. from PLAIN to HILL or FOREST). MOUNTAIN and SWAMP are special because they are used as barriers with much harder monsters, so monsters rarely stray from there. Monsters can only stray one climate zone up or down, i.e. not from DESERT to COLD. The level of a monster depends on which tier it's in. If a monster is pulled from a lower or higher tier, its level is changed to match the player's area (perhaps it felt that it was too good or bad to hang out with its normal buddies). I'm thinking the mountain and sea areas will have to be special, perhaps locked to a mid tier, preventing sea/mountain travel early on. Dungeons are sort of isolated too, have different tiers.

Also, the player can move in normal mode, sneaking mode (repel) and attract mode (to make grinding easier). Encounter rates are affected by terrain type, but also by which tier the player is estimated to be in. If a high tier player moves in a low tier area, he'll be more unlikely to run into stuff unless he's in attract mode.

I think I may write a graphical editor to "paint" the monsters into the population array, rather than using Data statements or somesuch.

Starting characters and leveling up

Implemented my Immediate Mode GUI and a simple character data structure. The character classes only define which stats are raised on level up, though the player still gets a few points to distribute. Starting gear, gold and special abilities are also defined by class. A merchant gets gold income and can haggle in stores, for example.

Obviously I have no monsters or game yet, so the level up button is a cheat. I was thinking easier monsters quickly give less XP because they're predictable, whilst more complex monsters give more XP longer because they're better sparring partners. At one point the player will learn a monster's behavior and be able to score criticals easier.

An equipment class needs to be written too, so the character can point to instances of items.

April 1

Climate zones

The program is quickly turning into a mess, or rather, my brain can't keep up with the complexity of it. Here's some progress on the map generator. There's work to be done with orphans and diagonals, sensible rivers, and there are no cities or monuments yet.

April 7

Beaches and diagonal elimination

I did some sloppy routines which draw beaches and cleans up diagonal water tiles, but much tweaking is needed to make it look good. Diagonals is the problem in both cases. A beach tile should probably only be drawn in a diagonal adjacency to the sea if it has beach neighbors with horizontal or vertical sea adjacency. And the routine which cleans up the diagonal water tiles (to make rivers with no diagonal flow) sometimes produces new diagonals as more water is added. I guess I can do multiple passes, or come up with some clever way of determining how to add a water tile without creating a new diagonal. I might need to do the same thing for mountains.

Random idea: The player can cross rivers with a Zelda "ladder" mechanic (wade across, or use a small raft). Should sea tiles be more likely to become shallow tiles depending on how many land neighbors they have?


Byline: Niklas Jansson, 2012.