Friday, 30 April 2010

Stygia - story & monsters

Unlike Kharne, I'm intending to have a detailed story line from the start with Stygia. This will manifest itself in many ways throughout the game, from factions the character can join, perform quests and obtain reputation for, to NPCs from different factions fighting each other if the character's actions have caused a war between them. I think C# will allow me to make a really good living world and NPC/Monster AI.

I've found two posts on creature AI in roguelike that I can't recomnend heavily enough: here and here. Certainly the first one (and its followups), courtesy of the ever informative Andrew Doull should be read by any budding roguelike developer.

Meanwhile, a random screenshot from the intro section (which I eventually hope to animate and sort out suitable music to accompany it) explaining the back story of the game:

This weekend I'll be working on my map classes and getting the '@ walking around an empty map' state done.

Tuesday, 27 April 2010

Stygia - some initial design thoughts

One of the things I'm planning to do with Stygia is to not overreach myself - something that sadly, Kharne suffers from. To get the game done in 3 months, I'm going to limit the initial version to something achievable:
  • One main persistent dungeon, with around a dozen levels (with varying themes). Dungeons will be smaller than those in Kharne.
  • No character classes.
  • Characters will have fewer stats then Kharne. I'm currently thinking of only having Strength, Agility, Constitution and Intelligence as the main stats.
  • Only a few skills, e.g. Fighting, Defense, Subterfuge and Spellcasting.
  • Only a limited number of items and brands.
  • A limited selection of spells (perhaps just over a dozen, giving just enough to initially make magic playable and no more).
  • Around a dozen types of enemies.
By limiting the scope, I hope to get an actual game out, which some of us perpetual roguelike programmers seem to forget to do.

Beyond this, I have a whole spreadsheet filled with ideas I want to implement in both Stygia and Kharne, culled from other roguelikes and near-endless searching of a decade of r.g.r.d's archives.

Monday, 26 April 2010

Stygia - day 3

Here's the main menu:

Before I start working on the @ moving round the screen (and does libtcod make it easy!) I think I'll look into setting up a quick music player API (probably OGG files from The Rogue Bard) as this will give me much-needed practise in using different assemblies and wrappers.

Sunday, 25 April 2010

Stygia - weekend 1

So, weekend 1 of Stgyia coding completed. Time spent so far: 3 hours. Managed to get the title screen and a framework set up (albeit in a glorified hello world-esque application):

But this is the same as his previous hello world application, I hear you cry. Not really. This is using the new C# wrappers for libtcod. I pretty much had to rewrite from scratch all my code.

Next stop, a main menu framework and doing some more framework code, so I can progress onto Step 3.

Incidentally, as well as the sources mentioned previously, the plot will also be inspired by this old (and criminally underrated, IMHO, CRPG).

One other thing I'm intending to do within the three months is to write all my data maintenance tools in ASP.NET.

Saturday, 24 April 2010

Stygia - a 3-month Roguelike

It might have been obvious that I've been having some thoughts recently about rewriting Kharne in C# using libtcod.

This would mean rewriting an absurd amount of code from scratch.

I don't want to do that, however, I've got a powerful career incentive to learn C# properly.

So I'm going to turn the work I've done already on Prelude into a new Roguelike, which I'll develop in parallel with updates on Kharne.

This one will be called Stygia, and I've set myself a strict 3 month timescale to get a complete game out, following the steps outlined here.

Stygia will be loosely inspired by this particular classic CRPG and somewhat more by this classic roleplaying game. Features wise, it will follow the usual roguelike conventions, but with a more heterotopic and dystopic vibe.

It might even have tentacles in it. Scratch that, it WILL have tentacles in it.

And lots of san loss.

Friday, 23 April 2010

Town Levels?

I've had a sudden crisis of confidence regarding my town level. It will probably be the last thing finished, but I find myself asking: do I really need it? Its very incomplete at the moment - no NPCs or plot-related items.

Here are some alternatives:
  • Get rid of town levels entirely and adopt the Crawl approach.
  • Get rid of town levels as such and allow their functionality to be inherent (for example the character has a device that can teleport him/her to an "extraplanar shop" at regular intervals)
  • Implement regular "outpost" levels (that would be safe) that function as mini-towns.
  • Implement an overworld (or rather oververse) map (almost like the old version of Kharne)
At this point I'm not sure what I want. Analysis paralysis ahoy.

Bah, I hate having existential crises!

Thursday, 22 April 2010

An experiment....

Using Libtcod.NET and C# with Visual Studio 2008. I shall have to ponder what this means.

Wednesday, 21 April 2010

Narrow Horizons

May the Lords of K0bol save us from narrow-minded Stallman acoplytes*:
"Well - sad...since you use this properietary M$ crap, i can't test this variant. Also i think that it could be quite interesting from the gameplay.
IMO you shouldn't use programming languages like visual C (or other one-manufacturer-one-system languages) for *Bands because its against the philosophy. They should run without trouble on most common computer systems and not only on windows."
So..what have we got here:
  • Obligatory reference to "M$". Check.
  • Obligatory insistance that only the one true language (probably C?) be used Check.
  • Miltonesque mindset of the true believer on display - that "philsophy" comes first before everything else. Check.
  • Lazy assumption that windows software can't be ported to other operating systems. Check.
Dude, chillax, as I believe the youth of today say.

But to answer the respondant's specific points (without bursting a blood valve):

Visual Studio is pretty much the best development environment out there at the moment. Mono allows cross-platform .NET development. Microsoft (the whole M$ thing is just immaturity), for all the bad things they've done, have also done plenty of good things as well; and programming, when you take a reasonable view of things, isn't important enough to be something worth an ideological crusade over. Women's Reproductive Rights, Identity Cards, Access to Clean Drinking Water, Trade Tariffs and Barriers - those are worth getting worked up about. But not whither someone uses one bleeding format of input text or another to produce a load of sodding pixels on a screen.

Bet he's a Vi user as well. That would explain a lot**.

Feh, and more feh! His attitude makes me want to code a C# roguelike just because. Kharne# anyone?

* This post was brought to you by the concepts "maturity" and "perspective". Dude, try it some time. It works, y'know.
** Emacs, definitely, in case you ever wanted ot know. Although Textpad is better than both of them.

Tuesday, 20 April 2010


I've implemented poison. It is modelled after Crawl, though its not quite as lethal in that it will never kill the character directly (poison won't reduce the character's hit points beneath 1).

Monday, 19 April 2010

Onwards - a new roadmap.

0.05c will be released when I have potions and ranged combat implemented.

According to the old roadmap, I'm way behind on just about everything. Quelle surprise. Such is the life of the roguelike developer. Problem is, I have so many ideas for the game its preventing me from really developing it quickly. That, and the fact that I'm doped up to my eyeballs most of the time on venlafaxine, and that also I've got my dissertation ("Microquasar VHE photon production and its implications for microquasar identification, morphology and classification") to write this summer.

The two biggies coming up next to implement are persistence and magic.

Sunday, 18 April 2010

Lighting Enhancements

Something I'd like to introduce in future releases of Kharne (mainly inspired by the visual sexiness of Brogue) is independent light sources. Fortunately Delphi implements the Win2k+ AlphaBlend WinAPI call which would make implementation quite easy (he says confidently).

Saturday, 17 April 2010

First batch of changes for v0.05c uploaded to the repository

I've uploaded the first batch of changes to the code for the next version to the online source-code repository. Fixes & Updates completed in the code so far are:
  • Some monsters now follow characters up and down stairs.
  • Classes now have different titles, dependent upon current character level.
  • Only the just finished game will be now highlighted correctly in the hiscore list after character death.
  • Spurious double quotes (") will no longer appear in automatically generated character names.
  • When resting, there is chance of a monster appearing randomly near the character.
  • Eating now restores all lost health points.
  • When starting a 2nd game in the same session, the Character Background will be reset properly.
  • On Character death, the Main Window Title will be reset properly.
  • Elemental Intrusion Creatures no longer have as many hitpoints.
  • Unidentified Scrolls are now identified properly on Character Death.
I'll not produce an executable release for these, but I'll wait until the other changes (including potions!) are finished before releasing the next version (some of them are incomplete in the code but don't affect compilation).

You are of course welcome to download and compile the latest version if you are in a position to do so.

Friday, 16 April 2010

C#/ revisited.

I never got very far in the end with using to write a C# roguelike. Mainly due to various issues with setting it up, and a general development ennui which had enveloped me over the winter (major personal issues & upheaval didn't help either).

I do see that there's a new version out now with improved C# documentation. I don't intend to start work on a C# roguelike until I get Kharne complete.

But after that I may end up writing some additional optional features (such as a hiscore/chat server in ASP.NET, which I have to learn soon for my day job.

Wednesday, 14 April 2010

Dungeons and Room Types

My next blatant theft of a feature from another roguelike will probably be the room names from Unangband. I've deliberately not looked at the code for this on that game, but am designing my own system. I have the implementation worked out in my head for this already, but as ever I need more lubrication for my creative juices!

So let's imagine, say, a circular room in an undead themed level. What could it be called?
  • The most straightforward would be random selection from a list generic names such as "The Slaughterhouse", "The Crypt", "The Necopolis". This would have to be a large list to avoid reusing names.
  • This could be enhanced by adding one of more random adjectives before and after the name, e.g. "The Hidden Slaughterhouse", "The Crypt of Despair", "The Crypt of Hidden Dreams".
  • And then we can consider the role of uniques. If we generate a unique in the level inside a room, name the room after the unique: "The Crypt of Barney", for example.
  • Now, additionally, depending on the name, selected, we could reverse the traditional way of generating dungeons and let the name drive the dungeon features. For example, consider a room called "The Hidden Slaughterhouse" - use of the term "Hidden" would mean the entrances to this room are sealed up with diggable walls (or doors) - and use of the term "Slaughterhouse" would mean that there would be loads of corpses generated in the room, as well as certain types of monsters.
  • There could also be passive effects tied to the room, for example, with "The Hidden Slaughterhouse" there could be a smell that makes the character nauseous whilst inside it.
Yes, I know I'm probably going through the same thought process that Andrew Doull went through about ten years ago, but I'm increasingly convinced random generic dungeons can't cut it any more in roguelikes.

So yet again, its time to ask: thoughts? ideas? Comments are most welcome.

Tuesday, 13 April 2010 which I admit I play DnD 4e

There are several main reasons why I've never won Crawl. The first is that I'm much too impatient. The second is that I'm not cautious enough. And the third is that I get complacent playing MdFis (my favourite class). Yet I'm glad about this. Mindlessly hacking things isn't and shouldn't be the way to win at Crawl, thankfully. Its a testament to how state-of-the-art (when it comes to Roguelikes) that Crawl has become, really.

That aside, that you have an added level of depth for "just" melee characters is something I'd like to emulate in Kharne. albeit via a slightly different mechanism. I've played a lot of DnD 4e recently and am impressed with some of the features that have been introduced to pep up playing fighter/melee classes.

So I'm going to make slight changes to the class system in Kharne. The five classes will stay the same (Warrior, Knight, Thief, Cleric, Mage), but as the character advances in level, they will gain powers and innate abilities.

They also gain a different name as they gain in level, for more atmosphere. For example, a level 1 Warrior would be a Grunt whereas a level 5 warrior would be a Soldier.

The full list of proposed names is as follows:

Grunt, Soldier, Warrior, Commander, Warlord

Squire, Defender, Paladin, Champion, Hero

Thug, Rogue, Criminal, Villain, Malefactor

Novice, Acolyte, Cleric, Minister, Prelate

Initiate, Apprentice, Scholar, Sage, Archmage

I've not quite figured out all the powers that each class will have at different levels (suggestions are most welcome), but here's an example of what I had in mind for the Rogue class. The powers gained are cumulative, and would scale for the character's current level. They're also thematic.

Thug: every x turns, make your next attack a critical hit (where x is a reasonable length of time).
Rogue: every x turns increase your stealth dramatically for a short period of time (where x is a reasonable length of time).
Criminal: gain a bonus to critical hit damage.
Villian: gain a bonus to evasion.
Malefactor: give a percentage chance to cheat death once every y turns for a small period of time (where y is a fairly large number)

Now, of course, when you have, in a roguelike, a resource that regenerates over a period of time, you immediately open up the can of worms that is Pillar Dancing. I don't think there have been that many truely satisfactory solutions to Pillar Dancing, but I think that powers that recharge every x turns should only count turns when the character is actually doing something.

Some additional features that come to mind:
  • Powers could be recharged (or drained) by fountains
  • It wouldn't be good to display the exact number of turns left until a power is usable - but a descriptive indicator would work
  • There could be an item brand that decreases/increases the timer of the powers.
  • Powers could be enhanced, suppressed or even turned off by certain zones in the dungeon, or certain monsters
Thoughts? Suggestions for appropriate powers? Criticism?

Monday, 12 April 2010

Q is for....

Whilst working on potions, a thought just occured to me.

Press Q to (q)uaff a potion.


Press Q to (q)uaff from a fountain.

What happens if you're standing on a fountain square and want to (q) uaff a potion instead?

Saturday, 10 April 2010

Progress Report #19

The next version will be out soon (yes, really!)

Here's the current intended feature list. I'm still working on finishing off the implementation of potions.
  • Potions have been implemented.
  • Some monsters now follow characters up and down stairs.
  • Only the just finished game will be now highlighted correctly in the hiscore list after character death.
  • Spurious double quotes (") will no longer appear in automatically generated character names.
  • When resting, there is chance of a monster appearing randomly near the character.
  • Eating now restores all lost health points.
  • When starting a 2nd game in the same session, the Character Background will be reset properly.
  • On Character death, the Main Window Title will be reset properly.
  • Elemental Intrusion Creatures no longer have as many hitpoints.
  • A Character Knowledge screen has been added that shows identified and unidentified items. This can be accessed by pressing "/".
  • Identified items that are restocked in shops are now pre-identified correctly.
  • A keyboard shortcut ("^") has been implemented to refer to the last item picked up.
  • Unidentified Scrolls are now identified properly on Character Death.
  • A Toggle ("W") has been added to the inventory screen that displays the weights of items.
And, yes, it will be still be in Delphi. There's too much done and to do now to start rewriting it in another language.

Friday, 9 April 2010

Strange Urges

I have these strange urges to restart development from scratch, only in C++ (or even C).