February 28, 2005

Ex Libris Reviews

The March issue of Ex Libris Reviews is now on-line.

Posted by Will Duquette at 06:57 PM | Comments(0)

Walkies!

Along with my diet, I'm supposed to walk for 30 minutes every day. It took me a couple of days to work out a nice route, but I've been keeping up with it pretty well. The two big obstacles have been the rain and boredom. I solved the rain problem at the end of President's Day weekend, when it rained pretty much non-stop--I went out and got us a family membership at the local YMCA. On days when it rains I can go in and use a treadmill for half-an-hour instead. It's not the same, but I guess it's better than nothing.

So far as boredom goes, well, I've got my iPod. While walking, I prefer to listen to something with a bit of a narrative thread to it, so I started with my Monty Python albums, followed by Flanders & Swann (At the Drop of a Hat and At the Drop of Another Hat). At that point I was in danger of running dry, and so I decided to check out Audible.com's collection of audiobooks. And just on the off-chance, I did a search, and wonder of wonders, what did they have but....

Well, you see, one of my favorite books is The Screwtape Letters, by C.S. Lewis. And it so happens that ten or fifteen years ago John Cleese, of all people, recorded an absolutely wonderful two-cassette reading of the book. Our copy died of old age, and I've never found a replacement. I've checked Amazon occasionally, and they will indeed get you a used copy--for $100. That's One Hundred Dollars. When last I checked, they had 1 copy for sale and two buyers waiting. So when I went to Audible.com, I naturally took a look. And in fact, they have it available for download for $10. That's Ten Dollars. (You do the math.)

So this last Friday it rained, and I went to the gym and used the treadmill to Flanders & Swann, and that evening I downloaded The Screwtape Letters. And the next morning, my two boys decided to go on my walk with me. And on Sunday, my younger boy, James, wanted to come again. And he wanted to come walk with me today, too. And while we've been walking, we've talked about all manner of things: flood control dams, and wells, and the water table, and how we learn, and power generation, and wind mills, and hydro-electric turbines, and salmon, and golden retrievers.

Meanwhile, ol' Uncle Screwtape is languishing on the iPod, unlistened to. But I'll tell you, I'm not bored. If necessary, Uncle Screwtape can languish until the next rainy day.

Posted by Will Duquette at 06:27 PM | Comments(1)

February 25, 2005

The Siege Continues: Week 2

I suppose I should give an update on my awful diet.

Oddly, Jane's having a harder time with it than I am. I'm over the head and body aches of the first week, and I'm feeling rather good; I'm just bored with the food I have to eat. Jane, on the other hand, is sick to death of providing it, for which I do not blame her. When my next appointment with my doctor rolls around, Jane says she's going to do her best to get the doctor to expand the list of acceptable foods a bit, just to make life easier on the cook.

For my part, I don't want to get involved. I find I do better if I simply eat what's put in front of me, and try not to think about it too much. Fortunately, I'm not a gourmet; not thinking about it is easier than I would have guessed.

I guess there is one milestone I should note: today I went to a real restaurant for the first time since I started my diet just over two weeks ago; it was a goodbye-lunch for one of my co-workers. We went to a local Persian barbecue place where I had something called "chicken barg"--a chicken breast pounded into a long, flat
ribbon and barbecued on a skewer. Now, frankly, seasoned chicken breast is seasoned chicken breast; I've been eating a lot of it recently, and it's getting a bit tiresome. But this was still pretty good--and it means that Jane and I can actually get a baby-sitter and go out to eat somewhere. Woo-hoo!

Posted by Will Duquette at 08:36 PM | Comments(0)

Death's Jest Book, by Reginald Hill

It's been quite a while since I've reviewed a Dalziel/Pascoe novel; mostly because I acquired its predecessor, Dialogues of the Dead, while I was in Australia a couple of years ago, and apparently the Commonwealth countries get them before we do. Consequently, it's been a long dry spell.

No matter. Death's Jest Book is worth the wait. Not only is it a fine murder mystery in its own right, easily as good as the earlier books in the series, but it also picks up a number of threads that Dialogues left dangling and ties them neatly into bows. The enigmatic Franny Roote--is he an innocent man, or a charming sociopath? And will the true perpetrator of the Wordman murders ever be discovered? I hesitate to say any more for fear of giving something important away.

It's an odd and unusual book, even for Hill, and I read it with great enjoyment. For obvious reasons, though, it's not the one to start with.

Posted by Will Duquette at 07:01 PM | Comments(0)

February 22, 2005

Charlie and the Great Glass Elevator, by Roald Dahl

The boys loved Charlie and the Chocolate Factory, and so I immediately went looking for the sequel, which I dimly remembered from my childhood. On the whole I'm rather sorry I did, because it's a lesser book altogether. The book contains two mostly disconnected stories of only moderate interest, a few verbal gems, and vast dollops of cynicism with regard to the office of the President of the United States. It's not that I regard the President to be beyond criticism; it's just that I don't really think cynicism about our society and its institutions is proper in a book I'm reading to an eight-year-old and his little brother. My fault; I should have re-read it myself before starting it with David and James.

That said, the Vermicious Knids are pretty cool, and I rather like the Nurse's song about how her charge became President:

And now that I am eighty-nine,
It's too late to repent.
The fault was mine the little swine
Became the President.

Posted by Will Duquette at 06:14 PM | Comments(1)

February 20, 2005

There Will Be Dragons, by John Ringo

This is an interesting book--a little slow to get started, but an interesting book, and a remarkable achievement. Ringo has created a fantasy realm with all of the usual trappings--warriors, great heroes, elves, dragons, orcs, demons, wizards, and so forth--and he's set it in the far future and given it a science-fictional explanation. That's right, it's really a science-fictional world (O the wonders of nanotechnology) in which all of the trappings of traditional heroic fantasy make sense!

It's that last bit that makes the premise so remarkable. It requires extremely high-tech, the kind that's indistinguishable from magic, to breed elves who live forever, orcs who will fight whenever, and dragons that can fly whereever, and yet given the pre-industrial setting that tech can't be available to the general public. If it were, everyone in the book would be a wizard.

And so, in fact, they were. Earth was a veritable utopia. Every citizen could spend his time doing anything that interested him, with every need met by the nanites of the 'Net. Even food production was no issue--Mother, the vast AI that maintained and protectedthe 'Net, had records of every kind of dish one could wish for, and the nanites could assemble it from atoms in moments. Indeed, one could have one's body sculpted into almost any form

And then came a division in the Council, the small group of individuals who oversaw Mother and the rest of the 'Net. The division turned deadly, and soon the two factions were fighting in earnest to wrest full control of the 'Net from each other. As all power reserves were drawn upon to this end, power became unavailable to the rest of the population--and all that nice, juicy high-tech magic became unavailable. Civilization crashed over night. Only a very few people retained any kind of use of the 'Net. The remainder were forced to learn to grub for food and build shelters out of natural wood, and all manner of archaic unnatural acts.

Unnatural, that is, except for a handled of "reenactors", descendants of our present day Society for Creative Anachronism, who knew how to farm, and to forge iron and steel, and raise animals, and mine for ore, all because, in their long lives, that's what they had become interested in. And around the settlements of such folk, civilization slowly began to grow again.

As I say, it's an interesting book, with a number of memorable characters; and though there are some parts I disliked, I plan to keep an eye out for the sequel.

Posted by Will Duquette at 09:08 PM | Comments(0)

February 17, 2005

On Thud, Blunder, and Poorly Spilled Ink

Ian (whose blog is not the only one I read, though for some reason it's one of the few I regularly link to) today posted an excerpt from L. Sprague de Camp's beautiful essay "On Thud and Blunder", which de Camp has made available on-line at the SFWA website. I've got a copy of it in an old de Camp anthology, but I hadn't read it in years.

The essay is a call for authors of heroic fantasy, aka "swords and sorcery", to spend more time getting the details right, with lots of examples of things authors and would-be authors get wrong. For example: nobody rides stallions; it's dangerous and unnecessary. You can't ride a horse at a gallup all day long; you must alternate gaits, and probably you'll need to bring some remounts with you, and there are lots of other things you'd better do or your beast is likely to drop dead. It's extremely dark in a city at night when there are no electric lights, much darker than in an open field, and there are just as many interesting things to step in. Swords will not, in general, cut through either mail or plate armor no matter how much you'd like them to. Like that. It's a fun article, and it makes me want to go out and read some more period history so's I can set fiction in it.

Better than that, it's just one entry on the SFWA's Writing page. There are quite a few other essays there; many concern practical matters like how to find an agent, how to submit a manuscript, and so forth, but many concern the craft of writing fiction itself. If you have any desire to write fiction, I suggest you hie yourself over there immediately, as it may save you trouble in the long run.

Update: Speaking of blunders, I attributed the essay to L. Sprague de Camp when in fact it's by Poul Anderson--no small mistake. The odd thing is that I distinctly remember reading this essay in an anthology of de Camp stories I've got. I don't have time to check it now, but of course it won't be there. Which leaves the question, where did I read it? I don't believe I have any corresponding Anderson anthology that it could be lurking in. Might it have been in one of the Flashing Swords anthologies? (Chuck, do you remember where the heck we read this? I remember you pointing it out to me....)

Update: My brother Charles assures me that I did read "On Thud and Blunder" in one of the Flashing Swords anthologies, except that the series wasn't entitled Flashing Swords, but rather Swords Against Darkness. In fact, it was in Swords Against Darkness #3, published in 1973, which he still has.

Do you ever have the feeling that sometime in the last decade you've stepped into an alternate time stream? I was sure the series was entitled Flashing Swords, and I'd have been willing to bet money that Swords Against Darkness was one of Fritz Leiber's Fahrd and Gray Mouser novels. I'm mistaken, of course, convicted in the court of Google and Amazon. Ah, well.

Posted by Will Duquette at 06:22 PM | Comments(0)

The Seige Continues: One Week

Some reasonably disjointed observations:

Well, I've now completed the first week of my diet. So far I haven't cheated on the diet, or been seriously tempted to, for which I thank the Good Lord. And also Jane, who's been making sure that I'm well fed even if on unusual things. And although we're still experimenting with new dishes there's been nothing else as bad as the Greenish-Brown Cylinders of Doom.

I've even been getting my 30 minutes of walking in every day, until today. Today it's raining, and we haven't worked out a solution for that yet. Either we're going to get a treadmill or a membership at the local YMCA, and most likely it will be the latter. That gives me an opportunity to use a treadmill on rainy days without giving it house room. Today, though, I have neither treadmill nor membership, and it's pouring, and there are frustrated drivers out there. I'm staying in here.

How I feel is actually kind of ironic. All week, I've felt like I had the flu. All the women at work have told me that it's normal to feel lousy during the first week of a diet, especially a no-carbs diet, because your body's craving that sugar. Today, though, I feel a lot better...except for that nasty cough that started to develop yesterday afternoon. I'm willing to attribute body aches and head aches to the diet, but the cough, I think, has to be due to a cold. Lovely.

Everything always happens at once. As it happens, today, tomorrow, and Tuesday are days when I simply have to be at work--my project's making a delivery, and if I'm not there to make sure that the correct hoops are jumped through by the correct seals (myself chief among them) there will be no end of grief. Fortunately I can more or less collapse this weekend.

Posted by Will Duquette at 06:07 PM | Comments(0)

February 15, 2005

Uneasy Money, by P.G. Wodehouse

Uneasy Money came as quite a pleasant surprise. It's a transitional work, published in 1916, before he'd fully constructed his world of farce and foolishness, and hence has a more realistic tone than the Jeeves or Blandings tales--indeed, except for a few short moments it isn't really a farce at all. On the other hand, the overly realistic atmosphere that mars the earlier A Gentleman of Leisure is completely missing.

In consequence, Uneasy Money falls into a category all of its own: it's a delightful romantic comedy written in Wodehouse' remarkable style. Because of the extra bit of realism, it matters that our hero marries the right girl, who is indeed a real peach, sweet, pretty, and capable of taking care of herself in every way that matters.

Our hero, William Lord Dawlish (Bill to everyone), is especially remarkable. Like many a Wodehouse leading man, he isn't the sharpest tack in the carpet; but he's solid. He has integrity--if it's not playing the game he simply won't do it. He'd love more than anything else to settle down and farm or something of the kind, but as impoverished peer he's got no money to invest, as a peer of any kind employers won't take him seriously, and he won't suck up to the kind of bounders who might advance his career for their own sakes.

It's a common scene: one of a pair of lovers is found in a seemingly compromising but actually innocent situation, and the other refuses even to listen, instead rushing off in a snit. (Don't you hate that?) Bill's the kind of guy who would listen--and assume his girl was telling him the truth, purely as a matter of course.

Anyway, I enjoyed this one thoroughly, which in this case means "more than usual for Wodehouse". Don't miss it.

Posted by Will Duquette at 07:02 PM | Comments(0)

The Ramble Chronicles: Ramble 0.4

Ramble 0.4 is now available for download at the Ramble Home Page. It has a number of major enhancements over Ramble 0.3.

Update: 7:29 PM: If you've already downloaded Ramble 0.4, you should do so again; the original version had a trivial error that breaks detection potions.

The more notable changes are as follows:

Visibility Model: The visibility model has changed. Instead of complete visibility, you now have persistent line-of-sight visibility; monsters are visible with strict line-of-sight within a 20-tile radius.

It's therefore no longer necessary to have a reduced viewport, and so the viewport is now twice as wide.

Combat Model: I've adopted a simplified version of the Angband combat model instead of the Advanced Dungeons & Dragons model I'd been using.

Monsters Galore: Partially as a result of adopting the Angband combat model, I now have monsters galore, and they get nastier the deeper you go. Most of them are roughly equivalent to Angband monsters in terms of combat statistics and general behavior.

Specifics of monster behavior still need to be worked out, and I need to add many, many more monsters to the game.

Equipment: You're now responsible for deciding what weapons and armor you'd like to use, buying them, and equipping them. There are many new kinds of weapon hand weapon and missile weapon, and many kinds of armor.

Level Design: There are some tweaks to level design, including one entirely new kind of level.

Regeneration of Health: You now get your health points back slowly over time, even without quaffing health potions.

Et Cetera: And of course there are a few surprises. You'll probably want to visit the Trouserville Public Library and see what the new commands are.

Posted by Will Duquette at 06:10 PM | Comments(0)

February 13, 2005

Good Advice: Just Say Yes

Ian says that this is good advice for screenwriters; I'd say it's good advice for software developers as well, and probably for anybody involved in doing creative work for a customer. In short, when asked to do something you think is a mistake, say "Yes." Then find out what they are hoping to get from it; they have a reason for asking. Then think about it, and see if you can figure a way to get them what they want. Then take your answer back to them.

Sometimes their request will be fatally flawed, but you'll be in a position to explain, patiently and without anger, just why it's a bad idea. Sometimes you'll find that your initial reaction was mistaken. And sometimes you'll be able to propose a better way to get them what they want. And no matter what the result is they know you've taken them seriously, and tempers will be much cooler without that big "No" hanging in the air.

As a side note, my favorite way of saying "You're mistaken" on such occasions is, "Actually, that turns out not to be the case."

Posted by Will Duquette at 09:20 AM | Comments(0)

February 11, 2005

Day 2: The Siege Continues

Actually, things are going fairly well with my new diet, though I'm still undeniably grumpy about the whole thing. Jane's being wonderful about it, and is actively looking for ways to make my meals both tasty and varied, for which I am extremely (and vocally) grateful. (Jane's the cook in the family; I can scramble eggs OK, but I'm not allowed to eat any, so that doesn't help.)

However, it's clear to both of us that a number of her experiments are going to flame and burn (metaphorically speaking). Yesterday, for example, she fixed me four soy-based breakfast sausages from Trader Joe's. I'm fond of Trader Joe's, but sometimes they let ideology trump edibility, and this was such a case. I felt like Arthur Dent, being served something almost but not quite entirely unlike sausage.

I hasten to add, the problem wasn't simply that they were soy-based. Jane regularly buys some kind of microwavable vegetarian sausage patty that she makes for the kids. I've tried them, and while I don't like them much they do a pretty good job of mimicking real breakfast sausage. Not a really good job, but pretty good.

The four cylinders of doom I found on my plate, on the other hand, were like breakfast sausage in shape only. In taste and texture (and color!) they were like nothing on earth. We agreed not to try them again.

We salvaged breakfast, however, and lunch and dinner yesterday were really quite good, as were breakfast and lunch today. Dinner was another experiment, and something of a failure in that neither of us particularly liked it or would want to have it again; on the other hand, and we both cleaned our plates.

There will be many more experiments in the days to come, and some of them are bound to bomb; it can't be helped. But at least few even of the failures are likely to descend to the level of the cylinders of doom.

Meanwhile, Jane's being a trooper about the whole thing; and diet or no diet I'm an extremely lucky man to have her.

Posted by Will Duquette at 07:27 PM | Comments(0)

February 09, 2005

The Juice of an Orange

I have just been informed by my doctor that a number of important indicators are "too high" and must be reduced. I will not go into the sordid details, but part of it is that for the next two months I am to embark on a rather radical diet, something like the Atkins diet with the nice parts left out. As I said to Jane when I got home from the doctor's office, "I'm giving up food for Lent." This is combined with the usual suspects, i.e., regular exercise, diet supplements, and a check-up in one month's time.

I am put in mind of a short story by P.G. Wodehouse, entitled "The Juice of an Orange", in which the protagonist, one of the lower forms of life at a major Hollywood studio, is placed by his doctor on a rather special diet. For breakfast: the juice of an orange. For lunch: the juice of an orange. For dinner: the juice of an orange. Period. The effect is dramatic. Once a spineless yes-man, he becomes within mere weeks so thoroughly fed up with orange juice in specific and the world in general that through sheer bad temper he becomes the number two man at the studio.

Me, I don't even get orange juice.

I am, however, to walk for at least 30 minutes every day. After informing Jane of the catastrophe, I set out (iPod in pocket) to set a baseline. I went down the street, along past the elementary school, up another street to the local park, through the park and out the other side, and along a couple of other streets back to my house. Round trip time--18 minutes.

Did you know, it's very difficult to extend a brisk walk at the end of the loop? You have to do it in the middle, when you're less tired--and then, of course, you have no choice but to walk the additional distance home.

Sigh.

Posted by Will Duquette at 06:00 PM | Comments(1)

February 08, 2005

Picadilly Jim, by P.G. Wodehouse

In most ways this is a typical Wodehouse farce, but it has a unique twist. Imposters are a dime a dozen in Wodehouse, but I've not previously run into a case where a gentleman goes to a country house pretending to be himself, and is terribly afraid lest anyone discover that he really is himself.

No Bertie, no Jeeves, no Blandings; this is yet another fine standalone novel, and it's Wodehouse, which really says all that's necessary.

Posted by Will Duquette at 06:59 PM | Comments(1)

February 07, 2005

Rambling, Rumbling, and House Guests

Ramble's been taking up my blogging time for the last couple of days; and we've got house guests for the next week. Blogging might be slight for a few days.....

Posted by Will Duquette at 06:53 PM | Comments(0)

February 04, 2005

The Ramble Chronicles: Maze Generation 2

In Maze Generation 1 I discussed how to generate a rectangular "perfect" maze using the recursive backtracker algorithm, and gave a detailed implementation in Tcl. Here's a maze I generated in this way:

Perfect mazes can be fun to solve, but they really don't make very good dungeon levels. A perfect maze can be described as a tree: there's exactly one path from any given cell to any other cell, and there are no cycles--that is, you can't walk in a circle anywhere in the maze, and there are usually lots of dead ends, some of which are so short they're just annoying. On top of that, two cells on opposite sides of a wall might end up being quite a long walk from each other. This is frustrating if a detection spell has shown you a treasure hiding on the other side of the wall--which can be a good thing, actually, but not all the time. The dungeon's going to be frustrating enough, what with fierce beasts and horrible monsters and all, and so the dungeon itself should usually be just a bit friendlier, with fewer dead ends, especially short ones, and a fair number of cycles. So in this essay I'm going to describe several operations that can be performed on a perfect maze to make it more suitable for use as a dungeon level.

Sparsification: Building the maze involved carving out new rooms and adding them to the maze one by one. Sparsification--which I suppose could also be called pruning, though I like the word "sparsify"--is the process of removing all of the dead-end cells from the maze. The process can be repeated as many times as desired. The result is a maze with few short dead ends and many longy twisty passages. The basic algorithm is as follows:

  • Do the following n times:
    • For each cell {i j} in the maze,
      • Add the cell to the Dead Ends list if it's a dead end, that is, if it has exactly one wall removed.
    • For each cell {i j} on the Dead Ends list,
      • Restore the missing wall, thus removing the cell from the maze.

You can also make the removal conditional, e.g., add the dead end cell to the Dead Ends list only 25% of the time.

Here are two views of the same maze, first as it was originally generated, and next after being sparsified twice. The effect on a larger maze is even more dramatic.

Connectification: Sparsification eliminates some short dead ends, and adds some dead space, which gives the maze an interesting texture; however, it doesn't add any cycles. For that we want to connectify the maze.

Like sparsification, connectification focuses on the dead ends in the maze; but instead of closing them off, it instead removes one of the three closed walls, connecting the room to another part of the maze. I find I get the best results if I usually pick the wall opposite the entrance to the cell. If that wall can't be used, then I pick one of the other walls randomly. The algorithm is as follows:

  • For each cell in the maze,
    • If the cell isn't a dead end, go on to the next cell.
    • Examine the three closed walls, and determine which of the three could be opened. A wall can be opened if:
      • It's not on the edge of the maze.
      • The cell on the other side is connected to the maze. (If we've sparsified, it might not be.)
    • Of the three, if the opposite wall from the entrance can be opened, open it.
    • Otherwise, randomly pick a wall that can be opened, if any, and open it.
    • If no walls could be opened (again, this is quite possible in a sparsified maze) leave it as a dead end.

Here are two views of a maze, first as it was originally generated, and then connectified. As you'll see, it's much easier to get around in, but still nicely twisty.

As I hinted above, you can get interesting results by combining the two operations. Here are before and after shots of a maze which was sparsified twice and then connectified:

To my eye, that's really quite nice. Lots of long, snaky corridors that feed into one another, and one big dead-end at the lower left.

Now, if you've been paying attention there's a question that should have occurred to you; indeed, it should have occurred to you in my previous essay on mazes as well. The walls in these mazes I've been showing you are mere lines, separating square cells. But Ramble is a tile-based game--walls are represented by wall-tiles, which are necessarily one tile wide. In order to use one of these mazes as a dungeon level, then, I need to somehow convert it from a maze to a tile map.

As I explained in Maze Generation 1, a maze is a matrix of integers; the value in each cell indicates which walls have been opened. A tile map is also a matrix, but in this case each cell contains a value that indicates what kind of tile it is.

Now, there are many ways in which I could generate a tile map from any of the mazes I've shown in this essay; the most obvious is to add a floor tile for each room in the maze, a row of wall tiles for each horizontal wall in the maze, and a column of wall tiles for each vertical wall. If the original maze had size m*n, the new tile map will have size (2m+1)*(2n+1). The mazes shown above were all 10*20; the resulting tile map would then be 21*41.

Just to make it clearer, here's a picture of a tile map that's equivalent to a blank maze, that is, a maze in which none of the walls have been removed. As you can see, each room is separated from each adjacent room by a wall that's one tile wide:

The algorithm for converting a maze to a tile map is then as follows:

  • Initialize the tile map to all wall tiles.
  • For each cell in the maze,
    • Identify the corresponding cell in the tile map.
    • Put a floor tile in that room.
    • If the maze cell is open to the east, put a floor tile in the tile map cell to the east.
    • If the maze cell is open to the south, put a floor tile in the tile map cell to the south.

It's that easy. Here's a picture of a maze, sparsified twice and connectified, and the corresponding tile map:

Now that's just plain lovely, and a delight to wander about in. In a larger maze I'd probably want to add some large rectangular open spaces, just to connect things up even more.

I've got individual Tcl procs for each of these operations, naturally, but mostly I use a single command called tilemaze, which generates the maze and then modifies it as desired. It looks like this:

tilemaze M N ?options?

Where M and N are the number of rows and columns in the finished tile map (both must be odd), and the options allow you to:

  • Specify the specific wall and floor tiles to use.
  • Specify whether the tile map has a border of wall tiles or not.
  • How many times the maze should be sparsified.
  • Whether the maze should be connectified.
  • How many "plazas"--open spaces--should be created.
  • The minimum and maximum plaza size, in rows and columns.
  • Whether the maze should have doors in it.

The implementation of that last option is a bit of a hack, but it effectively what happens is that each wall removed during connectification gets turned into a door in the tile map.

And then when I actually want to generate a dungeon level, I call tilemaze with random options:

  • The wall tile is usually "rockwall", but 25% of the time it will be "water". (The tile maps shown above use "rockwall".)
  • The floor tile is usually "tilefloor", a hexagonal pattern, but 25% of the time it's "sand". (The tilemaps shown above use "sand".)
  • 20% of the time, the maze is sparsified twice, and 20% of the time its sparsified four times.

  • The maze is connectified two-thirds of the time if there are no doors, and always if there are doors.
  • There are doors 25% of the time.

Every so often I modify these parameters a bit, but I find that they generate a nice wide range of tile maps. Water maps are especially interesting, because although water blocks movement, it doesn't block sight.

Did I mention that I've implemented incomplete visibility in the current development version?

Posted by Will Duquette at 08:16 PM | Comments(0)

February 03, 2005

A Love Letter

It's a family joke that my mother-in-law grew up in prison. And the funniest part is, it's completely true--when she was a young girl her father, Barnett Huse, was the assistant prison warden at Folsom and later San Quentin prisons in California. As the Number Two man at the prison he was entitled to live with his family in a nice house that was actually inside the prison walls. They also had a houseboy, a Chinese man who was devoted to little Barbara. He was a convict, of course; according to Jane's family lore, he'd been a ring-leader in the Chinatown tong wars in San Francisco.

But I was speaking of little Barbara's father.

During WWII Barnett Huse was given command of Camp Roberts, a prisoner-of-war camp in the California desert. The POWs were Italian and German soldiers. The phrase "POW camp" has an ominous, alarming ring to it, but Camp Roberts was no Stalag 17; it wasn't even a Gitmo. There was no fence; the nearest water was 50 miles away, as Barnett informed new prisoners, and he was giving no hints as to the direction. If any prisoner wanted to run off to go looking for it, well, maybe somebody would find him before he perished of thirst. Meanwhile, here's a sack of fresh onions, and garlic, and other food stuffs; you get to cook for yourselves. Let us know when you've used up the onions, we'll get you some more.

Onions! Garlic! The prisoners hadn't had fresh vegetables in months. And they got three square meals a day, and they hadn't had that in months either. Truth to tell, I gather that few were all that eager to run off.
They were all released after the war, of course, and some of them stayed here; others returned home to Europe and later came back to the States to live.

Lest you should think I am painting an overly rosy picture, my mother-in-law has a letter to Barnett from a German officer, a doctor, who was an inmate of Camp Roberts. It's a remarkably warm, cordial letter; evidently the commandant and the doctor had become good friends.

But all of this is by way of introduction. Barnett and his family had a cocker spaniel named Judge; during the war, Judge stayed home with Barbara and her mother. Once at Camp Roberts, Barnett acquired a springer spaniel named Lady who accompanied him all over the camp, growling at prisoners who got too close. And on April 16th, 1945 Lady wrote a letter home. It's neatly typed, and I imagine she must have had some help. It reads as follows:

Dear Judge:

I trust that you will pardon my writing you this letter, for altho we haven't been introduced I'm sure that you must have heard about me. So that you will get some idea of what I really look like, I'm having some pictures inclosed which were taken with the man we both manage - the fellow who likes to think that he is our master. Now these pictures don't particularly do me justice - they were taken at a time when the Mess Hall was open for business and I just couldn't get my mind on the silly business of a picture when I could have been over at that open door waiting for some chow. So, most of the pictures will show me sitting down, this being the only position where they could keep me semi-still and looking at the man with the camera. I've been told that you like to eat - well, it's my favorite pastime too - and I don't believe in letting anything interfere with it. however, when we do meet I can only hope that you remember that I'm a Lady and get out of my way when there is FOOD in the offing - otherwise I'm pretty handy with my teeth for other purposes than eating. Mostly my disposition is very good, and I hope you're the same. But, then I guess I just can't expect too much, considering the family we belong to; they are enuf to spoil the manners of any dog.

I've had a pretty busy day keeping track of this master of ours; made some inspections with him, only places I miss going with him are into the mess halls - damn it! Right now it is time for us to take a short walk and then I'll crawl under his bed. By the way, do you snore much? They tell me that I snore like a freight train, but my master reaches down under the bed and swats me and I turn over and keep quiet till he goes back to sleep.

Sure hope I get to see you before very long - I'd like to look over the collection of bones in your back yard. Good night now, give my love to your two Mistresses and tell 'em our master loves them very much also.

Love and best wishes, from

Lady

Posted by Will Duquette at 07:56 PM | Comments(0)

February 02, 2005

Ex Libris Reviews

The February Issue of Ex Libris Reviews is now on-line.

Actually, it's been on-line for a couple of days, but I forgot to post a notice.

Posted by Will Duquette at 04:40 PM | Comments(0)

February 01, 2005

Sour Cream and Chides

Ian still thinks it's remarkable that I'd not previously read Dashiell Hammett, but takes exception to my claim never to have seen any of the film adaptations of his books. In particular, he's sure I must have seen A Fistful of Dollars, which is based on Kurosawa's Yojimbo, which is based on Hammett's The Glass Key.

Well, yes. Yes, I have. Just a year or so ago. And since I saw it with a buddy who's a Kurosawa fan, I knew about that link as well (though I've not seen Yojimbo yet). But you know, the credits for A Fistful of Dollars don't say "A competent Italian ripoff of a Japanese Masterpiece inspired by an OK Hollywood picture based on a book by Dashiell Hammett."

Really, they don't.

Posted by Will Duquette at 09:00 PM | Comments(2)