Friday, December 20, 2013

v0.913 released

In the grand tradition of rapidly releasing in order to fix a couple of serious bugs, I've dropped v0.913 on SourceForge. Thanks to the tireless Rob Ayres for reporting them.
v0.913 (22 December 2013)

 - Increased spell casting stats for Parched Vultures
 - Flagged Goblin throwing knife attacks as ranged instead of melee
#81 NPX in combat
#86 NPX when foe carries non-equipable item
#89 Editor: warning on close window
#90 NPX trading with Stenelaus
#95 Many bombs have infinite charges
#99 NPX climbing stairs in CoC 

Family commitments over the festive season are probably going to bring development to a standstill for the next few weeks, but I'll see what I can do. Top of the list right now is implementing the long awaited combo box, in preparation for a combat UI revamp, which in turn is in preparation for a richer set of combat options.

Compliments of the season to all, see you on the other side :)

Sunday, December 1, 2013

v0.912 released

As usual, you can head over to SourceForge to get it.

v0.912 (1 December 2013)
 - Refactored Foe and PlayerCharacter to share common data model
 - Added a proper Inventory class, for use by PCs and foes alike
 - Added suggested names per race+gender to character creation
 - Added alignment, font and text colour properties to text areas
 - Redesigned the character creation wizard
 - Refactored starting kits into a first class data item
 - Detailed names and flavour text for class starting kits
 - Improved searching by name on spell display widget
 - Swapped available spellbooks of Sorcerer and Magician
 - Swapped available spellbooks of Priest and Adept
 - Swapped available spellbooks of Witch and Cultist
 - Added font size config property
 - Increased default screen resolution to 1024x768

#53 Display class changing requirements in UI
#54 Monster counting bug
#57 Cannot edit some modifiers on level up
#58 Chivalry never practised
#59 Combat modifiers not practised
#60 Kepnasha encountered in COC
#61 List things affecting a modifier
#64 Spellbooks to indicate which magic school they belong to
#65 Many spellbooks have "to equip" requirements
#68 Examine balance of combat modifier practise
#70 Steal modifier does not practise
#71 Critical hit modifiers do not practise
#72 Powercast not practising
#73 Golden apples and Magic Nectar crash the game
#74 Theft spell hangs the game
#75 NPC speech detection is case sensitive
#76 Spell level limits to not work
#77 Cure poison spell crashes the game
#78 Sporadic crash opening waterfront villa chest
#80 Chamois Skirt has "reserved15 +1" modifier

Tuesday, November 26, 2013


I've upped the default screen res to 1024x768. 800x600 isn't as feasible as it used to be when I started dev on the game, and even 1024x768 is pretty small by modern standards. No art assets have been redone, but that may come in time. The screens do look a lot mor spacious, especially the text-heavy ones during character creation.

Here's some screenshots.

In the Gatehouse at 800x600

In the arena at 1024x768

Class selection at 800x600
Class selection at 1024x768

Next task is to package up and release 0.912, drawing a line under the last six months of tinkering. Time is limited, and I'd like to do a bit more regression testing this time, so I guess it'll be out in a week or two.

Monday, November 11, 2013

Development Update

I've been working away at the bug and small enhancement backlog. Highlights include displaying class changing requirements during the level up wizard and ensuring that every modifier increases practice at most once every round. Starting kit data is almost all complete too, pending some balance though.

Another few fixes and I will roll up a release for distribution. It seems like a six month release cycle is where we're at right now.

Monday, October 21, 2013

Comment discovered in the source

@ mclachlan.maze.stat.magic.SpellBook#getSpellsThatCanBeLearned

// let's see if I can fight the cheap red wine and get this right
Clearly I didn't, as evidenced by bug #76.

Wednesday, October 16, 2013

An update and development and other things

Not much to report. I have been working on the GOAP AI, which hasn't really gone anywhere. It's proving hard to represent the world state meaningfully in a set of booleans.

I've also been fixing some of the bug backlog, some good fixes going in there.

Other free time has been spent on Swords & Sorcery: Underworld and Occult Chronicles. Both great, I highly recommend them. Alas the little boy isn't going to sleep on my lap in front of computer games any more. My future gaming time may suffer as I'm forced to react to his new found mobility...

Monday, September 23, 2013

Development update: Character Creation

The redesign of the character creation wizard is done. Here are some screen shots:

1: Race and gender. Would be nice to have a character race picture somewhere here, but that can wait I guess.

2: Character class (and spell books if applicable). Looks like there will be a problem fitting in more classes, I may need to make a plan.

3: Starting kit. Includes flavour text, modifiers and the actual list of starting items. This replaces the Modifier assignment step.

4: Spell selection. This only appears for character classes that start with spells. Random doesn't work yet.

5: Finally, personal details. Name, portrait and personality are assigned here. It also displays a summary of the character's starting modifiers, the sum of race, class, gender, and starting kit.

As part of this work starting kits have been normalised out into their own database table, rather than being an atribute attached to character class (and race in the case of Faeries and Dryads). I have a lot of work outstanding writing flavour text for all the various starting kits. That will happen over time.

I'm feeling like I should get back to the foe AI, but we'll see how it goes.

Monday, September 9, 2013

Development Update: No sooner said than done

I've been tackling the redesign of the Create Character wizard. When the muse takes you...

The work is not yet complete, but the new design is a lot more consistent and fun to use than the old. It now goes Race & Gender -> Class -> Kit -> Spells -> Name/Portrait/Personality.

Race/Gender and Class both benefit greatly from redesigned screens. Kit gets a whole screen and will become a "first-class" choice. Moving the personals section to the end adds some focus to those details.

Kit choice! Kits will include their own descriptions, names (they're currently named after the primary weapon), and a set of modifiers that replaces modifier assignment. This will make for a great chance to add some flavour, and hide new players from the complexities of weapon attack modes and spell book favoured modifiers. A redesigned screen will give me the chance to display all the starting items of each the kit for inspection by the player.

Work outstanding is the redesign of the kits screen, and a lot of data entry content creation around kit names and descriptions. I'll post some screen shots when it's done, I think this blog needs more picture.

Sunday, August 25, 2013

Development Update: Suggested Names

I've taken a short detour to implement a feature long in mind: character name suggestions during the character creation process.

Names are suggested based on the combination of race and gender, and are randomly selected from a list configured in the editor. The 'random' generation on the screen will also pick a random name now.
I've been thinking that the character creation wizard needs some changes, it's a bit scattered and crowded right now. I'd also like to eliminate the modifier editing in favour of preset modifiers on starting kit...

Monday, August 12, 2013

Development update

Foe inventories are now populated on spawning from their loot tables, and prior to combat each foe has a chance to fill any open slots with appropriate equipment that it may be carrying.

This has an some indirect impacts on loot drops. First, each foe now generates loot prior to combat rather than all loot drops being generated at the end. This open up some interesting options for theft/breakage/other impacts in foe items that I had planned many years ago but never come close to implementing. Second, foes that rely on equipment (hirebrands, leonal knights, etc) will now drop stacks of loot. I may need to work in some kind of destruction of items before dropping them, and will probably need to implement the long-dreamed of party-inventory.

Opening one door always reveals more doors to explore beyond, but these ones are for further in the future.

Hooking up actual foe behaviour to equipment and the GOAP AI will be a lot of work still, so I may have a go at cleaning up the open bugs and cut a release before tackling it. We'll see.

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 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)
 - 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.