Godot4 isometric tilemap
Skill 0xheycat/isometric-game-skills/skills/godot4-isometric-tilemap
Agent-ready toolkit for isometric games: ComfyUI art pipelines, seamless terrain, sprites, grid math, Canvas2D rendering, pathfinding, and asset automation.
npx -y skills add 0xheycat/isometric-game-skills --skill godot4-isometric-tilemapAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 5 stars5 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Use when setting up correct 2:1 isometric rendering in Godot 4 with TileMapLayer + Y-sort, mapping this repo's engine-agnostic grid math and depth rules onto Godot's native APIs.
The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
2.6 KB, as published. Nobody here has run it
Godot 4 Isometric TileMap
Overview
Godot 4 supports isometric natively, but the defaults fight you: wrong tile shape, broken draw order, and magic pixel offsets that look fine until something moves. This skill maps the repo's tested concepts (grid math, depth sorting) onto Godot's TileMapLayer + Y-sort so it is correct the first time.
When to Use
- Starting an isometric scene in Godot 4 (4.3+,
TileMapLayer). - Characters draw in front of / behind tiles they should not.
- Tiles overlap, or mouse picking selects the wrong cell.
Process
- TileSet: set Tile Shape = Isometric, Tile Layout = Diamond Down, and Tile Size to your 2:1 footprint (e.g. 64x32).
- Put ground on a
TileMapLayer. For anything that must sort against characters, enable Y Sort Enabled on the layer and its parent node. - Set each movable sprite's
y_sort_originto the tile's feet/anchor (not its top). This is Godot's version of thedepth = col + rowrule (see depth-sorting-occlusion). - Convert coordinates with the built-ins
local_to_map()/map_to_local()instead of hand-rolled offsets (mirrors isometric-grid-math). - Mouse picking:
local_to_map(get_local_mouse_position())to get the cell, thenmap_to_local()to snap a highlight (see tile-picking-interaction). - Keep ONE tile size and anchor convention across every layer and scene.
# grid <-> world: let Godot do the iso math
var cell: Vector2i = ground.local_to_map(ground.get_local_mouse_position())
var world: Vector2 = ground.map_to_local(cell) # center of that tile
Rationalizations (Stop Lying to Yourself)
| Excuse | Reality |
|---|---|
| "I'll nudge sprite offsets until it lines up" | Manual offsets break under Y-sort and zoom. Set y_sort_origin to the anchor. |
| "I'll write the iso math myself" | local_to_map / map_to_local are exact and tested. Use them. |
Red Flags - STOP if you catch yourself:
- Y Sort disabled, or
y_sort_originleft at the default (0,0). - Hand-written screen<->grid math instead of the
TileMapLayerAPI. - Mixed tile sizes or anchors across layers.
Verification
You are NOT done until every box is checked:
- TileSet shape = Isometric, layout = Diamond Down, 2:1 tile size.
- Y Sort on; a character sorts correctly walking around a tall object.
- Picking via
local_to_mapselects the cell under the cursor. - Round-trip
local_to_map(map_to_local(cell))returns the same cell.