Lee Hardy Dydo

The Duck Pond

October 17, 2026 · Diablo Duck, part 2 of 3

By Saturday night the duck was a warrior, with a trainer menu built into the game. I loaded my save to play it and asked a simple question: when does the demo end?

1Where the shareware stops

There's no time limit. The free shareware version of Diablo is the town plus the first two levels of the dungeon. Take the stairs down from level 2 and the warrior says "Not a chance," and a message says that part isn't in the shareware. You can only play a warrior, a few townspeople won't talk to you, and most quests are switched off.

In DevilutionX, the open-source rebuild I'm playing on, every one of those limits is a single check in the code against one flag, gbIsSpawn. The stairs are one line in levels/trigs.cpp. Since I build the game from source now, every one of those limits is mine to lift.

2The fork

That's where the idea forked. I could buy the full game and reskin it piece by piece, or I could treat the shareware as a small, complete core and replace everything in it until none of it is Blizzard's.

I went with the core. Town and two dungeon levels is a whole game loop. Everything I replace there moves it toward being mine, instead of chipping away at a full game I'd never finish replacing. It also matters for sharing: the shareware was made to be passed around, and a game made entirely of my own art could be handed to anyone. The full game, when I get a copy, is reference: something to look at, not something the mod needs.

3A pond, a rabbit, a hole

If the hero is a duck, the town is a pond. Keep it as small as it can be: one person to talk to and one way down. A duck doesn't go into a cathedral. It goes down a rabbit hole, after meeting the rabbit, because the snake is down there.

The original town already has that shape hiding in it. The cathedral entrance has a townsperson right beside it, the wounded townsman who tells you about the Butcher. He doesn't appear in the shareware, because he only shows up when the Butcher quest is active, and the shareware turns quests off. That spot is where the rabbit will go.

4How a town is built

Tristram is three layers:

LayerWhat it is
LayoutFour "sector" files, grids of tile numbers stitched into one map, plus a few tiles the code places by hand (the boarded-up shortcuts the shareware keeps closed).
PeopleA table in the code: who stands where, facing which way, and what happens when you click them.
ArtThe town tile set: thousands of small isometric pieces that fit together into walls, roofs, grass and water.

The plan is to go in that order: layout first, using the old art, then the rabbit, then new art one piece at a time. A new map with old tiles is playable right away. And if the pond is built around the spots the code fixes (the dungeon entrance and where you arrive coming back up), the first version needs no code changes at all: DevilutionX reads loose files from an override folder before its archive, so the new map is just new files.

5Seeing the map first

The rule from part 1 holds: see it before you build it. Before editing a map, I wanted a picture of the one we have. So the first tool reads the game's own files and draws the town the way the game does: the sector files become a grid of pieces, each piece is a stack of 32-pixel tiles, and each tile is stored in one of six shapes (squares, triangles, trapezoids) chosen to waste as few bytes as possible in 1996. The decoding was ported straight from DevilutionX's renderer. It drew the town correctly on the first run.

The whole of Tristram drawn from the game files: the cathedral at the top, thatched houses around the well, the creek, and the forest to the west, with labels on the entrance and each townsperson
Tristram, drawn from the shareware's files by the new map tool. Yellow: the dungeon entrance and where you arrive. Blue: the townspeople.

The second view is the one for editing: top-down, one square per piece, with coordinates. It's the town laid out the way the code stores it.

A top-down grid of Tristram with coordinates every ten squares and markers for the entrance and townspeople
The same town, top-down, in the coordinates the code uses. The entrance is at 25, 29.

One thing it showed right away: the creek through town is drawn with water tiles. The pond can start with art the game already has.

6A catalog of tiles

A map file is just numbers, so before drawing a new one I needed to know what the numbers mean. The second tool draws every tile the town uses, with its number, how many times Tristram uses it, and how much of it you can walk on (green: all of it, red: none). Boulders are 63, the most-used tile in town. Plain grass is 1, 2, 5, 6 and 8. The creek is a dozen numbers in the 70s and 80s, each a piece of bank or bend.

Rows of isometric tiles from Diablo's town, each labelled with its number, use count and how many of its parts are solid
The top of the tile catalog, most-used first. "x196" is how often Tristram uses a tile; "s4" means all four parts are solid.

7The clearing

The pond town is a short script rather than a hand-drawn file: fill the whole map with boulders, carve an oval clearing around the dungeon entrance, scatter grass and a few trees, soften the edge with small rocks, and keep Tristram's creek wherever it crosses the clearing. A dirt patch marks the hole until it has its own art. The first oval only clipped the creek, so it moved two tiles west.

A grassy oval clearing ringed by boulders, with a creek running through the upper left and a dirt patch marked as the entrance
The clearing, drawn by the map tool before it went into the game.

Two things the map couldn't fix on its own. A new game starts you in the middle of old Tristram, which is now solid rock, and a save made in town would put you back inside the boulders. And the "Down to dungeon" label only appears over the cathedral's stair tiles, which are gone. Three small changes to the game's code: start at the pond, move a town save to the pond, and show the label over the hole's spot. Then a rebuild, 32 seconds.

The rubber duck warrior standing in the grassy clearing in game, a dirt patch just ahead of it and a bare tree to the left
In the game. The duck loads at the pond; the dirt patch ahead is the way down.

8A walk to the hole

Then I started a new game and the duck was standing in the boulders, out where the healer used to live. Loading a save had worked; starting fresh hadn't. A new character's spot doesn't come from the town code at all. It comes from a small table in the multiplayer code, nine squares around 75, 68 so that players joining together don't stack on one tile, and single player uses the first one. One more line to change.

While I was looking at it, I changed my mind about where the duck should start. Appearing right next to the hole skips the best part. So now he starts in a little nook in the rocks east of the clearing, and a dirt path with one bend leads him to the hole. Coming back up from the dungeon still puts you beside the hole, where you'd climb out.

A dirt path running from a small grassy nook in the boulders, around one bend, up to the dirt patch that marks the entrance
The start, the path, and the hole.

The hole works: click the dirt patch at the end of the path, "Down to dungeon," and the duck is in level 1.

9One townsperson

Tristram has nine people (plus cows). The pond has one. A single function in the game sets who appears, so the change is two lines: nobody is present except the town elder, Cain, and his spot moves from the town square to just beside the hole. Cain's job is the right one for a rabbit: he's the one who knows things, and he identifies the magic items you bring back up. He's renamed "The Rabbit" in his menu and when you point at him. He still looks like Cain until his sprite gets made, the same way the duck got made.

Removing eight people turned up one place that depended on them being there: the code that puts you back in town after certain quest levels looks up the drunk's position. The shareware never reaches it, but it would crash if it did, so it gets a fallback.

That's the town: a clearing, a path, a hole, and one neighbor who doesn't look like himself yet. Giving him his own look is part 3.