Bit layout [atlas:8][tile_id:20][rot:2][res:2] matches lib-core.maps init.lua so JS-produced GIDs are byte-identical to engine-produced ones. >>> 0 forces unsigned u32 output.