Showing posts with label Kharne. Show all posts
Showing posts with label Kharne. Show all posts

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.

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.

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
B: SHOOT: HURT: 1d6
F: COWARDLY | FLEE | OPEN_DOOR | GREEDY
F: EVIL | POISONOUS | CORPSES
F: DROP_ITEMS_POOR | DROP_CASH
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
M: MAGIC_MISSILE | HEAL | HOLD | TELEPORT
F: RANGED | BESERK | OPEN_DOOR | GREEDY
F: EVIL | CORPSES
F: DROP_ITEMS_POOR | DROP_ITEMS_GOOD | DROP_CASH
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.

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.