While building my game, I started using a tool called Tiled to handle level design. At first, I was just hardcoding object positions—placing the player at (0,0), looping over blocks to spawn them manually, that sort of thing. It worked, but I knew it wasn’t sustainable. Tiled output a big XML file, but I honed in on the tile data and wrote a basic Level Loader that checked tile IDs and spawned prefabs based on hardcoded values. That quickly got messy, especially when editing the tile set changed the IDs. Eventually, I learned I could add custom properties to each tile and give them names tied to prefabs. From there, I built a system that reads the tile set, maps IDs to prefab names, and spawns everything based on that. I also used Tiled’s object layers to place unique NPCs with custom dialogue and freeform positioning. The final thing I got working was autotiling, which let me quickly build more natural-looking terrain instead of relying on indestructible crates as filler. Over time, I ended up using more and more of what Tiled had to offer, and it became a core part of my level-building pipeline.