Well of Souls: Rune Runner is a tiny 3D Role Playing Game.
You create a character, battle your way across multiple maps, performing quests and advancing a story line.
This is a game in development, and I have published it early so as to solicit feedback and performance data from a variety of phones
My goal was to port (portions of) my game "Well of Souls" from the PC to Android, and make it 3D in the process. You might think of it as "Well of Souls Lite, in 3D".
Now Open For Public Alpha Test
As promised, I am lowering the price to $1.99 to announce the beginning of the Alpha Test period. I know it's sort of lame to charge money during the test phase, but luckily the Android Market will give you a full refund if you decide that you have no faith the game will ever be enjoyable for you.
But if you DO enjoy the game, then you will have obtained it at a bargain price, since the final release price will no doubt be higher. Probably not a LOT higher, but hey, you might have saved a dollar!
If you buy (and keep) the game at today's price, you will NOT have to pay the 'release' price once it gets formally released -- you will already own the game.
Presently this is more of an Engine Test than a Game Test, as there are only a handful of monsters and quests. But more will appear in future updates.
If you have comments/suggestions/problems during the test, please email me. (the email link is on the Android Market page, but you can use firstname.lastname@example.org if that's more convenient)
At this point, I am particularly interested in feedback about how it plays on different phones.
|How To Play|
It's a little premature to provide a user's manual at this stage of development, but if you take the following with a grain of salt, and hold out hope for art improvements, you should be able to work your way through it.
Generally speaking, you will encounter a story line which will motivate your actions, but I can't describe that yet, so this is intended to document the mechanics of navigating the menus, walking the 3D world, and battling monsters.
After you start the game and sit through the loading screen (now, with Elvish!), you will find yourself on the Character Creation screen.
The first time you play the game, you will start on the character creation screen. It looks a bit like this:
This screen offers you the choice of some customizations of your character (name, race, weapon, height, weight, face, clothing).
Tap the buttons until you see something you can tolerate (each tap randomly selects one of the available choices). Then press the green check button to accept this character and get it created.
If you have played before, the game will start on the Character selection screen.
This screen lets you rummage through your existing characters (tapping the left and right arrow buttons), then start/resume that character's adventure.
Generally speaking, pressing the BACK button will close dialogs or exit the current game mode, eventually returning you to the Character Selection screen. One more BACK from there quits the game. Back..Back..Back...... exit.
Your character is automatically saved when you exit the game. However, UNINSTALLING THE GAME WILL PERMANENTLY DELETE ALL YOUR EXISTING CHARACTERS.
You can, of course, re-install and start new characters, but I just wanted to be clear that your characters are NOT stored on some magic server in the sky. They are stored ON YOUR PHONE. (Android 2.2 phones can move the game back and forth to SD Card.)
Walking the World
Once in world, your character will appear roughly where you left it. Your goal is then to perform the storyline quests given to you. This will probably require a lot of walking around and killing stuff.
It's an RPG, you know the drill. Did I mention there's gold?
To move your character around, just drag your finger anywhere in the general middle of the screen.
You may have played games that use a virtual joystick to move around. I found that forcing you to hold your finger down to move was surprisingly tiring and painful, even after a short period. Maybe that's just me.
Changing the Camera Angle
There are a lot of beautiful vistas to enjoy (one hopes) so you will want to be able to move your camera angle around without actually moving your character.
To control the camera, drag your finger along the edges of the screen. (roughly in the areas shown below).
Your finger drag is either steering your character (middle of the screen), or adjusting your camera (edges of the screen). It might take you a moment to get a feel for just how close to the edge you have to be.
Don't be afraid to drag right on top of the buttons on the bottom. They should ignore your dragging, and just react to being 'tapped.'
Selecting a Target
As you walk around, you will encounter bad things.
Here we see someone in the distance ahead of us. Because we had no target before he showed up, the game has automatically targetted him for us.
While targeted, he has a red shadow, a red arrow over his head, and a life meter at the top of the screen, right next to our own.
We can't attack anything unless we target it first.
To select a target, just tap on the 3D character itself. Alternatively, tap on the target life meter to cycle between available targets.
The life meters show the hit points (red) and mana points (blue) of yourself and your current target. Your goal is to make his red meter go empty before yours does.
The life meters also shows a character's "level."
Battle starts when you attack him, or he attacks you, and continues until one of you is dead (or runs away successfully).
This is NOT a turn-based game. You are free to attack whenever you have a charged-up action available. But actions all have a recovery time before you can use them again.
There is no PAUSE button per se, but some actions (like opening the MAP screen) have a partial pause effect. Don't count on this, however, the end goal is to have no pausing whatsoever.
Along the bottom of the screen are your action buttons.
Along the far right are the 'permanent' actions which are always available.
Along the far left are the buttons which vary depending on what you have targeted:
In the middle are the 'flex' buttons that come and go as needed:
During a battle, your character will automatically engage in melee attacks against any nearby monster that attacks. (I mean, you don't have to push any buttons, he will just make standard attacks with his weapon, as fast as it recharges).
However, your melee attacks are not your strongest.
With an enemy targeted, you have three attack buttons in the left set of action buttons.
The idea is:
The permanent action buttons give you quick access to your primary runestones (Ruby, Emerald, and Sapphire).
Runes have multiple uses. But for now, just accept that you can use them like health potions.
You will occasionally die, your corpse lying embarassingly at the feet/tentacles of your opponent.
You will see a dialog appear offering you the choice of popping back to life right where you are, or giving up and returning to the Select Character screen.
Along the VERY bottom of the screen is a thin blue line (heh) which is your 'experience meter.'
When you kill a bad thing, or complete a quest, you earn some experience. When that meter fills up completely, you earn a 'level' and that increases all your stats a little. (more hit points, more mana, stronger attacks, better defense, etc)
After earning experience, the experience bar lengthens and the newly exposed area 'glows' for a moment to help you revel in your achievement.
You also get a free recharge of HP and MP when you level up. Which is good because you don't want to use up all your rune stones as you need them for something other than just healing potions.
Level ups also earn you Onyx Runes, which you can use to boost your abilities, via the STATs screen.
To open the STATs screen, tap your own life meter (in the upper left of the main screen).
This opens a panel that looks like this:
These are divided into four categories and are mostly self-evident, but the interesting bits are:
In the lower left are the 'second tier actions'
One of the action buttons on the stats screen opens the Rune Weaving screen. This screen lets you create new runes by either weaving together or cracking apart other runes in your possession.
This is basically a color-mixing mini-game.
Over the course of your adventure, you will naturally collect some number of red, green, and blue 'primary' runes.
To make a new rune, just tap on the color you want. If you want a yellow, purple, or aqua rune (the 'secondary' runes), then you must weave two runes together.
For example, weaving a Yellow rune requires one red rune and one green rune. You start the weaving by tapping the Yellow rune.
If your weaving is successful, then you will have one more yellow rune, but one less red and one less green rune.
To make a Diamond (white) rune, requires weaving NOT the easy-to-get red/green/blue primary runes, but the harder-to-get yellow/purple/aqua secondary runes.
In the rare circumstance where you are desperate for a primary rune, just tap on what you need and it will 'crack' one of the adjacent secondary runes (whichever you have more of) to recover a primary rune.
Your success in rune-weaving is based on your rune 'skill' which starts at 50% (roughly 50% successful in weaving). A failed weave, or crack, consumes the source rune(s) but provides no product rune.
After you do the proper quest, you will find yourself the owner of an invisible Fishing Net.
Fishing is easy, just stand knee deep in any pool of water and a fishing icon action button will appear. Press that button and you will cast your net.
You must be IN the water, but not past your neck deep. Admire the lovely ripples.
Depending on your Fishing skill you will catch one thing or another. When you catch a fish, you automatically check if it has swallowed any sapphire runes, which you remove (without hurting the fish) and the fish is then released back to the water.
This is a fairly high yield source of sapphire runes. And non-violent.
Likewise, a different quest will get you a magic seed bag. Again, you must travel to an area with suitable conditions for planting, at which point the seed bag icon will appear (in the same flex action button spot used by Fishing).
Press that button and you will attempt to plant a seed. Your Farming skill will determine your success rate.
Your magic seed bag comes with a fixed number of seeds. You may have no more than that many seeds planted at any given time.
But when you harvest a plant, you get the original seed back (it's magic!) which you can then replant (in the same place or elsewhere).
It is your responsibility to remember where you planted your seeds, and on which map. However, the map will show a tree icon for each seed you have planted, so it shouldn't be too hard to find them.
Also, your radar will show a yellow dot for each nearby plant.
To harvest a plant, you must target it, and then attack it. It will fight back, and if you win the battle you will get some number of green runes as your loot.
How many runes you receive is a function of how long you allowed the plant to grow. Full growth provides a large number of runes and takes about 24 hours (real time).
But where is a good place to plant? Hint: plants like water, but prefer 'dirt' to sand.
As a result of questing, you will occasionally receive objects which can summon mounts. A mount is just something you can ride (like a horse) and that lets you travel faster, or somewhere you normally could not.
Once you own a mount, you can summon it via the STATS Panel. (Tap on your own health meter to open the STATS panel, then tap the MOUNTS button in the lower left. This will open a list of the mounts you know how to summon.)
Select one then tap 'SUMMON MOUNT' and you will be returned to the game, riding something.
To get off of the mount, tap the dismount button on the main screen (it appears when you are mounted, and supersedes the farming/fishing flex buttons.)
Mounts come in three flavors:
Being on a mount does NOT interfere with your ability to fight, unless to do so would be unfair (for example, you cannot fight from an air mount while more than a meter or so above the terrain, since otherwise your enemy might not be able to hit you back. Which would be unfair.)
Tapping the compass/radar circle on the main screen opens the MAP screen (tap the phone's BACK button to return to the game)
The map screen opens to show your current location, but the left and right arrow keys can flip to other maps (but only maps you have visited, or have permission to visit)
The blinking red arrow represents your current position and heading. You can use your finger to drag the map around, and the plus and minus buttons to zoom in and out on any location you like.
Important locations are indicated with a little village icon of some form (it will be very faded if you have not visited it yet). Larger faded circles indicate 'regions' (usually where a particular sort of monster lives)
Tapping inside a location brings up information about it in the top left of the screen. (and a yellow arrow on the map shows which location it is talking about)
If you have previously visited the location, and it is a teleport destination, then a GO button will also appear. Tapping that will initiate a teleport (or flight) to that location.
Teleport destinations are usually 'safe' locations with no monsters nearby. Often you will find NPCs offering quests in such locations.
That yellow arrow is also your current NAV POINT and when you return to the main game, the radar compass will show a gray dot on the edge of the compass, indicating the location of the NAV POINT. Walk into the light...
Generally speaking a quest starts when you accept the offer from some NPC (Non-Player-Character). It then requires you to go somewhere and collect something, then to go to its turn-in NPC to get credit.
To tell the story in pictures:
You're wandering the map, when you encounter a golden dot on your radar/compass (that circle in the top right of the screen). You approach and see you have met up with the "Fishing Master."
He has an exclamation mark over his head to let you know he has a quest for you. To learn more about it, you need to talk to him. You do that by making the Fishing Master your target (gets that special green shadow, coz he's friendly) and then pressing the CHAT button which appeared in the 'target actions' along the bottom left.
This opens the Quest Dialog:
If he has more than one quest to offer you, the green arrow buttons along the bottom would let you switch between them.
If the quest description is long, we use our finger to drag the description up so we can read the rest:
We see that he wants us to collect 5 "Jelly Pigments".
That fishing net looks desirable to us, plus we're a Hero, so we LIKE to help people. So we press the ACCEPT QUEST button. (We can't collect any Jelly Pigments until we have accepted the quest.)
Now the exclamation mark over his head disappears and is replaced by a silver question mark. This means he is the turn-in point for at least one quest, but that we haven't yet met the requirements of that quest (at which point the question mark will turn gold).
So, let's go collect some Jelly Pigments!
Looking for red dots on the compass is an easy way to find bad guys, and luckily for us there are lots of Jellys a short walk from the Fishing Master.
The enemy name tag includes a little extra info to let us see our progress in meeting the quest requirements. (Here we see we have so far collected 0 of the required 5 pigments.)
Tapping an enemy nametag lets you 'talk' to the enemy. If that enemy is part of a quest, this opens a special version of the Quest Dialog with a list of all quests relating to that enemy.
When you kill a quest-related enemy, you will get credit for the kill and might get a drop of a quest-related item (a 'trophy'). You might also get non-quest-related 'drops' (like runes).
And when you meet the final requirement of a quest, you will also get some notification to remind you.
OK, now what? Where's our fishing net? They said there would be cake! Then we remember that we have to return to the turn-in point, which in this case is back to the Fishing master.
If we don't remember where he was, we need to use the map.
To open the map, tap the Compass (circle in the top right of the screen). This switches you to Map Mode (press the android BACK key to return to the game).
You can drag the map around and zoom in and out.
And we see our golden question mark down in Angler's Haven. We could walk there, but this village turns out to be a teleport destination, so we are offered a GO button, which we press
Upon our arrival in camp, it is easy to find the Fishing Master, both because of his golden dot on the radar, and the large golden question mark over his head..
To collect our reward, we need to talk to him again, so we make sure he's the selected target and then tap the chat button again.
He is happy to see us!
We press the COMPLETE QUEST button to collect our reward and this quest is done!
Being an RPG, he will probably offer us yet another quest, as he is unable to do anything for himself and has become a needy weak sister! (obscure movie reference, not sister-bashing!)
And that's how you do a quest!
From the android menu key, select OPTIONs to open the options dialog
The left and right arrow keys at the bottom select between different option categories: GAME/VIDEO/AUDIO and DEBUG.
Video Options are generally about turning down the graphic complexity in order to get a better frame rate on your phone.
Audio Options are generally about not irritating your neighbors.
The Debug Options are there for my development convenience, but feel free to mess with them. For example, turn off WATER and see how your frame rate is affected.
OK, so the nerds in the audience want to know what those debug numbers in the lower left are: (These only appear if you enable "Show FPS" in the Debug Options)
There's always a trade-off between performance and appearance. I would really like to get 30 fps on my Droid, and 15fps on the lowest-end phones that can play the game at all. But sadly, that's not yet the case.
|The following is a chronological
log of the game's development. You may or may not be
entertained. Bear in mind that the older entries may
contain 'facts' which are no longer true.
First off is the development of the engine (yeah, yeah, why re-use someone else's really GREAT engine, when you can make your own lame one from scratch!)
My general plan of attack is:
As I write this, I am about a week of noodling into the Terrain engine.
I will just document this by adding some screenshots showing the evolution. This first picture shows first light of my textured Fractal terrain heightmap. The main thing here was to learn the GLES dialect available in Android (currently I am using 1.0, which has only a single texture stage, which is thus influencing the design)
The secret encoded Runes are a message for my lovely family, for their support, encouragement, and great ideas!
This next image shows the first visualization of the terrain normal vectors. You can also see an early version of 'Trees' in here. The little placeholder character will NOT appear in the final game (I promise!). I was just working on the code for 'standing on the terrain without sinking into it' and I needed something to test with. These normals were not particularly good. I don't know about other 3D programmers, but it always takes me several tries to get my normals right, and it always requires some sort of visualizer to really see what's going wrong. Note that at this point, the sink-to-ground code was still defective, so most trees were just poking through from deep in the snow.
This next image shows an early version of my "Algorithmic Terrain Texture" generation. Basically that means I have to create a suitable image to paint on top of the heightmap. This example shows the general idea of 'altitude selects terrain type' with the types being deep-sea, shallow-sea, sand, grass, forest, rocky, and snowy.
This looks reasonably good, but has large areas of solid color, which are not interesting to walk around on. Normally I would think in terms of adding some Perlin Noise in a second texture stage, but as mentioned before, that is not offered in GLES10.
Also notice the bad color along the edge. I haven't actually fixed that yet, but will need to eventually since the map is designed to be 'tiled' (wraps around on itself, to give the illusion of a continuous, repetitive, terrain).
Here is the same thing, with the 'trees' which are now nicely sitting on the surface. But are gigantic (the map is 2Km across, so those trees are like 50m high.) The little character stand-in is similarly huge at the moment.
Here we see a small improvement in the Terrain Texture painting, which adds some appealing micro texturing. Note the bit of ocean on the right. Eventually I will have a sealevel water texture that will make that look better (instead of just showing the seabed, bereft of water). Here the little man is actually standing at the tip of a minor mountain peak, looking at a major peak in the distance, and the ocean down below.
Here we are standing on the dome of a snowy mountain looking at a nice mountain skyline in the distance. Note there is variation in the texture right at our feet (not a solid color). This would look better with the perlin noise, but I am pretty pleased with it so far. And I think this is the sort of cartoony 'art look' the game will ultimately have. I am hoping to maintain a sort of 'brush-stroke' appearance.
Add a little fog and I think this would make a nice place to fight some monsters!
Here we have walked forward a little to the edge of the 'dome' looking down on a green valley between us and the distant peaks. At the risk of sounding apologetic, this looks 'even better' in 3D :-)
So, while that is not 'done', it is enough to prove the concept. This will be an 'adequate' environment for questing, though it needs lots of TLC, more flora, buildings, ruins, etc.
But I'm tired of looking at the little 2D man, so now it's time to see if I can have animated 3D characters with enough flexibility to actually fight each other.
|So, in this context, Character
means the graphical element and not the RPG element or
I decided I wanted to do as much as I could algorithmically, with a small amount of control information generating as much content as possible.
I knew my characters, for example, would be formed by a skeleton of bones (hip, knee, ankle, etc) and that I would need a mesh to glue to each bone (upper thigh, lower leg, foot, etc.)
And so I thought I would try making a 'primitive generator' which given some control points would make a mesh for me. Here's an example of the first mesh it generated.
The control information is a 'line' of 3D points (5 in this example) and a 'radius' for each point (first and last points are forced to radius zero). The primitive generator then creates an N-sided 'oval' at each control point, and connects the verts and makes triangle faces and applies UV coords. And makes normals.
I figured this would work for arms and legs and such, but I have found it is actually considerably more powerful than that. I added a second radius per control point so as to form the oval (instead of always a circle) and some scaling controls.
Bottom line is I can make a reasonable skull with about 20 numbers. Not a GREAT skull, just a reasonable one.
So, that gave me the ability to generate little body parts, but I needed a Skeleton to glue them together to make a single, posable, body. That turned out to be extremely easy, given my low expectations. Here we see my first skeleton with just hips and legs.
I also started my algorithmic walk animation at the same time. So these legs will wobbling like a couple of beckoning rude fingers.
I didn't realize it at the time, but I had reversed my UV mapping, so I mistook the right leg from the left, and ended up doing my entire walk animation backwards. Then I had to rewrite it, and the good news is that it got better.
I added some more limbs and then thought about 'attachments' (for example the shield on his back here.) I'm pleased with my minimalist attachment API. It's basically just a dynamic extension to the same skeleton object. Attachments get a mesh (made with that same primitive generator, but it doesn't HAVE to be) and are attached to a skeleton bone, with an offset and an orientation.
Here's a back view of that shield. I was pleased to realize the primitive generator could make a spikey shield in about 9 numbers. And it is concave on the other side, which I also did not plan ahead for. I love serendipitous moments. Less is more.
Obviously that doesn't look GREAT, just PROMISING. In the final game, characters will be very small, so too much detail will actually jusr be wasted effort (I tell myself).
And here we see another moment of the walk/run animation. I eventually gave it an 'intensity' scalar that lets the same animation work from a slow walk to a fast run. Obviously it's not as beautiful as a manual artist-provided animation.
But I think it's the best dang walk animation in the world anyway :-) Shame about the ugly limbs and missing body parts though.
But check out this leap!
After that leap, I just had to give him some nice italian shoes and black leather gloves. And why not a nice sharp blade to hold in that hand!
I also cleaned up the legs a little so here it looks a bit more like he really is wearing blue jeans. His upper body is still comically over-exercises. You can see the inklings of his anime hair.
Those white lines are in the texture image, just to help me see if things line up. None of this is intended to be final game art, of course (but we'll see...)
And here we see him running towards us. What a classic pose! And I didn't even cheat it, this is just a random moment from the run animation. Wewt!
I was ready to go to bed, so that sword is just 5 control numbers, when a NICE sword would be at least 20 :-) But it's nice and sharp (very skinny, edge-on)
I also re-used my texture scribble I did for the shield. But let's pretend that is blood on the sword.
I spent some time trying to make a better skull, and, well, it needs a lot of work, but I now have 'a system' so it will be less random next time. But it has a lot of 'character' this way, so it's not necessarily bad.
To give you an idea of just how lazy I have been with the textures, here is the texture for the skeleton
And here is the texture I am using for both the shield and the sword
So given that, you can see GL improves things :-)
Anyway, I think that's my proof of concept that I will be able to have characters and monsters. I need to make at least one monster skeleton, and some more animations (attack, defend, damage, die) before I can try out the next benchmark... COMBAT
|So, this is a big piece. My
definition of success will be when I can wander around on
the map, encounter monsters, engage/target them, and
exchange blows until one of us is dead.
This requires the implementation of the 2D overlay support (for life meters and action buttons. Here is a First Light image on that
So here we see my life meter (the left) and his (which disappears when nothing is targeted). This is a randomly placed monster, as I still need to implement the 'Hive Manager' (who will spawn monsters near me as I walk the map, and stow monsters too far away to interact with).
For targeting, I was originally going to do the normal 'click on your target' but on android it is so easy to click (by accident) on random locations, I was afraid that would make you lose your selection in mid-battle. So instead I automatically keep track of the N closest potential targets. Then if you have NO target selected, I pick the closest one automatically.
But once a target is picked, I won't change it automatically. However, if you tap the target's life meter, then I will step through the available targets. And, I admit, android makes it JUST HARD ENOUGH to do 3D 'picking' that I am glad to have thought of an excuse to avoid it :-)
The targeted object gets a red shadow AND a red arrow over his head. (and a boost to his ambient lighting). (Rocket Club fans will notice the similarity :-)
Along the bottom you see ten "Flex Buttons" which is where your actual battle actions will go (spells, attacks, buffs, etc). The idea is that the game will offer a set of actions (which increases as you level up) but none/few of them are automatically bound to a button.
To bind an action, I think I will have you long-press the flex button you want it on (hold it down for a second or two) at which time I will bring up a page showing all available actions. That page might also act as documentation of what the actions do. Anyway, then a long press on an action on that page will bind it to the flex button.
You could bind the same action to multiple flex buttons if you liked (you wouldn't want to, of course, I just think it's neat that action and button are nicely separated conceptually :-)
Also new at this time is Time of Day, which in PLAY mode cycles over a four minute period (I assume ultimately I will let the current Chapter control time changes). Anyway, so the lighting and sky color changes over the course of the day. There is a little clock in the debug window, so we see it is 7:14am and the sky is a light violet, coming out of a sunrise.
I'm not super pleased with the colors yet, but that's the life when you're doing things algorithmically. The color is entirely algorithmic, and my algorithm is not as great as I would like it to be. It's loosely based on real physics, but since the whole sky is a solid color, it won't really look all that great. I need to make a real skyDome with vertex coloring to make a truly great sky. And that's not a priority yet.
I refactored my Hive Manager so now I have 1000 monsters on a single map, with barely noticable lag (because I only spawn the ones close to you, so there are really only four or five around at a time normally). Sort of a Virtual Monster paging system :)
But the MAP gets to place all 1000 of them (I actually tried 8000, but that did cause some lag).
A single map is a 2Km square (that will wrap infinitely) and takes about 2 minutes to run across the length of.
Anyway, right now the monsters are still spread around randomly, and I only have the one 'model' which I use in several sizes
And the NPCs now have their beginning AI, Here we see a couple shots of them wandering around (they 'patrol' until they smell an enemy). It was a moment of jubliance when they correctly used their walk animation when walking, and their breathing animation when stopped.
In the day. Basically each monster is assigned a patrol position and range. He is then free to wander around inside that area, using whatever rules he likes (he might avoid water, for example). If my aggro attracts him, he will engage me and then he is free to chase me even outside of his patrol range.. up to a point. After that, he has to break off attack and return to his range (and until he gets closer to his patrol 'circle' he won't engage anyone.
Here a little monster smelled me and ran up behind me and started poking me. They are already obeying a little bit of rules (can't just slash constantly). Note also that they run up to a spot NEAR me, as opposed to right on top of me. They feel reasonably alive already, though the animations are still a bit wooden.
And here one of his pals has joined him. You can actually see him in the distance in the previous shot (behind my left hand). It's a little scary when you see him realize you exist and watch him run up to you. The fact that his patrol speed is one rate, but then he actually RUNs to attack you, gives the illusion that he has some emotional content.
I'm still getting about 30fps on my droid (but less than 4fps on the emulator -- which is doing software rendering of the 3D). It looks better on the droid, as well. I have reports of considerably lower frame rates on some phones, though. Probably a combination of my code and the phone being a bit underpowered for 3D. Hopefully I can improve the code, if not your phone :)
So I just need to add the actual damage, and a concept of death (and give myself an attack button!) and I can check of 'Battle' as being proven feasible (if not 'done') and move on to Story.
But I think I need to step back a little and do some cleanup, like figuring out how to do nice camera controls.
Plus I have to tile the terrain, clean up the trees, add ground cover (bushes), etc.
Oh, and my algorithmic 'ruins' generator to get some man-made 'flora' in the scene (the occasional hut and castle). That raise the issue of collision detection (currently you only collide with the ground, and structures imply wall collisions and floor collisions, as well as nasty camera issues should a wall get between you and your characters) I'm not in any hurry to do that. I'm not sure how much better that makes the game.
It's about time, so I added runes this weekend. Basically there are eight types of rune stones. You obtain the primary stones (red/green/blue) (aka ruby/emerale/sapphire) in the normal course of events: fighting, fishing, and farming (the three Fs!)
the second order runes come from "rune weaving" which is a skill you acquire (and hone). So when you're good enough you can make yellow, aqua, and purple runes by combining the primary runes appropriately.
As you skill up, you get better at it (otherwise, it can fail, just leaving you short two runes)
Then later, you can weave three runes (yellow, purple, and aqua) into a diamond rune (that's the coolest one, of course)
There is also the black (onyx) rune (or maybe coal rune to be more mirror with diamond), but it's special. You earn a handful of black runes every time you level up and you 'spend' them to boost your stats (Stamina, Strength, and Wisdom)
You can 'eat' the primary runes (they take the place of potions in the game. Using a red rune recharges 1/3 of your HP, for example. blue for MP, and green will be some sort of stamina buff)
The other use of runes (other than unlocking various quests and such) is on your equipment (weapon, shield, and helmet). Each can hold a single rune. You then cause additional 'color damage' (or have additional 'color armor') based on the color of the rune you use.
So you probably will want to equip everything with diamond runes so as to have all 3 colors active.
The battle math basically does four similar computations to determine four different damages (normal, red, green, and blue)
(red is fire, blue is ice, green is nature... to be determined.. probably a rock/paper/scissors relationship)
anyway, a particular blow might generate 10 points of normal, 3 points of red, no green, and 1 point of blue damage. I then add the positive values together and you lsoe 14 hit points.
Anyway, the UI is working now, with action buttons that dim and have timeouts appropriate to the 'spell'
No matter which weapon type you choose (sword, mace, wand, staff, bow...) you have an automatic 'melee' mode which happens whenever you are close enough to a monster (magical melee is something like your wand spitting energy every so once in awhile). The point being that melee just 'happens' (as in a real time strategy game when units are close)
Then you have three attack buttons (everyone has three attack buttons... this is a SIMPLE rpg) which are basically:
* do a really big hit on one guy (5 second cooldown, costs mana)
* do a medium hit on everyone nearby (3 second cooldown, costs mana)
* do a medium hit on target, and 'stun' them for a bit.
That list might get some refinement, but remember this is mainly a solo game with you alone in your party, so you are the tank, and the range attack, and the healer, etc. So every character can do everything to some degree (you can all eat runes, as it were)
And no, you probably aren't literally EATING them.
I'm still toying with some attack that actually consumes a rune to perform. I want a small number of truly interesting and unique actions, as opposed to a large number of very similar to each other actions. Android is not friendly to having a million buttons. And I am not yet willing to say "use gestures to 'cast' your spell"... though I am not averse to the concept.
Anyway, the title feels more honest, now that there are some runes (well, I CALL them runes... no actual glowing runes yet)
So, here is the 'final screen shot' of Battle
It supports all the normal stuff. HP/MP, multiple attacks, melee battle, health potions, experience points, and levelling. The usual long list of things to clean/polish/improve, but I can now officially begin...
So, I know I want to have my long term vision set on story being 'easy to create' and 'extensible' but I also want to keep the project small and focussed.
I don't know if I already said this or not, but I would like WoS:RR to be to a full RPG, what a tower defense game is to a full RTS.
A tower defense game (which I love, by the way, Tower Raiders Gold for android being my favorite) basically just takes the "build your base" element from a game like Command and Conquer, and that's it.
I admit that the whole 3D aspect of WoS:RR is a bit of a distraction from that master plan, but I am hoping to make up for that by keeping the complexity of the RPG low.
When you buy WoS:RR, you are buying "a book" which consists of multiple "chapters" and your character starts off in Chapter One (well, more likely in Chapter - Zero, the tutorial). And if I ever have any business sense at all, that will be it. And the second "book" will require you fork over another $1.99 and will appear to be a completely separate game (though secretly it will reuse the majority of the WoS:RR engine).
So, the first decision regarding WoS:RR is that I will implement the in-memory classes, but they will initially be loaded from source code and not external meta files. This will allow full development and still leave open the possibility of future extensibility.
Having said that, a Book consists of several parts (appendices, metaphorically):
So, as of Release 20, WoS:RR now has a quest system (but not a story system yet). The Book can define maps now, with hints. So a map is still a random fractal surface, generated from a single seed value, but that seed value can be provided along with height hints to define a repeatable map.
For example, this definition:
Creates this map:
and also places NPCs (QVM = Quest Vending Machines), monsters, etc. The QVM table declares which quests are offered by each QVM. The Quest table describes the actual quest, including its description, requirements, rewards, and turn-in QVM.
Wally's quest definition looks like this:
Anyway, the goal is for a small amount of content definition to turn into a large amount of content in world. Obviously, the above is the bare minimum and will presumably get more complicated over time.
But here are the recent pictures: (see the How To Play section for more). We talk to Wally and he offers us a quest, the description is 'scrollable' with our finger. We accept the quest
We kill Ruffians and collect Wallets
We eventually meet the quest requirements, then use the map to find where to turn it in.
The red arrow is us. The Golden badge is Wally (or at least it's someone to whom we can turn in a quest)
Wally is happy, press the COMPLETE button to collect your reward (and probably get a few more quests from lazy Wally).
Note that the Compass (upper right circle on main window) shows baddies as red dots and friendlies as yellow dots.
And right now, tapping the name tag is how you talk to a character. They will either open a suitable Quest Dialog or just engage in appropriate banter.
You can close a dialog either by tapping its red X (upper right), or using the android BACK button.
I guess it makes sense to switch to a release note format for ongoing status reports... newest one on top.
This is yet another release where most of the changes are behind the scenes (and more likely to have broken something that worked before than to be a noticeable new thing in the game) But that's how development goes, what can I say?
Truth of the matter is that between the holidays, my back hurting, and Kathy's shoulder surgery, I haven't been able to sit at my pooter long enough to get much work done for awhile, but I cleaned up some pending changes and give you RR35. Let's read the diffs together and see if there is anything exciting.
I guess that's enough goodness to not feel too embarassed. I had hoped for more monsters in this release (in particular, an avian monster. I designed a nice quest for getting your AIR mount, but it won't be in this release)
This is mainly adding a bunch of Tutorials, but there are some other changes as well:
Here are the bullet items:
This is mainly a 'behind the scenes' update with not a lot of obvious changes. The lighting model is actually much better, but you have to just take my word on that. The big change is the introduction of the "Story" engine (as opposed to the "Quest" engine) which allows overaching story elements to be composed in a simple scripting language. But the only Story included in this release is a simple Tutorial for new characters (well, ALL your characters will be given the tutorial once, no matter how old they are).
Yeah, not a lot to really be seen, just an infrastructure checkpoint release.
The story engine will be a big deal eventually though. I wrote the shells of about 40 quests this weekend, of which at least a few should show up soon.
I think I brought this web page into alignment with the current state of the game, and freshened most of the screenshots as well.
A few big ticket changes, and a lot of small change...
The action buttons have been reconfigured and there is now the concept of 'buttons which are appropriate for your current target selection). So the three fight buttons are now gone, unless you have targeted something 'fightable.' This allows me to have special buttons appear when you target a friendly NPC.
And the first such button is the 'chat' button which replaces "tapping on the target's name" as a way to see the quest dialog. (I lie, you can still tap the name. But that's now an EXPERT feature -- and the only way you can 'chat' with a moonster). But the prominent chat button after selecting an NPC should make it more obvious to newbies what they can do.
Eventually I might have actions which appear only when you select a dead monster (skin it?), or when you select something like a treasure chest? Or to start harvesting a plant (which will still be a fight, since I love that)
There's a new location on the main map, where you can find the 'mount master' who has (ez) quests to learn how to summon three different mounts (land, sea, and air mounts). You no longer start off knowing any mounts. Mounts now have special 'physics' such as:
Gone are the "wand-users" and in their place are the "Classes" (player requested!), so now you see "Sorcerer" instead of "Wand-User", but otherwise all is as it was.
Gone are the stiff-as-a-board characters. When standing around, all characters (you and NPCs in particular) now will periodically change their pose, so as to appear more 'lifelike'
New GAME OPTION: Sunlight. This lets you specify whether you want the sunlight on automatic (where it follows the map's desires -- usually a 4 minute long 'day/night' cycle), ot to fix it specifically at DAWN/NOON/DUSK/NIGHT for your pleasure and/or visibility purposes.
New Feature: NAV POINT. (player requested!) When you tap on the map, you set a NAV POINT (that little arrow that has always been there). If you then return to the main screen, the current NAV POINT is shown as a white circle on the radar (along the edge of the circle if it is off-screen). Walk towards that and you will eventually get there.
The main changes in this
version are some new models and race names (and 'female'
options for each race). And the introduction of 'Mounts'
(Things you ride, that increase your travel speed and/or
Nothing helps you retain
your hair like a good tool. In this case the tool is the
"Memory Analyzer" add-on for Eclipse. This gave
me visibility into the Memory Heap so I could finally see
where the missing memory was going, and it was NOT going
into textures (as I had mostly proven to myself). It was
just being wasted foolishly by my not releasing some
arrays of floats and ints as soon as I was done with
This isn't actually released yet, I am just pleased to announce that I wrote a model loader for the MilkShape "ASCII 3D" file format, so now I can use MilkShape to create select 3D models (instead of always using the 3D primitive generator). And if I were a good 3D artist, this would probably be fantastic news :-)
Anyway, here's my first 'real model' in MS
And a couple instances in world. The oversized head was a mistake, but of course in retrospect it's obvious that over sized heads are the way to go. So expect to see more swollen-ness in the future!
OK, now it is officially released
Officially, this is a performance
release, in the sense that it includes multiple changes
intended to boost frame rate, but probably not on any
phone that actually needs it.
This version has been reasonably thoroughly vetted on the Droid Eris, and has mipmaps support turned back on (well, it's now a "Video Option" and you can TURN it on, but it defaults to off, just in case)
This version also introduces all four levels of all fours kinds of equipment. Here we see "Grid" sporting a hat, a gold-studded shield, and a very large Wand.
Yes, it went from RR24 --> RR27 in one go (versions 25 and 26 had to be aborted instantly since apparently Droid Eris doesn't support mipmaps, or not MY mipmaps in any case. so 27 has mipmaps turned off)
Anyway, so I didn't really MEAN to do a release tonight as I hadn't met my goals for the next release yet, but I foolishly thought it would be a quick way to test on the Eris (Trust me, hooking up the USB cable is much quicker and much less likely to cause the planet to hate you for publishing a broken version)
Luckily it's a small world for this game so far :-)
This is another "release it so I can back up my work" release, as opposed to a major milestone release. As you can see, there are endless details which are NOT "add 50 monsters!" which is what we all want to actually see :-)
Next I want to add fifty monsters!
This is mainly an
infrastructure release (no new quests, though the old
ones got rewritten a little). I think the big deal in
this one is "book-driven-skeletons" so I can
now add skeletons as text descriptions in 'the book'
(instead of compiled into the code). This release
includes one new skeleton (and one new monster)
"Wolf" (does not look like a wolf, but it more
or less walks on 4 legs and has more or less working
Anyway, here are the "diff bullets":
More infrastructure plus
FOUR MORE QUESTS (lame placeholders, of course, but now
you can legally get that sword you've had forever -- and
are still born with, but eventually I will start you off
with no weapon at all). Anyway the new quests get your
level I, then upgrade it to II, III, and IV.