Tuesday, 10 February 2009

Progress Report #7

Drop Item functionality has now been implemented. I was originally going to include all the suggestions mentioned in the comments to my previous post on the subject, but due to a slight limitation with the Delphi VCL (for some reason TPanel components, despite inheriting from TWinControl, don't have the corresponding OnKeyDown events, and I'm not interested in creating my own TPanel descendant that can respond to said key events) I've only implemented drag-and-drop item functionality.

And now, onto monsters! This is a very exciting bit of development, as I have lots of ideas for their AI. As ever, the reference posts on AI in Roguelikes seem to be over at ASCII Dreams. Eventually, I'd like to adopt many of the ideas mentioned there, but for now, the priority is to get the monster data entered into the SQL-Lite backend and then from there a monster generation algorithm written.

A while back, before development was put on hiatus, I had written up a fragment of a top-level design document dealing with this. Here's an extract dealing with one particular set of levels:

The Fortress

Built from rooms and corridors
Filled with martial creatures
Level 1 to 5 Monsters

LevelMonsterSymbolColourClass TemplateFrequencyFaction
1Goblin‘g’Light GreyClass + 1Common1
1Kobold‘K’BrownClass + 1Standard2
2Hobgoblin‘g’BrownClass + 1Standard1
2Gnoll‘g’YellowClass + 2Common2
2Quokka‘r’Light GreyNoneRare2
3Quaggoth‘g’OrangeClass + 1Standard3
3Warg‘w’Light GreyNoneStandard2
4Ogre‘O’BrownClass + 2Stsndard1
4Ogre Mage‘O’MagentaNoneRare1
4Hill Giant‘C’Light GreyNoneStandard4
5Minotaur‘m’Light RedClass + 3Rare5

Although this document didn't go into detail on the individual monster statistics, there are a few things here which are of interest at the moment. The 'Class Template' column refers to an idea I had, of, like Crawl, a slightly tougher version of the monster appearing with a class template bolted onto it, e.g. instead of a standard goblin, occasionally a "Goblin Fighter" might appear.

The 'Faction' column referred to an idea I had of improving AI by introducing the concept of Factions and a variable called 'Hate', which would eventually allow monsters to fight each other if necessary (the player would always be Faction 0). I don't know if I'll ever get that implemented though.

(Edit: Reformatted Post to remove the big gap. Thanks to Robotics For You!! for how to do this.

No comments: