mirror of
https://github.com/wesnoth/wesnoth
synced 2025-05-02 04:35:45 +00:00
35 lines
1.0 KiB
Lua
35 lines
1.0 KiB
Lua
--! #textdomain wesnoth-low
|
|
|
|
local replace_map = wesnoth.wml_actions.replace_map
|
|
|
|
function wesnoth.wml_actions.replace_map(cfg)
|
|
if not cfg.x and not cfg.y then
|
|
return replace_map(cfg)
|
|
end
|
|
local x1,x2 = string.match(cfg.x, "(%d+)-(%d+)")
|
|
local y1,y2 = string.match(cfg.y, "(%d+)-(%d+)")
|
|
local header,map = string.match(cfg.map_data, "(.-)\n\n(.*)")
|
|
local b = string.match(header, "border_size=(%d+)")
|
|
x1 = tonumber(x1)
|
|
y1 = tonumber(y1)
|
|
x2 = x2 + 2 * b
|
|
y2 = y2 + 2 * b
|
|
local t = {}
|
|
local y = 1
|
|
for row in string.gmatch(map, "[^\n]+") do
|
|
if y >= y1 and y <= y2 then
|
|
local r = {}
|
|
local x = 1
|
|
for tile in string.gmatch(row, "[^,]+") do
|
|
if x >= x1 and x <= x2 then r[x - x1 + 1] = tile end
|
|
x = x + 1
|
|
end
|
|
t[y - y1 + 1] = table.concat(r, ',')
|
|
end
|
|
y = y + 1
|
|
end
|
|
local s = table.concat(t, '\n')
|
|
local new_map = string.format("border_size=%d\nusage=map\n\n%s", b, s)
|
|
replace_map { map = new_map, expand = true, shrink = true }
|
|
end
|