Older blog entries for dancer (starting at number 35)




v0.35 released. Jeff's back at the barges, and we're targetting feature completeness. Not far to go now.

Diablo II

What was it we all said about Diablo I? That it's Rogue with Graphics and Sound and a bit more of a story? Yeah, that...a twenty year old idea dressed up in glitz. See? Glitz really is important to some degree, much as we would like sometimes to pretend that it isn't.

Well, Diablo II is Moria with glitz, more-or-less. A few little tweaks and the thing holds your attention like a blonde with a glock 17 (vary mental image to personal gender and legginess/beefiness preferences)

Voice acting: Of course, the voice-acting is just as bad as Diablo's...terrible. I can't decide whether people are reciting loudly and slowly because they feel that their target market cannot read the supplied scrolling text or what, but it makes each speech sound terribly, terribly pompous. (There's a couple good ones, where the voice actor appears to have accidentally managed to sound like a human being saying something appropriate to a situation, and not tried to sound like the voice-of-god pronouncing doom upon the sinners. Those few clean scraps of vocal really stand out and make me smile)

Cinematics: Beautiful. Those fire imp things in the intro movie? Magic. This is Blizzard, right? Much crafting and polishing. The voices are better there, too :)

Overall: This is The Big Black Hole Of Time(tm). Just getting too close to it will cause impromptu relativistic effects that will distort your personal space-time reference frame, and ensure that your friends, relatives, and assigned duties all get old without you. (God help you if you pass the event horizon) I'd like it better if it was an RPG, perhaps, but I think a major part of it's charm is that it isn't...it's a glorious arcade/roguelike romp with graphics and more character stats...and more kinds of magical dingus than you can throw a Sand Leaper at.

It's got things that suddenly appear out of the dark and scare the snot out of you. It's got sound and graphics. It's got random generation. It's got a variety of playing styles depending on the class you choose. Even my father would play this... Beware! Beware!


Brian: Okay, here's the deal. Everyone who files a release-critical bug on 3.3.x, you send me their names, and I'll kill them. That way, I figure we can all get 4.0.1 a little sooner, and start filing release-critical bugs on that :)

Thanks for the news. Will cause much rejoicing around the office.


Heart troubles to cap off the mess of the weekend. Carefully staggered around the office, leaning on things most of the day. By afternoon, I was able to stop leaning on things for support, and people stopped saying things to me like, "You really look like shit, you know that, Dancer?"

Oh...and of course, the timeless classic that I keep hearing: "Your health is more important than anything. You should go home." Yeah...until you need something done urgently...then my health can take second-place, right?


Cooking up a better communications model between MIDI drivers and the mixer. Heck, I can actually use it to maintain multiple input streams into the mixer, but that would be expensive memory-wise (but possibly useful...under the current system you can't cancel a sound. Once it's mixed it's mixed. There's also no clear determination about when a sound is finished [Though I have figured a way around that]...on the plus side, memory use is a constant, and there's no real limit to the number of sounds you can mix simultaneously, other than the CPU which is not heavily occupied by a mix)

Adding streams to be mixed would allow us to cancel a stream any time, or possibly even indulge in submixing at differing volumes....but since more memory would be used (buffers per stream), we would have to place some kind of upper boundary on the number we can permit. Hrm.

BTW, no, I'm not any kind of an audiophile. Just a hacker and a geek.


Migraine through the day Friday. Less obtrusive Saturday. Still lurking in the background Sunday. Back to work Monday, after a weekend of miserably poor sleep, little rest, and considerable amounts of pain. Did I mention I had a very stressful week last week?

I must not make crude hunting pictures on the walls of my office with the blood of innocent co-workers

This will be tricky....


Another release in the pipe (v0.35). Although much remains to be tested, it's very nearly feature-complete. Although I am planning on rebuilding the Usecode_value class as a proxy to a polymorphic vector. That would make operator overloading rather tricky...but I don't think this class requires much of that. It promises to break lots of stuff first time round, but if anything runs at all, then it's right.


  • Jenn's in the Diablo II pit.
  • Want Xfree86 4.0.1. Don't want to abandon large chunks of debian to do it. Hrm.

Still necessarily silent on this front.


Still minimalist here, with some variations:

  • Picked up Planescape: Torment. The price finally dropped low enough to fall into my comfort-zone. Enjoying it. Gameplay is simplistic, but the text is well-written and copious. Tried a daily WINE build on it for fun. I was impressed. All the intro movies and the main game menu ran flawlessly, without jumps or jitters and at the same subjective speed as under windows. Loading a game almost worked, but it died when it tried to actually go into play mode. Much progress.
  • Python coding continues apace. I've been able to condense hundred-line perl scripts into 10 and 20 line python scripts that are trivial to read and maintain. Still getting to grips with some of the ideosyncracies of the lingo, but I'm no less impressed by the whole methodology that the language brings with it.
  • I note with some delight that XFree86 v4.0.1 is out. I slaver and drool and salivate in anticipation of it being debianised. I wants it, my precious. What d'you say, Branden?


Did a brain-dump of a subsumption architecture for AI in the game. Quite long and quite rambling, and I think it will have a few issues in implementation, but I also think it will work. Had a critical look at game AI in a number of games and was surprised at just how weak they were. 'Barely adequate within the environmental framework' was the phrase that came to mind. Which gives you some clues about the very scary ways that my mind works in.

No feedback on the braindump yet, but with the length of it and the timezone differentials, that's hardly surprising. Note that I don't allow that some of the recipients may not fully grasp the whole concept more or less instantly. That's another way my mind works. Not understand something? Good lord! That would only be because you haven't been given the information yet.

Rule 1: Nothing is hard to learn, unless you think it is

On the downside, in exult, it appears a number of constants may have been hard-coded into the engine. Bad, naughty, wicked Zoot! Must create a framework where we can abstract those into a separate data file, so Jeff can stop hard-coding them into our engine.

Talked with jeff about using multiple image buffers for display. Terrain and characters rendered onto buffer 1. Weather effects onto buffer 2 (we have clouds and rain and lightning now). Gumps (a term that refers to all the dialogs, books, signs, inventory screens and so forth) in the third. Then blit them all together for the final output. As it stands, when you're (for example) travelling northwards, all the rain ends up crowding to the southern edge of the screen. An odd effect, I must say.

Our Mac port appears to be minimally functional at the moment. I believe that now makes it: Win32, Linux, BeOS, and Mac. Max (our appropriately named Mac porter) is bouncing around the SDL newsgroup addressing all manner of things. We're so proud :)


Thinking about the next thing I want to do, after Exult. I want to do an open-source X-Com style game. I've got some hefty revisions and additions I want to cram in, including scriptable, branching stories, expanded strategy, and a new 'treeless' tech-tree concept that I'm still nutting out.

Just for fun, I wrote a basic engine that can display tiles from XcomIII: Apocalypse, and can mix and play the sound samples. It's crap, but it was just a proof-of-concept for the doing of it.

Feedback if you dare...


Grumble, nothing I can reasonably say.


life: command not found

Not currently having one, really.


Ah, we're on firmer ground here. Simple combat is implemented. Characters chase each-other around and hit each-other. From an AI point of view, it's rudimentary. Thinking about an autonomous goal-seeking framework. A basic subsumption architecture, if you will.

Quite a few people seem to be finding Exult 'inspirational', and are starting to push effort into lapsed projects. To me, that's one of the big benefits of Open Source...it encourages people to do good things, and write more things so that we all have more stuff to choose from.

And of course, their being inspired by us, inspires us in turn. A good cycle.

Some of these people are also working on projects that interest me. Now, if only we could cram more time into a day....


XFree86 4.0. Seems like every time I turn around at the moment, I bump into something that requires XFree86 v4.0 and the latest drivers for nvidia. Hrm. Of course, I use a debian system, and I don't want to blow all the packaging by wedging it on.

Feeback - if you will


Well, lookee. A dilemma of ethics.

Paul can express his honest opinions about the company and his work environment in a public forum - and diary entries or no, that's what these are.

I'm not as lucky as all that. I'm the old boy. For at least two reasons that I don't feel I can reasonably mention, people at the office who have problems come and tell me about them. They tell me what has (or hasn't) happened, how they feel about it, what they think, make a few predictions about the future, and occasionally ask me to make things better.

There are other people that they could go to, but they don't (for the reasons I failed to mention above). Granted, it's not everyone, but it's enough. That in itself is probably a good reason for my not saying any number of things about the place I work, for good or ill.

Another is that I would most assuredly offend some people if I followed my natural instinct to say what I think. Some days, I wonder if it's possible to make any third party reference to someone (good or ill) without risking offending them. Most days, I think it isn't. At least I can't risk offending my boss. I haven't got one. I'm an autonomous unit in the company, and just about the only one left. That's probably why people come to talk to me.

So, where does that leave us? I work for a company. It does company things. I have a team of people who do all the things I used to do, while I now concentrate on helping them do it, in the new environment. This takes up the major portion of my life.

Outside work

I have three friends outside the office who are not work- related, and a number of people I know well enough to nod at. I'm not sure that any of those would accept an invitation to coffee, though.

Of the three friends, one I knew before I moved here. The other two are friends of Jenn who I get on well with. I've not really been able to find any time for friend stuff since we moved down here.

Doesn't leave a lot of options for discussing things on a daily basis, does it? I have a lover, but that's intrinsically work-related, so I can't talk about that, and it would probably be both dull and bad-mannered to chatter about the details.

That brings us to Open Source

I actually turned down a request for help on a project because it's linked to the Qt library. Is that small-minded or what? Nevertheless, I did it. I don't use Qt, or contribute to anything that involves it for very complicated reasons. I'm not a political animal. Ask anyone (except anyone who's ever role-played with me...they don't count for the purposes of this discussion) and they'll tell you that.


Iterations and increments. "Patience and order...sequence and time". Feel free to try to place the quote.

Work is proceeding steadily. Weather effects are beginning to happen, and conversation code is getting cleaned up.

I've got my C++ jackboots on doing code-nazi things. While the discrimination logic for -Weffc++ is a little iffy, you should really try compiling your C++ code with it. It generates more horrible warnings than an opposition party before a major tax-reform implementation. (Some of you know what I'm referring to).

Feedback - an it please thee


We've made it onto Sourceforge's 'Most Active' list on their front page! Wow! This is attracting a fair bit of attention from users and we're getting lots of "This is way cool" and "Thankyou" emails. Very pleasing to the liver.

I reckon we've got about 70 percent of the game mechanics implemented. Combat's being worked on, as is the spell system, pathfinding now more or less works. Scrolling is being reworked to make it more like the original. In fact, we're half adding stuff at the moment, and half fine-tuning to make what we've implemented match more closely with the original.


Spent about three hours this-morning dealing with a panic bug in production. Ick. Didn't have time for a coffee until it was over. Much running around and screaming. Seems to be a subtle bug in one of the daemons. Ultimately, restarting that daemon on the two (of 30) afflicted boxen worked...though the bug appeared to be in a completely different (non-restartable) process for quite a while, until a process of elimination tracked it down.


Everyone I know who's tried it thinks it rocks. I tried it. It rocks.


Load/Save games working. Spell-book/magic system underway. Map display done. Pathfinding all over the place.

We've come a hell of a long way. I'm constantly surprised by how far, but I expect you've all guessed that by now.

We discovered that the audio was done by the Miles Sound System (v2.14). Tried to get information, and failed. Then the author released that version to the public. Been looking at the code. Horrors. Lots of assembler, some binary-only drivers and DOS code with far pointers. I've just looked through the code, but it looks like being a long road.

Still, we have something to work from, and something is often better than nothing.


Long delays. Mostly because there are all sorts of things that I really don't want to say in a public, or semi-public forum. Hence a delay while I saved some stuff up.


Acceptable enough to keep me there, for now. If I can avoid enough interruptions to actually do the work, anyway. If I can't, well, it's all a bit of a waste of time, then, yes?

Making good on my promises to Dan and the Matts about reducing hours worked. Got it down to about 45 or so per week, which will probably have to do.


And now we are six, with conversions for the Mac underway, and a preliminarly exploration of BeOS requirements. Been churning through the code, being Pedantic-Guy(tm), adding consts and virtual keywords, and compiling with loads of warnings.

While it shouldn't really be important, we're advancing steadily towards Sourceforge's top-projects list, being the 45th this week, and 65th of 'all time'. Like I said, it shouldn't matter. But it does a bit. In that it is pleasing to the soul.

I wasn't even aware that g++ had -Weffc++ ... delightful!

More and more of the plot-critical things are being implemented. We're getting close to doing vehicles (wagons/ships) which were on the timetable for a while back, but they got pushed out by other things.

The pathfinders work very well most of the time now, and we can plug in pathfinding algorithms willy-nilly whenever we want to, with relative ease. It's even tempting to make them dynamic shared objects, but I can't find any good excuse for it. :) OO (when used properly (which is rarer than you might think, out in the industry) can be an unalloyed joy.

Next, some kind of integrated debugger for usecode. Hmmm.


Pneumonia and general illness. Pills, potions, powders. Cold weather.

Bonus points: Friends in the USA sent us two "Fog" snow-weight coats quite some time ago. I now have a good excuse to wear mine.


Well, we're in the new office. Some personality clashes have made me thoroughly miserable, but they have really been going for some months now. It's not directly related to the move.

The coffee machine is plumbed in now, which makes everyone a lot happier. Though I am an instant-coffee drinker, the machine does save me the effort of boiling water, so that's a help.

People have complained to me a fair bit about the new office, and honestly, I didn't like the place much the first day. It grows on you, though. My team is together, and producing and extremely happy with the work they're doing and with how I'm managing them. This is a Good Thing(tm).

The major gripe people have with the office-space is the psychological change. The biggest two complaints are that people feel less accessible (even if that is not actually the case) and that they feel very second-class and insignificant in the new space. I don't have any good solutions to that. I can sort of see why they feel that way, though.

My modem line (from home to the office) has been giving consistant troubles since we moved. I've changed modems at both ends, as a test. No help. The line stalls/retrains and drops out every few minutes. Sometimes more frequently than that. Since it's a permanent link, the connection costs must be really mounting up. Damnit. I don't have a good solution to this :(


Release 0.26 is in the works. Any time now. Went through rationalising the calling structure for intrinsics. Going to do a little more of that soon. A reference to a structure will be much cheaper than passing the half-dozen arguments around all the time. As it is, though, the new model cleans up some ugly macros, restores syntax-highlighting to the file, and makes it go faster. I'm sure I can do better than that.

Walked through the headers where the game-object inheritance tree lives. Assorted classes with virtual methods, either without virtual destructors or without explicit destructors period. Added some virtual keywords, and inserted some empty destructors. While I was doing that I noticed some instance data (pointers). I don't know the class semantics of this section of the code well enough to know if that data is released before the object is destructed. Referred that to Jeff, and will take a further look at it myself.

26 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!