Skip to content
paul59 edited this page Dec 23, 2019 · 31 revisions

map

map [x=0 y=0] [w=30 h=17] [sx=0 sy=0] [colorkey=-1] [scale=1] [remap=nil]

Parameters:

  • x : The leftmost map cell to be drawn.
  • y : The uppermost map cell to be drawn.
  • w : The number of cells to draw horizontally.
  • h : The number of cells to draw vertically.
  • sx : The screen x coordinate where drawing of the map section will start.
  • sy : The screen y coordinate where drawing of the map section will start.
  • colorkey : The indexed color (0-15) to use for transparency. Not setting this parameter will make the map opaque.
  • scale : Map scaling.
  • remap: An optional function called before every tile is drawn. Using this callback function you can show or hide tiles, create tile animations or flip/rotate tiles during the map rendering stage: callback [tile [x y] ] -> [tile [flip [rotate] ] ]

Description:

The map consists of cells of 8x8 pixels, each of which can be filled with a sprite using the map editor. The map can be up to 240 cells wide by 136 deep. This function will draw the desired area of the map to a specified screen position. For example, map(5,5,12,10,0,0) will draw a 12x10 section of the map, starting from map co-ordinates (5,5) to screen position (0,0).

The map function’s last parameter is a powerful callback function​ for changing how map cells (sprites) are drawn when map is called. It can be used to rotate, flip and replace sprites while the game is running. Unlike mset, which saves changes to the map, this special function can be used to create animated tiles or replace them completely. Some examples include changing sprites to open doorways, hiding sprites used to spawn objects in your game and even to emit the objects themselves.

Examples:

--divide the map into rooms
rooms = {}
 for x = 0,240-30,30 do
  for y = 0,136-17,17 do
   table.insert(rooms, {x,y})
  end
 end

--returns the room by index (1-64)
function rget(i)
 return rooms[i][1],rooms[i][2],30,17
end

function TIC()
 cls()
 map(rget(64))
end
-- title:  Remap demo
-- author: AnastasiaDunbar, Lua translation by StinkerB06

--Note that `yourWaterfallTile`, `speed` and `frames` aren't defined here.
--This is up to you. The value of `speed` should be greater than 0 but less than or equal to 1.
gameTicks=0
function remap(tile,x,y)
	local outTile,flip,rotate=tile,0,0
	if tile==yourWaterfallTile then
		outTile=outTile+math.floor(gameTicks*speed)%frames
	end
	return outTile,flip,rotate --or simply `return outTile`.
end
function TIC()
	cls()
	map(0,0,30,17,0,0,-1,1,remap) --The `remap()` function is used here.
	gameTicks=gameTicks+1
end
Clone this wiki locally