Log In  


I wrote a function that shows the mouse coordinates and sprite number of the map tile you are hovering over. I originally wrote this for myself to make checking the tiles on my map easier but figured I could share it in case anyone else finds it useful.

function debug_mouse()
	local mx,my = mouse()
	local x_offset=5
	local y_offset=5

	--window width and height
	local w=480
	local h=270

	--offset if box leaves screen
	if mx>w-20 then x_offset=-15 end
	if my>h-29 then y_offset=-24 end

	--draw debug text box
	rectfill(mx+x_offset-1,my+y_offset-1,mx+x_offset+14,my+y_offset+23,1)
	print(mx,mx+x_offset,my+y_offset,8)
	print(my,mx+x_offset,my+y_offset+8,9)
	print(mget(mx,my),mx+x_offset,my+y_offset+8*2,10)
end
13


Thank you for the script, however it wasn't working correctly because it looks like coords for mget work off cell coords rather than pixels, I modified the script to correct that and also add flag output

function debug_mouse()
	local mx,my = mouse()
	local x_offset = 5
	local y_offset = 5

	-- tile size
	local tw=16
	local th=16

	-- window width and height
	local w=480
	local h=270

	-- offset if box leaves screen
	if mx>w-20 then x_offset=-15 end
	if my>h-29 then y_offset=-24 end

	-- draw debug text box
	local tile_x = mx/tw
	local tile_y = my/th
	local sprite = mget(tile_x,tile_y)
	local flag = fget(sprite)
	rectfill(mx+x_offset-1,my+y_offset-1,mx+x_offset+14,my+y_offset+23+8,1)
	print(mx/tw,mx+x_offset,my+y_offset,8)
	print(my/th,mx+x_offset,my+y_offset+8,9)
	print(sprite,mx+x_offset,my+y_offset+8*2,10)
	print(flag,mx+x_offset,my+y_offset+8+8*2,10)
end

Ah thank you. I actually did fix this but forgot to update the code I posted here.


have you found out how to round the coordinates to integer? I've been trying to use the flr() function but it's still showing the decimal part


I got some help with the code from a person in this thread


can you share your code with the flr function?


@MaddoScientisto as you see mget should function with non-integers. If you still want to round flr seems to work fine in my tests.

print(flr(mx/tw),mx+x_offset,my+y_offset,8)

The other option is to use the floor division operator //

print(mx//tw,mx+x_offset,my+y_offset,8)

1

@instring thank you, yes it did work but I wanted to format the output string without the decimals, in the end I found out that using the integer division operator "\" works as well, plus I learned how to use string.format so here's the updated code:

function debug_mouse()
	local mx,my = mouse()
	local x_offset = 5
	local y_offset = 5

	-- tile size
	local tw=16
	local th=16

	-- window width and height
	local w=480
	local h=270

	-- offset if box leaves screen
	if mx>w-20 then x_offset=-15 end
	if my>h-29 then y_offset=-24 end

	-- draw debug text box
	local tile_x = mx\tw
	local tile_y = my\th
	local sprite = mget(tile_x,tile_y)
	local flag = fget(sprite)
	rect((tile_x*tw)+tw,(tile_y*th)+th,tile_x*tw,(tile_y*th),8)
	rectfill(mx+x_offset-1,my+y_offset-1,mx+x_offset+14,my+y_offset+23+8,1)
	print(string.format("%d (%d)",tile_x,mx),mx+x_offset,my+y_offset,8)
	print(string.format("%d (%d)",tile_y,my),mx+x_offset,my+y_offset+8,9)
	print(sprite,mx+x_offset,my+y_offset+8*2,10)
	print(flag,mx+x_offset,my+y_offset+8+8*2,10)
end

As a bonus I even added a square around the affected tile, I only didn't bother changing the size of the coords box


Sorry for the dumb question but where do you put this code into?



3

This is nice! Here's my version with some edits:

  • works with games that use camera()
  • works with games that use different vid() modes
  • text will always stay onscreen
  • more descriptive text
function debug_mouse()
	-- tile size
	local tw,th = 16,16

	local mx,my = mouse()
	local cam_x,cam_y = camera() --reset temporarily

	-- find window size
	local scrw,scrh = 480,270
	local video_mode = @0x547c
	if (video_mode==3) scrw\=2 scrh\=2
	if (video_mode==4) scrw\=3 scrh\=3

	-- gather tile info
	local tx = (mx+cam_x)\tw
	local ty = (my+cam_y)\th
	local tile = mget(tx,ty) or 0
	local flags = fget(tile)

	-- highlight tile
	camera(cam_x,cam_y)
	rect(tx*tw-1,ty*th-1,tx*tw+tw,ty*th+th,7)
	camera()

	-- draw mousemap info
	local text =
		--string.format("\#1mouse():%d,%d",mx,my).."\n"..
		string.format("\#1mget(%d,%d):%d",tx,ty,tile).."\n"..
		string.format("\#1fget(%d):%d",tile,flags)
	local textw,texth = print(text,0,10000) --measure
	texth -= 10000
	-- clamp onscreen
	local x = mid(0,scrw-1-textw, mx+4)
	local y = mid(0,scrh-1-texth, my+4)
	print(text,x,y,13) --draw

	-- restore camera
	camera(cam_x,cam_y)
end

Oh that's awesome! I might actually adapt some of your changes. The camera functionality is super useful as well.
Glad to see people are actually using this ^^



[Please log in to post a comment]