Rotated D-Pad Controls

goto has this side-effect where the player’s update function is called after moving, so you want to check if its only called once after moving. Here’s how I would’ve done it.

on update do
 if rotateOnce==0 then
  call "rotateMove"
 end
end

on rotateMove do
 rotateOnce = 1

 rX = event.px
 rY = event.py
 if event.dy==-1 then // player just moved up, but is moving left
 	 rX -= 1
	 rY += 1
 elseif event.dy==1 then // player just moved down, but is moving right
	 rX += 1
	 rY -= 1
 elseif event.dx==1 then // player just moved right, but is moving up
	 rX -= 1
	 rY -= 1
 elseif event.dx==-1 then // player just moved left, but is moving down
	 rX += 1
	 rY += 1
 end

 rSolid = solid rX,rY
 if rSolid==1 then // stay still if tile is solid
	 rX = event.px
	 rY = event.py
	 rX -= event.dx
	 rY -= event.dy
 end
 goto rX,rY
 rotateOnce = 0
end

I also tried to fix your problem of checking solid tiles, though it’s not perfect, as the player can move diagonally after hitting a solid tile. You might also need to make your own interact function to make it work with the rotated controls.