#summary Some examples for drawing maps with Lua = Drawing maps with Lua = == Overview == It is possible to reliably use drawn map mode to draw maps with Lua scripts. Simple examples are given below. Note that drawn maps use an area of 4096×2048. The examples below are static, but obviously this could be used for a random map variation—for example, simulating the Cave map by doing the fill below, then drawing random tunnels using circles that shift their course smoothly. == Preconditions == First of all, you must make sure that the global variable `MapGen` is set to `mgDrawn`. This is done in `onGameInit`. To draw maps, you only need to call 2 functions: `AddPoint` and `FlushPoints`. See [LuaAPI] for the explanation. You also should not forget to make use of `onPreviewInit` so the map preview is displayed correctly. == Cave == This generates a simple cave map: function onGameInit() MapGen = mgDrawn TemplateFilter = 0 -- Fill map with solid land for i = 200,2000,600 do AddPoint(1,i,63) AddPoint(4000,i) end -- Punch holes for i = 500,3500,1000 do AddPoint(i,1000,63,true) end FlushPoints() end onPreviewInit = onGameInit This one fills the map with solid land, and draws 4 circular erased points in it. The final line `onPreviewInit = onGameInit` makes sure the map preview works properly. This is the simplest way to create the preview and is a perfectly reasonable approach in this case, because the code is very simple here. Note: The reason why `onPreviewInit` is provided in the official Lua API is because it allows you to avoid unneccessary overhead in more complex Lua scripts. Screenshot here! == Concentric circles and more == function onGameInit() MapGen = mgDrawn TemplateFilter = 0 -- Cross AddPoint(100,100,10) AddPoint(2000,2000) AddPoint(2000,100,10) AddPoint(100,2000) AddPoint(1000,1000,63,true) AddPoint(1000,1000,20) -- Concentric circles for i = 63,2,-4 do AddPoint(2000,1000,i) AddPoint(2000,1000,i-2,true) end -- Web of lines for i = 1,2000,50 do AddPoint(i+2000,2000,1) AddPoint(4000,2000-i) end -- Web of lines, framing AddPoint(2000,2000,1) AddPoint(4000,2000) AddPoint(4000,0,1) AddPoint(4000,2000) FlushPoints() end onPreviewInit = onGameInit The first set of `AddPoint` functions draws a large cross and erases the centre. The following loop draws a set of nested points, alternating erasure and fill, which results in a set of concentric circles. The 2nd loop draws a web of lines and frames it using some final `AddPoint` calls. Screenshot here! == More examples == Check out the code for these built-in styles: * [https://hg.hedgewars.org/hedgewars/raw-file/tip/share/hedgewars/Data/Scripts/Multiplayer/DiagonalMaze.lua DiagonalMaze] * [https://hg.hedgewars.org/hedgewars/raw-file/tip/share/hedgewars/Data/Scripts/Multiplayer/ShoppaMap.lua ShoppaMap] * [https://hg.hedgewars.org/hedgewars/raw-file/tip/share/hedgewars/Data/Scripts/Multiplayer/Tunnels.lua Tunnels]