mouse - nesbox/TIC-80 GitHub Wiki

mouse() -> x, y, left, middle, right, scrollx, scrolly

Returns

  • x y : coordinates of the mouse pointer
  • left : left button is down (true/false)
  • middle : middle button is down (true/false)
  • right : right button is down (true/false)
  • scrollx : x scroll delta since last frame (-31..32)
  • scrolly : y scroll delta since last frame (-31..32)

Description

This function returns the mouse coordinates, a boolean value for the state of each mouse button (with true indicating that a button is pressed) and any change in the scroll wheel. Note that scrollx values are only returned for devices with a second scroll wheel, trackball etc.

Reference

Relative mode

Useful for 3D games such as a first-person shooter. In relative mode the cursor is hidden, the mouse is captured to be kept within the TIC-80 window and mouse() returns the offset relative to its previous location. Works even if the mouse is at the edge of the window. mouse() will output (0,0) if mouse is pending.

  • Enable: poke(0x7FC3F, 1, 1)
  • Disable: poke(0x7FC3F, 0, 1) (default behavior)

Input Tag

Set the metadata input tag to mouse if you do not use btn/btnp or key/keyp to hide the on-screen gamepad and keyboard on Android devices.

Examples

mouse_example1

-- title:  mouse position and buttons
-- author: paul59
-- script: lua
-- input:  mouse

local GR,YE,WH=6,4,12
local barx,bary=10,10

function TIC()
	local x,y,left,middle,right,scrollx,scrolly=mouse()
	
	barx=barx+scrollx
	bary=bary+scrolly
	if barx<1 then barx=1 end
	if bary<1 then bary=1 end	

	cls(0)
	print('Move Mouse:',10,10,YE)
        print('Position '..string.format('x=%03i y=%03i',x,y),100,10,WH)

	print('Press Buttons:',10,20,YE)
	print('Left '..tostring(left),100,20,WH)
	print('Middle '..tostring(middle),100,40,WH)
	print('Right '..tostring(right),100,30,WH)

	print('Scroll Wheel:',10,80,YE)
	print('Scroll X',100,80,WH)
	print('Scroll Y',160,80,WH)
	rect(100,136/2-barx,8,barx,GR)
	rect(160,136/2-bary,8,bary,GR)

end

Relative mode

video26

-- script:  lua

abs_mode=true

function flip(val)return val>0 and 0 or 1 end

function TIC()
  if btnp(4)then 
    -- here we enable/disable relative mode bit 0x0FF84*8+7=0x7FC3F
    poke(0x7FC3F,flip(peek(0x7FC3F,1)),1)
    abs_mode= not abs_mode
  end	
		
  cls()
  if abs_mode then
    print("Absolute mode",85,50,3)
  else
    print("Relative mode",85,50,3)
  end
  local x,y=mouse()
  print("x : y = "..x.." : "..y,85,60,3)
end