Monday, 26 October 2009

More on achivements

Unlike the achievements in MMOs, I want them to be a bit more than just fun, and affect gameplay.

For example, let's say there is an achievement that can be obtained by killing 10 vampires. Let's call it "Wannabe Van Helsing" (as suggested by my muse - I think I prefer slightly humourous titles).

I'd like to give characters who complete this a tangible game benefit. For example, a small (but significant) damage bonus against vampires. Or slightly increased resistance to vampiric drain attacks.

Or for an achivement for eating every single different type of food ("I'm not fat, I'm just big-boned") which allows 10% extra nutrition from food.

I'm going to throw open the comments for suggestions for possible achivements If your suggestion is taken and used, you'll get game credit! The titles should be somewhat humourous, and referencing either common fantasty-tropes or the roguelike milieu where possible.

Tuesday, 20 October 2009


That's me told off...both DoomRL and Lambdarogue have achievement systems.

I've also been thinking about a couple of minor other features: stairs, and player ghosts. Adjacent monsters should be able to climb stairs with the character, and ghosts should retain a proportion of the gold and an item or two as reward for the character killing them.

And I should really play some of the roguelikes I mentioned here.

Saturday, 17 October 2009

Achivements & Reputation

Some day (cue wistful music and sepia tones), I'd like to implement an achievement system, like you find in MMORPGs:

I'm actually quite surprised that there aren't any, as far as I know, roguelikes with an achievement system. Though you could argue that the game score is a measure of achievement in itself.

Further to that, I'd like to implement factions & reputation (with faction quartermasters):

Of course, you could argue that the deities in Crawl are effectively factions.

Friday, 16 October 2009

Roguelikes I have never played....


2. Incursion

3. Nethack

No, seriously, I have never actually played the above three roguelikes.

Wednesday, 14 October 2009

Scrolls and Potions oh my

Now that the first tranche of scrolls have been implemented, and my exams are finally over for the year, the next thing to add to the game are potions. Potions are slightly more complicated to implement than scrolls, given that scrolls are one-off effects and potions have effects over time. A while back, I listed the various types of potions I'd like to implement, but as with scrolls, I'll probably only implement a subset of these at first, and add more in later. I will release 0.0.5c when I have potions implemented.

Tuesday, 13 October 2009

Configuring and compiling Kharne - a brief guide

(this is a copy of CODING.TXT which is found in the source code distribution. I will also add a permalink to this post for reference purposes)

  1. Introduction
  2. Required 3rd Party Components
  3. Licensing Notes
  4. Other Notes
  5. Contact Details
1. Introduction

Welcome to Kharne. Kharne is a standard Delphi Windows application that uses a certain number of third-party controls and libraries for additional functionality above and beyond that provided in Delphi.

I have developed Kharne using Delphi 7, but provided the external controls can be installed, it should be compilable in any version of Delphi newer than 5.

2. Required 3rd Party Components

Due to licensing terms, I can't provide these components or distribute their source with my own distribution.

You will need to download and install the following before you open the source in Delphi for the first time:

a. TGradLabel

It is my intention to phase the use of this component out entirely.

b. TAStarPathPlanneer

c. TQProgressBat

d. TSQLLite

You may need to add the path of this component to the Project Search Paths.

e. THotLog

This isn't a component as such, simply copy hotlog.pas into the source directoy and make sure it is added to the project.

f. TKeyboardHandler

As this is no longer available *anywhere* on the web, I've included the source in the components subdirectory. Longer term I want to phase use of this component out and duplicate its functionality,

g. sqlite3.dll

This is the SQLLite interface library, is public domain and thus is included with this source distribution.

If any of these components become unavailable, contact me ( and I will send them to you direct (I will only do this under these circumstances). I will then try and remove any dependency upon them from the next version.

3. Licensing Notes

I have released Kharne under the MPL as opposed to the GPL because I'm not convinced that the latter allows a Delphi program to link with components that are not GPL themselves.

I've had a reply direct from the FSF telling me that it does provided I add an additional disclaimer to the GPL License that gives explicit permission. However, as I'm not convinced about this (the GPL itself is quite fuzzy in this regard), I'm releasing Kharne under the MPL to avoid any doubt.

However, just to clear things up, I'm am granting an irrevocable right to link my code released under the MPL to any other custom component, library or API no matter what the license.

The source code file UnitOtherFuncs uses a few small routines freely available on the web - I have indicated carefully what these are in the source and their origins, and this file is obviously not released under the MPL.

The distribution also includes a copy of the Bitstream Vera Sans Mono Font (veramono.ttf) which can be freely distributed and is in the public domain. If you are doing development, please copy this and install it in the usual way before opening the source code.

4. Other Notes

I have no idea if Kharne will compile with Lazarus, I suspect the custom components may prove to be an unsurmountable obstacle, but anyone is welcome to try porting if they wish. I'd like Kharne to run multiplatform without using WINE, but that may have to wait until cross-compiling for Delphi becomes a reality (it has been promised for the version due out in 2010.)

5. Contact Details

I can be emailed direct at or reached via the blog at Or you can reach me on #rgrd regularily where I am known as "starbog".

Monday, 12 October 2009

Kharne 0.0.5b now available

Kharne Alpha 0.0.5b is now available (source code is available as a ZIP as well as from the SVN).

The big change in this version is the addition of Scrolls (press r to read them). There are currently nine different types of scrolls available, there will be many more added over forthcoming releases.

The full list of changes is:
  • Scrolls have been implemented.
  • Scrolls and potions are no longer PseudoIDed.
  • Hunger is now increased by wearing magical items.
  • Fixed a bug with cursed fountains not causing the character to hunger correctly when drinking from them.

Sunday, 11 October 2009

Automatic notifications of commits

Does anyone know of a way to automatically post a message to a blog with summary details of a commit that's been made to a Googlecode SVN? (but not the email that's generated with all the changes)

Saturday, 10 October 2009

More frequent releases or not?

Should there be more frequent releases of Kharne? (perhaps weekly?) Or should releases be restricted to when major new functionality is available?

Obviously anyone can download the most recent code and build it, but for those who can't or won't, what do you want?

Friday, 9 October 2009


I've implemented scrolls:

They basically work like they do in most other roguelikes.

I've implemented the following types to begin with:
  • Enchant Armour - enchants a random piece of worn armour with greater AC.
  • Enchant Weapon - enchants a randon wielded item with either greater +hit or extra damage.
  • Remove Curse - removes curses from carried and wielded/worn items.
  • Teleportation - instantly teleports to another point on the level (as in the screenshot).
  • Identify - identifies all carried items.
  • Magic Mapping - gives knowledge of the current level.
  • Forgetfulness - the opposite of Magic Mapping; takes away knowledge of the current level.
  • Blank Piece of Paper - the old favourite!
  • Cursing - curses a random worn/wielded item.
The enchant and identify scrolls I'll change at a later date to target only one item as they're currently much too powerful; and its also currently possible to get a magic item for free by cursing and then uncursing a common-quality item.

I've uploaded the changes to the repository.

Thursday, 8 October 2009

Progress Report#18

Sorry for the lack of progress recently. I'm spending over 3 hours a day revising for forthcoming exams and that combined with a full time job, significant other AND two cats means I get little time for coding at the moment. I managed to do a couple of small changes but the next thing on the agenda is scrolls and potions, and those will be quite hefty to implement. And as such, I need to get these exams out of the way first. before I really start them/ After that, normal service will be resumed of course.

Sunday, 4 October 2009

Saturday, 3 October 2009

Kharne 0.0.5a now available

Kharne Alpha 0.0.5a is now available (source code is here).

Changes are:
  • Fixed a bug that caused text in the character creation screens to be cut short.
  • Fixed an error that occurred when loading one of the sample characters.
  • Logging can now be switched on with the "/log" command line parameter. The default value is off.
The source code distribution also includes the fixes mentioned in my previous post.

I've also managed to set up a local subversion repository which I'll be hopefully shortly exporting to googlecode.

Source Code Issues #1

dunkel^ on #rgrd has discovered a couple of gotchas with the current source code distribution that prevent compilation.

In the uses clause in the interface section of UnitDisplay.pas (line #33) I left an errant reference to a component I no longer use. If you remove BtChkBox from this clause, it solves this problem.

The new uses clause should look like this:

uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, KeyboardHandler, DateUtils, jpeg, ImgList, Menus, ComCtrls, ToolWin, Gradlabl, PathPlanner, QProgBar, AppEvnts, hotlog, UnitDungeon, UnitDefines, UnitConst, UnitVars, UnitFunctions, UnitItem, UnitCreature, UnitMonster, UnitInit, UnitGame;

Also, the logging component, THotLog seems to be unreliable and AVs a lot. To disable it for now, just comment out the hLog.StartLogging call in the TFormSplash.FormCreate method in UnitSplash.pas (line #66):

{ Form Create }
procedure TFormSplash.FormCreate(Sender: TObject);
{ Set up Logging }
hLog.hlWriter.hlFileDef.append := False;

{ Start Logging }

{ log System Information}

With these changes, Kharne was able to be compiled and ran successfully.

Friday, 2 October 2009

Now what?

Now that the source code is out, what's next?

For my own part, there are still a few things in the code that I feel need tidying up. The code for creating, placing and dropping items, for example, really needs to be refactored further as it is duplicated in about a dozen places in the code.

Then I need to blitz the googlecode documentation and learn how to use that, to set up the repository.

After that, its time to look at what new features I'd like to implement.

The old roadmap was quite specific about what functionality would go into (then) future releases:
  • Character Milestones
  • Potions/Scrolls
  • Multiple Items on a Title
  • Timer Handling
  • Corpses
  • Magic & Spellcasting.
  • Saving/Loading
  • Ranged Combat
  • Damage Brands
  • Interface/Control Upgrade
  • Mutations & Corruption
  • Town NPCs
  • Victory Conditions
  • Traps
I've bolded the items that are currently fully or partially implemented.

But this still leaves quite a lot. I feel the next release should work towards new functionality, and the ideal candidates are, as I've been hinting at for some time, potions/scrolls and ranged combat.

But, of course, one of the joys of open source is that anyone can help, so if there is anything you'd like to see in Kharne, and you know Delphi/Pascal, and you can understand my extant code, just download the source, install it and start coding!

Thursday, 1 October 2009

Kharne 0.05 and source code released!

Kharne Alpha v0.05 is now available, and has been released as open source under the MPL v1.1

This version is functionally identical to v0.04a.

The source code is available here or via the downloads menu.

Please read CODING.TXT in the docs subdirectory before attempting to load the Kharne project into Delphi.

If you have any questions, or difficulty getting the source to compile, feel free to leave a comment here or email me on

Refactoring Completed

Its the 1st of October, and suitably, the great code refactor of 2009 has finally been completed.

As soon as I write a guide for obtaining and installing the various 3rd-party libraries, APIs and custom VCL components that Kharne uses, I will release a source code distribution under the Mozilla Public License (MPL).

Shortly after that, I hope to set up the source code repository on GoogleCode.