M'enfin... ça a l'air de marcher quand même...
Je me suis servi du logiciel à Denis pour les datas du champignon (sisi, c'est censé représenter un champignon).
Code : Tout sélectionner
Global pi.f
!fldpi
!fstp dword[v_pi]
;Debug pi
Procedure.f angle(sin.f,cos.f)
If ASin(sin)<0
ProcedureReturn -ACos(cos)
Else
ProcedureReturn ACos(cos)
EndIf
EndProcedure
Structure barr
b.b[0]
EndStructure
Structure bob
sprt.l
*pix.barr
pitch.l
larj.w
haut.w
clipx.w
clipy.w
larjtot.w
hauttot.w
EndStructure
Procedure creebob(*bob.bob,sprite.l)
*bob\sprt=sprite
StartDrawing(SpriteOutput(sprite))
*bob\pix=DrawingBuffer()
*bob\pitch=DrawingBufferPitch()
StopDrawing()
w=SpriteWidth(sprite)
h=SpriteHeight(sprite)
*bob\larj=w
*bob\haut=h
*bob\larjtot=w
*bob\hauttot=h
*bob\clipx=0
*bob\clipy=0
EndProcedure
Global *dbf.barr,dbw.l,dbh.l,dbp.l
Procedure drawbob(*bob.bob,x.f,y.f,ang.f,larj.l,hautr.l)
ljr=*bob\larj
htr=*bob\haut
pic=*bob\pitch
*pix.barr=*bob\pix
bh=*bob\clipx+(*bob\clipy*pic)
diag.f=Sqr(larj*larj+hautr*hautr)
xc.f=x-(Sin(ang+pi/4)*diag/2)
yc.f=y-(Cos(ang+pi/4)*diag/2)
For xx=xc-diag To xc+diag : For yy=yc-diag To yc+diag : If xx>=0 And xx<dbw And yy>=0 And yy<dbh
x=xx:y=yy
dist.f=Sqr(Pow(x-xc,2)+Pow(y-yc,2))
If dist<=diag
angp.f=angle((x-xc)/dist,(y-yc)/dist)-ang
xp=Sin(angp)*dist*ljr/larj
yp=Cos(angp)*dist*htr/hautr
If xp>=0 And xp<ljr And yp>=0 And yp<htr
;dbfpix=x2+y2*dbp
coul.b=*pix\b[bh+xp+yp*pic]
If coul
x2=x:y2=y
*dbf\b[x2+y2*dbp]=coul
EndIf
EndIf
EndIf
EndIf:Next:Next
EndProcedure
Procedure clipbob(*bob.bob,x.w,y.w,larj.w,haut.w)
*bob\clipx=x
*bob\clipy=y
*bob\larj=larj
*bob\haut=haut
EndProcedure
InitSprite()
OpenScreen(320,240,8,"")
InitPalette()
;LoadPalette(0,"champ.bmp")
;DisplayPalette(0)
CatchSprite(1,?champbmp,#pb_sprite_memory)
DefType.bob champ
creebob(@champ,1)
CreateSprite(0,320,240,#pb_sprite_memory)
InitKeyboard():InitMouse()
;Clipbob(@champ,champ\clipx,champ\clipy,champ\larj,champ\haut)
dbw=320 : dbh=240
Repeat
If clyp<=16
Clipbob(@champ,clyp,0,32-clyp,32)
ElseIf clyp<=32
clipbob(@champ,16,clyp-16,16,48-clyp)
ElseIf clyp<=48
clipbob(@champ,48-clyp,16,clyp-16,16)
Else
clipbob(@champ,0,64-clyp,32,clyp-32)
;If clip=128 : clyp=0 :Else: clyp+1 :EndIf
EndIf
clyp=clypg>>3
clypg=(clypg+1)&$1ff
ExamineKeyboard():ExamineMouse()
angl.f+0.01
StartDrawing(SpriteOutput(0))
Box(0,0,320,240,$800080)
For x=0 To 310 Step 10 : For y=0 To 230 Step 10
Plot(x,y,0)
Next:Next
*dbf=DrawingBuffer() : dbp=DrawingBufferPitch()
drawbob(@champ,MouseX(),MouseY(),angl,60,60)
StopDrawing()
; UseBuffer(0)
; DisplayTransparentSprite(1,MouseX(),MouseY())
; UseBuffer(-1)
DisplaySprite(0,0,0)
FlipBuffers()
Until KeyboardReleased(#pb_key_escape) Or IsScreenActive()=0
;Debug PeekS(champ\sprt\filename)
DataSection
champbmp:
Data.l $08364D42, $00000000, $04360000, $00280000, $00200000, $00200000
Data.l $00010000, $00000008, $04000000, $0AC30000, $0AC30000, $01000000
Data.l $01000000, $00000000, $00000000, $80000080, $80000000, $00800080
Data.l $00800000, $80800080, $C0C00000, $9DA100C0, $DFE3009D, $200000E0
Data.l $20000040, $20000060, $20000080, $200000A0, $200000C0, $400000E0
Data.l $40000000, $40000020, $40000040, $40000060, $40000080, $400000A0
Data.l $400000C0, $600000E0, $60000000, $60000020, $60000040, $60000060
Data.l $60000080, $600000A0, $600000C0, $800000E0, $80000000, $80000020
Data.l $80000040, $80000060, $80000080, $800000A0, $800000C0, $A00000E0
Data.l $A0000000, $A0000020, $A0000040, $A0000060, $A0000080, $A00000A0
Data.l $A00000C0, $C00000E0, $C0000000, $C0000020, $C0000040, $C0000060
Data.l $C0000080, $C00000A0, $C00000C0, $E00000E0, $E0000000, $E0000020
Data.l $E0000040, $E0000060, $E0000080, $E00000A0, $E00000C0, $004000E0
Data.l $00400000, $00400020, $00400040, $00400060, $00400080, $004000A0
Data.l $004000C0, $204000E0, $20400000, $20400020, $20400040, $20400060
Data.l $20400080, $204000A0, $204000C0, $404000E0, $40400000, $40400020
Data.l $40400040, $40400060, $40400080, $404000A0, $404000C0, $604000E0
Data.l $60400000, $60400020, $60400040, $60400060, $60400080, $604000A0
Data.l $604000C0, $804000E0, $80400000, $80400020, $80400040, $80400060
Data.l $80400080, $804000A0, $804000C0, $A04000E0, $A0400000, $A0400020
Data.l $A0400040, $A0400060, $A0400080, $A04000A0, $A04000C0, $C04000E0
Data.l $C0400000, $C0400020, $C0400040, $C0400060, $C0400080, $C04000A0
Data.l $C04000C0, $E04000E0, $E0400000, $E0400020, $E0400040, $E0400060
Data.l $E0400080, $E04000A0, $E04000C0, $008000E0, $00800000, $00800020
Data.l $00800040, $00800060, $00800080, $008000A0, $008000C0, $208000E0
Data.l $20800000, $20800020, $20800040, $20800060, $20800080, $208000A0
Data.l $208000C0, $408000E0, $40800000, $40800020, $40800040, $40800060
Data.l $40800080, $408000A0, $408000C0, $608000E0, $60800000, $60800020
Data.l $60800040, $60800060, $60800080, $608000A0, $608000C0, $808000E0
Data.l $80800000, $80800020, $80800040, $80800060, $80800080, $808000A0
Data.l $808000C0, $A08000E0, $A0800000, $A0800020, $A0800040, $A0800060
Data.l $A0800080, $A08000A0, $A08000C0, $C08000E0, $C0800000, $C0800020
Data.l $C0800040, $C0800060, $C0800080, $C08000A0, $C08000C0, $E08000E0
Data.l $E0800000, $E0800020, $E0800040, $E0800060, $E0800080, $E08000A0
Data.l $E08000C0, $00C000E0, $00C00000, $00C00020, $00C00040, $00C00060
Data.l $00C00080, $00C000A0, $00C000C0, $20C000E0, $20C00000, $20C00020
Data.l $20C00040, $20C00060, $20C00080, $20C000A0, $20C000C0, $40C000E0
Data.l $40C00000, $40C00020, $40C00040, $40C00060, $40C00080, $40C000A0
Data.l $40C000C0, $60C000E0, $60C00000, $60C00020, $60C00040, $60C00060
Data.l $60C00080, $60C000A0, $60C000C0, $80C000E0, $80C00000, $80C00020
Data.l $80C00040, $80C00060, $80C00080, $80C000A0, $80C000C0, $A0C000E0
Data.l $A0C00000, $A0C00020, $A0C00040, $A0C00060, $A0C00080, $A0C000A0
Data.l $A0C000C0, $C0C000E0, $C0C00000, $C0C00020, $C0C00040, $C0C00060
Data.l $C0C00080, $FBF000A0, $FBF000FF, $808000FF, $00000080, $FF0000FF
Data.l $FF000000, $00FF00FF, $00FF0000, $FFFF00FF, $FFFF0000, $000000FF
Data.l $E0E0E000, $E0E0E0E0, $E0E0E0E0, $E0E0E0E0, $E0E0E0E0, $E0E0E0E0
Data.l $00E0E0E0, $00000000, $000000E0, $00000000, $00000000, $64646464
Data.l $00000064, $00000000, $E0000000, $E0000000, $00000000, $00000000
Data.l $64640000, $64646464, $64646464, $00000000, $00000000, $00E000E0
Data.l $00000000, $FB000000, $FB64FBFB, $FBFB6464, $64646464, $00000064
Data.l $00000000, $00E0E000, $00000000, $FBFB0000, $FBFBFBFB, $FBFBFBFB
Data.l $FBFBFBFB, $0000FBFB, $00000000, $00E0E000, $00000000, $FBFBFB00
Data.l $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $0000FBFB, $00000000, $00E0E000
Data.l $00000000, $FBFBFB00, $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $00FBFBFB
Data.l $00000000, $00E0E000, $00000000, $FBFBFB00, $FBFBFBFB, $FBFBFBFB
Data.l $FBFBFBFB, $00FBFBFB, $00000000, $00E0E000, $00000000, $FBFBFB00
Data.l $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $0000FBFB, $00000000, $00E0E000
Data.l $00000000, $FBFBFB00, $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $00FBFBFB
Data.l $00000000, $00E0E000, $00000000, $FBFBFB00, $FBFBFBFB, $FBFBFBFB
Data.l $FBFBFBFB, $0000FBFB, $00000000, $00E0E000, $00000000, $FBFB0000
Data.l $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $0000FBFB, $00000000, $00E0E000
Data.l $00000000, $FBFB0000, $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $0000FBFB
Data.l $00000000, $00E0E000, $00000000, $FBFB0000, $FBFBFBFB, $FBFBFBFB
Data.l $FBFBFBFB, $000000FB, $00000000, $00E0E000, $00000000, $FBFB0000
Data.l $FBFBFBFB, $FBFBFBFB, $FBFBFBFB, $00000000, $00000000, $00E0E000
Data.l $00000000, $FB000000, $FBFBFBFB, $FBFBFBFB, $00FBFBFB, $00000000
Data.l $00000000, $00E0E000, $00000000, $00000000, $FBFBFBFB, $FBFBFBFB
Data.l $00FBFBFB, $00000000, $00000000, $00E0E000, $00000000, $00000000
Data.l $FBFBFBFB, $FBFBFBFB, $0000FBFB, $00000000, $00000000, $00E0E000
Data.l $00000000, $00000000, $FBFBFBFB, $FBFBFBFB, $000000FB, $00000000
Data.l $00000000, $00E0E000, $00000000, $00000000, $FBFBFB00, $FBFBFBFB
Data.l $000000FB, $00000000, $00000000, $00E0E000, $00000000, $00000000
Data.l $FBFBFB00, $FBFBFBFB, $00000000, $00000000, $00000000, $00E0E000
Data.l $F9F90000, $00F96767, $FBFBFB00, $FBFBFBFB, $F9000000, $0000F9F9
Data.l $00000000, $00E0E000, $6767F900, $F9676767, $FBFBFB00, $FBFBFBFB
Data.l $FFFF67F9, $F9FFFFFF, $000000F9, $00E0E000, $6767F900, $67676767
Data.l $FBFBFB67, $67F9FBFB, $F9F96767, $67F9FFFF, $00F96767, $00E0E000
Data.l $67F90000, $67676767, $FBFBF967, $6767F9FB, $67676767, $67676767
Data.l $00F96767, $00E0E000, $F9000000, $F9676767, $F9F9F9F9, $FFF967F9
Data.l $6767F9FF, $F9676767, $00F9F9F9, $00E0E000, $00000000, $FFFFF9F9
Data.l $6767FFFF, $FFFFF967, $6767FFFF, $00F96767, $00000000, $00E0E000
Data.l $00000000, $FFFFF900, $6767FFFF, $FFFFFF67, $6767FFFF, $00000067
Data.l $00000000, $00E0E000, $00000000, $FF000000, $6767FFFF, $FFFFF967
Data.l $F967F9FF, $00000000, $00000000, $E000E000, $00000000, $00000000
Data.l $6767FFFF, $67676767, $00F96767, $00000000, $00000000, $000000E0
Data.l $000000E0, $00000000, $6767F900, $67676767, $000000F9, $00000000
Data.l $E0000000, $00000000, $E0E0E000, $E0E0E0E0, $F9E0E0E0, $E0F9F9F9
Data.b -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, -32, 0, 0, 0