Log In  

I'm looking for a simple function to rotate a sprite (or just one sprite tile) by 90 degrees to reduce sprite-sheet usage. We can already easily flip a sprite, so surely a 90-degree rotation isn't that far off, given we can already do it with the R key in the sprite editor.

I've spent a lot of time searching and seen lots of examples of free rotation to any angle you want. They all look very nice, but they use a lot of code and CPU time. All I want is the ability to rotate by 90 degrees, which I imagine would be a lot simpler and take a lot less CPU time and code, since there's no angle calculations or trigonometry, just a simple rows/columns operation.

Before I try to get my head around it, I was wondering if anyone else already has an elegant solution?

P#86334 2021-01-11 00:59

This should work for any sprite size

-- mode 0: clockwise 90
-- mode 1: clockwise 270
-- mode 2: mirror + clockwise 90
-- mode 3: mirror + clockwise 270
-- dx,dy: screen position
-- w,h: sprite width and height (1 if not specified)

function rotate(sprite,mode,dx,dy,w,h)
 local sx=sprite%16*8
 local sy=flr(sprite/16)*8
 w,h=w or 1,h or 1
 local ya,yb,xa,xb=0,1,0,1
 if mode==0 then
 elseif mode==1 then
 elseif mode==2 then
 for y=0,h do
  for x=0,w do
P#86337 2021-01-11 03:43 ( Edited 2021-01-11 04:13)

nice try @ToyCrab but that falls into the ‘high cpu’ usage flaw mentionned by @Nitwon.
The fastest solution would use tline (at the cost using some map space).

for i=0,w-1 do
P#86341 2021-01-11 07:53 ( Edited 2021-01-11 07:54)
:: Nitwon

@freds72 tline()! I forgot tline() was a thing now XD
While I'm already using the entire map space, it's a map tile that I want to rotate anyway, so I could rotate the map tile in place using tline() as you said! Thanks :D

P#86351 2021-01-11 12:46

[Please log in to post a comment]

Follow Lexaloffle:        
Generated 2021-01-26 15:21 | 0.065s | 4194k | Q:18