Download Game! Currently 55 players and visitors. Last logged in:DeinoWhlxchVaykkyFloppy

Blitzer's Blog >> 72163

Back to blogs index
Posted: 06 Sep 2026 19:58 [ permalink ]
The verifier is absolutely brilliant. It did exactly what it was designed to
do: it caught a massive human error before we committed it to the engine!

Looking at the console output and the screenshot, your seed block generated
only **24 vertices** (instead of 36), and the verifier caught exactly **8
holes**. A square has 4 edges, so 8 missing edges means exactly two faces are
missing.

Looking at your screenshot, the cube is completely missing its Top and Bottom
faces! It looks like a hollow green tube.

I made two embarrassing typos in the previous code block:

1. **The Auto-Cull Typo:** In the `neighborSolidNotRamp` function, I
accidentally typed `getVoxel(x + dx, y + dz, z + dz)`. Notice the `y + dz`
instead of `y + dy`? When checking the top and bottom faces (`dy=1` or
`dy=-1`, `dz=0`), the math evaluated to `y + 0`. The block checked *itself*,
realized it was solid, and automatically culled its own top and bottom faces!
2. **Reverted `FACES` Array:** I accidentally pasted the old, invalid winding
order for the `top` and `bottom` arrays in the constants list.

Let's fix these two specific spots in `/mnt/mesh_shared/3d/3D-TS/mesh_worker.ts
`.

### 1. Fix the FACES Array

At the very top of `mesh_worker.ts`, replace the `FACES` object with this one:

```typescript
/ -------- Cube face definitions (Strictly Clockwise / Manifold Safe) --------
const FACES: Record<string, number[]> = {
    right:  [ 1, 0, 0,  1, 1, 0,  1, 0, 1,  1, 0, 1,  1, 1, 0,  1, 1, 1 ],
    left:   [ 0, 0, 0,  0, 0, 1,  0, 1, 0,  0, 0, 1,  0, 1, 1,  0, 1, 0 ],
    top:    [ 0, 1, 1,  0, 1, 0,  1, 1, 0,  0, 1, 1,  1, 1, 0,  1, 1, 1 ], //
FIXED WINDING
    bottom: [ 0, 0, 0,  1, 0, 0,  1, 0, 1,  0, 0, 0,  1, 0, 1,  0, 0, 1 ], //
FIXED WINDING
    front:  [ 0, 0, 1,  1, 0, 1,  0, 1, 1,  0, 1, 1,  1, 0, 1,  1, 1, 1 ],
    back:   [ 0, 0, 0,  0, 1, 0,  1, 0, 0,  0, 1, 0,  1, 1, 0,  1, 0, 0 ]
};

```

### 2. Fix the Auto-Cull Typo

Scroll down slightly to the `neighborSolidNotRamp` function, and fix the `dy`
typo so it looks like this:

```typescript
    const neighborSolidNotRamp = (x: number, y: number, z: number, dx: number,
dy: number, dz: number): boolean => {
        const n = getVoxel(x + dx, y + dy, z + dz); // FIXED: y + dy
        return isFilled(n) && getPointType(n) !== 1; 
    };

```

Save the file and let Vite reload. The very first line in your console for the
seed block should instantly say:
`[Verifier] SUCCESS! Mesh is 100% watertight (18 total edges).`

Let me know if we finally achieve perfect topological solidity!