Ok, Im no Math Wiz and need some help. Ive never really dealt with math to this extreme and i took my best shot at it. Can somone please make my rotation more accurate. The function works fine, the problem is in where it calculates when and how much to rotate it. I dunno, just take a look
SYNC ON
SYNC RATE 40
SET DISPLAY MODE 800,600,16
load bitmap \"images\\toast.psd\",2
get image 1,0,0,60,60
Dim coord(1)
r = 30
num = 1
xpos# = 400
ypos# = 12+num
grav# = -.5
xvel# = 0.00
yvel# = 0.0
angle = 1
impulse# = 4.00
sx=800
sy=600
set current bitmap 0
CENTER TEXT 400,300,\"PRESS ANY KEY TO START\"
WAIT KEY
DO
mx# = mousex()
my# = mousey()
xdist#=(mx#-xpos#)
ydist#=(my#-ypos#)
dist#=sqrt((mx#-xpos#)^2 + (my#-ypos#)^2)
subangle#=atanfull(xdist#,ydist#)
if rotatemag# > 0 then rotate = wrapvalue(rotate + rotatemag#)
if rotatemag# < 0 then rotate = wrapvalue(rotate - rotatemag#)
if rotatemag# < 0 then rotatemag# = rotatemag# +.1
if rotatemag# > 0 then rotatemag# = rotatemag# -.1
rotate_image(1,rotate,2)
CLS
Print subangle#
PRINT screen fps()
if rightkey()=1
num = num +10
endif
if leftkey()=1
num = num -10
endif
If upkey()=1
r=r+1
Endif
If downkey()=1
r=r-1
Endif
if mouseclick()= 1
If abs(dist#) <= r+num
if subangle# < 0 then rotatemag#=rotatemag#+2
if subangle# > 0 then rotatemag#=rotatemag#-2
if rotatemag# > 6 then rotatemag# = 6
if sin(subangle#+270)<0
xvel# =((dist#/2*cos(subangle#+90)))
endif
yvel# =yvel# - impulse#
endif
endif
yvel# = yvel# - grav#
ypos# = ypos# + yvel#
if xvel# > 0 then xvel#=xvel#-.03 else if xvel#<0 then xvel#=xvel#+.03
xpos# = xpos# + xvel#
IF ypos# > sy-(r+num)
ypos# = sy-(r+num)
if xvel# > 0 then xvel#=xvel#-.05 else if xvel#<0 then xvel#=xvel#+.05
yvel# = yvel# * -.6
endif
if xpos#>sx-(r+num)
xpos#=sx-(r+num)
xvel# = xvel#*-.8
endif
if xpos#<0+(r+num)
xpos#=0+(r+num)
xvel# = xvel#*-.8
endif
sprite 1,xpos#-30,ypos#-30,2
PRINT l#
Line xpos#,ypos#,mousex(),mousey()
Line 1,600,1280,600
Line 1,599,1280,599
Line 1,598,1280,598
SYNC
LOOP
Function rotate_image(image,angle,rotated)
Dim memblock(1) : Dim position(1) : y=0
For x=1 to 255
If MemBlock Exist(x)=0
memblock(y)=x
Inc y
EndIf
If y=2 Then x=256
Next x
If y<2 Then ExitFunction
Make MemBlock From Image memblock(0),image
angle=WrapValue(angle)
cos_angle#=cos(angle) : cos_90_angle#=cos(90+angle)
sin_angle#=sin(angle) : sin_90_angle#=sin(90+angle)
If angle<90
box_x#=MemBlock DWord(memblock(0),0)*cos_angle#-MemBlock DWord(memblock(0),4)*cos_90_angle#
box_y#=MemBlock DWord(memblock(0),4)*cos_angle#-MemBlock DWord(memblock(0),0)*cos_90_angle#
offset_x#=MemBlock DWord(memblock(0),4)*cos(270+angle) : offset_y#=0
EndIf
If angle>=90 and angle<180
box_x#=MemBlock DWord(memblock(0),0)*cos(180+angle)-MemBlock DWord(memblock(0),4)*cos_90_angle#
box_y#=MemBlock DWord(memblock(0),0)*sin_angle#-MemBlock DWord(memblock(0),4)*sin_90_angle#
offset_x#=box_x# : offset_y#=MemBlock DWord(memblock(0),4)*sin(270+angle)
EndIf
If angle>=180 and angle<270
box_x#=MemBlock DWord(memblock(0),4)*cos_90_angle#-MemBlock DWord(memblock(0),0)*cos_angle#
box_y#=0-MemBlock DWord(memblock(0),0)*sin_angle#-MemBlock DWord(memblock(0),4)*sin_90_angle#
offset_x#=0-MemBlock DWord(memblock(0),0)*cos_angle# : offset_y#=box_y#
EndIf
If angle>=270
box_x#=MemBlock DWord(memblock(0),0)*cos_angle#+MemBlock DWord(memblock(0),4)*cos_90_angle#
box_y#=MemBlock DWord(memblock(0),4)*sin_90_angle#-MemBlock DWord(memblock(0),0)*sin_angle#
offset_x#=0 : offset_y#=0-MemBlock DWord(memblock(0),0)*sin_angle#
EndIf
box_x=box_x# : box_y=box_y#
If (box_x#-box_x)>=.5 Then Inc box_x
If (box_y#-box_y)>=.5 Then Inc box_y
coord(0)=box_x/2 : coord(1)=box_y/2
Make MemBlock memblock(1),12 + box_x * box_y * MemBlock DWord(memblock(0),8)/8
Write MemBlock DWord memblock(1),0,box_x
Write MemBlock DWord memblock(1),4,box_y
Write MemBlock DWord memblock(1),8,MemBlock DWord(memblock(0),8)
mem_step=MemBlock DWord(memblock(0),8)/8
cos_90_angle#=cos(90-angle) : sin_90_angle#=sin(90-angle)
For y=0 To MemBlock DWord(memblock(1),4)-1 : For x=0 To MemBlock DWord(memblock(1),0)-1
rx#=(y-offset_y#)*cos_90_angle#+(x-offset_x#)*cos_angle#
ry#=(y-offset_y#)*sin_90_angle#-(x-offset_x#)*sin_angle#
rx=rx# : ry=ry#
If (rx#-rx)>=.5 Then Inc rx
If (ry#-ry)>=.5 Then Inc ry
If rx>-1 and rx<MemBlock DWord(memblock(0),0) and ry>-1 and ry<MemBlock DWord(memblock(0),4)
position(0)=12+mem_step*(ry*MemBlock DWord(memblock(0),0)+rx)
position(1)=12+mem_step*(y*MemBlock DWord(memblock(1),0)+x)
For octet=0 To mem_step-1
Write MemBlock Byte memblock(1),position(1)+octet,MemBlock Byte(memblock(0),position(0)+octet)
Next octet
EndIf
Next x : Next y
Make Image From MemBlock rotated,memblock(1)
Delete MemBlock memblock(0)
Delete MemBlock memblock(1)
UnDim memblock
EndFunction
Dark
TDK I Love you...... And yes, you should be scared