# Free Dungeon Crawler & Roguelike Game Assets (Blender, Unreal, Unity, Godot)

Part of the Index Scout "Game-making assets" series: free sources organized by genre and engine for people building games with AI. Search the tag `game-assets` for the rest of the series.

Dungeon crawlers and roguelikes are one of the easiest genres to build with an AI coding agent, because the whole game is a grid: rooms, corridors, walls, a chest, some stairs and a few monsters. This skill lists six free packs that cover that grid in 3D and 2D, with numbers we got from the files themselves, plus a tested seeded room-and-corridor generator that places the 3D pieces for you.

## Tested on our box (2026-10-20)
We downloaded each pack from its official page or GitHub repo, unzipped it, counted the files and parsed every GLB header and glTF JSON chunk. All six packs ship a License file that says CC0 1.0 (credit is appreciated but not required).

| Pack | What you get (counted) | Formats | Link |
|---|---|---|---|
| Kenney Mini Dungeon (2.0) | 30 models: floor, wall, wall-opening, gate, stairs, chest, barrel, trap, key, potion, weapons, plus rigged `character-human` and `character-orc` with 32 animation clips each (idle, walk, sprint, attack-melee, die, pick-up and more) | GLB, FBX, OBJ | [kenney.nl/assets/mini-dungeon](https://kenney.nl/assets/mini-dungeon) |
| Kenney Modular Dungeon Kit (1.0) | 39 snap-together pieces: rooms (small, large, wide), corridors (corner, junction, intersection, end, wide), gates with door and metal bars, stairs, wall/floor templates; gates include open/close animations | GLB, FBX, OBJ | [kenney.nl/assets/modular-dungeon-kit](https://kenney.nl/assets/modular-dungeon-kit) |
| KayKit Dungeon Remastered (1.0) by Kay Lousberg | 203 GLB props and tiles (walls, floors, pillars, banners, torches, crates, stairs, rubble, tables, chests) plus OBJ/MTL copies; the GitHub repo is laid out as a Godot addon | GLB, OBJ | [GitHub](https://github.com/KayKit-Game-Assets/KayKit-Dungeon-Remastered-1.0) / [itch.io](https://kaylousberg.itch.io/kaykit-dungeon-remastered) |
| KayKit Character Pack: Skeletons (1.0) by Kay Lousberg | 4 rigged skeleton enemies (Warrior, Mage, Rogue, Minion) sharing 95 animation clips (1H/2H melee, ranged, block, dodge, hit, death, resurrect) plus 13 glTF weapons and shields | GLB, glTF | [GitHub](https://github.com/KayKit-Game-Assets/KayKit-Character-Pack-Skeletons-1.0) / [itch.io](https://kaylousberg.itch.io/kaykit-skeletons) |
| Kenney 1-Bit Pack (1.2) | 1,078 tiles at 16x16 px (49x22 sheet, 1 px spacing) in colored and monochrome sheets, plus Tiled `.tmx` sample maps and a `.tsx` tileset | PNG, TMX, TSX | [kenney.nl/assets/1-bit-pack](https://kenney.nl/assets/1-bit-pack) |
| Kenney Micro Roguelike | 160 tiles at 8x8 px (16x10 sheet) for tiny-resolution roguelikes, plus individual tile PNGs | PNG | [kenney.nl/assets/micro-roguelike](https://kenney.nl/assets/micro-roguelike) |

Pick 3D (first four) or 2D (last two). The Mini Dungeon floor and wall pieces are exactly 1x1 unit (we read their bounding boxes), so one grid cell equals one model, which is what the generator below assumes.

## Seeded dungeon generator (tested in Node 20)
Paste this into your game or ask your agent to adapt it. Same seed gives the same map, so you can share seeds or make a daily dungeon. It returns an ASCII grid (`#` wall, `.` floor, `@` start, `>` stairs, `$` chest) and a list of model placements named after Kenney Mini Dungeon files.

```js
// Seeded rooms-and-corridors dungeon. Each cell = 1 unit, matching Kenney Mini Dungeon floor.glb / wall.glb (1x1).
function mulberry32(a){return()=>{a|=0;a=a+0x6D2B79F5|0;let t=Math.imul(a^a>>>15,1|a);t=t+Math.imul(t^t>>>7,61|t)^t;return((t^t>>>14)>>>0)/4294967296}}
export function makeDungeon({w=40,h=24,rooms=8,seed=1}={}){
  const r=mulberry32(seed), ri=(a,b)=>a+Math.floor(r()*(b-a+1));
  const g=Array.from({length:h},()=>Array(w).fill('#')), list=[];
  for(let tries=0;list.length<rooms&&tries<300;tries++){
    const rw=ri(4,9),rh=ri(3,6),x=ri(1,w-rw-2),y=ri(1,h-rh-2);
    if(list.some(o=>x<=o.x+o.w&&x+rw>=o.x&&y<=o.y+o.h&&y+rh>=o.y))continue;
    for(let j=y;j<y+rh;j++)for(let i=x;i<x+rw;i++)g[j][i]='.';
    list.push({x,y,w:rw,h:rh,cx:x+(rw>>1),cy:y+(rh>>1)});
  }
  for(let k=1;k<list.length;k++){ // L-shaped corridor to previous room
    const a=list[k-1],b=list[k];
    for(let i=Math.min(a.cx,b.cx);i<=Math.max(a.cx,b.cx);i++)g[a.cy][i]='.';
    for(let j=Math.min(a.cy,b.cy);j<=Math.max(a.cy,b.cy);j++)g[j][b.cx]='.';
  }
  const start=list[0],end=list.at(-1);
  g[start.cy][start.cx]='@'; g[end.cy][end.cx]='>';
  for(const o of list.slice(1,-1)) if(r()<0.5) g[o.y][o.x]='$'; // chest in a room corner
  // Model placements: floor under every walkable cell, wall where a solid cell touches floor.
  const place=[], walk=c=>c!=='#';
  for(let y=0;y<h;y++)for(let x=0;x<w;x++){
    const c=g[y][x];
    if(walk(c)){place.push({model:'floor.glb',x,z:y});
      if(c==='$')place.push({model:'chest.glb',x,z:y});
      if(c==='>')place.push({model:'stairs.glb',x,z:y});
      if(c==='@')place.push({model:'character-human.glb',x,z:y});}
    else if([[1,0],[-1,0],[0,1],[0,-1]].some(([dx,dy])=>walk(g[y+dy]?.[x+dx]??'#')))place.push({model:'wall.glb',x,z:y});
  }
  return {grid:g.map(row=>row.join('')),rooms:list.length,place};
}
```

What we checked with seed 42 on a 40x24 grid: 8 rooms, 295 floor cells, every floor cell reachable from the start (flood fill), the second run was identical, and 520 placements using only `floor.glb`, `wall.glb`, `chest.glb`, `stairs.glb` and `character-human.glb`, all of which exist in the pack.

To render in Three.js, load each GLB once with `GLTFLoader`, clone it per placement and set `position.set(p.x, 0, p.z)`. In Godot, Unity or Unreal, import the GLB folder and instance the same names on a 1-unit grid. For 2D, map `#` and `.` to tile indices in the 1-Bit or Micro Roguelike sheet, or open the bundled `.tmx` samples in [Tiled](https://www.mapeditor.org) to see how the sheet is laid out.

## Tips
- Mix sets carefully: Kenney Mini Dungeon and KayKit use different scales and palettes, so pick one 3D style per game and rescale enemies to match.
- KayKit skeletons share one animation set, so one state machine (idle, walk, attack, hit, death) drives all four enemies.
- Use the Modular Dungeon Kit when you want hand-built, snap-together levels; use Mini Dungeon tiles when the level comes from code like the generator above.
- Keep a `CREDITS.md` even though CC0 doesn't require it: "Kenney (kenney.nl)" and "Kay Lousberg (kaylousberg.com)".

## Attribution
Assets by [Kenney](https://kenney.nl) and [Kay Lousberg / KayKit](https://www.kaylousberg.com), both CC0 1.0 per the License files inside each download. Counts and checks by Index Scout on 2026-10-20; the generator code is original and released CC0. Always re-check the license file in the copy you download.
