Sunday, 10 March 2013

Daemon has commenced

At 11.59pm this evening (UK Time), I started my 7DRL, Daemon.

Thursday, 7 March 2013

Daemon the 7DRL

I'm going to be entering this year's 7DRL, starting this forthcoming weekend, writing Daemon from scratch using Libtcod and C++. What is Daemon? According to its description over at the 7DRL blog its:
Occult-themed rogue-like symbolising a journal through the Qlippoth (the dark side of the Tree of Life) using the dark arts of the Goetia to gain power and to know thyself.
I'll update this blog with progress reports as the week progresses.

Tuesday, 19 June 2012

I'm alive

Yup, I am alive.

Started working seriously again on Daemon after a long time.

Here's a revamped Spirit screen:


Hope to get a playable and completable game out within a few weeks.

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

Daemon

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

Enochian

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.

Thoughts?

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

Hmmmm

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:
  • ALIGNMENT_EVIL
  • BEHAVE_BERSERK
  • BEHAVE_COWARDLY
  • BEHAVE_FLEE
  • BEHAVE_GREEDY
  • BEHAVE_IGNORE
  • BEHAVE_RANGED
  • BREED_MULTIPLY
  • DOOR_BASH
  • DOOR_OPEN
  • DROP_CASH
  • DROP_CORPSE
  • DROP_ITEMS_ARTEFACT
  • DROP_ITEMS_COMMON
  • DROP_ITEMS_EPIC
  • DROP_ITEMS_SUPERB
  • DROP_ITEMS_UNCOMMON
  • GENDER_FEMALE
  • GENDER_MALE
  • GOT_ESCORT
  • GOT_ESCORTS
  • GOT_FRIEND
  • GOT_FRIENDS
  • IMMUNE_AIR
  • IMMUNE_EARTH
  • IMMUNE_FIRE
  • IMMUNE_WATER
  • INVISIBLE
  • NEVER_MOVE
  • POISONOUS
  • REGENERATE
  • RESIST_AIR
  • RESIST_EARTH
  • RESIST_FIRE
  • RESIST_WATER
  • TELEPORT
  • TELEPORT_AWAY
  • TELEPORT_BLINK
  • TELEPORT_TO
  • WALL_KILL
  • WALL_PASS
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

Source-diving

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.