Author Topic: Coming Soon: DAEMON  (Read 15171 times)

Perdurabo

  • Rogueliker
  • ***
  • Posts: 99
  • Karma: +0/-0
    • View Profile
    • Email
Coming Soon: DAEMON
« on: October 08, 2011, 09:49:08 PM »
I'm currently coding an occult-themed roguelike called Daemon using C# and the libtcod.NET library. Its inspired by the medieval grimoire Ars Goetia and by the Qliphoth (the reverse of the Qabbalistic Tree of Life).

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.

Here's some screenies to whet your appetite:






Higher-resolution pictures available from http://kharne-rl.blogspot.com/2011/10/daemon.html

I'll also be releasing another Alpha version (primarily a bug-fix) of Kharne soon. Even though I can't stand coding in Delphi anymore :p

Best,
P.


getter77

  • Protector of the Temple
  • Global Moderator
  • Rogueliker
  • *****
  • Posts: 4957
  • Karma: +4/-1
    • View Profile
Re: Coming Soon: DAEMON
« Reply #1 on: October 08, 2011, 11:08:31 PM »
Excellent!  I would also say that is a spiffily done title screen right there.
Brian Emre Jeffears
Aspiring Designer/Programmer/Composer
In Training

Psiweapon

  • Rogueliker
  • ***
  • Posts: 334
  • Karma: +0/-0
  • Im in ur rougeliekz, pixelling ur tielz!
    • View Profile
    • I Lovemaking Tiles
Re: Coming Soon: DAEMON
« Reply #2 on: October 09, 2011, 01:15:06 PM »
Whoa!!!

I'm so going to play this!!

Just wait a minute, Tiphereth qlippoth = sanity??? What?

Also, the pentacle behind the qlippothic tree makes the screen a bit confusing (lines over lines)
The invisible hand is a lie, the fiendish dogma of the market cultists. Lest the apostasy grows strong, their blood god will devour each and everyone, pious and infidel alike.

Perdurabo

  • Rogueliker
  • ***
  • Posts: 99
  • Karma: +0/-0
    • View Profile
    • Email
Re: Coming Soon: DAEMON
« Reply #3 on: October 09, 2011, 01:41:14 PM »
Whoa!!!

I'm so going to play this!!

Just wait a minute, Tiphereth qlippoth = sanity??? What?

Also, the pentacle behind the qlippothic tree makes the screen a bit confusing (lines over lines)

Oh right, should really be Insanity. spirits of that sphere will allow you to cause insanities in your enemies. The actual qlippoth is Thagirion, "Those Who Bellow Grief and Tears", and I struggled a bit to map that to a implementable power. So I ended up with insanity.

Warning: Qabollix now follows:

Also, the first version will have ten dungeon levels, and each level will be themed to a sephiroth and its corresponding qlippoth. For example, the level corresponding to Geburah/Golachab will have enemies themed with destruction/burnings and ruins (Golachab means "Burners with Fire" whereas Geburah embodies Strength, but the level, perhaps filled with martial armouries, great demonic captains or the remains of a dead god of war and so on.

I forgot to mention the aim of the game will be to destroy the big bad, KHARNE (heh), who took over the world, and cut it off from the rest of the Macroverse, and defeated the pantheon of gods etc. To do this, think of it as a goetic ascending the Tree of Life.

Obviously, given the nature of the final qlippoth, there will be surprises in store.

(the final power, akin to Thamiel, is the ability to swap bodies, which I've never seen done in a Roguelike and which I think could be incredibly fun)

I've changed names slightly of the qlippoth and will be randomly generating actual spirit names to avoid doing any harm to any real spirits. :p


It will be

Psiweapon

  • Rogueliker
  • ***
  • Posts: 334
  • Karma: +0/-0
  • Im in ur rougeliekz, pixelling ur tielz!
    • View Profile
    • I Lovemaking Tiles
Re: Coming Soon: DAEMON
« Reply #4 on: October 09, 2011, 03:39:41 PM »
Whoa!!!

I'm so going to play this!!

Just wait a minute, Tiphereth qlippoth = sanity??? What?

Also, the pentacle behind the qlippothic tree makes the screen a bit confusing (lines over lines)

Oh right, should really be Insanity. spirits of that sphere will allow you to cause insanities in your enemies. The actual qlippoth is Thagirion, "Those Who Bellow Grief and Tears", and I struggled a bit to map that to a implementable power. So I ended up with insanity.

Warning: Qabollix now follows:

Also, the first version will have ten dungeon levels, and each level will be themed to a sephiroth and its corresponding qlippoth. For example, the level corresponding to Geburah/Golachab will have enemies themed with destruction/burnings and ruins (Golachab means "Burners with Fire" whereas Geburah embodies Strength, but the level, perhaps filled with martial armouries, great demonic captains or the remains of a dead god of war and so on.

I forgot to mention the aim of the game will be to destroy the big bad, KHARNE (heh), who took over the world, and cut it off from the rest of the Macroverse, and defeated the pantheon of gods etc. To do this, think of it as a goetic ascending the Tree of Life.

Obviously, given the nature of the final qlippoth, there will be surprises in store.

(the final power, akin to Thamiel, is the ability to swap bodies, which I've never seen done in a Roguelike and which I think could be incredibly fun)

I've changed names slightly of the qlippoth and will be randomly generating actual spirit names to avoid doing any harm to any real spirits. :p


It will be

Very exciting gaming - wise (the former) and very clever (the latter)

I guess you have read Promethea? I don't know if you like that kind of thing, but it makes up for a great (beautiful and packed with content) contemporary handbook on this kind of stuff. Not a substitute for anything else, but a good source of inspiration and correlations in itself.
The invisible hand is a lie, the fiendish dogma of the market cultists. Lest the apostasy grows strong, their blood god will devour each and everyone, pious and infidel alike.

Kyzrati

  • 7DRL Reviewer
  • Rogueliker
  • *
  • Posts: 508
  • Karma: +0/-0
    • View Profile
    • Grid Sage Games
    • Email
Re: Coming Soon: DAEMON
« Reply #5 on: October 09, 2011, 11:44:00 PM »
Looking forward to playing this game :)

Perdurabo

  • Rogueliker
  • ***
  • Posts: 99
  • Karma: +0/-0
    • View Profile
    • Email
Re: Coming Soon: DAEMON
« Reply #6 on: October 10, 2011, 12:40:50 AM »
Writing a routine to print a paragraph of text to the console (or rather Libtcod's simulated true-colour console) in a series of x-character sized chunks whilst not breaking up words over a Carriage Return is actually not a trivial task. For a game like my roguelike, where there will be lots of lore and hence the need for lots of text displayed on the screen at various points in the game, this sort of thing is essential.

For example, consider this paragraph of textual fluff:

"Spirits of Neremoth are responsible for frightening sounds in strange places. They are commonly known as Whisperers or Night Spectres. Their colours are of a stagnant watery blue, and their forms are like hideous women, almost skeletons united to the bodies of serpents and fishes"

If I want to display this in an area of screen say 30 characters wide, then I need to keep taking chunks of that size, trimming back to the last space, display the line of text, remove the printed text from the beginning of the paragraph, and repeat until there is either no more text left to display or the remaining text is less than 30 characters.

That's the theory. I've found the code needed to perform this task to be slightly more complicated.

Here's the code anyway (in *C#*):


// Display multiline text
public void PrintText(string textToPrint, int xPos, int yPos, int width, TCODColor fgColour, TCODColor bgColour)
{
string fullText = textToPrint;
string workingChunk = string.Empty;
string lineText = string.Empty;
int lastSpace = 0;
// Now break down the text into lines and print them
do
{
// Remove leading spaces or else our removals every iteration
// will get "out of sync"
fullText = fullText.TrimStart();

// Take an appropriately-sized chunk
workingChunk = fullText.Length > width ?
fullText.Substring(0, width) : fullText;

// Work out the position of the last space
lastSpace = workingChunk.LastIndexOf(' ');

// If we can't find a space just break anyway
lineText = lastSpace > -1 ? workingChunk.Substring(0,
lastSpace) : workingChunk;

// Print this text
Print(lineText, xPos, yPos, fgColour, bgColour);

// Increment the y-position
yPos++;

// And delete the text we've just printed from the beginning of
// the string
fullText = (fullText.Remove(0, lineText.Length));

// Repeat until all the text is printed
}
while (fullText.Length > 0);
}

(ignore the call to the print method, its simply a wrapper for printing a sequence of chars to the console)

Improvements I can think of: returning the number of lines used, so that perhaps a wrapper function can display an optional frame around it. Any other improvements or enhancements that you can see?

Perdurabo

  • Rogueliker
  • ***
  • Posts: 99
  • Karma: +0/-0
    • View Profile
    • Email
Re: Coming Soon: DAEMON
« Reply #7 on: October 10, 2011, 11:21:49 PM »
(cross-posted from http://kharne-rl.blogspot.com/2011/10/magic-in-daemon-part-1.html)

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 (the Spheres of Tree of Life, embodying everything "good") whilst battling the evil forces of the inverse of the Sephiroth, the Qliphoth (which embody "evil") 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 a lot of other roguelikes, simulating some of the character progression in RPGs such as Kult (which is another influence).

Perdurabo

  • Rogueliker
  • ***
  • Posts: 99
  • Karma: +0/-0
    • View Profile
    • Email
Re: Coming Soon: DAEMON
« Reply #8 on: October 12, 2011, 12:28:03 AM »
(cross-posted from http://kharne-rl.blogspot.com/2011/10/magic-in-daemon-part-2.html)

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.

Perdurabo

  • Rogueliker
  • ***
  • Posts: 99
  • Karma: +0/-0
    • View Profile
    • Email
Re: Coming Soon: DAEMON
« Reply #9 on: October 18, 2011, 01:30:19 AM »
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:

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.
Effect: for damaging powers, the damage dealt. For non-damaging powers, the extent.
Duration: the duration of the power for non-instant powers in turns, for instant-powers, the length of a HoT/DoT effect applied.
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.