Godot 4 Isometric TileMap
SkillMonitoring & opsUse 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.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the Godot 4 Isometric TileMap skill
What this skill tells your AI
The instructions your AI receives, as published by 0xheycat/isometric-game-skills in skills/godot4-isometric-tilemap/SKILL.md and read by ahel’s review.
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.
Signals
- GitHub stars
- 21
- Forks
- 3
- Last commit
- Aug 2026
Advanced
- Item type
- skill
- Key
godot4-isometric-tilemap- Source
- github.com/0xheycat/isometric-game-skills