• entries
  • comments
  • views

About this blog

Merry Prankster Games: Temple of the Abyssal Winds

Entries in this blog


Working on Chapter 4

Here's a screenshot of the level editor, working on the exterior of the Inbarr Manor:


In Chapter 4, Inbarr Manor is your base of operations, outside the town of Oldenton. Your mission: To rid Oldenton of the demonic influence of the Temple of the Abyssal Winds.

Welcome to the Merry Prankster Games Blog. GameDev.net is my latest attempt to run an ongoing blog to chronicle my development efforts.

Introduction: I'm Geoff Dunbar, a long-time computer programmer with occasional indie-game flurries of interest. Merry Prankster Games (http://www.prankster.com) is my one-man indie development effort, specializing in single-player RPGs (at least lately). My most recent game (demo, really), was "To The World Tree" (http://www.prankster.com/ttwt), a mediocre entry in the Independent Games Festival. More recently, I've been working on updates to the TTWT engine, with the intention of making a full game at some point.

My goals for this blog are two-fold. To detail my progress on Merry Prankster Games development projects, for the people interested in the nitty-gritty progress on our games. Second, to discuss interesting aspects of game development that I run into in the course of my projects, for fellow indie developers and other interested parties. I will update the blog at least weekly, on one or other of these topics.

So, welcome again, and I hope you enjoy reading!
Welcome to the Merry Prankster Games Blog. GameDev.net is my latest attempt to run an ongoing blog to chronicle my development efforts.

Introduction: I'm Geoff Dunbar, a long-time computer programmer with occasional indie-game flurries of interest. Merry Prankster Games (http://www.prankster.com) is my one-man indie development effort, specializing in single-player RPGs (at least lately). My most recent game (demo, really), was "To The World Tree" (http://www.prankster.com/ttwt), a mediocre entry in the Independent Games Festival. More recently, I've been working on updates to the TTWT engine, with the intention of making a full game at some point.

My goals for this blog are two-fold. To detail my progress on Merry Prankster Games development projects, for the people interested in the nitty-gritty progress on our games. Second, to discuss interesting aspects of game development that I run into in the course of my projects, for fellow indie developers and other interested parties. I will update the blog at least weekly, on one or other of these topics.

So, welcome again, and I hope you enjoy reading!

Waiting for Chapter 4

Hi TotAW fans. Just waiting for the latest update to TotAW to get through iTunes app store approval:

Once that goes through, I will release v3.0, along with Chapter 4, for iOS and Windows. I think it just took a couple of days last time; it seems like they might do re-reviews faster than a first time review. So, if there are no issues, soon!
This summer my main goal for "Untitled SENG Project" was upgrading the game engine. The full-featured demo "To The World Tree" (http://www.prankster.com/ttwt) let me see the good parts and bad of the game engine, and before embarking on creating a full-fledged game, I wanted to make the engine upgrades necessary. The four main upgrades were:

The "To The World Tree" RPG system, aka the SENG system, was mostly a success. You can play with it in the demo (http://www.prankster.com/ttwt/), or just read the manual if you're curious (http://www.prankster.com/ttwt/manual/ttwt.htm). To sum up, though, SENG is a hybrid class/skill system; the class determines the broad type of character you are playing (fighter, spellcaster, or generalist aka "rogue"), and the skills allow further specialization. All characters can gain all skills, but can't be as strong in cross-class skills; this is similar to multi-class rules in other RPG systems. For instance a fighter who also gains some healing spells is possible, thematically similar to a Paladin in other systems.

In addition, SENG models an exponential system for combat strength; a character A of five levels greater than a character B is twice as good, regardless of whether A is level 6 and B is level 1, or A is level 35 and B is level 30. "Twice as good" means A can fight two Bs at the same time, to a virtual standstill. This exponential system is extremely handy for balancing the game making it (relatively) easy to balance monsters, items, and spells of different levels, as well as making calculations of experience awards well-defined.

I was very happy with how these two facets of SENG worked in TTWT. But, I also learned some things that definitely need improvement to turn a 3 hour demo into a 40 hour game:

  • More variety of weapons and fighting styles are needed. In TTWT you could only wield a one-handed weapon. Shields, two-handed weapons, and dual-wield would add a lot of interesting options for characters in a combat-oriented class.

  • Further, in TTWT, while spellcasters are always getting new spells and abilities, fighters don't get new interesting things to do. Adding skills that grant new combat abilities or styles, and by association interesting tactical options, is another goal. Things like "Berserk" or "Defensive Stance", which a character could adopt for a time, are what I'm thinking of here.

  • I'm pretty happy with how the spellcasting system integrated with the skill system. However, I'm not as happy with the design of spell-acquisition. The spells are sometimes haphazardly associated with the skills; I'd rather be more direct. Instead of a skill "Life Magic" which has some healing spells and some buffing spells (which is how TTWT worked), I want to have, say "Healing Magic" with all healing spells, and "Inspiration Magic", with all buffing spells.

  • On a similar note, in TTWT the only way to acquire spells was to acquire and read scrolls, which (to me) seems a very wizardly activity. I'd like to add more religious themed spell acquisition, and perhaps some sort of "innate power" spell acquisition as well. All properly integrated with the skill system as much as possible.

  • Next is more of a representation issue; in TTWT, a glance at the rules tells you that a level 10 attack against a level 5 defense does 0% to 20% damage. This is much more opaque than a system where a level 10 attack does (say) 0 to 20 hit points damage, and a level 5 defense has 100 hit points. This applies further to attack system as well (see the TTWT manual for more if you're overly curious). However, with some tweaks, the SENG system can be displayed either way. Mathematically, TTWT was displaying the exponent in an exponential system; displaying the actually value should be much clearer to the player.

  • Expanding on that point, in TTWT a healing potion is assigned a level, say level 5. For a level 5 character, the potion would heal one amount of damage (10%), but for a level 10 character, the same potion would heal half the amount (5%). This isn't terrible (it has nice game balance properties), but is very confusing to the player. The same problem exists across the board for all bonuses and modifiers. If we use the value instead of the exponent (for display purposes), it becomes much clearer. In the example above, the healing potion might just heal a fixed 10 hit points, regardless of player level.

  • In TTWT all characters move and attack at the same speed, and there are no spells or skills that affect speed. Adding variable speed, both innate and through spells and skills, would add greatly to the tactical options for players.

  • TTWT has 6 basic attributes for a character: Strength, Agility, Durability, Intelligence, Willpower, and Personality. Intelligence, Willpower, and Personality are somewhat undervalued versus the other three; I think I will combine them into just 2 attributes, Intelligence and Personality, for a total of 5.

  • In TTWT, I had to have negative level monsters and quests for low level characters to battle and achieve. This is displeasing to the eye, so I plan to have player characters start at level 10, eliminating this ugliness.

Those are the main changes I have planned. The RPG engine code should stay fairly similar, though things will look quite a bit different. Some of the changes are pretty far-reaching, but if I do them carefully, I think things will actually get simplified to some degree. In particular I think I may be able to go to a system where monsters don't need to have skills at all, but can just have their attributes set to the proper levels.

Fortunately in coding TTWT and the SENG engine, I did a pretty good job of keeping the RPG code separate from the other systems (UI, graphics, and application), so the changes will be fairly isolated. But, I do have quite a bit of design and coding work to get this right. I hope to get the design well fleshed out in the few remaining days of summer. Then I go back to work for the fall (gotta pay the bills!), and can resume with the coding in the winter.

Not sure what I'll blog on next; perhaps the promised RPG Anvil article on particle fire. Until next time!
So I've been reading the book "Game Design Workshop". Amazon link:


It's a pretty good book; I'd definitely recommend it to anyone interested in the topic of Game Design, though perhaps not strongly. I am still only halfway through so my opinion could still change. In any case, I bring this up because it has really driven home to me that it's a good idea to do prototyping and user-testing as part of game development. And the earlier, the better.

Now, my first project with the SENG system and engine was "To The World Tree" (http://www.prankster.com/ttwt/), which was essentially a demo game. For TTWT, I did very little prototyping, and what I did might almost be more described as unit-testing. I didn't do any user-testing other than myself, except for getting comments and feedback after the game was done. Now, there are good reasons for what I did; I did TTWT as a game for the Independent Games Festival, using the deadline as a forcing function to myself to actually get something done, and thus there was not time to do a lot of extra testing or prototyping. And, in fact, TTWT is somewhere between a prototype and a demo; a lot of the development served as me figuring out what worked and didn't work, what was feasible, etc.

Nonetheless, going forward, I'd like to work more heavily on the prototyping and user-testing. Instead of trying to prototype a complete but small game, instead, prototype specific interesting scenarios. For instance, I've always thought that the SENG engine would do a good job of having a party fight a large number of (wimpy) opponents, like having a party of 4 player-characters battle 20 goblins at once. The engine has relatively small graphic and computation requirements on monsters, so this should be a pretty cool encounter for the game. But when I was developing TTWT, I didn't really have time to explore fully what kinds of scenarios would work well (and not).

So, my "Untitled SENG Project" agenda looks something like this:

  • Finish the engine updates I've been working on (these are either things that I had wanted to do before, or that had come out of the TTWT project).

  • Develop a number of quick, compelling prototypes to test out key scenarios of the SENG engine.

  • Inflict these prototypes on anyone who I can get quick feedback from.

  • Proceed with the game design based on what comes out of the prototyping.

I see the prototypes as being standalone applications, that get the player right into the targetted action of the prototype. So, in the party vs 20 goblins prototype, there might be a quick introductory screen explaining the basic controls, and then the player is right in the action with pre-generated characters.

I don't have a list of the prototypes yet, but I still have 2 months to go on my "real-world" contract, so there's still a bit of time before I can really dive in. Perhaps in future entries I'll do some brainstorming about the prototypes that I think are important.
As I mentioned before (here in this very space), I've been focusing this summer on making code change to the SENG engine. I've just about wrapped up the user-interface changes, so I can share some screenshots here.

For historical purposes, UI v1 was an MFC-based UI, and as such, looked very "Windows", and very bland. Here's the HUD ("Heads Up Display", meaning in-game interface):

HUD v1

And here's a dialog; a store dialog, in this case, but representative of the overall look:

Interface v1

Looking back, I don't think they're that bad. But everyone I asked disagreed with me; I guess no one wants Windows in their RPG.

UI v2 was a completely new interface. As an aside, I've maintained pretty clear boundaries in the engine code between gameplay engine, graphics, and UI. As such, I've had a lot of success dropping in a new UI without having to touch much other code. Yet another instance where good code design (well, good for me, anyways) and modularity proves its worth!

Back to the interface, v2 was recoded, written directly on top of DirectX and Windows messages. I heavily used the D3DX extensions like ID3DXSprite. Here's the HUD:

HUD v2

And here's a dialog; once again, the store dialog:

Interface v2

This UI drew mixed reviews; anywhere from "functional but bland", to "it looks like an old DOS game". I thought the "DOS game" comment was unnecessary piling-on, but still, clearly a revamp was needed. I'm OK with the HUD, even still, but I agree that the look of the dialogs was pretty poor.

Now that I had the code in DirectX, changing the look was pretty easy. I was already pretty happy with the "feel" of the UI; things were nice and snappy, drag-and-drop worked properly, and so forth. So, I came up with the new design principles:

  • Make the UI look more modern, with a white-on-black look, and removing the bland backgrounds. I didn't copy NeverWinter Nights, exactly, but I did want my interface to look more like that.

  • In the previous UI, I tried to make the UI scalable, where the dialogs would get bigger or smaller depending on the resolution. They looked OK at the small resolutions, but looked funny at the higher resolutions that most people would play the game at. I dumped this idea, and went with fixed-sized dialogs for v3.

  • Also, in the previous UI, when displaying an item, spell, or other things like that, I tried to display the icon, name, and other information right in the UI. This led to largish UI elements that were hard to fit properly into dialogs. In v3, I put these things into a 48x48 element, and displayed most of the information in a hover window.

Here's the new HUD; this is actually pretty similar to the old HUD, but with the new look:

HUD v3

Here's the new store dialog:

Store v3

And here's the new inventory dialog:

Inventory v3

I'm pretty pleased with the new look. One note I would make is that I'm still using the icons from the old UI, which are too dark for the light-on-black look. I'm still only going to have a few icons, so, for example, all swords will have the same icon. But, I support icon coloring now, so a magic sword could glow light blue, instead of the generic gray of a normal sword.

Unfortunately I've changed to engine too much for "To The World Tree" to work with the engine anymore, so I can't release a demo with the new UI, so you'll have to live with the screenshots. As always, comments and questions are welcome.
Wow, has it really been two weeks since I posted? I guess I really am busy with working a full time job!

I was hoping to post some screenshots of the other two fighting styles I've coded up (with animations): "Two Handed Weapons" and "Dual Wield". I personally think that these add a lot of new options and character building fun to SENG, and I'm really excited about how the fighting style system is working out. But unfortunately I've currently broken the build working on other new features, and without a running build, I can't make screenshots.

So let's talk about the new level system instead. In To The World Tree ("TTWT"), the RPG engine (let's call it SENG v1) had a neat property where a character 5 levels above another could fight two of the lower level characters at once. This was an invariant across levels, and makes balancing mechanics and adventures, well, perhaps not easy, but easier than it could be.

An unfortunate side effect, though, was that in TTWT, with your character starting at level 1, I had to feed you a series of -5 or -10 level enemies for the player to have any chance of success. And I don't know about you, but the feeling of accomplishment I derive from defeating a negative level opponent is pretty minimal.

There are any number of possible fixes for this issue. For instance I could put opponents on a different scale than the player characters. Somehow that felt distateful to me. Or I could have displayed negative level characters as fractional levels; old versions of Dungeons and Dragons did something like that. But what I decided to start the player characters as level 11 instead of level 1. The level map looks something like:

  • 1-10: Reserved for wimpy non-player characters, these characters have no skills.

  • 11-15: Starting player characters, they have access to basic fighting skills, and basic spells.

  • 16-20: Intermediate player characters. Fighting characters get access to "fighting style" skills. Magic spells increase.

  • 21+: Advanced player characters. Fighting characters get access to "powers", which are sort of like spells for fighters. Other character gradually get access to fighting styles and powers.

So far I'm pretty happy with this new system. It might be a little weird to start at level 11, but I think it's better than the alternatives.

Although now that I look at it, there are clear 5-level demarcations of skills and character complexity for fighting characters, but not so for magic characters. I may want to look into having the magic system increase in complexity in a similar manner.

Anyways, that's all for now. Hopefully screenshots of two handed weapons and dual wield for next time.
So, as an indie RPG developer, I try to keep an eye on developments in other RPG arenas, and the release of Dungeons & Dragons Version 4 certainly qualifies as a development. While as an indie developer with many other commitments, I don't (God forbid) have time to _play_ D&D, the system is the most influential RPG system, and could perhaps be credited with creating the entire genre. Further, the games that have the most impact on _my_ SENG RPG system, and the most impact on the games I want to make, are the Infinity Engine games, based on good old D&D. Version 2, for the most part, though Icewind Dale 2 had the engine upgraded to use the Version 3 rules.

In this column I'll stay away from a critique of the system itself; I can hardly paint myself as a expert on pencil and paper roleplaying. Nor has the system yet been implemented in a computer game. Rather, my point here is what lessons I've taken to incorporate (now or in the future) into the SENG system. I'm sure some people are up-in-arms about the radical changes to the basic setting, or the removal of the 2 axis alignment system (Lawful/Chaotic, Good/Evil), or some other point where the new system deviates from the old. But I'll stay away from that discussion.

The biggest change to the D&D system in version 4 is the new class/advancement system, along with the related Powers. The new system completely standardizes classes; each character, regardless of class, gets the same number of Powers, with the same approximate strength, at each level. Powers replace spells (more or less) for the old spellcasting classes like Cleric or Wizard, and are completely new abilities for the fighting classes, though at higher levels they replace some of the Feat related fighting abilities. Each class has a given set of Powers, and a character generally will pick one or two from a set of about four at any given level, allowing for customization of your character within a given class.

The Core rulebooks contain 8 classes (Cleric, Fighter, Paladin, Ranger, Rogue, Warlock, Warlord, Wizard), though as they've designed the system, the system is basically infinitely expandable; as long as they balance the Powers (and other class abilities) properly, Wizards of the Coast is free to create as many new classes as they want. I suppose this is by design; presumably they will churn out books of new classes for years, until they're ready to move on to D&D version 5.

I have two main takeaways from this, as far as SENG design is concerned. The first is that my class system design is very opposed to this design. SENG has a fixed three classes (Fighter, Spellcaster, Rogue), with customization done through the character selecting Skills. For instance, in SENG, a Paladin might be a Fighter who also uses some of his Skill Points to gain some healing spells. If I want to expand the types of characters that can be created in SENG, I would do so by creating new Skills with new abilities, not by creating new classes. So, while I respect the design that they've come up with, I don't plan to take features from their class system.

However, one point I did take from their system is that they've vastly expanded on the customization and tactical decisions available to the Fighter-type classes. In older versions of D&D, the spellcasters might, each round, pick from the dozens of spells they knew, while the fighter simply says each round, "Grod attacks the goblin again." Now, the choices and complexity is more or less the same across classes. This makes a ton of sense in D&D, where each player controls only one character; they should each have about the same amount of decisions to make, or else some players might get bored. Less important for a SENG game, where one player controls the entire party, but I do like the idea of giving the fighters more things to do than simply attack. I have a new Powers system designed for SENG v2 that should do some of this.

I will also note that traditional multiclass is gone from D&D v4, where a character would, say, be a level 5 fighter and a level 4 priest. They've replaced this with a much more limited multiclass Feat, allowing a character to take a small number of Powers from another class. I'm sure that this made the system more balanced than D&D v3, as judging the power of one class against another is tricky enough, let alone when all sorts of wacky combinations are allowed. In any case, this is not a consideration for SENG, as multiclass-like characters in SENG are handled through the Skill system.

A related change is that Powers have a simple tracking system; they can be used at-will (whenever), once per encounter, or once per day. For spellcasters, this replaces the old spells per level per day system, and for pencil and paper gamers, is doubtlessly a great simplification. SENG uses a mana system, where spells (and soon, other abilities) use a certain amount of mana, which is restored on rest. Since the computer keeps track of the mana for you, this isn't overly onerous to the player, and I plan to keep this design.

Similarly, D&D spells used to have a duration. Say, 10 minutes, or 6 rounds. Some poor sap would have to keep track of when these things would run out, and would often forget to do this properly. D&D 4 has simpler durations; until the next round, until the end of the encounter, or until a saving throw is passed. While this is nice for the P&P folks, the computer keeps track of all of this in SENG. I do like the standardization of durations, though; it makes designing a spell or ability a little easier to think about. When I create a new spell, deciding whether it should last 6 rounds, or 7, uses brainpower than could be spent on something else.

The last change that I found really interesting is the new feature "Skill Challenges". In a skill challenge, a character or party has to use their skills in a non-combat situation, achieving a certain number of successes before a certain number of failures. For instance, a Skill Challenge might involve attending the Duke's ball, and attempting to use various diplomatic skills to convince enough courtiers that the goblin threat must be taken seriously. The Skill Challenge is a nice formalization of non-combat roleplaying scenarios, that allow them to be treated as proper encounters within the D&D system. I admire this design, and while I'm not quite sure whether (or how) to incorporate something similar into SENG, it's certainly something I'll consider in the future.

There are some other changes too; as far as I can tell, they have completely removed all summoning spells from the standard classes. Perhaps they plan to add those back in later expansions. Saving throws are called "defenses" now, but they are still the same thing. And so forth.

So, I enjoyed reading the new D&D rules, and I certainly have considered what I should take from them. SENG is only loosely related to D&D, so things don't map directly from one system to the other, but looking at other RPG systems is always interesting. I do look forward to D&D 4 computer games coming out at some point in the future, though I'm not in-the-know about any such developments.
Question: How long does it take to get a contractor ready with an account, email, and a badge? Answer: For a certain large software company in the Northwest, one week and counting. So, thus far I haven't been able to do much at work (source code access is managed through accounts, so no account, no source code), and I've had some more time to work on SENG. The results, chronicled right here!

One of the things I figured out from the "To The World Tree" demo (http://www.prankster.com/ttwt) was that the fighting classes didn't have enough character development. By character development, I mean in the RPG sense, where your character can become a bold swashbuckler, a stout dwarven defender, and so forth. In TTWT, they were pretty generic, with no choices to make. The first of the updates to SENG that I've made is to add the concept of Fighting styles.

Fighting styles work as follows: Starting at level 16, a set of fighting style skills become available to fighting characters. These are:

  • Duelist style - Gives the character a fighting bonus when wielding only a one-handed weapon.

  • Shield style - Allows the character to fight effectively with a weapon and shield.

  • Two-handed Weapon style - Allows the character to wield two-handed weapons, which deal more damage than their one-handed counterparts.

  • Dual-wield style - Allows the character to wield two weapons at once.

  • Marksman style - Gives the character a fighting bonus when wielding a bow.

Given that in SENG, the class system is very granular (3 classes, Fighter, Spellcaster, Rogue), this allows for customization of characters beyond the class system. This is a great example of how I intend the hybrid Class/Skill system to work.

But enough idle chatter. I have coded up Duelist style (easy), and Shield style (not so easy). I know it seems pretty basic, but there were no shields in TTWT, so it's a whole new feature for SENG. Here is a test character with a shield (blown up to 200%):

Shield 1

As here she is beating up poor defenseless Celeste (200%):

Shield 2

I've just about got the others done as well, but they require some new animations which take a little longer. Screenshots when they are ready.
Thought I'd give a quick end-of-month report on my progress with "Untitled SENG Report". And it's an easy report; I've been working full time at a "real" job, so I haven't done anything. There, how was that for a report?

OK, maybe I should leave the comedy to the professionals. I actually do have more to say. My contract runs out at the end of March, at which point I should be able to dive back into SENG game projects about 20-30 hours a week (which is more than I've ever dedicated to it), so I should be able to make good, fast progress.

The first thing I need to focus on is finishing up the RPG rules updates that I've been working on. As I've discussed in this blog, "To The World Tree" (http://www.prankster.com/ttwt) showed me some things I needed to do to fix some play issues, and scale the engine out to a longer game. I'm midway through those updates, so I need to get those done.

The next is I really want to improve the level creation pipeline. I've got a resolution to add more pictures to my blogging style (everyone loves pictures, right?), so here's a pic of the SENG level editor:

The previous level creation pipeline was OK, but it involved a couple of different tools, and was a little bit clunky. I think I can improve this by tightening up the usability of the level editor tool, pulling some stuff (text file editing, mainly) into to the tool that I used to do by hand, and so forth. Further, my old process was optimized towards "fire and forget" level creation; I think I can improve things a lot in terms of going back to existing levels and editing them. Any effort here should pay off handsomely, because I'll be making a bunch of levels. Even a modest time savings adds up when multiplied by a bunch of levels.

The last thing I have in mind for the short term is to produce a set of prototypes, as I've blogged about before:


I'm not planning past those steps at this point; I suppose I'll call those steps SENG milestone 5.1, just to have a target to shoot for. If I have some time in the next month, I'll do some rough scheduling; otherwise I'll do that in the first couple of days of work.

Well, "update", or perhaps more accurately, "lack of update".

So I had two weeks off from work, and I was hoping to get all sorts of work done on Untitled SENG Project. Not only did I not come up with a title, but I made _very_ little progress.

I had been in the process of adding in the "powers" system, as described briefly in https://www.gamedev.net/community/forums/mod/journal/journal.asp?jn=503512&reply_id=3326509. Basically, over the two weeks, I went from a non-building version of the game, to one that now builds. But I didn't add any new functionality. Total amount of work, about two hours.

I guess that's what happens when the kids are on vacation too.

I did realize, coming back to the project after awhile, that many parts of the UI are pretty un-intuitive. While that does make even more work for me, I think it's overall goodness.

Last thing, I have made one of those vague New Year's Resolutions to blog "more"; with no plan for how to achieve that, I suppose it may already be doomed, but maybe you'll see posts more often.

Happy New Year!

Untitled SENG Project

If you've been paying attention to Merry Prankster Games http://www.prankster.com (and frankly, who hasn't?), you've seen that my last release was the demo game To The World Tree http://www.prankster.com/ttwt. So, what have I been up to since?

In the spring, I was doing consulting programming work on an unannounced project at my old employer, Microsoft http://www.microsoft.com. Since then, I've been hanging out with my kids and proceeding forward on making a full game.

My focus this summer has been on making progamming changes to the basic engine, based on feedback and experience with To The World Tree. The game isn't fully designed yet, so I'm proceeding under the name "Untitled SENG Project". (SENG is the name of my engine).

The first change was to eliminate the "infinitely thin" walls, instead lowering the tile size to 2.5 feet, and treating walls as a tile. This is a great simplification, and I think looks better too.

As an example, the old style looked something like this:

Old Walls

And, with preliminary, dev art, the new style looks something like this:

New Walls

More on the engine changes next time.

In the last couple of days, I wrapped up some last RPG tweaks. Made rogues a little more powerful, adjusted the numbers a little bit; nothing too big.

Next up on my list is to add some AI functionality to the monsters you run into in SENG. Right now they basically just charge at the closest party member and attack. My main goal here is to enable some more interesting tactical combat scenarios for the level designer. (Not totally true; I also want to enable some non-combat scenarios, like having monsters patrol an area, but that is a secondary goal).

However, as I've been thinking about these AI improvements, I got to thinking about the combat scenarios that I wanted to enable. I made a small list of these, and then thought about how I was going test these out, both the AI behavior and also the play balance. Thinking about making little test areas for the scenarios made me think about the next big milestone, where I make a series of prototypes for playtesting. And, "Eureka!", I should just merge these ideas, and make a series of test encounters as part of a prototype. Temporary code name: "Ten Interesting Fights".

Here are the 10 fights:

  1. "Warm-up" - The player controls one actor, a basic fighter. He fights a couple of really wimpy monsters, one at a time.

  2. "The Classic" - I add a couple of new party members, a rogue and a spellcaster. They fight a classic fantasy battle, against some brutes in the front with archers behind.

  3. "Summoners" - Same party as before. Now the enemies are a set of spellcasters that summon minions to fight the party.

  4. "Archers" - Same party. The enemies are a set of archers across a chasm, difficult to approach across a narrow, exposed bridge.

  5. "The Horde" - Now I introduce a full gamut of potential party members for the player to pick from. The first battle for this party is against a whole bunch of wimpy monsters. This is something of a test for how the engine scales. 20? 50? 100?

  6. "Heavy Ordnance" - Something like "The Classic", except now in the back are spellcasters that focus on damaging spells.

  7. "Sneaks" - The party faces a bunch of stealthy rogues who try to sneak behind the party and attack the soft spellcasters in the back, or use shoot-and-run tactics.

  8. "It's a Trap!" - Spellcasters and archers take cover behind a set of traps, some visible (lava pits), some not.

  9. "Helping Hand" - The party faces a set of tough soldiers, with healing/buffing spellcasters in the rear.

  10. "The Boss" - One big, mean sumbitch.

I figure I can advance the party 2 levels between each encounter, giving full exploration of levels 1 through 20.

In planning this, though, I've realized I need to make a bunch of content (levels, monsters, etc), before I can really get to work on the AI improvements. So I'm going to postpone the AI work just briefly to wrap up the remaining engine work. Which is:

  • A few graphics tweaks - adding "aegis" effects (which previously I had to manually put into the graphics), and a couple of others.

  • I never updated all of my icons to the new UI; they are all too dark, and I need some more, for instance for different weapon types.

So, probably about a week to work on those, at which point I'll declare the "Engine Updates" milestone done, and begin work on the "Ten Interesting Fights" Prototype. The goal with "TIF" is to actually produce a prototype that I can have some people test and give feedback.

Oh, and if someone has a thought on a better name than "Ten Interesting Fights", I'm all ears.
Among other things, I've been mucking around with the spell effect system. I made the code much more flexible and generic, making it easier to make effects with varying appearances. As part of that work, I also spent a little time coming up with a core set of decent looking effects. Here's a "High Magic" spell in progress:

I also added the ability for traps and weapons to fire effects. Here's a poison dagger attack in progress:

I'm interviewing for a full time (non-game) programmer job next week. Those of you who are fans of SENG games should root for me to fail miserably; those who prefer my bank account should root for success.
The latest update to SENG is a rework of the way stealth and sneaking works. Sneak now shows up as an ability on the Abilities screen (formerly known as "Spells"):

Then, the player can activate sneak in the main HUD through the action buttons, down in the lower right corner of this screenshot:

The player can enter sneak mode as long as he isn't in sight of a non-friendly creature (and isn't in combat). In this shot you can see TestNancy's Sneak score (in "Special Statistics"):

If she comes within range (150 feet, I believe) of a non-friendly creature with a higher Observation score than her Sneak score, she is spotted and the Sneak ability is turned off. Sneak is based on the Sneak skill level and Personality attribute of the character; Observation is based on the Observation skill level and Intelligence attribute. Coming within 50 feet of a creature gives that creature a bonus to Observation.

So that's pretty simple, and, to the player, not much different than how it worked before. However, internal to the code, I replaced the old hack-o-rama implementation, with 4 boolean values per character, and special-case code galore, with a new implementation, sharing code and functionality with the Powers system. I'm really happy with the way it came out.

Next, I'm working on the Faction system, to handle things like Guilds and Deity worship.
In a previous post:


I discussed prototyping and user testing. I'd like to make a set of standalone prototypes, using the SENG application, for the purpose of testing out how well different parts of the application work, both technically and from a user's perspective. I use the word "application" instead of just engine, because I'm including the gameplay, graphics, and interface.

Rules for prototypes:

  • They should be completely standalone applications; the user can just open it from their desktop and go.

  • The player should have a stated goal to achieve in the prototype.

  • It should take the player about 5-15 minutes to play through the prototype.

  • The prototype should be easy to get into. Maybe a page or two of instructions, or at most one "prerequisite" prototype.

Details on how I distribute prototypes, get feedback, etc, are left for the future.

So, here is some brainstorming about what the prototypes might be:

  • Character creation. The player goes through the character creation process. For a user test, the goal might be just "make a character", or maybe more specific "make a tough barbarian character".

  • Basic interaction. The player controls a single character who has to walk through a simple maze, including picking up keys, unlocking doors, reading books, and so forth.

  • Basic dialogue. The player controls a single character, who has to converse with a set of other characters. Perhaps the goal is to solve a murder mystery or some such.

  • Environmental graphics. I want a prototype to test out the environmental graphics facilities of the engine, like moving water, animated graphics (like a turning wheel or some such), and particle fire. It might make sense to merge this with the "Basic interaction" prototype to give the player some goal other than "look at the pretty graphics".

  • Overland travel. SENG supports a world map. So, maybe some sort of scavenger hunt between a set of areas that require moving across the map to solve.

  • Combat. Lots of combat. In all of these, provide the player with a premade party, and give them one encounter to try out:

  • Basic combat. The party consists of just fighters (melee and ranged). Let them battle a similar party.

  • Magic combat. Now, a party with a single fighter and 2 or 3 spellcasters, with a set of attack and buffing spells. Let them fight a simple party of fighters, tough enough that they will lose if they don't cast spells effectively.

  • Horde combat. Give the player a balanced party. Let them fight against a large number of wimpy enemies.

  • Boss combat. Give the player a balanced party. Let them fight against one big, bad enemy.

  • Ranged combat. Give the player a balanced party. Let them fight against a surrounding bunch of archers, who run away when approached.

  • Attack magic. Give the player a balanced party. Let them fight against a set of enemies who cast offensive spells.

  • Buffing magic. Give the player a balanced party. Let them fight against a set of enemies who buff and heal themselves/each other.

  • Summoning magic. Give the player a balanced party. Let them fight against a set of enemies who summon other enemies.

  • Sneaky combat. Give the player a balanced party. Let them fight against a set of sneaky enemies who try to sneak around the front line to target the weaker spellcasters and archers.

Well, that's a start. Feel free to suggest your own ideas on what would make good short prototypes for an old school RPG.
Rampant Coyote talks about Intra-Party Conflict and Drama here:


For Untitled SENG Game, party conversations are a required feature, and as yet unimplemented. For those who haven't paid attention, Untitled SENG Game is a 3rd person, single-player, party-based RPG. Something like Baldur's Gate and the other Infinity Engine games.

Now, I don't know that I want to go totally crazy with the party interactions. Making every combination of party members have meaningful plot-lines and dialogue seems like a good way to spend a lot of time writing content that most players won't ever see. But, at a minimum, if you promise the Valiant Knight to rescue the Virginal Princess when he joins the party, he better have a way to get unhappy about it if you don't!

I've thought of 3 approaches to this problem, all with their positives and negatives:

  1. Non-interactive dialogue. By non-interactive, I mean that the dialogue is simply put into the message window, with no chance for detailed conversation. For instance, the Valiant Knight would say "We haven't rescued the Princess yet!", maybe every five minutes. This text would just be placed into the message window. Eventually he could escalate the unhappiness of the messages, and leave the party as a last resort.

    This would be nice, in that it wouldn't disrupt the gameplay much. However, there's some worry that the player wouldn't notice the dialogue, or would just ignore the messages.

  2. Party member forces conversation. In this case, if the Valiant Knight decided he had something to say, he would march up to the main character, and start talking. We'd then be in the full conversation mode, with full interaction between characters, and no way to ignore the conversation.

    The full conversation interface would be nice, but is very disruptive. What if I had just clicked on a door to have the Valiant Knight open it, but instead he walks over to my character and starts talking? That might be OK if he just did it once in awhile, but too much, and it would be very annoying.

  3. Hybrid. In this case, the Valiant Knight would say "Can we talk about rescuing the Princess" in the message window. Then, you (the player) could have your character talk to him if it was a good time, or ignore him (for the time being) if it isn't a good time.

Something that will have to be implemented across all systems is some sort of daemon system, where (say) every five minutes the engine runs a little piece of script to determine whether each party member wants to chatter right now. This daemon would also take care of determining whether "now" is a good time to talk; obviously we don't want conversation going on right in the midst of battle!

So, I guess once we've implemented the daemon code, we've basically implemented all of the pieces for the Hybrid system, and then it's just a game design question. Hybrid is the best for the player, so that's what I'll go with, barring some sort of simplicity revelation.


I've finished my internal Milestone 5 ("Engine Updates"). Yay! The SENG engine is now in good shape for a full-featured game. Oh, there are always more features I could add, but there's enough there for a full-featured, full-length, engrossing, deep RPG.

So, with that, I announce the end of "Untitled SENG Game".

Milestone 5.1 is "10 Fantasy Fights", a prototype to test out the depth and breadth of the SENG engine before I dive fully into a complete game. You can see some of my thoughts on 10FF in this previous post:

Some of my favorite computer role-playing games have some sort of visible reputation, morality, or alignment system. Ultima IV is the classic, of course, where your character needs to satisfy the rigid constraints of the virtues system to even proceed in the game. One could argue that the virtues are the entire point of the game (though I think that's overstating it; there's still a healthy slice of exploration and dungeon crawling). My beloved Baldur's Gate has both a reputation system, and a less-dynamic alignment system, that effects the behavior of NPCs towards your character.

I think systems like that are cool, and I've been mentally batting around the idea of instituting a system like that in "Untitled SENG Game". A rich morality mechanic, where your morality stats are determined by your actions, and shape the path of character development, is a tantalizing goal. Especially a complex, tiered system, like an Ultima, that extends beyond simple Good versus Evil.

However, a good reputation or alignment system needs to be baked thoroughly into the game. My experience with Neverwinter Nights was a bit different, such that your alignment in Neverwinter Nights seems to be pretty static, and doesn't have much effect on the game you play. There simply aren't enough guilds, or NPC interactions, for the designers to have made alignment have a big effect on the game. I don't want _my_ game to have a seemingly cool mechanic, that ultimately doesn't have much effect on the game. (No criticism of NWN is intended; there are certainly a lot of parts of that game that do work well).

With that in mind, I'm going purposefully avoid any formal alignment or reputation system in "Untitled SENG Game". On the one hand, I have plenty of game design goals and challenges already; good story, rich tactical combat, and satisfying, option-filled character development. And on the other hand, there's a non-trivial amount of coding for a formal system that I can avoid.

That said, I do still want your character's actions to have an effect on the world, and his path through the world. But this can be done through direct action, using the existing scripting and conversation systems. For instance, if you refuse to rescue the distressed princess, the Paladin's guild might not admit you into their ranks. Or, if you _do_ rescue her and the reward isn't satisfactory, Darke Golddigger the greedy dwarf might be inclined to leave your party.

Ultimately, making a game (as with any software) is a process of trading off features, content, and quality against time. At least for the first SENG game I make, I think this is a feature I will have to do without. Perhaps later I can make a game with a complex morality system woven into the very fabric of the game.
I've had some time over the past week to do some good coding, and I've got some lingering features done in the SENG engine.

The first of these was "map discovery". Previously, when you entered an area, you could see everything in it, both onscreen and in the map. Even stuff behind closed doors, etc. Now, one of your characters needs to get close enough (100 feet), and you have to have a clear path, in order to see something. Here's an example.

Tester, with the door closed, and the tiles behind obscured:

Tester opens the door, revealing the room behind. Note also that the monsters notice her and attack:

I didn't implement line of sight, or anything complicated; just straight-up breadth-first-search. One obvious benefit is that I can design levels with hidden details behind doors. Less obvious is that previously monsters would "trigger" and try to attack the player, even through walls, leading battles not taking place in the right spot. Now, monsters only attack after a room has been revealed; much nicer.

Implementing map discovery took a little longer than I had hoped because of performance issues; with my first change, I dropped to about 10 frames per second. After some good optimization, I finally realized that in the Release build (as opposed to the Debug build that I always run), there really wasn't much of an issue at all. But I left the optimizations in anyways.

The other changes were more minor. One was to revamp the way traps work. Previously a trap was a property of a tile, which wasn't great, but got even worse when I dropped the tile size from 10 feet to 2.5 feet. For instance, your thief might disarm a trap, but your fighter right next to him would trigger it since the tile size was so small. Now traps are objects, which have arbitrary size, so if the thief disarms the trap, it rightly disarms the whole thing. In the process I fixed up some other trap issues.

The last change was to implement an "Exit" object, to make exits more visible and functional. If you played "To The World Tree" (http://www.prankster.com/ttwt), you probably have some idea of the confusion that this could clear up.

Anyways, good progress for now. I'm really starting to see the light at the end of the tunnel as far as coding changes to the engine. Unfortunately for indie game development, I'm probably going to take a job in a month, which will cramp things. But I suppose my bank account (and wife) will be pleased.
So I've made a number of changes in the way the SENG RPG system works over the past few months. I'm finally getting around to putting those changes into the documentation. That may seem like a task that should wait until there's actually a game to go with it, but right now all I have is a big text file with vague notes on the changes I've made. Moving it into the real documentation is as much for my benefit as anyone else, so that I have a definitive place to look when I'm trying to remember how something is supposed to work.

Also as part of the documentation I've been moving things like spell descriptions, formerly only available in-game, into the manual as well. These are auto-generated by a program (that shares most of its source code with the game code itself). So, a spell description in-game might look like this:

Whereas in the manual, in HTML format, it might look something like this (well, sort-of; I can't get all the formatting into this post):

Touch of Fear

Type: Spell
Skill: Void Magic
Level: 0
Cost: 40
Attribute: Intelligence

Inflicts a penalty to statistics:

  • Attack Points

  • Damage Points

Attack Points: 20
Damage Points: 20
Saving Throw: Fortitude

This spell chills the heart of one enemy, hindering the effects of that beings attacks for a time.

Optimistically, I'll say I'm about halfway done with making these updates. Perhaps I'll post the manual here when I've finished up the changes.

This week I've been working on some updates with the level editor. Based on my experience with To The World Tree (http://www.prankster.com/ttwt), I knew that I had some issues; the level editor was slowing me down. Rather than muddle through as before, the best thing to do was to revamp the level editor now, saving valuable time in the future.

Here's a screenshot of "Layout mode", a new feature:

The features to do on my list:

  • Streamlined UI - Duh. Every fewer click I have to make is time saved.

  • Layout mode - In TTWT, I would do level layout in an image editor, and then look back and forth between the level image and the level editor as I filled in the details of the level. I may still do rough layout in an image editor, but the editor supports better layout operations.

  • Cut-and-paste - Previously, if I wanted to, say, move a room, even by one tile, I'd have to redo the whole room. Now I can just use the "move" edit operation to move things. This also helps make layout editing more convenient.

  • Skin mode - Given a level with just a raw layout, now I can select a region and apply a "skin", which fills in the proper tiles for that part of the level. Previously tile editing had to be done by hand.

  • Proper save - I'm embarrassed to admit, but the old level editor didn't actually save levels. Instead, it saved partial levels that had to be cut-and-pasted (in a text editor) into the actual level file. Easy to do once; sucky to do a hundred times.

So, I've got "Streamlined UI" almost done (just missing some keyboarding), "Layout mode" is done (see the screenshot above), and "Proper save" is done. "Cut-and-paste" and "Skin mode" are non-trivial to implement, but should be done next week. I can show you some good workflow screenshots once I have those ready.

So I finished up the updates to the level editor. Now, let me show off what it can do!

To do this, I'll show how easy it is to make a tower in a grassy field. Let me put a caveat that I don't have any real art or anything, and I don't have a full tileset to work with. (I did actually spend a bit of time getting the tiles together, but that's more because of my incompetence than anything else). Here are the tiles I'm going to work with (pictured in the level editor):

Another caveat; the level editor is an internal-only tool. As such, it should be quick and easy to use, but it's not pretty, or necessarily intuitive.

OK, here's a blank level, with the grid turned on (note that at 40x40 tiles, this level is only 100 feet across; the editor handles much larger levels but that's as big as I need for this demo):

First I'll draw in the tower area. To do this, I enter layout mode, highlight an area:

Then, one click fills in dummy tiles. I'll make an L-shaped tower (so a couple more clicks):

Now, we need walls. To do this (still in Layout mode), I highlight the whole area, select the "Wall" tool, and "Apply" then draws walls around all the tiles (notice the walls all face nicely inwards):

I'll also manually draw in a wall to split the tower into two rooms; not pictured, but only a couple of clicks.

Now, time to "skin" the tower, replacing the dummy tiles with the real tiles. Enter "Skin" mode, pick the "towerskin", highlight the whole area, and hit Apply. Voila:

Next, I use the Layout mode again to put dummy floor tiles all around the tower, and use the Skin mode again ("grassskin" this time) to put grass all around the tower:

And there you have it!

Now, to polish the level, I'd have to go through manually and do stuff like add doors, furniture, and other adornments. But I don't have graphics ready for all that stuff, and besides, I didn't make the polishing any easier; unfortunately that stuff always takes awhile.

I am very happy with these changes; making levels is way easier than it was in the To The World Tree days. Next, working on sound effects and ambient sounds.

Time for another update on Untitled SENG Game. I've been squirreling away on engine changes; in the last couple of weeks I've implemented (well, re-implemented) the way items work in combat, and added a conversation journal.

I had a small bullet on my "To-Do" list; make items work with the new RPG system. That quickly ballooned into a bunch of changes, spider-webbing through much of the code. However, by the time I was done, the programming for items was much simpler and less error prone, and as a fortunate side-effect, I got magic rings, amulets, and helmets working; a "To-Do" that has been sticking around since the "To The World Tree" days (http://www.prankster.com/ttwt).

The sexiest thing I implemented- well, look at this screenshot:

You can see that the newly implemented test item "Poison Dagger" has a Spell Attack "Poison Burst". Items can now have a Spell Attack which attacks an actor's Saving Throws instead of their Defense Points (the SENG equivalent of "Armor Class"). A magic item like this will do half the "normal" damage with its standard attack, but then another half with the Spell Attack.

And, in this screenshot:

You can see the Poison Dagger generating a particle effect when it hits! Cool, huh? The particle effect is just the same as from the spell-casting system, but later I'll customize so the particles look different (while using the same code).

As for the conversation journal, this is just a log of conversations that your party has had with "interesting" NPCs. I've often wished for just such a feature in RPGs I've played; most of them by now provide a pretty good journal of Quests, but I'm often frustated by the lack of a conversation log. Plus I included an entry for the last location that you encountered the NPC. I don't know if it's happened to you, but I've had times where I'm playing an RPG intermittantly, and I come back to a Quest log that says "Give Grobnar the Frozzle", but I've completely forgotten where Grobnar was.

Anyways, here's a screenshot of that:

My "To Do" list for this round of engine updates is really shrinking now; things are looking good. A few more weeks to go certainly (and I have a sneaking suspicion that if I did a real schedule it would be at least a month), but definitely getting there.