Monday, July 22, 2013

Development update

Foe attacks have been refactored into natural weapons (melee and ranged), spell-like abilities and plain old spell books. UnifiedActor now has access to all three.

Character races can now be assigned natural weapons, but the player can't yet make use of them. In time, in time. Races and character classes will also receive multiple spell-like abilities, rather than the current single special ability. Those two changes will need a UI update...

On the other end of the change, I've written a simple Goal-Oriented Action Planner in a reasonably general-purpose way. World state is stored in a set of booleans. Given the starting and desired world states and a set of actions that each have a cost and change the world state, the AI can plot (via an A* graph search) the least-cost path to the desired world state. Credit goes to the GPGOAP project for showing me how easy such a thing could be to implement.

So the end game in sight is that every UnifiedActor can express a list of possible combat actions every round. Players select them via the UI. Foes will run their list of actions through the GOAP AI and use what pops out. We're still some way off from that, and the magic will be in expressing cost and world state changes of every single foe combat option. Garbage in will mean garbage out, as always.

Friday, July 5, 2013

Refactoring Continues

The foe data model has been refactored out to be based entirely on UnifiedActor. The upshot is that Foes now have access to a number of things that only PlayerCharacters had before (e.g. inventory, equipable slots, wielding combos, race, class (and multi-classing), gender, spellbooks), while PCs in turn have access to a few things that were once Foe-only (e.g. arbitrary body parts).

What remains of the refactoring is to generalise a number of features of Foes that get in the way of letting them just use items - notably the FoeAttacks. These will get refactored out into Natural Weapons associated with body parts, special abilities, and the existing spellbooks. A nice side effect of this is that PlayerCharacters will have access to natural weapons and multiple special abilities with a little more work. Yetis, I think, will get claw attacks.

After that it's on to writing some AI for foes to actually equip and use the items where possible. Each foe will get it's items from the configured loot table, and before combat get a chance to load out whatever slots it has available to best effect.

The indefatigable Rob A has done some invaluable testing and has filed a bunch of issues over in the tracked at SourceForge, which I will get onto after that.

Wednesday, June 26, 2013

Where we are

...is deep inside refactoring the foe data model. This began with moving desired PlayerCharacter functionality into a base class (lamely called UnifiedActor, but we can get back to that). Common data includes race, class, gender, name, level, body parts, equippable slots (generated from body parts), stats (which includes modifiers and resources) and spellbooks. This involved some refactoring of the data model - races need to specify body parts, body parts need to specify how they generate equippable slots. Those data model updates are where I'm at now. The PlayerCharacter interface remains intact and backwards compatible, and inherits from UnifiedActor. After that I'll start on integrating it into the Foe data model. I think I can do this without touching any of the data in the foe database... at least initially.

Monday, June 3, 2013

v0.911 released

I've rolled up the last six months of incremental changes and uploaded it to SourceForge

---------------------------------------
v0.911 (4 June 2013)
---------------------------------------
Features
 - Added 'forget' spell result that removes auto mapped area
 - Character speech in NPC conversation now appears in speech bubbles
 - Conversation dialogue for Ideaus and Stenelaus
 - Added NPC: Pandarus the tobacconist in Aenen
 - General Options event that presents a dialog of options to the player
 - Numerous small content additions in various zones
 - Renamed Merfolk race to Triton
 - Added Amphibious property, assigned to Tritons
 - Attribute modifiers are no longer editable on level up
 - Increased race and class impact on attribute modifiers
 - Introduced a level up bonus option to increase a base modifier by one
 - Removed ATTACK RATE modifier, attacks and strikes are now explicit
 - Removed Spell shortcuts, replaced by Display Name
 - Source distro can now compile and package from scratch

Wednesday, May 29, 2013

A pact with the powers of darkness

Hogan licked his lips nervously and cast a glance around the glade. His companions had busied themselves with preparations to strike camp and were paying the Acolyte scant attention. The time was now. Hogan slipped between the trees and moved some distance away from the others, heart beating fast. Compose yourself, he thought, this is not the first time. Nor is it the last. Finding a secluded spot he seated himself, and forced his lips to frame the first of the three prayers required by his dark masters.

Hogan, as always, his stomach churned as the powers of darkness responded to his call. Hogan. Our loyal servant calls once again upon us. What do you require, Hogan?

Power, master, Hogan replied, power that I am owed by our pact. Honour our pact and grant me now this power.

Power we will grant you, Hogan. As always, there is a price. How might our loyal servant pay us that grant him power?

I may pay with all that is mine to give, master. Say but the word. Hogan knew the words by rote.

Indeed you shall. We have need Hogan. Need of your BLOOD, need of your STRENGTH, need of your SOUL. How shall you pay for the power that is to be yours?

Hogan's mouth was dry. He knew he could not consider the question too long. I will pay with my blood master. Honour our pact and grant me the power!

~~~~~~~~

A shuddering cry disturbed the glade. The party leaped to defensive postures. There was a moment of silence, then Hogan staggered into view and stood pallid and trembling, leaning heavily on a tree near the edge of the glade.

"Hogan!", exclaimed the Knight, "Are you alright?"

The Acolyte raised his head. His features were haggard and pale and pinched with pain, but his eyes burned brightly from beneath his dark brows as he regarded the others.

"Yes. Yes I am. Let's go"

Monday, May 13, 2013

Where We Are

It's been a quiet three months.

Not for me; Connor is three months old now.

No, it's been quiet for development Escape From The Maze. Very quiet.

I have done a few things: replaced Attack Rate a better implementation, removed base stat boosting at level up (it becomes a bonus option rather than something you can spend a modifier point on), added some minor content, and tweaked a few things.

There was a complaint on the project page that the source distro wouldn't compile. This is valid, because it's just a roll up of the source code. He raises a good point though, and I'll aim to have a working source distro up before I upload the next release. That'll come when I have some free time...

I have been playing some Frayed Knights, it puts the little boy to sleep. I recommend it, although it's a very different flavour of Wizardry clone to what I'm aiming for.

Thursday, February 21, 2013

Thinking Of System Changes

Having tinkered long with the balance and played through a bit (not nearly enough), the feeling has grown on me that some basic game system changes are needed. Here's a brain dump of my thoughts.

No More Attack Rate Modifier
A generic "Attack Rate" modifier that is translated into a number of attacks/strikes sounded like a good idea, but wasn't. Instead I'm going to try this: A base single attack with a single strike that is increased by (a) level and focus, (b) attack modifiers and (c) misc other stuff like items. Attack modifiers will modify the number of strikes per attack (e.g. Swing +5 grants an extra strike on each Swing attack). Level and class focus will modify the number of attacks (e.g. 2 attacks at level 5 for combat character classes). Other things will modify these numbers directly (e.g. weapons that grant extra attacks or extra strikes per attack).

Modifier Effects (What Might Be Called Skill Trees In Another Game)
In general, every skill modifier and base modifier should grant different effects as they are increased, probably at thresholds like +5, +10.

No Boosting Base Stats At Level Up
The base stats Brawn, Skill, Thieving, Sneaking, Brains, Power will no longer assignable at level up. This will take re-balancing of the class and race starting stats and the level up assignable modifiers, but it should (a) make the class/race choice at character creation much more significant, (b) avoid just spamming these base stats instead of the skill modifiers and (c) allow me to differentiate races and classes more by bumping the starting values to more significant values. I may add a level-up bonus option for bumping these base stats instead.

Fix Foe Data Model
The custom Foe data model needs to be changed to correspond more closely to the Player Character model. As close is possible. This means foes with inventories, using weapons and items that they have available, etc.

No More Stealth Points (Perhaps)
The Stealth points really haven't done the trick, it may be time to do away with them.

A Better Magic System
I want to have differentiate the schools of magic more. For starters: resource management. Instead of every school using a bland pool of Magic points I will introduce a different spell casting mechanism for each. For example:

  • Sorcery (maybe) operates on a D&D-like spell book with reserved spell level slots. Sorcerers may have a starting item (spell book) tied to their casting, and usable as a way of replenishing their spell slots.
  • Elemental magic comes from within: users spend stamina points to cast spells. Users channeling elemental energies through themselves must be careful to avoid letting it get out of control.
  • Black magic users trade portions of their soul for spell casting, perhaps a very large but very slowly (or non) regenerating pool of points to spend coupled with consequences as the total drops towards zero. Consequences culminating in death or possession or something.
  • Need more thought on White Magic (soul again perhaps, but in reverse), Druidism, Enchantment (something to do with the fey) and Witchcraft. 
  • Differences may include how spells become available (all, some, spell picks, etc), whether they can be cast at different casting levels or not.
Secondly, the spell lists need some rework. I want:
  • All unique spells in each school, no more spells shared between schools. For spells that offer important game-system effects (e.g. Identify, Knock-Knock, Heal), alternatives will need to be invented.
  • Better names for each spell. Think MtG rather than D&D.
  • No more spell shortcuts, it was cute but it's over now. The spell dialog search can work on plain old spell name.
  • More spell effects that "break" the system. Inspired by Rampant Coyote's recent blog post I want to have a bash at incorporating some of the "system breaking" D&D spells into Maze. Things like Charming, Divination spells, Teleportation, Flight/Levitation, Shatter, Polymoprh, , Wishes, Time Stop, Disintegration. Those are just the obvious ones, never mind Protection From XYZ, Speak With Plants/Animals/Dead/etc, Animate Objects, Enchant Weapons, Tree/Sanctuary/Statue, etc. Yeah I paged through my first edition D&D Player's Handbook for that :) Some will take a lot of effort, but it's worth a crack.
  • More condition effects. Crazy stuff like infection with a fungus, haunted by a spirit, accompanied by a genie, and so on.
That's about all I can think of for now. This post is probably for my own memory as much as for anyone else :)

I gotta go, it's bath time.

Saturday, February 16, 2013

Connor Brett McLachlan

Our first son was born at 12:10 on 8 February; a healthy 4280g bundle of trouble.

Life is a little distracted from the hobby project, but hopefully only temporarily so.

Friday, December 28, 2012

v0.910 released

Version 0.910 is out, get it on SourceForge. Some interesting new features in there.
---------------------------------------
v0.910 (28 December 2012)
---------------------------------------
Features
 - Initial work on automated balancing
 - Added configurable and persistent user settings, plus a Settings screen
 - Added user settings: combat speed, music volume, personality chattiness
 - Added Tip Of The Day to main menu
 - Added an OK/Cancel dialog when the player quits to the main menu
 - Initial implementation of the automap
 - Moved difficulty level implementations into the default campaign module
 - Difficulty level implementation can now swap in a new foe combat AI

When I initially released v0.9, I planned for v0.91 to be the first beta. Needless to say, that hasn't happened yet. But we're on the road. I'll just keep adding versions in 0.001 increments, leaving me 89 releases until the big 1.0!

Wednesday, December 12, 2012

Mid December Update

Balance had stalled a bit, so I have jumped into some feature work. The balance stuff had gotten thoroughly boring, so some relatively unglamorous dev was fun by comparison. What a pleasure to get into the glory of configurable user settings and the Options/Settings screen, as well as the long overdue Automap. They're shaping up well, with a bit of luck and time I'll be able to drop a December release.

IRL, my better half is 32 weeks along and all is well so far. The new house is mostly settled into. The new all-grain brewing system is up and running.

I'll leave you with Eric Schwarz's musings on Balance, perhaps I will leave what I have and forge ahead. I do still feel that there is a middle ground to be found... but hopefully it will emerge when the time is right.