<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://blog.nevinera.dev/feed.xml" rel="self" type="application/atom+xml" /><link href="https://blog.nevinera.dev/" rel="alternate" type="text/html" /><updated>2026-11-04T15:04:48-05:00</updated><id>https://blog.nevinera.dev/feed.xml</id><title type="html">nevinera</title><subtitle>Building Delve, an open-source MMO, and other things.</subtitle><author><name>nevinera</name></author><entry><title type="html">What is Delve?</title><link href="https://blog.nevinera.dev/2026/11/delve/" rel="alternate" type="text/html" title="What is Delve?" /><published>2026-11-04T00:00:00-05:00</published><updated>2026-11-04T00:00:00-05:00</updated><id>https://blog.nevinera.dev/2026/11/delve</id><content type="html" xml:base="https://blog.nevinera.dev/2026/11/delve/"><![CDATA[<p>I have long wanted to build a game, essentially a cooperative dungeon-delving game, based on
(my nostalgia-tinged recollection of) the BC-era World of Warcraft dungeoneering experience.
It was challenging, it had internal progression, and it created a <em>social</em> context that I valued
and still miss - before the random-grouping mechanisms were introduced, you had to find people
to play with, and accumulate a list of competent people that you could trust and who trusted you to
play well enough and be familiar with the content.</p>

<p>Earlier this year, I started using Claude Code for various work projects, and I realized that,
while I don’t have the kind of time that would be required to solo/indie-dev even a significantly
reduced game at that scale, I <em>do</em> have the time to manage an LLM doing so. And I started, with
what I then considered an ambitious plan - a 2D dungeoneering game, designed to be <em>user-contributable</em>
in the sense that Minecraft is, and not just open-source.</p>

<p>My intent then was: make a game that is functionally a multiplayer delving game, on a set of linked
two-dimensional map images. Represent the characters and enemies as <em>tokens</em> (as one might use in a
Roll20 D&amp;D game), and combat graphics as transparent animations or images. Define everything (not
just maps, but units, unit abilities, classes and their powers) all in <em>configuration files</em>, which
the users would just host in a GitHub repository of their own - that repository’s raw URLs function
as the CDN, and the server never has to read most of it (the graphics/maps/audio go to the client
straight from GitHub). An editing tool that allows someone to build dungeons, units, and classes in the
browser, using <em>their GitHub repo</em> as the backing store.</p>

<p><img src="/assets/images/2026-11-04--early-delve.webp" alt="Early Delve" /></p>

<p>And it was kind of working! After designing the instancing strategy though, I realized that there’s
no reason I couldn’t have open-world zones that were <em>also</em> instances, capped at ~25 characters at
a time (I didn’t realize yet then that that’s a standard strategy, which WoW called ‘layers’ and then
later ‘shards’). So I got happily to building, generating sets of icons, heaps of simple orthographic
images for objects to stamp onto maps, and sorting out hundreds of tokens from Too Many Tokens. But..
making the maps themselves was <em>so slow and painful</em>. I was using Inkarnate, which is a solid tool,
but hand-building maps was super time-consuming, partly because <em>I’m bad at that</em>. After I made half
a dozen maps, and started realizing just how many I needed to make a reasonable-sized first “zone”,
I felt brief despair, but Watabou’s map generators looked like just the tool I needed!</p>

<p>So I spent some time learning about map generation, and generated vector art like they used, and
produced something <em>pretty decent</em>. But the images were huge, so instead I started distributing the
map’s base data, and having the <em>client</em> construct the image (took about 12ms). And I got all the
way to “combat works, though it’s not very balanced” and “looted equipment with functional stats”
when I realized.. this game was <em>bland</em>. Everything looked kind of the same - it was very difficult
to create any visual identity when the generator owned much of the look and all the units were tokens.</p>

<p>So I took a short break, and built something else I was wishing for - I occasionally use Tabletop Simulator
to play board games with friends in other states, and it’s kind of heavy; what I wanted was basically
the same capability, but with the physics cut off, and able to run in a browser (I specifically wanted
to play The Elder Scrolls: Betrayal of the Second Era with a friend of mine). So I took a swing at that,
and learned about 3D rendering in the process..</p>

<p><img src="/assets/images/2026-11-04--pachisi.webp" alt="tabletop game of pachisi" /></p>

<p>When I finished building that, I had some <em>ideas</em>, so I spiked a 3D rendering of some generated landscape
(learned a <em>lot</em> about performance optimizations in WebGL), and the results were promising.</p>

<p><img src="/assets/images/2026-11-04--3dprototype.webp" alt="3D Delve prototype spike" /></p>

<p>So I dove in - this time I <em>knew</em> the effort was all going to be the content generation, so I started
off with a focus on building the tools to do it with.</p>

<p><img src="/assets/images/2026-11-04--heightmaps.webp" alt="heightmaps" />
<img src="/assets/images/2026-11-04--3d-geomapping.webp" alt="geomapping and larger-scale rendering" />
<img src="/assets/images/2026-11-04--editor-high-view.webp" alt="high-flying editor view" /></p>

<p>I recently spent a fair amount of time working out a reasonable way to represent and edit <em>caves</em>
in my terrain, because I was utterly unsatisfied with the experience on the first several
implementations I tried. I ended up with a smoothed voxel-based solution, where you lay out
the cave at large scale with one set of tools, then “bake” it, so you can do further detail-editing
with Minecraft-style voxel management and object placement. I’m not confident that’s the final system,
but it certainly works well enough for now!</p>

<p><img src="/assets/images/2026-11-04--layout-ghost-mode.webp" alt="layout overview render" />
<img src="/assets/images/2026-11-04--cave-smooth.webp" alt="smooth cave rendering" />
<img src="/assets/images/2026-11-04--cave-voxels.webp" alt="voxel cave rendering" /></p>

<p>The biggest pain point was in the <em>interface</em> between the ‘cave tiles’ and the ‘terrain tiles’ - I used
different formats and scales for them, and it turns out that blending the rendered heightmap terrain
into the rendered <em>smoothed-voxel</em> caves was.. not straightforward. It still doesn’t look amazing, but
apparently this is why other games always seem to cover the outlines of the entrances to caves with
art..</p>

<p><img src="/assets/images/2026-11-04--cave-interface-glitch.webp" alt="cave interface glitches" /></p>

<p>Right now I’m working on class/ability implementation, including more animations, particle effects,
and making abilities all <em>work</em> (on a training dummy - no actual monsters until milestone 3). But I’m
happy with how it looks for the moment!</p>

<p><img src="/assets/images/2026-11-04--distance-fog.webp" alt="mountains in the distance" />
<img src="/assets/images/2026-11-04--evening-water.webp" alt="evening on the water" /></p>]]></content><author><name>nevinera</name></author><category term="delve" /><summary type="html"><![CDATA[I have long wanted to build a game, essentially a cooperative dungeon-delving game, based on (my nostalgia-tinged recollection of) the BC-era World of Warcraft dungeoneering experience. It was challenging, it had internal progression, and it created a social context that I valued and still miss - before the random-grouping mechanisms were introduced, you had to find people to play with, and accumulate a list of competent people that you could trust and who trusted you to play well enough and be familiar with the content.]]></summary></entry></feed>