Monday, 17 October 2011

Magic in DAEMON Part 3

This is an early screenshot of the Spirit Details page from DAEMON. Ignore the details for now, they're still being worked on in terms of creating the algorithms for the details of the various powers of the spirits.

But each spirit controlled by the character has a power (a castable effect, like a spell in other roguelikes), and this has four parameters:
  1. Proc: the % chance of this power being triggered each turn. This use does not modify the recharge time so powers can be both passive (proc-based) and active (on-use). Can be modified by environmental factors, target availability, items and so on. Also thinking of allowing the random proc effect to be suppressed under certain circumstances.
  2. Effect: for damaging powers, the damage dealt. For non-damaging powers, the extent.
  3. Duration: the duration of the power for non-instant powers in turns, for instant-powers, the length of a HoT/DoT effect applied.
  4. Recharge: the time to recharge the on-use version of the power.
All these figures are/will be modified by factors such as the Spirit Power Level/Sphere/Current Tolerance and Character Spirit/Mind/Summoning Skill and so on. Also I want enviromental and transient effects to play a role too.

Tuesday, 11 October 2011

Magic in DAEMON Part 2

In DAEMON, each spirit you summon will have its own unique seal. A "genuine" seal from the Ars Goetia is given below:

I've written code to procedurally generate similar-looking seals, given names and colours which as passed in as parameters:

Rendered on screen using Libtcod's functions the above seal appears as (actual size):

What's the point of all this? None actually, from a strictly game-play point of view, but I think it increases the atmosphere quite a lot.

Monday, 10 October 2011

Magic in DAEMON Part 1

I thought I'd write a little bit more about the Magic system in Daemon. Its very heavily (well, more like ripped-straight-off from) two real-world occult systems: the medieval grimoire Ars Goetia (also known as the Lesser Key of Solomon), and the Kabbalah (Tree of Life) of the Western Mystery Tradition.

The Real "Tree of Life"

I intend gameplay to metaphorically simulate the path of the Goetic (one who summons spirits) ascending the Sephiroth (Spheres of Tree of Life) whilst battling the evil forces of the inverse of the Sephiroth, the Qliphoth as one descends dungeon levels. Thus the spirits the Character can summon to assist him/her have thematic powers appropriate to the corresponding Qliphoth, foes will also be based upon said qliphoths, and the Sephiroth themselves will influence both the environment and also other powers that the Character may have.

For example, the dungeon levels corresponding to Geburah/Golachab (named Golachag in the game) will have enemies themed with destruction/burnings and ruins (in real-world occult lore, the qliphoth Golachab means "Burners with Fire" whereas the sephira Geburah embodies Strength), but the level itself will perhaps filled with martial armouries, great demonic captains or the remains of a dead god of war and so on.

The fluff in the game for Golachag states that:

"Spirits of Golachag are those who burn to do destruction - even onto themselves. They are known for inspiring in mortals unbridled radicalism and tyranny that brooks no opposition, and executes all its opponents.When manifested their bodies are forever consumed with an unburning liquid fire."

Summoning and using Spirits will cost the Character corruption and degeneration points, which will however, in return make summoning and using spirits easier. There will be ways to reduce both, although I've not finished designing these, but I suspect they will operate much like piety in Crawl does, although aligned upon Kabbalistic premises.

For example, in the screenshot above, it is possible to attempt to summon one of ten ranks of spirits, from the least, Soldier, to the greatest, King (as per the Ars Goetia). The more powerful a spirit summoned, the greater the powers available to the Character, but the more risks are involved.

Characters can summon and control three spirits at a time, and have access to the powers of the spirits (for example, in the above sphere, Neremoth (Fear), spirits will be able to frighten enemies, reducing their effectiveness or even preventing them from attacking altogether for a short period of time).

However, accessing their powers will reduce the spirit's life-force - represented by a hunger level. If the hunger level gets too low, then bad things (tm) could happen. I am still designing the consequences of what happens if this occurs. Perhaps the spirit could break free and attack the Character?

I'm also intending for environmental effects to play a big part in the game, akin to Unangband for example. These could make summoned spirits more or less effective, or easier to summon, and so on.

My aim is to make magic, and in fact, entire game-play a much more two-edged sword than in any previous roguelike, simulating some of the character progression in RPGs such as Kult (which is another influence).

Note that the names of the Spheres/Qliphoths have been altered slightly from their real-world equivalents and all spirits will have randomly generated names as to avoid harming any innocent spirits.

Saturday, 8 October 2011


I've scrapped the idea of rewriting Kharne. I'm currently coding the occult-themed roguelike as a new game called Daemon using C# and the libtcod.NET library.

I'm aiming to get a first version out (under the GPL) by the end of the month or so. It will be a complete game with save/load and a win condition, as I've largely used the framework I wrote for my 7DRL, Stygia.

Have some gratuitous screenshots:

Saturday, 24 September 2011


Well, that's a function for rendering _Enochian_ on the fly using Libtcod.NET completed. I'm using Enonchian as a general purpose magical language to add atmosphere and mystique.

Sunday, 18 September 2011

Welcome Kharne v3

So, I've decided to take my existing 7DRL, Stygia (which is a complete game) and use it as a framework to commence an in-parallel (and much less ambitious) rewrite of Kharne, using C# and Libtcod.NET. This one will have a slightly darker, less generic theme (with a magical system based entirely on Goetic magick) and will focus more on atmosphere and personal horror.

No doubt there will be extra-dimensional tentacles involved somewhere.

Don't worry, there will be another release of the existing Kharne (Alpha 24) shortly.

And this mysterious text below? Why the big bad himself, that you will have to defeat. Kudos and a hug to the first person to recognise the language.

Saturday, 17 September 2011

Friday, 9 September 2011

Magic Systems based upon the Goetia.

So today I'm thinking about magic systems, or more importantly implementable magic systems for roguelikes. I haven't yet got around to implementing magic in Kharne, and I want to make sure the system I do choose works.

I'm tempted to implement a magic system modelled upon the Goetia:

The interaction between the magician and the summoned spirits in Goetic magick is quite unique. Whereas in some traditions, spirits are prayed to or asked for guidance and wisdom, the spirits and demons of Goetia are bound and commanded by the magician to act as his servants. In such an interaction, it is highly important for the magician to be aware that he is calling upon these spirits to perform an action, rather than do it himself, because many of these beings are more powerful than him. Therefore, compelling the spirits to obey is a major concern. For protection, the magician employs elaborate circles and
rotes to confine the spirit. Once confined, the spirit must be forced to act in accordance with the will of the magician. Many different methods are employed to compel the spirits; lesser spirits can often be coerced, threatened or fooled into compliance, whereas more powerful spirits can be more difficult to control.

Common methods of control include threats, particularly in the form of the vibration of divine names, which tells the demon or spirit that the magician speaks with the authority and power of the god whose name he intoning. Some magicians will try to persuade the spirit, sometimes resorting to begging and bootlicking. In many cases, the magician may try to bargain with the spirit, to which it will most likely happily agree, exchanging service for sacrifice of some kind.

The various Goetic demons and beings are often very specialized. Grimoires list long catalogues of spirits, their specific powers, and how they may be summoned by the use of different seals, incantations, sacrifices and incenses. Before conjuration, the magician must carefully consult these catalogues and select the single spirit best suited for the task.

The Goetic spirits are not well suited to conversation, as are the Enochian angels. The lesser spirits are often stupid and are not known for their honesty. Summoning of the demons for the purpose of gaining information is generally a waste of time, unless perhaps the being is specifically ordered to spy or seek out information for the magician.

i..e magic is essentially summoning creatures to do your will, and which creature you summon and bind depends on what effect you wish to create; also, summoning will have a cost.

In other words, instead of _yet another fireball spell_, you summon a creature of fire at a specific location for a certain period of time. The effectiveness of this (how long the spirit stays, how effective it is and so on) could depend on your reputation with the bosses/factions of the fire spirits/how much you've sacrificed.

It seems sufficiently orthogonal to conventional DnD-based magic systems that it may make for an interesting twist on roguelike gameplay.


Wednesday, 7 September 2011

Multiple Light Sources

So I'm wondering just how one handles multiple light sources? The alpha-blending of the various light-intensity values for a particular map cell is easily understandable, but how does one store (potentially near-infinite) multiple-overlapping light sources and their separate light intensities?

Thursday, 25 August 2011


I'm really tempted to start rewriting Kharne in C# using Libtcod.NET

Tuesday, 19 July 2011

New Fonts?

As part of a general overhaul of the UI, I'm experimenting with using Angband fonts:

To be honest, I think it improves the look of the game dramatically. Due to their slightly larger size however, I'm going to have to move the equipped items out of the inventory items view and into a new view of their own (like Angband!), but I think I'll only do that when I implement proper keyboard-equipping and removing items.

I do have a query though before going ahead with this in the next Alpha Release, which I've been unable to find the answer anywhere on the web: am I legally allowed to use the fonts that come with Angband in an MPL project? If so, what license are they under? If they are GPL, then I think I can distribute them solely as GPL and include them in my MPL program and then get a sore head due to all these mad license incompatibility.

Friday, 15 July 2011

Kharne Alpha 23 now available

(note: I've moved to a new numbering system for Alpha releases - this is effectively 0.06b in the old system; the change was made because I don't feel right giving an incomplete game a proper version number - the Roguelike world is filled with too many v0.01s and v0.001s and so on as is).

A new version of Kharne (Alpha 23) is now available (source also available here as a download, and browsable here, and released under the MPL). This is mainly a bugfix version superseding the previous version, although I've made a few other additional changes:
  • Moved to a new Versioning System.
  • Status Conditions are now displayed at the bottom of the main display.
  • The '@' symbol is coloured according to the current health of the Player Character.
  • Added four more types of potions to cover Elemental Resistances, which add 40% to their respective resistances.
  • Trying to drink a potion or reading a scroll whilst not being able to will now exit the inventory properly.
  • Potions of Healing and Extra-Healing now cure poisons.
  • Potions of Extra-Healing cure the Paralysis, Blinded, Confusion and Drained conditions.
  • A message is generated whenever a level containing a Unique is entered.
  • Wearing Heavy or Medium armour reduces stealth.
  • Thieves now learn Stealth skills quicker.
  • Warriors now learn Defense & Heavy Armour skills quicker.
  • Stealth rolls are modified by the distance to Monsters.
I intend this to be the last version before magic, end-game/win conditions and the monster overhaul are implemented.

Comments, bug reports and queries most welcome of course.

Thursday, 14 July 2011

Status Effects

In the version of the code checked into the Repository this evening (which will eventually become either .06b or .07), Status Effects are now displayed at the bottom of the main display, with positive effects (for example, Fire Resistance and Free Action) on the left, and negative effects (in the screenshot below, Confusion) on the right:

Though should I also display the number of turns left for each one as well? e.g. Conf [10]? Or is that too much information? Maybe only limit it to positive effects?

Wednesday, 13 July 2011

Monster Flags

I now have decided on the following list of monster flags:
Most of these do what they say on the tin, although the Behaviour Flags are worth noting in greater detail:
  • BEHAVE_BERSERK: This flag means the creature will do increased damage at low health.
  • BEHAVE_COWARDLY: Creatures having this flag will run away when hurt, and use ranged combat where possible, although their priority is to keep moving away from the @.
  • BEHAVE_FLEE: Creatures having this flag will flee when hurt badly.
  • BEHAVE_GREEDY: Creatures featuring this will actively prefer to pick up equipment as opposed to engaging the @ where possible.
  • BEHAVE_IGNORE: These creatures will not attack unless attacked first.
  • BEHAVE_RANGED: These creatures will attempt to stay at range and attack from a distance where possible.
If there are any more options and flags you think should be used, feel free to say so in the comments!

Tuesday, 12 July 2011


I now have the Angband source for a deep perusal, which will help with implementation of magic and better monster AI. I think I'm moving away from a Crawl-inspired game towards an Angband inspired game, although I think there are many wonderful features in Crawl worth stealing^H^H^H^H^H^H^Hborrowing. Both are excellent games though.

Monday, 11 July 2011

More on Edit Files

Following up on this post, I've had to resort to an Excel spreadsheet to extract the data from the SQLLite database and get it into a suitable format. At least it will save me the hassle of retyping all the monster stats in (there are currently 120 different creatures).

Sunday, 10 July 2011

Refactoring again

Anyone remember the Great Code Refactor of 2009? I suspect there will be a sequel - the Great Code Refactor of 2011, Son of the Great Code Refactor. Looking at a lot of the code for combat, as I implement better monster AI and spells, I'm going to have to rewrite and refactor it. Still, its all good, I have plenty of ideas on how to do this, and it will cut down strongly on code size and complexity.

Saturday, 9 July 2011

Moving to Edit Files

Following much thought, I've decided to move to Edit Files to store at least the Monster Definitions, instead of in an SQLLite Database. The main reason is actually flexibility.

The model I've chosen is something similar to the Angband edit file, with a few modifications. Here is the template:

# Each creature has an individual entry in the following format:
# N: ID : singlular name : plural name
# L: Creature Level : Rarity : Uniqable?
# E: Ecology : Type: Pickup Items?
# G: Display Character : Display Colour
# I: Hit Dice : Armour Class : Evasion : Speed
# V: Initial Alertness Level
# A: Action Frequency : Action Text
# S: Speech Frequency : Speech Text
# B: Attack Method : Attack Effect : Damage
# M: Spell | Spell | Spell | etc
# F: Flag | Flag | Flag | etc
# C: Class | Class | etc
# D: Description

Anyone familiar with the Angband source should recognise most of these options, although I've enhanced a couple, and added a few additional sections.

Below I give a couple of excerpts of 2 creatures already in Kharne translated over to the new format:

N: 2 : Kobold : Kobolds
L: 1 : Common : Yes
E: Fortress: Goblinoid: Yes
G: k: $004080
I: 1: 5: 11: 12
V: 255
A: 10: "picks a chunk of rotten meat from its teeth"
A: 10: "yips noisily"
S: 20: "I'm gonna kill you! Yip yip!"
B: HIT: HURT: 1d6
C: Commando | Archer | Lurker
D: "Kobolds are short, ugly goblinoid humanoids."
D: "They are known to have cowardly and sadistic tendencies."

N: 23 : Ogre Mage : Ogre Magi
L: 4 : Rare : Yes
E: Fortress: Giant : Yes
G: O: $FF00FF
I: 4: 6: 12: 12
V: 255
A: 10: "waves a magic stick"
A: 10: "yells a magic word"
S: 20: "dis two and dat two make four, right?"
B: HIT: SLAM: 1d6
D: "Ogre Magi are hideous and deformed ogres wrapped in deathly black robes"
D: "They are known to be cruel and masters of deadly arcane magics."

Friday, 8 July 2011

In the next version....

I have a master list of items that comprise my "todo list". There are currently 138 items on it, comprising probably several hundred hours of development work. I'm currently combing through them, looking for achievable items to include in the next release.

So far, I have (typos, poor grammar and all):
  • Implement First level spells - have an array of ints to represent turns left for each spell effect
  • Change item generation so monsters drop more items and less are generated on the floor.
  • Corpses - some creatures drop corpses that can or cannot be chopped for food. Mainly humanoid or goblinoid or animal, or giant, but some are poisonous.
  • Reading a scroll or normal fighting or digging and opening doors produces noise - awakens any monsters within sight. Even ones out of visibility range e.g. "Something stirs in the darkness" a
  • Stealth bonus to stealth skill is reduced by wearing heavy or medium armour. Also thieves get class bonus
  • Add bonus to character stealth roll based upon distance to monster.
  • Monsters attacking makes noise
  • Monster morale? Some monsters flee if overpowered. Make an alert message to say this.
  • Thieves learn sneak much much quicker than other classes
  • Update item descriptions to make more grammatical sense. .
  • Add Elemental invasion gates. That occasionally pump out more creatures every one hundred turns or so so eventually the levels get filled up. Keep a count of the number of creatures killed - if none then allow the gate to be destroyed. Add count to dungeon object to keep track of this.
  • For monster pathing, if monster is weaker then set path to go through, and then swap them with message for pushing past - set other monster squares for pathfinding algorithim to small values equal to uncontested terrain.
  • When there is a unique present on the level, add a level feeling message like "a voice in the distance yells 'who disturbs the domain of blah the bleh'" - randomise the message slightly.

Wednesday, 6 July 2011

Kharne 0.06a now available

A new version of Kharne (v0.0.6a) is now available (source also available here and released under the MPL). This is mainly a bugfix version superceding v0.0.6, although I've made some other additional changes.

Changes to this version are as follows:
  • Potions can now be drunk when confused or blind.
  • Some monsters can now pickup selected items from the dungeon floor.
  • Monster Breath Attacks are now represented graphically by a 'beam'.
  • Dungeon features (e.g. growths, piles of bones etc) are no longer passable by default and must be 'T'unnelled through to pass.
  • Added tooltips for Background Dungeon features.
  • Whenever the Player Character enters or leaves a Background Dungeon feature, an appropriate message is displayed in the Message Log.
  • Stair descriptions are now more thematically appropriate.
  • Changed the glyph for an open door from \ to '.
  • Magical items have been increased in power.
  • Fixed an issue with certain dungeon features not appearing whilst in steath or enraged.
  • Trying to drink a potion or read a scroll whilst unable to do so will no longer consume the potion or scroll.
  • Potions of See Invisible and Combat Mastery now have correct expiration messages.
  • Scrolls of Enchant Weapon will no longer enchant Shields.
  • Fixed an issue with not displaying the unidentified name of Potions of Might.
  • Potions of Might now triple the character's bonus damage, not their strength.
  • Potions can now be identified properly by using Scrolls of Identify.
  • When IDing a Scroll by using it, the Scroll Type will now be displayed in the Message Log.
  • Cursed items are now significantly worse in effect.
  • Monster Tooltips now indicate if the Monster is unaware of the Player Character.
  • Monster appearance messages now check for Player Character Stealth properly.

Monday, 4 July 2011

Upcoming Bug Fixes

I've identified the following issues with potions and scrolls, which I will be fixing in a bug-fix version (0.06a) which hopefully will be released soon (in the next couple of days):
  • Some potions aren't identified after use when they should be.
  • New occurrences of some potions that have been previously identified are thereafter wrongly generated as unidentified.
  • The text to indicate that a Potion of Combat Mastery's effects have ended is wrong.
  • Rage potions are not named properly.
  • Enchant Weapon scrolls shouldn't enchant a wielded shield.
  • Some scrolls aren't being identified after use properly.
  • When raging, and trying to consume potions, even though you get the "you can't do that right now", the potion is still consumed.
Apologies if any of these bugs have disrupted gameplay.

Sunday, 3 July 2011

"Overconfidence will be your weakness...."

Boo! OOD 11-headed hydras + overconfidence = dead @. Still, it was a most enjoyable run whilst it lasted, and I've come away with more ideas for Kharne (the last version of Angband I played before this was 2.7!)

[Angband 3.2.0 Character Dump]

Name Berta Self RB CB EB Best
Sex Female Age 25 STR: 18/68 +4 +5 +4 18/198
Race Half-Troll Height 85 INT: 13 -4 -2 +0 7
Class Warrior Weight 220 WIS: 12 -2 -2 +3 11
Title Commando Social Known DEX: 18/57 -4 +2 +0 18/37
HP -11/575 Maximize Y CON: 18/80 +3 +2 +0 18/130
SP 0/0 CHR: 16 -6 -1 +3 12

Level 32 Armor [37,+59] Saving Throw 43%
Cur Exp 180931 Fight (+20,+17) Stealth Fair
Max Exp 180931 Melee (+32,+29) Fighting Legendary
Adv Exp 240000 Shoot (+38,+11) Shooting Heroic
MaxDepth 1800' (L36) Blows 2.3/turn Disarming 51%
Game Turns 589895 Shots 2/turn Magic Device 32
Standard Turns 91367 Infra 30 ft Perception 1 in 43
Resting Turns 746 Speed 7 Searching 13%
Gold 30817 Burden 203.7 lbs

Your father was a Water-Troll Warrior. You have blue-bloodshot eyes,
oily dark purple hair, and white scabby skin.

rAcid:....+.+...... rConf:.........+...
rElec:*.....+.+.... Sound:.............
rFire:......+...... Shard:.......+.....
rCold:......+...... Nexus:.............
rPois:............. Nethr:......+......
rFear:............+ Chaos:.............
rLite:............. Disen:.............
rDark:......+...... S.Dig:.............
rBlnd:............. Feath:.............

Light:............. Aggrv:.............
Regen:............+ Stea.:......+......
ESP:............. Sear.:.............
Invis:...+......... Infra:............+
FrAct:..+.......... Tunn.:.............
HLife:............. Speed:...........+.
ImpHP:............. Blows:.............
ImpSP:............. Shots:.+...........
Fear:............. Might:.............

[Last Messages]

> One of your Scrolls titled "sus aetasta" of Word of Recall (j) was destroyed!
> The 11-headed hydra breathes fire.
> The 4-headed hydra squeals in pain.
> One of your Scrolls titled "nundisco" of Satisfy Hunger (i) was destroyed!
> Some of your Arrows (1d4) (+0,+0) (n) were destroyed!
> The Hellhound pushes past the 4-headed hydra.
> You zap the 11-headed hydra.
> You miss the 11-headed hydra.
> The 11-headed hydra breathes fire.
> The Hellhound resists a lot.
> Some of your Arrows (1d4) (+0,+0) (n) were destroyed!
> The 11-headed hydra breathes fire.
> The 11-headed hydra resists a lot.
> The Hellhound resists a lot.
> You die.

Killed by a 11-headed hydra.

[Character Equipment]

a) The Mace 'Taratol' (3d4) (+12,+12)
Dropped by Beorn, the Shape-Changer at 1500 feet (level 30).
*Slays* dragons.
Branded with lightning.
Provides immunity to lightning.
Cannot be harmed by acid, electricity, fire, cold.
When activated, it hastens you for d20+20 turns.
Takes 171 to 340 turns to recharge at your current speed.
Your chance of success is 87.5%
Combat info:
2.3 blows/round.
With an additional 3 strength and 0 dex you would get 2.7 blows
With an additional 0 strength and 2 dex you would get 2.7 blows
Average damage/round: 132 vs. creatures not resistant to
electricity, 171.5 vs. dragons, and 92.3 vs. others.
b) a Long Bow of Extra Shots (x3) (+18,+11) (+1)
Found lying on the floor at 1550 feet (level 31).
+1 shooting speed.
c) a Malachite Ring of Free Action
Found lying on the floor at 450 feet (level 9).
Prevents paralysis.
d) a Mithril Ring of See Invisible
Found lying on the floor at 1750 feet (level 35).
Grants the ability to see invisible things.
e) a Copper Amulet of Resist Acid
Bought from a store.
Provides resistance to acid.
Cannot be harmed by acid.
f) The Phial of Galadriel
Dropped by Nár, the Dwarf at 1000 feet (level 20).
Cannot be harmed by acid, electricity, fire, cold.
When activated, it lights up the surrounding area, hurting
light-sensitive creatures.
Takes 18 to 34 turns to recharge at your current speed.
Your chance of success is 90.4%
Radius 3 light.
g) The Soft Leather Armour 'Hithlomir' [10,+20] (+4)
Found lying on the floor at 1750 feet (level 35).
+4 stealth.
Provides resistance to acid, lightning, fire, cold, dark, nether.
Cannot be harmed by acid, electricity, fire, cold.
h) a Fur Cloak of Protection [3,+10]
Dropped by a Grave wight at 1600 feet (level 32).
Provides resistance to shards.
Cannot be harmed by acid, electricity, fire, cold.
i) a Large Metal Shield of Resist Lightning [12,+7]
Found lying on the floor at 1550 feet (level 31).
Provides resistance to lightning.
Cannot be harmed by electricity.
j) The Metal Cap of Thengel [3,+12] (+3)
Dropped by a Mature blue dragon at 1600 feet (level 32).
+3 wisdom, charisma.
Provides resistance to confusion.
Cannot be harmed by acid, electricity, fire, cold.
k) a Set of Caestus of Power (+3,+2) [5,+2] (+4)
Found lying on the floor at 1100 feet (level 22).
+4 strength.
l) a Pair of Iron Shod Boots of Speed [4,+6] (+8)
Dropped by a Dark elven warrior at 500 feet (level 10).
+8 speed.

[Character Quiver]

n) 30 Arrows (1d4) (+0,+0)
Bought from a store.
Combat info:
Hits targets up to 120 feet away.
Average damage/round: 82.6.
35% chance of breaking upon contact.
o) (nothing)
p) (nothing)
q) (nothing)
r) (nothing)
s) (nothing)
t) (nothing)
u) (nothing)
v) (nothing)
w) (nothing)

[Character Inventory]

a) 15 Rations of Food
b) 9 Gold Potions of Cure Serious Wounds
c) 58 Violet Speckled Potions of Cure Critical Wounds
d) 2 Cloudy Potions of Restore Strength
e) an Icky Green Potion of Restore Intelligence
Found lying on the floor at 1750 feet (level 35).
f) a Silver Speckled Potion of Restore Constitution
Found lying on the floor at 1750 feet (level 35).
g) a Copper Speckled Potion of Enlightenment
h) 6 Scrolls titled "quandus oc" of Phase Door
i) 20 Scrolls titled "nundisco" of Satisfy Hunger
j) 7 Scrolls titled "sus aetasta" of Word of Recall
k) 2 Nickel-Plated Rods of Treasure Location
l) 3 Cast Iron Rods of Curing
m) 3 Lead-Plated Rods of Illumination
n) 2 Zinc-Plated Wands of Trap/Door Destruction (20 charges)
o) 3 Platinum Wands of Teleport Other (27 charges)
p) 4 Sycamore Staves of Detect Invisible (45 charges)
q) a Mahogany Staff of Detect Evil (22 charges)
Dropped by a Novice paladin at 1750 feet (level 35).
r) an Elm Staff of Teleportation (6 charges)
s) 7 Cedar Staves of Identify (44 charges)
t) a Topaz Ring of Soulkeeping
Found lying on the floor at 1650 feet (level 33).
Sustains strength, intelligence, wisdom.
u) a Sling of Extra Might (x3) (+10,+22) (+1)
Found lying on the floor at 1700 feet (level 34).
+1 shooting power.

[Home Inventory]

a) a Blue Speckled Potion of Restore Dexterity
Found lying on the floor at 1600 feet (level 32).
b) a Scroll titled "fursus ducero" of *Remove Curse*
Found lying on the floor at 450 feet (level 9).
c) a Scroll titled "am cedus" of Deep Descent
Dropped by a Black knight at 1650 feet (level 33).
d) a Scroll titled "agiacto pirrum" of *Destruction*
Dropped by a Black ogre at 1500 feet (level 30).
e) a Chromium Wand of Stone to Mud (5 charges)
f) a Balsa Staff of Starlight (11 charges)
Dropped by an Uruk at 1550 feet (level 31).
g) a Main Gauche of *Slay Troll* (1d5) (+5,+11) (+1)
Found lying on the floor at 750 feet (level 15).
+1 strength.
Slays trolls.
Speeds regeneration.
Combat info:
3.8 blows/round.
With an additional 0 strength and 2 dex you would get 4.1 blows
Average damage/round: 149.7 vs. trolls, and 125.5 vs. others.
h) a Katana of Slay Demon (3d5) (+8,+8)
Dropped by an Ice troll at 1600 feet (level 32).
Slays demons.
Combat info:
3.3 blows/round.
With an additional 1 strength and 0 dex you would get 3.4 blows
With an additional 0 strength and 2 dex you would get 3.5 blows
Average damage/round: 181.8 vs. demons, and 117.5 vs. others.
i) a Ball-and-Chain of *Slay Dragon* (2d4) (+4,+7) (+1)
Found lying on the floor at 1600 feet (level 32).
+1 constitution.
*Slays* dragons.
Provides resistance to fear.
Combat info:
3.0 blows/round.
With an additional 3 strength and 0 dex you would get 3.3 blows
With an additional 0 strength and 2 dex you would get 3.3 blows
Average damage/round: 156.6 vs. dragons, and 91.2 vs. others.

1 0' 1 Began the quest to destroy Morgoth.
5616 50' 1 Found The Set of Gauntlets 'Paurhach' (LOST)
9483 50' 2 Reached level 2
14494 100' 2 Killed Fang, Farmer Maggot's dog
14494 100' 3 Reached level 3
14494 100' 4 Reached level 4
18450 100' 4 Killed Grip, Farmer Maggot's dog
19524 100' 5 Reached level 5
26486 150' 6 Reached level 6
36327 200' 7 Reached level 7
46211 300' 8 Reached level 8
48081 300' 9 Reached level 9
52088 350' 10 Reached level 10
52516 350' 11 Reached level 11
63456 450' 12 Reached level 12
76030 500' 13 Reached level 13
81264 500' 14 Reached level 14
89505 550' 15 Reached level 15
89688 550' 15 Killed Ufthak of Cirith Ungol
89688 550' 16 Reached level 16
91053 550' 17 Reached level 17
94708 550' 18 Reached level 18
96416 550' 19 Reached level 19
119021 650' 19 Killed Lagduf, the Snaga
122086 700' 20 Reached level 20
137186 750' 21 Reached level 21
146949 900' 22 Reached level 22
150085 950' 22 Killed Sangahyando of Umbar
152877 950' 23 Reached level 23
158592 1000' 23 Killed Nar, the Dwarf
158608 1000' 23 Found The Phial of Galadriel
160374 1000' 24 Reached level 24
168080 1000' 24 Killed Wormtongue, Agent of Saruman
169739 1000' 24 Killed Angamaite of Umbar
169932 1000' 24 Killed Bullroarer the Hobbit
174502 1050' 25 Reached level 25
181000 1100' 25 Killed Shagrat, the Orc Captain
186480 1100' 25 Killed Boldor, King of the Yeeks
199094 1350' 26 Reached level 26
206575 1350' 26 Reached level 26
208044 1350' 26 Reached level 26
211923 1400' 26 Killed Brodda, the Easterling
229571 1450' 27 Reached level 27
244687 1500' 27 Killed Khim, Son of Mim
247822 1500' 28 Reached level 28
253483 1550' 28 Killed Ugluk, the Uruk
267364 1550' 28 Killed Mim, Betrayer of Turin
278566 1600' 28 Killed Gorbag, the Orc Captain
284546 1600' 29 Reached level 29
303731 1600' 29 Killed Grishnakh, the Hill Orc
369012 0' 29 Reached level 29
388677 1550' 30 Reached level 30
393497 1500' 30 Killed Lugdush, the Uruk
403183 1600' 30 Reached level 30
404550 1600' 30 Found The Metal Cap of Thengel
418562 1600' 30 Killed Ulfast, Son of Ulfang
429823 1550' 30 Killed Bolg, Son of Azog
460637 1500' 30 Killed Beorn, the Shape-Changer
460664 1500' 30 Found The Mace 'Taratol'
469152 1550' 30 Killed Ibun, Son of Mim
474128 1550' 31 Reached level 31
480978 1600' 31 Reached level 31
484319 0' 31 Reached level 31
489729 1600' 31 Reached level 31
514270 1650' 31 Reached level 31
520086 1700' 31 Killed Lokkak, the Ogre Chieftain
531880 1750' 31 Killed Draebor, the Imp
552788 1750' 31 Killed Golfimbul, the Hill Orc Chief
572325 1750' 31 Found The Soft Leather Armour 'Hithlomir'
581708 1700' 31 Killed Uldor the Accursed
588857 1700' 32 Reached level 32


Maximize effect of race/class bonuses : yes (adult_maximize)
Randomize the artifacts (except a few) : no (adult_randarts)
Restrict the use of stairs/recall : no (adult_ironman)
Restrict the use of stores/home : no (adult_no_stores)
Restrict creation of artifacts : no (adult_no_artifacts)
Don't stack objects on the floor : no (adult_no_stacking)
Lose artifacts when leaving level : no (adult_no_preserve)
Don't generate connected stairs : no (adult_no_stairs)
Don't show level feelings : no (adult_no_feelings)
Items always sell for 0 gold : no (adult_no_selling)
Adult: Monsters chase current location : yes (adult_ai_sound)
Adult: Monsters chase recent locations : yes (adult_ai_smell)
Adult: Monsters act smarter in groups : yes (adult_ai_packs)
Adult: Monsters learn from their mistakes : no (adult_ai_learn)
Adult: Monsters exploit players weaknesses : no (adult_ai_cheat)
Adult: Monsters behave more intelligently (broken): no (adult_ai_smart)
Score: Peek into object creation : no (score_peek)
Score: Peek into monster creation : no (score_hear)
Score: Peek into dungeon creation : no (score_room)
Score: Peek into something else : no (score_xtra)
Score: Know complete monster info : no (score_know)
Score: Allow player to avoid death : no (score_live)

Saturday, 2 July 2011


So finally, after three billion years (approximately), JADE is out. Well, the first version anyway (0.10).

What did I think of it?

I have no idea.

I got as far as the 2nd character selection screen - the one with the gadzillion of skill options and went "sod it"; and switched back to stat-gaining my current Half-Troll Warrior on Angband.

There's a lesson for us all. And why Crawl is so successful. And why I ditched the intensive character min-maxing in a very early version of my own (as incomplete) roguelike.

Grab me in please. Without having to go through twenty-billion (contextless) options.

I just want to play!

Friday, 1 July 2011

A little aside on crafting

I'm incredibly excited about being able to implement magic, I have great plans, which include an overhaul of Monster AI to make them quite smart (where the situation calls for it), but for now, I've got an idea for a crafting system that I can include without making too much sacrifices in terms of gameplay and playability. Its something akin to what I talked about earlier, but much simpler.

Effectively, at special forges scattered about the dungeon, one should be able to disenchant non-Artefact items into their constituent parts. So given an item like this:
A Bronze Great Sword [+4, +4] of Goblin Slaying

it increases your damage against goblins (+5)
it increases your chance to hit (+4)
it increases the damage you deal (+4)
...this item could be "disenchanted" into three residual elements. Using special anvils, also scattered about the dungeon, one could reassemble various residual elements of your choice into new item, given the investment of a plain non-magical "base" item, and...something else.

The something else is the tricky bit. This should be a non-trivial process in terms of consequences for the character, even though the interface for doing so may be simply nothing more than dropping all the items concerned onto the anvil and pressing 'A' to activate it.

The obvious penalty is something like losing a point of CON, or some HP or something every time a magical item is created. Along with the risk that the process won't work. But I don't want the cost to be too prohibitive. After all, what I'm suggested is a mechanism that is effectively a means of getting round (to a degree) resist-farming.

Anyone got any thoughts on what the trade-off should be? Or the consequences for failure at this process?

Text Truncation Bug?

I've had a bug reported to me (thank you Eben) where the text is often truncated, e.g. on the Character Creation screens. If this is happening, please try this replacement executable (no changes, just a recompile)

I've seen this before, and normally a recompile fixes it.

Thursday, 30 June 2011

DB vs Edit Files

For some reason, I'm actually contemplating moving away from the use of a Database for Monster and Item definitions towards using edit files instead.

Wednesday, 29 June 2011

Kharne 0.06 now available

Finally. After a year and more of real-life shit, and a complete loss of interest in coding, a new version of Kharne (v0.0.6) is now available (source also available here).

To summarise the big changes in this version: potions and stealth.

The full list of changes are below:
  • Potions have been implemented.
  • Added a stealth mode (entered and exited by pressing 's').
  • Added NPCs to the Town level.
  • Added a house for the character to the town level.
  • Eating no longer restores any lost health points.
  • Projectile Animation is now much smoother.
  • Increased the number of monsters generated per level.
  • Resting is no longer possible when starved.
  • Additional Identify scrolls are now generated on each dungeon level.
  • Right-clicking on a Creature will bring up Monster Memory for that creature.
  • Elemental Intrusion Creatures have had their hitpoints reduced again.
  • Reduced the rate at which certain skills are learned.
  • Groups of Monsters can now have a slightly tougher leader monster accompanying them.
  • The cursor now changes colour depending on LOS.
  • Unique monsters now have their glyphs marked with a double-underline.
  • OOD monsters now have their glyphs marked with an underline.
  • Fixed an issue with certain vaults having impassable walls in error.
  • Removed the extraneous buttons from the Inventory view.
I'm very happy about this release, not only because its been 10 months since the last, but because I'll be able to implement magic and ammunition in the next release, which I hope, as I've got my enthusiasm for coding back, will be soon.

In the meantime, please let me know either here or via email any bugs you find.

Tuesday, 28 June 2011

Monday, 27 June 2011

Potions completed

Potions have almost all been implemented, just debugging them all now. Here's a potion of Rage (which increases your Strength dramatically for a short period of time) in action:

Once they are done, I think I will release v0.06 - almost a year after the last version. Its been too fucking long...

Sunday, 26 June 2011

Monster Con

Foes which are tougher than normal (uniques, or OOD) now have one or more bars underneath their glyphs to indicate this is so.

Saturday, 25 June 2011


I've managed to implement a crude form of Stealth in the dev version I have. Its basically a toggle setting that increases dramatically your Stealth skill at the expense of moving much more slowly:

Yes, primitive, but its a start!

Friday, 24 June 2011


Potions are a pain in the arse to implement. Not so much the instant effect ones like Healing, but time-limited ones like Might/Confusion and so on. I was tempted to hack in quick counter attributes for each potion on each PC class, but I should really do the full object-orientated method outlined here instead.

That said, I like Mario's suggestion in the comments of just using an array of counters, and it would mean actually getting code out quicker.

Thursday, 23 June 2011

More on Townspeople.

Yes, its been a while. Picked up some coding again, and finished the Townspeople implementation. Each type of townsperson has its own speech pattern and says something different when you move past them. Its only a cosmetic thing really, but helps to give life to the town level.

Now if I can finish implementing potions, I've got enough for a release.

Thursday, 17 March 2011


I've done some code to handle random townspeople on the town level, to give the town level a bit of atmosphere. I've not checked it into the repository yet, as its incomplete, but each townsperson will have its own unique behaviour and its own unique sayings.

I don't intend on these townspeople to be attackable, but I do hope to add some interaction between them, based upon their (randomly-generated) behaviours; for example, a drunken guardsman might do things differently than an angry guardsman.

Your pet cat is of course, the true master of the multi-verse, and all kills are dedicated to him. He remains on the town level to protect it from harm.

And to prove that this blog isn't immune from cat-blogging, here are my own fuzzy-overlords

(if you must know, their stats are: Num:547 Lev:100 Rar:2 Spd:140 Hp:20000 AC:150 Exp:60000 RFuss--- RFood---, and they have many deadly powers, and have never been defeated yet, except by shameless application of fuss and/or food)

Wednesday, 16 March 2011

Code Updates

Those who are observant will notice some code updates have been committed to the repository. I've actually done some coding on Kharne! (sound of cheering in the distance).

I've now got visible and smoother missile animation, as well as framework code for potion handing and town NPCs. This is an ongoing thing, when I get the code working I'll release v0.06 containing these features.

With regards to missile animation, for simple bolts etc, I wanted to ask a question of my readership: should their trajectories be plotted in the ASCII resolution, or should they be plotted pixel-by-pixel?

For example, consider the scenario below:

If the Storm Giant to the North of the player launches a missile, if it is plotted strictly to ASCII, it will zigzag towards the @, whereas it could be plotted smoothly and move at an angle instead if pixel-by-pixel plotting was used.

I'm divided between both options, hence why I'm asking.

Tuesday, 15 March 2011

Stygia completed

Well, I did it. I finished coding a roguelike, finally.

More details over at the Stygia blog.

I even looked at the Kharne code today. Its not as bad as I feared, even if it isn't C#. I should really implement potions, shouldn't I?

Sunday, 6 March 2011


I've started work on Stygia as a 7DRL. See for details and a devblog.

Tuesday, 25 January 2011

The End - an announcement

I've held off making this post for quite a while, but I think looking back now, that its obvious, and it deserves to be made given the recent lack of activity on Kharne.

I'm abandoning any further development on Kharne.

This is for a number of reasons, which can be summarised below:
  • I suffer from on-going depression, and I find it very difficult to work on coding in my free time. This has been ongoing for some time.
  • I have no interest in using Delphi to do any coding that I do partake in from now on (anything I do do will probably be either in C++ or in C#).
  • The idea and what I've implemented so far is much much too ambitious for it to be completed.

What happens now?

As far as Kharne goes, as its now open source, and therefore anyone is welcome to take the project on, if they so wish. Additionally to the code, I hereby release all game data into the project domain. By game-data I mean monster-speech text and so on.

If you wish to take it and use it, feel free and good luck. I will always be available for advice.

That bears repeating: Kharne is open source. Its yours. Run with it, if you wish.

As far as my own coding in general, I'll be resurrecting my C#/Libtcod project, Stygia, with a view to producing a smaller but complete roguelike in a matter of a few months.

But for that, I'll probably create a new blog, and eventually close this one.

So what I have learned from this?

The main lesson is to limit your objectives to ones you know are easily achievable. In hindsight, its obvious, but at the time, it is easy to get carried away on the code.

It is also important achieve and maintain sufficient momentum. And Feedback and involvement with the community are important in getting a roguelike out the door.

I've failed, in the end, in that respect. But it wasn't a waste of time. I've gained knowledge, I've met people, and I've learned some belated lessons.

And in that respect, it was a success.