Tuesday, 31 March 2009

The New UI


The new UI.

Yes, it is very Crawl-ey. That's deliberate. If anyone connected with Crawl is reading this, consider it in the spirit its given: a homage; a compliment of the highest order.

Everybody dance now!

Just as well Monster AI was switched off!

Monday, 30 March 2009

Todo Lists

Every few days, I sit down and work out a new to-do list, which then gets added to the master to-do this. This is this mornings' list (along with priorities I've assigned to them, and estimated coding time):
  • Main Display - Integrate Minimap and Monster View into Main Window (HIGH - 2 hours).
  • Main Display - Fix initial viewport size to be x by x and resize main screen accordingly (MEDIUM - 5 mins).
  • Main Display - Change status bar to be on the right-hand side, above the integrated Minimap and Monster View (HIGH - 30 mins).
  • Main Display - Have an integrated hotbar, which allows shortcut keys for selected spells or items (potions or scrolls) (MEDIUM - 3 hours).
  • Main Display - Implement a priority message system which will display where the status bar currently is (MEDIUM - 30 mins).
  • Minimap - add viewport bounds frame (MEDIUM - 30 mins).
  • Minimap - add monsters as red icons (MEDIUM - 5 mins).
  • Minimap - spin the draw function off into its own thread if performance is an issue (LOW - 1 hour).
  • Inventory - make backpack entries one line in size but twice the width, and get rid of the striping and green colours (MEDIUM - 30 mins).
  • Inventory - instead of colour-coding based upon material, color code known items in inventory based upon quality (MEDIUM - 20 mins).
  • Status Bar - Change hit points and magic points to use a progress bar, green and red, use other colours e.g. yellow for poisoned (HIGH - 1 hour).
  • Gameplay - Implement alertness - add or subtract from the field of view up to a maximum of nine squares, minimum of four squares (LOW - 45 mins).
  • Gameplay - Write an InCombat function (an idea ripped blatantly from some variant of Angband) (LOW - 1 hour).
  • Gameplay - Expand out targeting modes from a binary function to allow targeting for digging, ranged combat, ranged spellcasting, 'walk-to' and more (MEDIUM - 3 hours).
  • Item Handling - Write a proper pluralisation routine for both suffixes and articles (LOW - 30 mins).
  • Refactoring - refactor the Input Handling Code and separate out non-Input code into their own units (LOW - 2 hours).
  • Refactoring - refactor out Vault handling into its own unit (LOW- 1 hour).
  • Refactoring - refactor out the ProcessCreatures() method into its own unit (LOW - 30 minutes).
  • Refactoring - refactor out Combat handling code into its own unit (LOW - 30 mins).
  • Refactoring - adopt a common naming scheme for all units (LOW - 2 hours).
  • Vaults - write code to flip and rotate vaults (LOW - 1 hour)

Giving a total of just over 20 hours of work added this just morning. And for my piece of mind, all this needs to be done before the release of 0.01e, never mind 0.02. This game is turning into a beast. I don't think I ever appreciated how complicated writing a Roguelike could ever be (way back in the mists of time, it was estimated that "2-3 years is about the smallest amount of time in which one can expect a really interesting game to emerge."

I think I'll take a break from coding for a week. Do other things.

But until then, here's a room on the first level of the Fortress Dungeon with a wand and some beasties guarding it (yes, the new monster display window is a ripoff from Crawl):

Sunday, 29 March 2009

Reintegrating the UI

I've been having thoughts about reintegrating some of the extra windows (e.g. Monsters and Minimap) into the UI:


Compare this to the Crawl Tiles UI:

However, I do wish to achieve a clarity in the UI comparable to say, Paprika:

I asked this question a long time ago (October 2007) in r.g.r.d., and to be honest, I've still not made up my mind. But I'm definitely not satisfied with the current interface.

Saturday, 28 March 2009

Character Dumps

This is a first attempt at a Death Screen. There is much missing and yet to be implemented (for example, dungeon events, victory lists and suchlike). Currently the only way to bring it up is to commit suicide. You'll notice the combat messages at the very bottom. I've partially implemented melee, but there is no framework yet for Ranged and Magical attacks.
----------------------------------
Kharne Alpha v0.01d Character File
----------------------------------

Agrendaa the Level 1 halfling Priest

Began the game on 28/03/2009 23:09:49
Died 138 turns later on 28/03/2009 23:09:49

On Level 1 of The Mausoleum

-------
Summary
-------

HP: 11/11
MP 8/8
AC: 15
EV: 9
SP: 3

Gold: 0
Burden: 50/130 lbs

XP: 0/0

----------
Attributes
----------

Strength: 13 (3)
Agility: 10 (0)
Endurance: 10 (0)
Intelligence: 17 (7)
Resolve: 20 (10)
Charisma: 15 (4)

------
Combat
------

Accuracy: 1
Damage: 0
Blocking: 0
Deflection: 0

------
Skills
------

Fighting: 3
Melee Combat: 2
Ranged Combat: 0
Unarmed Combat: 0

Defense: 0
Heavy Armour: 0
Medium Armour: 1
Light Armour: 0

Subterfuge: 0
Thievery: 0
Thievery: 0

-----
Magic
-----

Base Skill: 5
Elemental Fire: 0
Elemental Water: 0
Elemental Air: 0
Elemental Earth: 0
Nature: 0
Healing: 4
Cursing: 0
Combat: 1
Protection: 2
Lore: 0

-----------
Resistances
-----------

Base Resistance: 0
Fire: 0
Earth: 0
Air: 0
Water: 0
Poison: 0
Lifedraining: 0

---------
Inventory
---------

Head: a Bronze Coif [3, +2]
it increases your armour class (+2)

Neck: [NOTHING]
Chest: a Hide Harness [4, 0]
Arms:
[NOTHING]
Hands:
[NOTHING]
Legs: some Hide Chaps [2, 0]
Feet: some Leather Boots [2, 0]
Mainhand: a Tin Hand Axe [0, +0]
Offhand: an Alder Buckler [2, 0]
Ranged:
[NOTHING]
Back:
[NOTHING]
Left Finger: a Copper Ring of Demon Slaying
it increases your damage against demons (+4)
it increases your charisma (+1)

Right Finger:
[NOTHING]

Carried:

a Potion of See Invisible
a Leather Cap [2, 0]

-------
Dungeon
-------

############################################~~~~~.~~~\~~~.#.#####
############################################@##############.#####
############################################~##############.#####
############################################.##############.#####
############################################.##############.#####
############################################\##############.#####
############################################z##############.#####
############################################.##############z#####
############################################.##############.#####
##############################..~...#######..##############.#####
##############################.....~#######.###############.#####
##############################......#######.###############.#####
##############################..@@~z......\.###############.#####
##############################......#######################.#####
##############################......#######################z#####
##############################......#######################z#####
###########################################################.#####
###########################################################.#####
###########################################################.#####
###########################################################.#####
###########################################################.#####
###########################################################z#####
###########################################################.#####

--------
Messages
--------

127: You open the door
127: Something close by is alerted to your presence!
127: The Zombie hits you [Rolled 11+1=12] inflicting 5 points of damage
128: The Zombie hits you [Rolled 12+1=13] inflicting 1 points of damage
129: The Savage Rune Hunter hits you [Rolled 9+4=13] inflicting 3 points of damage
129: The Savage Rune Hunter attacks but misses you [Rolled 4+4=8]
130: The Savage Rune Hunter hits you [Rolled 18+4=22] inflicting 1 points of damage
130: The Savage Rune Hunter hits you [Rolled 10+4=14] inflicting 2 points of damage
131: The Savage Rune Hunter hits you [Rolled 9+4=13] inflicting 1 points of damage
132: The Savage Rune Hunter hits you [Rolled 19+4=23] inflicting 4 points of damage
133: The Savage Rune Hunter hits you [Rolled 14+4=18] inflicting 8 points of damage
134: The Savage Rune Hunter attacks but misses you [Rolled 3+4=7]
135: The Savage Rune Hunter hits you [Rolled 12+4=16] but your armour absorbs the blow
136: The Savage Rune Hunter attacks but misses you [Rolled 4+4=8]
136: You see a pile of bones here...
137: The Savage Rune Hunter attacks but misses you (fumble)
137: You take off a Leather Cap [2, 0]
137: You put on a Bronze Coif [3, +2]
137: You put on a Copper Ring of Demon Slaying
138: You decide life is not worth living any more...

Friday, 27 March 2009

Kharne Alpha 0.01d available

Yes, I've changed the numbering system, but never mind, Kharne Alpha 0.01d (1520 kb) is now available. This is basically a refactoring and maintenance release. Monster AI, which has been partially implemented, has been switched off in this version.

Here are the changes:
  • Spruced up some of the dungeons with additional terrain types and visual effects
  • The Abyss is now a completely different map type.
  • The Main Screen can now be resized and maximised.
  • Clicking on the Main Screen is now handled more accurately.
  • The colours of the Portals in the Nexus now correspond better to the Level Type
  • Custom Fonts are now added to the system table using the non-blocking PostMessage API Call
  • Fixed a bug in the Dungeon Generation code for the Mausoleum and the Keep that could lead to a morass of dead end passages in certain parts of the map.
  • Smoothed the maps for the Elemental Plains to remove most freestanding isolated walls.
  • Moved the Status Window to the bottom of the main panel.
  • When waiting for a direction to dig in, a visual indicator will now be displayed
  • You can no longer dig on the town level

Screen Usage

Minimising and Maximising now work. This is the default size - 792 x 995 pixels:


In comparison, this is the main window maximised on my widescreen monitor, to a resolution of 1440 x874:


Like any proper Windows Application, it can be ran at any resolution in-between too. Even though I'll have to sacrifice some space, I'd like to get it working with 800x600 too.

Graphics and Lighting

I think I've really got my bit between the teeth at the moment when it comes to the development of this beast. Which is just as well as I've got an upcoming assignment (General Relativity and Electric and Magnetic Fields, natch) which will take a huge chunk of my time (weeks, in fact). I don't think I'll get Alpha 2 out before then, but things are well in hand.

One thing I'd like to add to Kharne in the meantime is ambient light in the dungeon, such as is currently being implemented in Umbrarum Regnum. Coding ambient light like this (dynamic lightsources is another matter) is not actually that complicated, if we assume lighting follows the standard field of view code.
  1. First, add an attribute (lets make this a real number) to every cell in the dungeon called "AmbientLightSource".
  2. Assign a cell as the light source itself.
  3. Using the Recursive FoV algorithm, calculate the FOV and write a value to this that depends on both the distance to the light source and the strength of the light source.
  4. The cell that contains the light source is assigned the strongest value.
  5. If two light sources overlap, we take the strongest value.
  6. During the display routine, adjust the brightness of the character to be displayed depending on the "AmbientLightSource" value.
  7. If cells contain ambient light, then items and monsters should be visible all the time, much like what happens in the players' view.
At some point, I'd like to go further and make lightsources spatially dynamic, so feasibly a) monsters could carry light sources and b) light sources could be extinguished or created (known in DnD terms as "cracking open a sunrod"). In any case, the basic graphical premise of Kharne would be unchanged: 1 standard ASCII character per "square", with all effects coming from changing colours and brightness.

Thursday, 26 March 2009

Some thoughts on Open Source

With the release of the first non-Alpha version of Kharne (0.1), Kharne will officially go open-source (with code probably available on GoogleCode).

But not under the GPL.

This is because I use some custom Delphi components that themselves aren't open-source, and this is incompatible with the viral nature of the GPL.

Instead I will be releasing Kharne under the Mozilla Public License (MPL):

"The MPL treats the source code file as the boundary between MPL code and proprietary parts, meaning that a certain source file (e.g., C++, JavaScript or XUL file) is either fully MPL or fully proprietary. The GPL, in contrast, uses the process boundary of the executable as the license boundary..."

In other words, under the MPL, which is a weak copyleft license, code that I write is considered open source - but the code of third party components is not:

"[The MPL] allows for the combination of MPL code with other code in a larger work without requiring that all code in the entire work be distributed under the same license..."

I have contacted the authors of those third-party components concerned and received explicit permission for use of their components in the compiled binaries of an open source project, and linking to them in my open-sourced code.

Obviously, I cannot and will not distribute their source code.

Rather, I will, per their own license terms and that of the MPL, include instructions in the source distribution on how to obtain and install their components independently.

And that is a win all round.

Wednesday, 25 March 2009

Tuesday, 24 March 2009

Progress Report #10

In parallel with developing the Monster AI routines, I've also been sprucing up the aesthetics of the various dungeons (and there's a very interesting thread on the aesthetics of ASCII over on r.g.r.d. started by yours truly) . Here are some screenshots:



And this last screen in monochrome:

Monday, 23 March 2009

Optimisation and the dangers of too-elaborate thinking.

Magellan over at Roguetemple has simultaneously stopped me acting like an idiot and in the process has reduced my calculating/refresh times by a factor of close to 100. How? By pointing out (the now obvious point!) that there is no need to recalculate the terrain costs for the pathing algorithm for every single monster.

Originally I wanted to recalculate for every monster because I had the idea fixed in my head that some monsters have different terrain costs than others (an ice-based creature in a fire-based environment for example), but there is no current need for a Giant Bat to have differing terrain costs than a Giant Rat, for example.

By this single change, the downtime between player turns due to processing is reduced; in the unfortunate (for the @) situation below the time for processing is reduced from ~60 ms to under 1 ms.


There are several other optimisations that could be achieved here as well - the relevant section of the recalculation code is as follows:

for x:= 1 to DUNGEONSIZEX do
begin
for y:= 1 to DUNGEONSIZEY do
begin
if (Dungeon.Walkable[X, Y]) then
begin
if (Dungeon.Effects[X, Y] > 0) then
Dungeon.TerrainCost[X, Y] := TC_TOUGH
else Dungeon.TerrainCost[X, Y] := TC_NOCOST;
end
else
begin
Dungeon.TerrainCost[X, Y] := TC_IMPASSABLE;

end;
end;

end;

Dungeon.TerrainCost[PlayerX, PlayerY] := TC_IMPASSABLE;

and then later on, whenever a monster moves:

Dungeon.Monsters[NewX, NewY] := Dungeon.Monsters[LocalMonster.X, LocalMonster.Y];
Dungeon.TerrainCost[NewX, NewY] :=
TC_IMPASSABLE;
Dungeon.Monsters[LocalMonster.X, LocalMonster.Y] := 0;
Dungeon.TerrainCost[LocalMonster.X, LocalMonster.Y] :=
TC_NOCOST;

Instead of just blindly iterating through the entire dungeon, a quick array of currently active Dungeon.walkable squares could be held elsewhere, since this does not change that often (currently only with tunneling and opening doors). One alternate solution would be to make Dungeon.Terraincosts merely calculated from Dungeon.Walkable but this would mean having to implement differential terrain costs for certain monsters in a different way.

Incidentally, I'd like to have at some point "push-past" rules to govern which monsters can push past another (as ever, the excellent Andrew Doull offers an extremely workable solution to this), and which ones can also open doors (which would necessitate a recalculation of terrain costs).

Friday, 20 March 2009

Progress Report #9: AI Mutterings

So I've started work on Monster AI. This is going to be quite a big task. And already it has me wishing for some of the functionality of C#. The reason? LINQ.

Every turn, the AI subroutine will process the list of currently active monsters on the level, determining what to do from their programmed behaviour, current condition, hatred for the player and so on. So I need to find what monsters are currently active. Initially I have to scan the entire level looking for monsters who are both alive and awake (i.e. aware of the player's presence, usually by being in line of sight or line of sound of him/her).

I started off with storing a list of monster pointers in an integer array. Of course, to get any performance out of this method, I need a quick way of determining if the monster is already active. So I just search the array. Whoops. Its an unordered basic array of integers. Searching performance is atrocious.

Being able to search through arrays as if they were a dataset,e.g.


IEnumerable query = from s in names where s.Length == 5 orderby s select s.ToUpper();

would be the answer to this. Instead, lacking such functionality, I've decided to use an additional TObjectList to store the active monsters. Monsters that awake are added to the list, and ones that are killed are removed. Its not ideal, but it does the job, and does it reasonably quick.

Which is needed as implementing pathfinding for monster movement is pretty processor intensive. I've been experimenting with the free Delphi pathfinding components available here (demo exe here) and they seem to do the job, but for every monster that wants to move towards the @ (a later enhancement I'll add is moving them towards the last known position of the @) I need to recalculate the terrain costs of the entire level, and the only way for now to do that is to iterate through the entire level one tile at a time. Delving into the source code of the components reveals that they use a TBits array in their calculations, so I'm not sure there is much more room for optimisation.

Anyway, the AI is still a work in progress - dealing with finding the correct direction to represent monsters fleeing "directly away", (for whatever reason) from the player is proving to be a pain but for now here's a video showing the beginnings of the path-finding in action:



Since no combat has been implemented yet, the monsters cannot be killed, and near the end of the video you'll notice the @ stepping onto a monster, but the basics are there and starting to shape up nicely (that sometimes the screen draw takes more than 1 ms is due to the green diagnostic messages being displayed in the message log - standard performance even with the cost of terrain calculations being performed multiple times is still below a millisecond)

News and Updates Addendum

Of course, no sooner than I said what the next release would contain than I've went and changed a few things. I've managed to find and fix an annoying bug with one of the level generation algorithms I'm using.

This particular algorithm is modeled on the one used in Angband, and previously generated levels that often had curious morasses of tunnels in the corners of the levels (the screen grab is from a standalone dungeon generator utility):

The new one, with the bug fix (which turned out to be because I was trying to connect overlapping rooms to themselves) produces slightly smoother output, without the random tunnel ends:


There are still a few bugs in the tunneling code however (sometimes rooms aren't connected properly), which I will fix at some later point.

In addition, on reflection, the previous cave algorithm produced much too disjointed levels. So I added a smoothing function to remove any isolated points of wall and the result is below:


I'll incorporate these changes into Alpha 1c which will be released in the next few days.

Thursday, 19 March 2009

News and Updates

There's going to be one more interim Alpha 1 release for Kharne, which will try and fix a possible problems with fonts that has been reported.

Following the comments in this post, I'm going to start work on an equivalent of a 7DRL (albeit over a longer period) in C#, mainly to learn the language. Don't worry, Kharne will not suffer from this, but it will be a platform for seeing how C# compares to Delphi.

The title?

QuantumRogue.

Tuesday, 17 March 2009

Kharne Alpha 1b Available

Updates to this version:
  • Added Progress Indicators to Splash Screen.
  • Reduced timeout of Splash Screen from 5 to 2 seconds.
  • Increased the default view radius to 9 squares.
  • Changed keyboard handling to detect , and . for stairs up and down respectively.
  • Frequency of Vaults is now dependent upon level depth.
  • A Vault will now always increase the Level Feeling to the maximum.
Get it here.

Monday, 16 March 2009

Kharne Alpha 1a available

There's a new version of Kharne available (Alpha 1a) which fixes a few miscellaneous bugs reported on r.g.r.d. Here are the changes:
  • Fixed Graphical Error that could hide "start new game" on front screen on certain screen resolutions.
  • Enabled Menus on front screen.
  • Enabled Quit Menu option and Icon on main game screen.
  • Reduced the frequency of Keypress Checks to stop the inadvertent repeated toggling of some screens.
  • Subscreens such as Inventory, Skills, Character Details and Magic are now dismissed by pressing Escape.
  • You can no longer walk on the edges of the Nexus.
  • Clicking on a Monster in the Monster Display will now display Monster Details
It can be downloaded here or from the link on the left hand side of the blog.

Sunday, 15 March 2009

Where to from now?

Alright, now that Alpha 1 is out, I'm going to take a couple of days off, play some of this year's 7DRLs (look out for some reviews coming soon of those), and then start work on Alpha 2.

Features that I would like to include in the next release are:
  • First iteration of Monster AI
  • Combat
  • Magic
  • Death and Victory Conditions
Beyond that, Alpha 3 would introduce persistence/saving, refinements to Monster AI, expanded Magic, with Alpha 4 concentrating on refining the interface and general game polishing.

I don't anticipate releasing any interim bug-fixes until the next Alpha unless they are game-breaking bugs that need to be fixed.

Kharne Alpha 1 available for download

As mentioned here and here I'd said I'd release something today.

So here it is: Kharne Alpha 1 (1.43 Mb)

Usual disclaimers about this being a horribly incomplete interactive demo instead of an actual game apply. Please read the README.TXT and LICENSE.TXT etc etc etc.

Any constructive feedback and criticism at all is most welcomed!

Have fun!

Friday, 13 March 2009

More on Screen Sizes

Following on from my last post, and the comments therein, the main window of Kharne is now much smaller - with dimensions of 792x725. With the optional minimap and monster view displayed, this is what it looks like on a monitor with a resolution of 1280x768:

Without any additional windows displayed, this is what it looks like:

To do this, I've had to simplify the main window considerably and change the information that is always visible. I think I prefer the newer look - its more streamlined and less distracting.

Eventually I hope to get the main window down to less than 800x600 so it can be run on this lower resolution in extremis.

Shameless Stealing of Ideas Redux

As a followup to this post, I've now implemented a Popup Window that displays the current monsters:


I am however, starting to run out of screen space. I think I'll have to investigate making the main window smaller, or allowing all the popup windows to dock somehow with the main window.

Thursday, 12 March 2009

Gameplay Idea#5: Curses

Kharne currently has cursed items, which as well as being 'sticky' in the traditional sense also have negative modifiers on them, e.g.:


Nick McConnell has posted an interesting expansion of this idea on rec.games.roguelike.angband that expands the idea of "cursed" items to also bestow a wide range of negative effects upon the unfortunate player. This is appealing to me and I think I might implement something like this in Kharne eventually.

Of course, there would have to be another source of positive effects to balance these out.

Wednesday, 11 March 2009

Feature: Vaults!

I've just put vault handling into the the dungeon generation routines. Here's a sample:


Anyone fancy generating some vaults?

You can use the following terrain features (this scheme follows an Angband-esque convention):
  • Hard, undiggable wall (#)
  • Soft, diggable wall (%)
  • Closed door (+)
  • Clear floor (.)
  • Clear floor with treasure (,)
  • Clear floor with trap (^)
  • Clear floor with treasure or trap (*) (50% chance)
  • Clear floor with monster (0-9) (1-9 specifies the OODness in levels)
Here's the sample vault from the screenshot above, which is 12x4:

############

+,33+*5#3*,#


#,*3#5*+33,+


############



Treasure and Monsters can be specified OOD as you wish. There are twenty levels of monsters and treasure in Kharne in total.

Any vaults you do submit you will get full credit for, of course.

Tuesday, 10 March 2009

C# and climbing aboard the Microsoft Juggernaut

I really need to learn C#. Its a shame in a way Kharne is being written in Delphi. I'm not keen on the baggage surrounding C# (i.e. the .NET framework) but if I was starting again, I'd do a roguelike in C#.

I might however write a Vault/Data Creator/Editor and other support utilities in C#. Kharne itself will stay Delphi for now.

Shameless Stealing of Ideas

The last version of Crawl Stone Soup I played was quite a few versions ago, so with the imminent 0.5 release, I thought I'd download the latest version 0.4.5:

I've not played it much yet, but I do love the new summary of all the visible monsters and their status. I think I'll have to steal that for Kharne at some point.

Monday, 9 March 2009

Front Screen

I don't think I've ever shown this screen before. It's not been a particularly big secret though:


Functional, and does exactly what it says on the tin.

Feature: Dungeon Zones and Regions

A while back, I speculated about the possibility of introducing sub-zones inside dungeons. I#ve just implemented the first iteration of these this evening. These differ from vaults to a degree in that they don't follow any specific pattern, nor are there any greater rewards. Effectively, they're a little part of another dungeon branch inserted into the current dungeon. Monsters will be scaled to be slightly out-of-depth (but not too much), and I'm considering allowing traversal into a different dungeon branch by means of portals contained within these zones (though those aren't implemented yet).

Here's an example of a section of the Plane of Water intruding into the Plane of Fire. Some denizens that normally frequent the Water Plane have came through as well.

The framework is in place for these zones to be dynamic - perhaps they could shrink and expand over time depending on the actions of the player character.

Sunday, 8 March 2009

Retro

(click on the image to display it full screen if the animation doesn't display)

This just seemed like a good idea, even if it is nothing but a blatantly transparent attempt to recreate the original atmosphere of Rogue. But I think there will be someone out there who likes at least having the option of playing in monochrome.

Monsters!

Somewhere in the Wildness, a unwelcoming committee of a Snake ('s') and a Giant Rat ('r') is waiting for our brave hero. The nearby overgrown plant decides to daydream instead.

Meanwhile, on the Plane of Earth, a Kobold ('k') and a Xvart ('g') look menacingly at our hero whilst some jewelery ('=') and food ('%') look on impassively.

Death awaits our brave hero in the Voidfields of the Abyss, as an Efreet ('E') and a Planar Assassin ('@') lurk ready to strike.

Now this was an utter pain to do, but I've now got a reasonably Gaussian distribution function to select appropriate monsters and put them into the dungeon. There are 120 monsters in total, cribbed from just about every source imaginable. Now I've got to write the code to produce the occasional enhanced monsters (e.g. a Drow Matron instead of just a plain old Drow).

Then, of course, monster AI *gulp*.

Friday, 6 March 2009

Progress Report #8

Here are some screenshots:



Things to do before next Sunday's release of the first demo:
  1. Get the monster generation code finished and some monsters out onto the map.
  2. Start work on saving and loading.
  3. Start work on the monster AI framework.
  4. Start work on implementing magic.
Not a lot to do. *laughs*

Thursday, 5 March 2009

Metaphorical Hydras Return

There's an old phrase: 'You can't keep a good idea down'. Or maybe its actually 'You can't keep a bad idea down'. The old argument over save-scumming has resurfaced again like some metaphorical hydra that periodically creeps from the unthinking depths back towards the light of discussion. And again, people are trying to slay all the heads with fire. This subject has in the past produced much more heat than light amongst devotees of roguelikes, and this time appears to be no exception.

Now, I have save-scummed in the past (years ago, mainly an early version of T.O.M.E. but also once on v4.0.0b26 of Crawl) but for various reasons I no longer do it (the primarily one is that I found that it takes the fun out of the game for me), but I'm firmly of the school of thought if that someone wants to save-scum, let them. As long as its all above-aboard. and out in the open Roguelike gameplay is generally not designed to be save-scummed, but if someone wants to, all I can do is shrug and not actually give a damn.

As long as they don't claim that they're a wonderful player, of course.

7DRL

This year's 7DRL is coming up soon, and whilst I'd love to take part (and I have an excellent idea), I've decided not to start a new project.

However.

Instead, I'm going to work hard during those 7 days to get Kharne into a releasable state and then release an Alpha version (probably 0.0.1).

It won't be actually playable (it will be more like an interactive demo), but it is something.

And something is definitely better than nothing. And feedback on even what I've done so far is crucial.

Tuesday, 3 March 2009

Gameplay Idea#4: Class/Race Mutability

In this r.g.r.d. thread, "Cuboidz" asks:

"Maybe we should drop the notion of preconceived character development and try to allow for maximum adaptability. Your character would be shaped by the Random Number Generator, in a way, because you choose your abilities based on the items you find, and the hurdles you have to overcome."

Much interesting discussion follows. It has also sparked an idea of my own.

Currently, I have planned that Kharne will have a conventional character creation system in which skills and abilities are determined (at least in the beginning) by race and class (albeit with an option to allow for randomly choosing a race and class).

But what about giving the player the chance to change these mid-game? Or even have changes thrust upon them? For example: potions that allow you to swap skills and powers. environmental subsections of dungeons that suppress one skill and boost another temporarily. Monster attacks that change your race (think a super-polymorph spell).

Whilst I do think this would be a worthwhile addition to the completed game, where is the line between giving the player additional gameplay options and driving them mad through too much choice?

Incidentally, later in the thread Ray Dillinger comments:

"There are a lot of ways to handle it, not just shops. I think the preferred way ought to be themed dungeon branches. If you've got three different ways of getting from level 20 to level 30, and one leads through a dragon's nest, one through a goblin city, and one through a Temple to the Great Old Ones, you're effectively giving your players a choice."

That's exactly what I have planned with Kharne. There will always be at least two different dungeons for each level range, with loot tied thematically to each dungeon.