--[[pod_format="raw",created="2026-02-10 12:09:44",modified="2026-02-10 12:27:08",revision=2]] player = { origin = { x = nil, y = nil, }, dir = nil, } col_bg = 1 col_ground = 6 fov = (120 / 180) * math.pi -- 120 horizontal function _init() for i = 0, 31 do for j = 0, 31 do if mget(i, j) == 5 then -- player id player.origin.x = i + 0.5 player.origin.y = j + 0.5 player.dir = 0 break end end if player.x then break end end end function cast_ray(origin, angle) end function draw_minimap() local tile_size = 4 local offset = 20 map(0, 0, offset, offset, 31, 31, 0x0000, tile_size, tile_size) -- player local px = offset + (player.origin.x * tile_size) local py = offset + (player.origin.y * tile_size) circfill(px, py, 1, 5) local len = 3 local px2 = px + math.cos(player.dir) * len local py2 = py + math.sin(player.dir) * len line(px, py, px2, py2, 6) end function _draw() cls(col_bg) rectfill(0, 135, 480, 270, col_ground) local angle_step = (fov / 480) / 360 * math.pi for x = 0, 480 - 1 do local angle = (player.dir - (fov / 2) + x * angle_step) % (2 * math.pi) local bloc, dist = cast_ray(player.origin, angle) end draw_minimap() end function _update() local speed = 0.1 if btn(0) then player.dir -= speed end if btn(1) then player.dir += speed end if btn(2) then player.origin.x += math.cos(player.dir) * speed player.origin.y += math.sin(player.dir) * speed end if btn(3) then player.origin.x -= math.cos(player.dir) * speed player.origin.y -= math.sin(player.dir) * speed end end