I've now begun my 7DRL project, tentatively titled "Smart Kobolds"!
Time is 9:25 AM, EDT, March 7th, 2010.
I successfully moved to libtcod 1.5.0. Had a bit of scare for thirty
minutes because I hadn't chmod +x the new files like Windows demands,
so got bizzare run errors.
The old engine has been stripped down.
Got the kobold warrens dungeon generator built - thanks to the portal
system it was quite painless to just stitch together room types.
Would be better if I had a text file to describe the room layout, but
if I worried about stuff like that I'd never be done.
The strategic layer for the kobolds is complete. Now I have to work
on their tactics so they don't all queue up single file.
Well tell us some more about it!
Inquiring minds want to know
It is all inspired from a footnote Brent Ross wrote back in 2004,
 I've always been against trying for fully intelligent monster
behaviour... truly intelligent monsters evacuate the level and/or take
advantage of their massive numbers to overwelm the player, and
just result in what we around here call "Monsters behave stupidly in a
different way" (after the Angband option). I'm an advocate for
behave appropriately"... orcs should behave like orcs, it's that
Worked on the kobold tactics, but didn't address the queuing problem
yet. Have greatly improved their AI, however. Went from trivial to
win to impossible with a few simple AI tweaks.
I still have queuing and item gathering to fix before I think the AI
is mostly complete and I can focus more on setting.
I have addressed half the queuing problem. Kobolds unable to move to
their desired square due to another kobold are put in a delay list.
There are two backup algorithms.
The first, and most brute force, is to randomize the delay list, re-
run all the AIs to see if anyone can now move, and repeat until it
doesn't reduce in length or is empty. This theoritically will handle
a long hallway of kobolds moving in the same direction as it will
bubble up the hole, but do so in O(n^2). It is rather neat in that it
also re-runs the AI so kobolds that tried to move into a square with a
non-moveable kobold get a chance to change their mind.
The second, in implementation, but run prior to the first algorithm,
builds a collision graph of kobolds. This lets you identify root
kobolds that aren't dependent on other delayed kobolds. They can move
to an empty square, thus making their dependees roots. Or, in a
future implementation, they can push a kobold to make room. The
system currently processes roots until none are left.
This doesn't quite solve the problem! If you have two streams moving
in opposite directions, you get a cycle in the bottom of the collision
graph. As future work, I'll run a cycle detector to get into said
cycle (can start with arbitrary kobold because all roots are gone),
then extract the cycle, then have all the kobolds in that cycle shift
the one square they want to switch (for two kobolds this is a swap,
but generalizes so a group of kobolds can dance around a maypole)
Item gathering still has to be addressed.
This feature of 'impossibleness' will be maintained in the completed
Please note that the original 7DRL, even if it had not been buggy, was
unwinnable by design.
\_\/_/ turbulence is certainty turbulence is friction between you and me
\ / every time we try to impose order we create chaos
\/ -- Killing Joke, "Mathematics of Chaos"
that sounds perfect
Item gathering works. Cycle resolution is accomplished, but it seemed
to be less important in practice than I thought.
To answer the question about difficulty, as the AI gets stronger, I
keep removing from it items and resources.
One exciting thing I've managed to add is a shout-event so that you
can see kobolds actually shout things on screen.
Improve the flavour text. Properly size pop up windows. Make text
overlays transparent. Fade to black on death. Pre-cache distance
maps and add a progress meter so slow procs can see it is doing
something rather than hiccupping later in the game. (Thanks to the
threaded model, while you read the intro text the game will be
building these caches in the background!)
Some ai remains since I can still kill all the kobolds :>
The big appearance thing is to figure out what I'm going to do for the
Polish? I haven't even got as far as content yet! It's the age old
problem of game writing - it's _so_ much more rewarding to write
another font library, your own widget UI or think about how you could
do 3 mice simultaneous input than actually make any game design
Well, there's a second factor at work here: people who have a large
library of code they're familiar with to work from have a significant
advantage when it comes to 7DRLs because they don't _have_ to rewrite a
lot of the basics.
That isn't to say that their games will necessarily come out any better;
don't get me wrong. You still have to provide the idea and game, after
all, a framework doesn't do everything. But a solid prebuilt framework
_does_ allow you to make it look a lot better in a short period of time.
If you looked carefully, you'd see a lot of the polish was stuff like
resizing windows. Not game content :>
Added some game content today: baby kobolds!
Still have a big weakness in the AI to address. And to figure out the
And it is done!
Saving and loading proved rather troublesome.
(Smart Kobold: http:://www.zincland.com/7drl/kobold)
> And it is done!
Wow, really nice work. I enjoyed playing the game, it felt just like
what exploring a kobold warren should feel like - claustrophobic with
tons of traps and masses of cowardly kobolds hounding you.
The life bar is a great idea, and I also like the ring of searching
concept - cool stuff. The saving and loading of the game was seamless
- glad to see whatever was troubling you with it got fixed.
Excellent! Thanks for the quick update, it let me relax to know that
what I made was playable on a different machine :>
Inquiring minds want to know: did you win?
(Smart Kobold: http://www.zincland.com/kobold)
Really great game, I had a lot of fun with it. I have managed to win,
and can now win reliably, the trick seems to be tricking one of the
kobolds so that you can capture a ranged weapon, then killing the rest
with that. Not easy to do since they normally destroy their loot, but
there is a trick to it. :)