nostalgie

Programmation avancée de jeux en PureBasic
Avatar de l’utilisateur
Huitbit
Messages : 940
Inscription : jeu. 08/déc./2005 5:19
Localisation : Guadeloupe

Message par Huitbit »

pour le bruitage , j ai mis une explication dans truc et astuce....
Bon, ben
CHAMPAGNE !
Buckethead
Messages : 122
Inscription : jeu. 27/sept./2007 20:25

Message par Buckethead »

J'adore, excellent Tonton ! :)
C'est vraiment plaisant quand un jeu est fluide comme ça, avec en plus un très bon gameplay!
Puis les sound FX, pareil, énorme. J'ai regardé vite fait hier ton tuto <3 J'imagine qu'il faut trifouiller avec les sinus pour changer le son, en tout ca ma donné envie de bidouiller. Faudrait presque ajouter un ou deux exemples de son, un bassdrum, une nappe, peu importe ;)
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

au plaisir!

Message par beauregard »

tonton a écrit :ravis que ca vous plaisent.
J'ai rejoué au jeu( une valeur sûre, indémodable quoi), et voilà mes pensées( je n'ai pas dépassé le 3ème niveau):
-> un tir d'une plus longue porté(*2), s'il vous plait monsieuuur !
-> si on perd le vaisseau, ne pas faire la remise à 0 des astéroides( peut être une contrainte arcade ?... mais qui n'a plus lieu d'être).
config de mon ordi: seven, directx11, Pentium(R) DualCore E5700, RadeonHD 4550 512MB, PureBasic 4.61 x86
beauregard
Messages : 1307
Inscription : dim. 08/juil./2007 18:32
Localisation : Toulouse

à la quête de la fluidité absolu...

Message par beauregard »

Suite aux interrogations sur le delay(), je me suis dis qu'un passage en mode fenêtre du jeu peut éventuellement faire avancer les choses, on verra bien.
Si vous désactiver la commande delay, ben le cpu est occupé 100%, mais avec ce delay, çà chute à 30% avec cette commande mis à 12 ( tout çà sur une vieille machine).
mise à jour 17/03/2009: tir avec touche X maintenant( c'est moins bruyant). Et pour être plus proche d'une Vectrex, désormais les joypad sont détectés, alors on peut maintenant s'éloigner un peu de son écran et jouer tranquille avec croix directionnelle ou stick analogique, c'est comme il vous plaira :)

Code : Tout sélectionner

; tonton - purebasic - France - 2009
If InitMouse ()=0 Or InitKeyboard ()=0 Or InitSprite ()=0  Or InitSprite3D ()=0 
     MessageRequester ( "Error" , "Can't open DirectX 7 or later" , 0)
     End
EndIf
If InitSound() = 0 
  MessageRequester("Error", "Can't open DirectX 7 Or Sound Card is not present", 0)
  End
EndIf   

Global manette.b
If InitJoystick()
  manette=1
  joyInfoEx.JOYINFOEX:joyInfoEx\dwSize = SizeOf(JOYINFOEX) ; croix directionnelle joypad
EndIf
                        
Dim depastx.f(300): Dim depasty.f(300):Dim dirastx.f(300) :Dim dirasty.f(300):Dim tailast.f(300):Dim vitast.f(300):Dim typast(300)
Dim postirxx.f(200):Dim postiryy.f(200):Dim tirxx.f(200):Dim tiryy.f(200):Dim angtx.f(200):Dim angty.f(200):Dim typtir(200):Dim tramtir(200)

Dim cielx(200):Dim ciely(200):Dim tail_ciel(200)
Dim rciel(200):Dim gciel(200):Dim bciel(200) ; couleurs etoiles
 For ciel_l= 0 To 199
  rciel(ciel_l)=50+Random(205)
  gciel(ciel_l)=50+Random(205)
  bciel(ciel_l)=50+Random(205)
 Next


Dim posproxx.f(2000):Dim posproyy.f(2000):Dim proxx.f(2000):Dim proyy.f(2000):Dim trampro(2000):Dim typpro(2000)
Dim alienx.f(1):Dim alieny.f(1):Dim depalienx.f(1):Dim depalieny.f(1)

Declare cdirection(joyCaps,joyInfoEx) ; croix directionnelle joypad

ExamineDesktops():larg=DesktopWidth(0):long = DesktopHeight(0):Depth=DesktopDepth(0);:OpenScreen(larg,long,Depth,"") 
larg-256:long-256
If OpenWindow ( 0, 0,0, larg,long, "nostalgie-window-tonton-no sprite" , #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar| #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_ScreenCentered ) 

 OpenWindowedScreen ( WindowID ( 0 ), 0, 0, larg,long, 0, 1, 1) ; un ecran graphique dans la fenêtre toute simple.
 SetWindowColor(0, RGB (0, 0, 0))  
EndIf
KeyboardMode(#PB_Keyboard_International) 



Global nbreis.b, directionX.b, directionY.b, bouton1.b
etapcouleur.w:bcouleur.w ; couleur tir amis ou pas
etapccouleur.w:ccouleur.w
zutA.w

level2.l:ori_rotx.l:ori_roty.l



larg1.f=larg:long1.f=long:posx.f:posy.f:rotm.f:rotm1.f:angle_l.f
pi.f=3.14159:pi2.f=3.14159/2:level=1
friction.f=0.99
vitesse.f=0.10
test_vais.l
test_enne.l
tail.f:
tail_ast.f
vit_ast.f
posalienx.f
posalieny.f
angtxx.f:angtyy.f
    depastx2.f
    depasty2.f
     depastx1.f
    depasty1.f
    zone.f=10
    ori_prox.f:ori_proy.f
angle_tir.f:ori_tirx.f:ori_tiry.f:nb_trame.l:vit_tir.f
tram.l:tram1.l:vaisseau.l:vaisseau1.l:ver_sound_vai.l:ver_sound_exp.l:ver_sound_exp1.l:ver_sound_tir.l
depmx.f:depmy.f:cosrot.f:sinrot.f:tirx.f:tiry.f:postirx.f:postiry.f:initirx.f:initiry.f
tirx1.f:tiry1.f:postirx1.f:postiry1.f:initirx1.f:initiry1.f:long_tir.f:init_angle_ast.f
angle_asterox.f:angle_asteroy.f: cos_magnet.f:sin_magnet.f
angle_tirx.f:angle_tiry.f
vie1=3

Gosub init_jeu
Gosub gene_son
init:
StopSound(1)
StopSound(2)
StopSound(3)
StopSound(8)
StopSound(0)
Gosub moins_vie
test_vais=1
test_enne=0
nb_astero=0

For nb_tir=0 To 200:typtir(nb_tir)=0 :Next
For nb_ast=0 To 300:typast(nb_ast)=0 :Next
For nb_pro=0 To 2000:typpro(nb_pro)=0 :Next
trame22=0
trame2=0
trame222=0
ene_oui=0
posx=larg/2
posy=long/2
rotm=0
tram=0:tram1=0:vaisseau=10:vaisseau1=1:ver_sound_vai=0:ver_sound_exp=0:ver_sound_exp1=0:ver_sound_tir=0
depmx=0:depmy=0:postirx=1000:postiry=1000
postirx1=1000:postiry1=1000: tail_l.f=1
Gosub num_level


; ******************************************************************************************************
Repeat ;- Boucle principale
; ******************************************************************************************************
 Event= WindowEvent ()
;   main:
   
   
 If vie1=0:Delay(20):Goto saut1:EndIf
   
 If test_vais=0 And nb_trame=1900:vie1-1:Gosub moins_vie: Goto init:EndIf 
 If nb_astero=256 :level+1 :Goto init: EndIf
 saut1:
   
 ;   Delay(10)                                   
 ClearScreen(0)                           
 ExamineKeyboard() 
 
;- Commandes: °°°°°°°°°°°° 
If manette=1:ExamineJoystick(0):EndIf 
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
directionX=0:directionY=0:bouton1=0
If manette=0
	If KeyboardPushed ( #PB_Key_Up ):directionY=-1:EndIf; haut.
	If KeyboardPushed ( #PB_Key_Down ):directionY=1:EndIf; bas.
  If KeyboardPushed ( #PB_Key_Right ):directionX=1:EndIf ; droite.	
  If KeyboardPushed ( #PB_Key_Left ):directionX=-1:EndIf ; gauche.
  If KeyboardPushed ( #PB_Key_X ):bouton1=1:EndIf ; bouton action
EndIf
If manette=1
  If joyGetPosEx_(#JOYSTICKID1,joyInfoEx) = #JOYERR_NOERROR
    cdirection(joyCaps,joyInfoEx)
  EndIf
	
	If JoystickAxisY(0)=-1:directionY=-1:EndIf; haut.
  If JoystickAxisY(0)=1:directionY=1:EndIf; bas.
  If JoystickAxisX(0)=1:directionX=1:EndIf ; droite.	
  If JoystickAxisX(0)=-1:directionX=-1:EndIf ; gauche.
  If JoystickButton(0,1):bouton1=1:EndIf ; bouton action    
EndIf
; °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°  
 
 trame1+trame
 trame2+trame22

  If etapcouleur=0 ; couleur tir laser( légé sintillement mais pas trop. heu, oui, c'est dispensable)
    bcouleur+10
    If bcouleur>100:bcouleur=105:etapcouleur=1:EndIf
  EndIf
  If etapcouleur=1
    bcouleur-10
    If bcouleur<0:bcouleur=0:etapcouleur=0:EndIf
  EndIf
  
  If etapccouleur=0 ; couleur tir alien
    ccouleur+5
    If ccouleur>50:ccouleur=50:etapccouleur=1:EndIf
  EndIf
  If etapccouleur=1
    ccouleur-5
    If ccouleur<0:ccouleur=0:etapccouleur=0:EndIf
  EndIf

 
 
  
;- fortiche: toutes les commandes de dessin
;- sont sur cette seule et unique surface:    
 StartDrawing(ScreenOutput()) ; et sans ralentissement ! 
 
  Gosub convasci
  tail_l.f=0.6
  dep_cl.f=0
  dep_car.f=0
  pos_lx=20
  pos_ly=30
  depx_car.f=(30*tail_l)
  depy_car=0;(35*tail_l)
  angle_l=0
  adress=?score
  Gosub message1 
  If vie1=0: test_vais=0:Gosub over:Goto finie_jeu:EndIf
   
  If trame22=0
    level2=level+18
   
    trame2+1
    If trame2>200: trame22=1: EndIf
    tail_l.f=0.6
    dep_cl.f=0
    dep_car.f=0
    pos_lx=larg-200
    pos_ly=long-30
    
    depx_car.f=(30*tail_l)
    depy_car=0;(35*tail_l)
    
    angle_l=0
    adress=?vie
    Gosub message1 
   
    tail_l.f=1
    dep_cl.f=0
    
    dep_car.f=0
    
    pos_lx=larg/2-140
    pos_ly=long/2-50
    
    depx_car.f=(30*tail_l)
    depy_car=0;(35*tail_l)
    angle_l=0
    adress=?niveau

    Gosub message1 
   
   
   
    If level>9 :level1.l=19 : dep_l.l=level1*32*4
    pos_lx=larg/2+100
    Gosub message:level2=level+8:EndIf
    dep_l.l=level2*32*4
    pos_lx=larg/2+125
    Gosub message
    EndIf
   
   
  finie_jeu:

   Gosub ciel   
   Gosub vaisseau
   Gosub  aff_tir
   Gosub asteroide
   Gosub enemi
   Gosub col_tir
   Gosub col_obj
   Gosub affpro
   
 StopDrawing() ;- et voilà.            




 ; si appui sur touche F
 If KeyboardPushed ( #PB_Key_F ) And nbreis=0:nbreis+1:EndIf
 If KeyboardPushed ( #PB_Key_F )=0 And nbreis=1:nbreis+1:EndIf
 If KeyboardPushed ( #PB_Key_F ) And nbreis=2:nbreis+1:EndIf
 If KeyboardPushed ( #PB_Key_F )=0 And nbreis=3:nbreis=0:EndIf
 If nbreis=1 Or nbreis=2
  Gosub fps ; nombre d'image par seconde 
 EndIf  

FlipBuffers() 

Delay(12) ;- là les amis <--

 Gosub clavier                                                 


  

;  Goto main
 If Event= #PB_Event_CloseWindow Or KeyboardPushed ( #PB_Key_Escape );:Fin():
 EndIf; si clique coin haut droit ou touche Esc, alors ferme fenêtre.
ForEver
; ****************************************************************************************************** 
;- FIN Boucle principale
; ****************************************************************************************************** 


fps:
If Val ( FormatDate ( "%ss" , Date ()))=sek ; regardez pas là, c'est trop compliqué. Arrêtez j'vous dis! Bon ben, je
     ; vous aurez prévenu...
    fps+1
Else
    FPS$= Str (fps)
    fps=0
EndIf
sek= Val ( FormatDate ( "%ss" , Date ()))
StartDrawing ( ScreenOutput ())
 DrawingMode (1)
 FrontColor ( RGB (255,255,255))
 DrawText (1,1, "FPS: " +FPS$)

zutA=bcouleur
  zutA$= Str (zutA) 
  FrontColor ( RGB (154,154,154)) :DrawText (1+1,120+1, "zutA: " +zutA$)
  FrontColor ( RGB (234,234,234)) :DrawText (1,120, "zutA: " +zutA$)


StopDrawing ()
Return












 ;- colision tir ---
 col_tir:
  posalix=alienx(0)
  posaliy=alieny(0)
 For testt=0 To 199
  If  typtir(testt)=0 :Goto pas_testt:EndIf
    postirx=postirxx(testt)
  postiry=postiryy(testt)
 
  For testa=0 To 256
  If typast(testa)=0 :Goto pas_testa:EndIf
  depastx=depastx(testa)
  depasty=depasty(testa)
   zone1=zone*tailast(testa)
  If  postirx<depastx+zone1 And postirx>depastx-zone1 And postiry<depasty+zone1 And postiry>depasty-zone1
   ori_prox=depastx
 ori_proy=depasty
  If typast(testa)=2:score1+10:EndIf
  If typast(testa)=3:score1+20:EndIf
  If typast(testa)=5:score1+30:EndIf
  If typast(testa)=6:score1+40:EndIf
  If typast(testa)=11:score1+50:EndIf
  If typast(testa)=5 Or typast(testa)=6:Gosub creafra:EndIf:Gosub explosion_a:typtir(testt)=0:memtyp=typast(testa):typast(testa)=0:Gosub div_2:Goto pas_testt:EndIf

 pas_testa:
  Next testa
 
  fragm:
 
  If  typtir(testt)=2 :Gosub tir_alien:Goto pas_testt: EndIf
  If  test_enne=0:Goto pas_testt: EndIf
  If  postirx<posalix+30 And postirx>posalix-30 And postiry<posaliy+30 And postiry>posaliy-30
  ori_prox=posalix
 ori_proy=posaliy
 typtir(testt)=0
 trame222=0:test_enne=0:StopSound(8)
 score1+100
 Gosub explosion_e:EndIf
 
 
 
  pas_testt:
 
 Next testt
 Return
 tir_alien:
  If test_vais=0:Return:EndIf
   If  postirx<posx+30 And postirx>posx-30 And postiry<posy+30 And postiry>posy-30
  ori_prox=posalix
 ori_proy=posaliy
 typtir(testt)=0
 Gosub explosion_v:test_vais=0:EndIf
 Return
 div_2:
 memtail.f=tailast(testa)
 If memtail>2
 angle_asterox=Angty(testt)
 angle_asteroy=Angtx(testt)
 angle_asterox1.f=angle_asterox
 angle_asteroy1.f=angle_asteroy
 ori_astx=depastx(testa)
 ori_asty=depasty(testa)
 ori_astx1=ori_astx
 ori_asty1=ori_asty
 tail_ast=memtail-1
 vit_ast=4/(memtail-1)
 type_ast=memtyp
 
 ori_astx=ori_astx+angle_asterox*80
 ori_asty=ori_asty-angle_asteroy*80
 
 angle_asterox=angle_asterox1
 angle_asteroy=-angle_asteroy1
 Gosub creaast1
 
 ori_astx=ori_astx1-angle_asterox1*80
 ori_asty=ori_asty1+angle_asteroy1*80
 
 angle_asterox=-angle_asterox1
 angle_asteroy=angle_asteroy1
 Gosub creaast1
 EndIf
 Return

 col_obj:;- colision objet ---
 
   For testa1=0 To 256
  If typast(testa1)=0 :Goto pas_testa1:EndIf
  depastx=depastx(testa1)
  depasty=depasty(testa1)
 posalienx=alienx(0)
 posalieny=alieny(0)
   zone1=zone*tailast(testa1)
    If test_vais=0: Goto pas_testa2:EndIf
  If  posx<depastx+zone1+20 And posx>depastx-zone1-20 And posy<depasty+zone1+20 And posy>depasty-zone1-20
  ori_prox=posx
 ori_proy=posy
  Gosub explosion_v:test_vais=0:EndIf
  pas_testa2:
   If  test_enne=0:Goto pas_testa1:EndIf
   If  posalienx<depastx+zone1+20 And posalienx>depastx-zone1-20 And posalieny<depasty+zone1+20 And posalieny>depasty-zone1-20
  ori_prox=posalienx
 ori_proy=posalieny
  Gosub explosion_e:Gosub div_2:test_enne=0:trame222=0:EndIf
 pas_testa1:
  Next testa1
     
     If test_enne=0 Or test_vais=0:Return:EndIf
    If  posalienx-20<posx+20 And posalienx+20>posx-20 And posalieny-20<posy+20 And posalieny+20>posy-20
  ori_prox=posx
 ori_proy=posy
  Gosub explosion_v:test_vais=0
   ori_prox=posalienx
 ori_proy=posalieny
 trame222=0:test_enne=0
  Gosub explosion_e:EndIf
 Return
 
 ;- *********************
 
enemi:;- ennemi
 If test_enne=1:Goto mouv_ennemi:EndIf
 trame222+1
 If trame222>2000
 test_enne=1
  PlaySound(8,1)
 
 alienx(0)=0
 alieny(0)=Random(512)
 depalienx(0)=2
 depalieny(0)=0.5
 EndIf
 Return 
mouv_ennemi:
 Gosub evit_astero
 If Random(150)=1
 nb_trame=100
 magnet_x1.f=posx-alienx(0):magnet_y1.f=posy-alieny(0)
 If  magnet_x1>larg/2:magnet_x1=posx-larg -alienx(0): EndIf 
 If  magnet_x1<-larg/2:magnet_x1=posx+larg -alienx(0):EndIf
 If  magnet_y1>long/2:magnet_y1=posy-long -alieny(0):EndIf
 If  magnet_y1< -long/2:magnet_y1=posy+long -alieny(0):EndIf
 vec_magnet1.f=Sqr(magnet_x1*magnet_x1+magnet_y1*magnet_y1)
 angle_tirx=-(magnet_x1/vec_magnet1):angle_tiry=-(magnet_y1/vec_magnet1)
 vit_tir=-4
 type_tir=2
 ori_tirx=alienx(0)
 ori_tiry=alieny(0)
 angtxx=angle_tirx
 angtyy=angle_tiry
 Gosub creatir1
 EndIf
 If Random(200)=1:depalienx(0)=Sin (Random(614)/100)*2:depalieny(0)=-Cos(Random(614)/100)*2:EndIf
 alienx(0)+depalienx(0)
 alieny(0)+depalieny(0)
 Gosub alien
 Return
 evit_astero:;-evite asteroide
 num_ast=0
 evite:
 If tailast(num_ast)=0:Goto pas_evite:EndIf
 ast_alix.f= depastx(num_ast)
 ast_aliy.f= depasty(num_ast)
 If  alienx(0)>ast_alix-80 And  alienx(0)<ast_alix+80 And  alieny(0)>ast_aliy-80 And  alieny(0)<ast_aliy+80
 depalienx(0)=dirastx(num_ast)*vitast(num_ast)*1.5
 depalieny(0)=dirasty(num_ast)*vitast(num_ast)*2
 EndIf
 pas_evite:
 num_ast+1
 If num_ast<16:Goto evite:EndIf
 Return
 aster_suiveur:;- suiveur
  If test_vais=0 :Return:EndIf
 magnet_x.f=posx-depastx(nbast_l):magnet_y.f=posy-depasty(nbast_l)
 If  magnet_x>larg/2:magnet_x=posx-larg -depastx(nbast_l): EndIf 
 If  magnet_x<-larg/2:magnet_x=posx+larg -depastx(nbast_l):EndIf
 If  magnet_y>long/2:magnet_y=posy-long -depasty(nbast_l):EndIf
 If  magnet_y< -long/2:magnet_y=posy+long -depasty(nbast_l):EndIf
 vec_magnet.f=Sqr(magnet_x*magnet_x+magnet_y*magnet_y)
 dirastx(nbast_l)=(magnet_x/vec_magnet):dirasty(nbast_l)=(magnet_y/vec_magnet):Return
 clavier:;- clavier
 ExamineKeyboard();- 999999999
 If  test_vais=0:Goto t_esc:EndIf
 If  directionX=-1: rotm-0.1:If rotm<0 :rotm=2*pi :EndIf:EndIf
 If  directionX=1:rotm+0.1:If rotm>2*pi :rotm=0 :EndIf:EndIf
 If  directionY=-1:depmx=depmx+Sin(rotm)*vitesse:depmy=depmy-Cos(rotm)*vitesse
 push0=1:Else:push0=0:EndIf
 If  bouton1=1:If verrou_tir<>0:verrou_tir=0
 nb_trame=50:angle_tir=rotm:vit_tir=-7:type_tir=1:ori_tirx=posx:ori_tiry=posy:
 angtxx=Sin(rotm):angtyy=-Cos(rotm):Gosub creatir :PlaySound(1,0)
 EndIf: Else:verrou_tir=1:EndIf:
 t_esc:
 If KeyboardPushed(#PB_Key_Escape):End:EndIf:Return:
 explosion_v:;- explosion vaisseau
 PlaySound(3,0):StopSound(0):For nomb_pro = 0 To 500:nb_trame=Random(200)+1:angle_pro.f=(Random (614))/100
 vit_pro.f=(Random(100)/40)+0.2:type_pro=1:ori_prox=posx:ori_proy=posy:Gosub creapro:Next:Return
 explosion_a:;- explosion asteroide
 PlaySound(2,0):For nomb_pro = 0 To 50:nb_trame=Random(50)+1:angle_pro.f=(Random (614))/100
 vit_pro.f=(Random(100)/60)+1:type_pro=1:type_pro=1:Gosub creapro: Next:Return
 explosion_e:;- explosion  ennemi
 PlaySound(2,0):StopSound(8):For nomb_pro = 0 To 200:nb_trame=Random(50)+1:angle_pro.f=(Random (614))/100
 vit_pro.f=(Random(100)/60)+1:type_pro=1:type_pro=1:Gosub creapro: Next:Return
 creatir:;- création tir
 angle_tirx=-Sin(angle_tir):angle_tiry=Cos(angle_tir)
 creatir1:
 nb_tir2=0
 dej_tir1:
 If typtir(nb_tir2)<>0:nb_tir2+1:Goto dej_tir1:EndIf
 tramtir(nb_tir2)=nb_trame:tirxx(nb_tir2)=angle_tirx*vit_tir: tiryy(nb_tir2)=angle_tiry*vit_tir
 typtir(nb_tir2)=type_tir:postirxx(nb_tir2)=ori_tirx:postiryy(nb_tir2)=ori_tiry
 angtx(nb_tir2)=angtxx:angty(nb_tir2)=angtyy:Return
 creapro:;- création projectil
 angle_prox.f=-Sin(angle_pro):angle_proy.f=Cos(angle_pro)
 creapro1:
 nb_pro=0
 dej_pro:
 If typpro(nb_pro)<>0:nb_pro+1:Goto dej_pro:EndIf:trampro(nb_pro)=nb_trame
 proxx(nb_pro)=angle_prox*vit_pro:proyy(nb_pro)=angle_proy*vit_pro:typpro(nb_pro)=type_pro
 posproxx(nb_pro)=ori_prox:posproyy(nb_pro)=ori_proy:Return
 creafra:;- création fragment
 memtail.f=tailast(testa):angle_asterox1.f=Angty(testt):angle_asteroy1.f=Angtx(testt)
 ori_astx=depastx(testa):ori_asty=depasty(testa):tail_ast=1.4:vit_ast=4:type_ast=11
 ori_asty=depasty(testa)
 angle_asterox=angle_asterox1:angle_asteroy=-angle_asteroy1: Gosub creaast1
 angle_asterox=-angle_asterox1:angle_asteroy=angle_asteroy1:Gosub creaast1
 angle_asterox=-angle_asteroy1:angle_asteroy=-angle_asterox1: Gosub creaast1
 angle_asterox=angle_asteroy1: angle_asteroy=angle_asterox1:Gosub creaast1:Return
creatyp1:;- création astéroide initial
 type_ast=2 :  Gosub n_suiv : Return
creatyp2:
type_ast=3 :  Gosub o_suiv :Return
creatyp3:
 type_ast=5 : Gosub n_suiv :Return
creatyp4:
 type_ast=6 : Gosub o_suiv:Return
n_suiv:
  init_angle_ast=Random(628)/100
  ori_astx=Random(1024):ori_asty=0:tail_ast=4:vit_ast=1:Gosub creaast : Return
o_suiv: 
  ori_astx=Random(1024):ori_asty=0:tail_ast=4:vit_ast=1:Gosub creaast :Return
 creaast:;- création asteroide
 angle_asterox=-Sin(init_angle_ast):angle_asteroy=Cos(init_angle_ast)
 creaast1:
 nb_ast=0
 dej_ast:
 If typast(nb_ast)<>0:nb_ast+1:Goto dej_ast:EndIf:dirastx(nb_ast)=angle_asterox:dirasty(nb_ast)=angle_asteroy
 typast(nb_ast)=type_ast:depastx(nb_ast)=ori_astx:depasty(nb_ast)=ori_asty:tailast(nb_ast)=tail_ast
 vitast(nb_ast)=vit_ast:Return

;- AFFICHAGE
message:;- affiche un caractere vectoriel
 If angle_l>2*pi :angle_l=0 :EndIf
 If angle_l<0 :angle_l=2*pi :EndIf
 cosrot_l.f=Cos(angle_l):sinrot_l.f=Sin(angle_l)
 point_l1.l = PeekL(?lettre+dep_l): If  point_l1=-1: Goto fincarac : EndIf
 point_l2.l = PeekL(?lettre+dep_l+4):point_l1*8:point_l2*8
 coox1_l.l=PeekL(?carac+point_l1)+ori_rotx:cooy1_l.l=PeekL(?carac+point_l1+4)+ori_roty
 coox2_l.l=PeekL(?carac+point_l2)+ori_rotx:cooy2_l.l=PeekL(?carac+point_l2+4)+ori_roty
 coox11_l.f=cosrot_l * coox1_l - sinrot_l *cooy1_l :cooy11_l.f=sinrot_l * coox1_l + cosrot_l *cooy1_l
 coox22_l.f=cosrot_l * coox2_l - sinrot_l *cooy2_l :cooy22_l.f=sinrot_l * coox2_l + cosrot_l *cooy2_l
 coox11_l=coox11_l*tail_l:coox22_l=coox22_l*tail_l: cooy11_l=cooy11_l*tail_l:cooy22_l=cooy22_l*tail_l
 
If dep_l<76
 LineXY(pos_lx+coox11_l,pos_ly+cooy11_l,pos_lx+coox22_l,pos_ly+cooy22_l,RGB(170, 210, 245)) ;- vaisseau du joueur
EndIf 
If dep_l>75 And dep_l<100
 LineXY(pos_lx+coox11_l,pos_ly+cooy11_l,pos_lx+coox22_l,pos_ly+cooy22_l,RGB(80, 128, 255)) ;- cocpit de ce vaisseau
EndIf 
If dep_l>99 And dep_l<160
 LineXY(pos_lx+coox11_l,pos_ly+cooy11_l,pos_lx+coox22_l,pos_ly+cooy22_l,RGB(255, 234, 0)) ;- flamme reacteur 1
EndIf
If dep_l>159 And dep_l<200
 LineXY(pos_lx+coox11_l,pos_ly+cooy11_l,pos_lx+coox22_l,pos_ly+cooy22_l,RGB(255, 162, 0)) ;- flamme reacteur 2
EndIf
If dep_l>199 And dep_l<1151
 LineXY(pos_lx+coox11_l,pos_ly+cooy11_l,pos_lx+coox22_l,pos_ly+cooy22_l,RGB(55,255,255)) ;- asteroide
EndIf
If dep_l>1151
 LineXY(pos_lx+coox11_l,pos_ly+cooy11_l,pos_lx+coox22_l,pos_ly+cooy22_l,RGB(220, 50-ccouleur, 80-ccouleur)) ;- rouge pour vaisseau alien
EndIf

  dep_l+8 :Goto message
 fincarac:Return
 message1:;- affiche une chaine vectoriel
  pos_lx+depx_car
  pos_ly+depy_car
  ori_rotx=0
  ori_roty=0
  angle_l+0.000
  car_l1.b = PeekB(adress+dep_cl): If  car_l1=0: Goto fincarac1 : EndIf
  If car_l1=32:dep_cl+1:Goto message1:EndIf
  car_l1-30
  dep_l.l=car_l1*32*4
   Gosub message
    dep_cl+1 :Goto message1
 fincarac1:
  Return
 ciel:;- affiche ciel etoilé et coloré en mouvement
 For ciel_l= 0 To 199
  Circle(cielx(ciel_l),ciely(ciel_l),tail_ciel(ciel_l),RGB(rciel(ciel_l), gciel(ciel_l), bciel(ciel_l)))
  ciely(ciel_l)+1
  If ciely(ciel_l)>long:ciely(ciel_l)=0:EndIf
 Next
 Return
 asteroide:;- affiche asteroide
 nb_astero=0
 nbast_l=0
 affast:
 If typast(nbast_l)=0:nb_astero+1:Goto pas_aff_ast:EndIf
 If typast(nbast_l)=3 Or typast(nbast_l)=6:If vaisseau1>0: Gosub  aster_suiveur:EndIf:EndIf
 depastx(nbast_l)+dirastx(nbast_l)*vitast(nbast_l)
 depasty(nbast_l)+dirasty(nbast_l)*vitast(nbast_l)
 depastx1=depastx(nbast_l)
 depasty1=depasty(nbast_l)
 If depastx1>larg1:depastx1=0:If typast(nbast_l)=11:typast(nbast_l)=0:EndIf:EndIf
 If depasty1>long1:depasty1=0:If typast(nbast_l)=11:typast(nbast_l)=0:EndIf:EndIf
 If depastx1<0:depastx1=larg1:If typast(nbast_l)=11:typast(nbast_l)=0:EndIf:EndIf
 If depasty1<0:depasty1=long1:If typast(nbast_l)=11:typast(nbast_l)=0:EndIf:EndIf
 depastx(nbast_l)=depastx1
 depasty(nbast_l)=depasty1
 tail_l=tailast(nbast_l)
 dep_l=typast(nbast_l)*32*4 ;- 1***
 pos_lx=depastx1
 pos_ly=depasty1
 angle_l=0
 ori_rotx=0
 ori_roty=15
 Gosub message
 pas_aff_ast:
 nbast_l+1
 If nbast_l < 256:Goto affast:EndIf
 
 Return
 vaisseau:;- affiche vaisseau
 If test_vais=0:Return:EndIf:depmx=depmx*friction :depmy=depmy*friction:posx=posx+depmx:posy=posy+depmy
 If posx>larg:posx=0:EndIf:If posy>long:posy=0: EndIf:If posx<0: posx=larg:EndIf:If posy<0:posy=long:EndIf
 dep_l=0*32*4 ;- 2***
 : pos_lx=posx :pos_ly=posy: ori_rotx=0:  ori_roty=10: tail_l=1.4:angle_l=rotm: Gosub message
 If push0=1:If Random(1)=1:dep_l=1*32*4:pos_lx=posx:pos_ly=posy:angle_l=rotm:ori_rotx=0:ori_roty=50:tail_l=1.5:Gosub message
 EndIf: If ver_sound_vai=0 :ver_sound_vai=1:PlaySound(0,1) :EndIf
 Else :  If ver_sound_vai=1 :ver_sound_vai=0:StopSound(0) :EndIf:EndIf:Return
 alien:;- affiche alien
 If test_enne=0:Return:EndIf
 posalienx= alienx(0)
 posalieny= alieny(0)
 dep_l=9*32*4 ;- 3***
 pos_lx=posalienx
 pos_ly=posalieny
 ori_rotx=0
 ori_roty=10
 tail_l=1.4
 angle_l=pi2
 If    posalienx>larg1:   posalienx=0:EndIf
 If    posalieny>long1:  posalieny=0:EndIf
 If    posalienx<0:   posalienx=larg1:EndIf
 If    posalieny<0:   posalieny=long1:EndIf
 alienx(0)=posalienx
 alieny(0)=posalieny
 Gosub message
 Return
 
 
 
 
aff_tir:;- affiche tir
 nb_tir=0
 ret_tir:
 If typtir(nb_tir)=0:nb_tir+1
  If nb_tir>190 :Goto fin_tir:EndIf
  Goto ret_tir
 EndIf
 postirxx(nb_tir)+tirxx(nb_tir)
 postiryy(nb_tir)+tiryy(nb_tir)

 postirx=postirxx(nb_tir)
 postiry=postiryy(nb_tir)
 
 tramtir(nb_tir)-1
 If tramtir(nb_tir)=0:typtir(nb_tir)=0:tirxx(nb_tir)=0:tiryy(nb_tir)=0: EndIf
 If postirx>larg:postirx=0:postirxx(nb_tir)=postirx:EndIf
 If postiry>long:postiry=0:postiryy(nb_tir)=postiry:EndIf
 If postirx<0:postirx=larg:postirxx(nb_tir)=postirx:EndIf
 If postiry<0:postiry=long:postiryy(nb_tir)=postiry:EndIf
 
 ;- tir gentil ou pas <----
; Circle (postirx,postiry,3,RGB(85, 200, 255))
; Circle(postirx,postiry, 2 ,RGB(135, 210, 255))
 Circle (postirx,postiry,3,RGB(85+bcouleur, 200, 255));255,255,255)) ;-
 Circle(postirx,postiry, 2 ,RGB(135+bcouleur, 210,255))


 
 nb_tir+1
 If nb_tir<190: Goto ret_tir:EndIf
 fin_tir:

; If ver_sound_tir=0 :ver_sound_tir=1:PlaySound(4,1) :EndIf
;   If ver_sound_tir=1 :ver_sound_tir=0:StopSound(4) :EndIf
 Return 
 
 
 
 
 
 
 
 
 
 affpro:;- affiche explosion
 nb_proj=0
 nb_trame=0
 ret_proj:
 If typpro(nb_proj)=0:nb_trame+1:Goto pas_proj:EndIf
 posproxx(nb_proj)+proxx(nb_proj)
 posproyy(nb_proj)+proyy(nb_proj)

 posprox=posproxx(nb_proj)
 posproy=posproyy(nb_proj)
 
 trampro(nb_proj)-1
 If trampro(nb_proj)=0:typpro(nb_proj)=0:proxx(nb_proj)=0:proyy(nb_proj)=0: EndIf
 If posprox>larg:posprox=0:posproxx(nb_proj)=posprox:EndIf
 If posproy>long:posproy=0:posproyy(nb_proj)=posproy:EndIf
 If posprox<0:posprox=larg:posproxx(nb_proj)=posprox:EndIf
 If posproy<0:posproy=long:posproyy(nb_proj)=posproy:EndIf
 
 
 Circle (posprox,posproy,3,RGB(255,255,255))
 pas_proj:
 nb_proj+1
 If nb_proj<1900: Goto ret_proj:EndIf
 Return
 init_jeu:;- initialisation jeu
 For ini_ciel=0 To 199:cielx(ini_ciel)=Random(larg):ciely(ini_ciel)=Random(long):tail_ciel(ini_ciel)=Random(3)-1:Next
 
 Return
 convasci:;- convertis score ASCI
  divid.l=100000
  dep_sc=0
  decim.l=0
  conv_sc:
  score3.l=0
  score2.l=score1
  score3=score2
  For sco=0 To 5
  score2/divid
  decim=score2
  score3=score3-decim*divid
  score2=score3
  divid/10
  decim+48
  PokeB(?score+dep_sc,decim)
  dep_sc+1
  Next
  PokeB(?score+dep_sc,0)
 Return
 moins_vie:
  PokeB(?vie+vie1-1,0)
 Return
 over:
     tail_l.f=1
     dep_cl.f=0
 dep_car.f=0
  pos_lx=larg/2-140
   pos_ly=long/2-50
depx_car.f=(30*tail_l)
depy_car=0;(35*tail_l)
angle_l=0
adress=?fin_jeu

    Gosub message1 
    Return
 
 init_tableau:;- initialisation tableau
 num_level:;- section niveau
For initast=0 To 15:tailast(initast)=0:depasty(initast)=0:Next
If level=1:Gosub creatyp1:Gosub creatyp1:Gosub creatyp1:Gosub creatyp1: EndIf
If level=2:Gosub creatyp1:Gosub creatyp1:Gosub creatyp1:Gosub creatyp2: EndIf
If level=3:Gosub creatyp1:Gosub creatyp1:Gosub creatyp1:Gosub creatyp3: EndIf
If level=4:Gosub creatyp1:Gosub creatyp1:Gosub creatyp1:Gosub creatyp4: EndIf
If level=5:Gosub creatyp1:Gosub creatyp1:Gosub creatyp2:Gosub creatyp4: EndIf
If level=6:Gosub creatyp1:Gosub creatyp1:Gosub creatyp3:Gosub creatyp4: EndIf
If level=7:Gosub creatyp1:Gosub creatyp1:Gosub creatyp4:Gosub creatyp4: EndIf
If level=8:Gosub creatyp1:Gosub creatyp2:Gosub creatyp4:Gosub creatyp4: EndIf
If level=9:Gosub creatyp1:Gosub creatyp3:Gosub creatyp4:Gosub creatyp4: EndIf
If level=10:Gosub creatyp1:Gosub creatyp4:Gosub creatyp4:Gosub creatyp4: EndIf
If level=11:Gosub creatyp2:Gosub creatyp4:Gosub creatyp4:Gosub creatyp4: EndIf
If level=12:Gosub creatyp3:Gosub creatyp4:Gosub creatyp4:Gosub creatyp4: EndIf
If level=13:Gosub creatyp4:Gosub creatyp4:Gosub creatyp4:Gosub creatyp4: EndIf
Return

Procedure.i cdirection(*caps.JOYCAPS, *info.JOYINFOEX) ; joypad: utilisation de la croix directionnelle.
    If *info\dwPOV=0 Or *info\dwPOV=4500 Or *info\dwPOV=31500:directionY=-1:EndIf; haut 
    If *info\dwPOV=18000 Or *info\dwPOV=22500 Or *info\dwPOV=13500:directionY=1:EndIf; bas
    If *info\dwPOV=9000 Or *info\dwPOV=4500 Or *info\dwPOV=13500:directionX=1:EndIf; droite 
    If *info\dwPOV=27000 Or *info\dwPOV=31500 Or *info\dwPOV=22500:directionX=-1:EndIf; gauche
EndProcedure

gene_son:
   !MOV  dword[add_dat],0
   For br=0 To 6000;- bruit reacteur
   brh0.f=Random(65000)-32000
   brsong.w=brh0
   !PUSH eax
   !PUSH ebx
   !PUSH edi
   !MOV  ax,word[v_brsong]
   !LEA  edi,[br_rea]
   !ADD  edi,[add_dat]
   !ADD  dword[add_dat],4
   !MOV  word[edi],ax
   !MOV  word[edi+2],ax
   !POP  edi
   !POP  ebx
   !POP  eax
   Next br
   CatchSound(0,?music0)
   SoundVolume(0, 50)
   SoundFrequency(0, 1500)
 
  !MOV  dword[add_dat],0
 For br=0 To 6000;- bruit ennemi
   a.f+0.1
 
   brh0.f=Sin(a*a)*32000
   brsong.w=brh0
   !PUSH eax
   !PUSH ebx
   !PUSH edi
   !MOV  ax,word[v_brsong]
   !LEA  edi,[br_enn]
   !ADD  edi,[add_dat]
   !ADD  dword[add_dat],4
   !MOV  word[edi],ax
   !MOV  word[edi+2],ax
   !POP  edi
   !POP  ebx
   !POP  eax
   Next br
   CatchSound(8,?music8)
   SoundVolume(8, 30)
   SoundFrequency(8,  1450)
   
    ral0.f=1
  !MOV  dword[add_dat],0
   For br=0 To 60000
   ral0+0.02
   brh0.f=Random(500000)/ral0

   brsong.w=brh0
   !PUSH eax
   !PUSH ebx
   !PUSH edi
   !MOV  ax,word[v_brsong]
   !LEA  edi,[br_exp]
   !ADD  edi,[add_dat]
   !ADD  dword[add_dat],4
   !MOV  word[edi],ax
   !MOV  word[edi+2],ax
   !POP  edi
   !POP  ebx
   !POP  eax
   Next br
   CatchSound(2,?music2)
   SoundVolume(2, 60)
   SoundFrequency(2, 4000)
   
   
    b.f=3;- bruit tir
     !MOV  dword[add_dat],0
 For br=0 To 60000
   a.f+b
 b-0.0008
   brh0.f=Sin(a)*15000
   brsong.w=brh0
   !PUSH eax
   !PUSH ebx
   !PUSH edi
   !MOV  ax,word[v_brsong]
   !LEA  edi,[br_tir]
   !ADD  edi,[add_dat]
   !ADD  dword[add_dat],4
   !MOV  word[edi],ax
   !MOV  word[edi+2],ax
   !POP  edi
   !POP  ebx
   !POP  eax
   Next br
   CatchSound(1,?music1)
   SoundVolume(1, 60)
   SoundFrequency(1, 7500)

 !MOV  dword[add_dat],0
 a.f=1;- bruit explosion vaisseau
   b.f=65000
  For br=0 To 60000

  a-0.00035
  b-10
   brh0.f=(Random(b)-b/2)*a

   brsong.w=brh0
    !PUSH eax
   !PUSH ebx
   !PUSH edi
   !MOV  ax,word[v_brsong]
   !LEA  edi,[br_expv]
   !ADD  edi,[add_dat]
   !ADD  dword[add_dat],4
   !MOV  word[edi],ax
   !MOV  word[edi+2],ax
   !POP  edi
   !POP  ebx
   !POP  eax
   Next br
   CatchSound(3,?music3)
   SoundVolume(3, 100)
   SoundFrequency(3, 1800)
   Return
   
 !section '.data' align 16
 niveau:
  !db  "NIVEAU",0,0 
 nine1:
 !db  "ASTEROIDE SIMPLE",0,0
  nine2:
 !db  "ASTEROIDE MAGNETIQUE",0,0
   nine3:
 !db  "ASTEROIDE A FRAGMENTATION",0,0
    nine4:
 !db  "ASTEROIDE MAGNETIQUE A FRAGMENTATION",0,0
   score:
  !db "1234567890",0,0
    vie:
  !db 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,0
  fin_jeu:
  !db "FIN DE JEU",0,0
 carac:
  ! dd  -10,-30,-5,-30,0,-30,5,-30,10,-30
  ! dd  -10,-25,-5,-25,0,-25,5,-25,10,-25 
  ! dd  -10,-20,-5,-20,0,-20,5,-20,10,-20
  ! dd  -10,-15,-5,-15,0,-15,5,-15,10,-15 
  ! dd  -10,-10,-5,-10,0,-10,5,-10,10,-10
  ! dd  -10,-5,-5,-5,0,-5,5,-5,10,-5
  ! dd  -10, 0,-5, 0,0, 0,5, 0,10, 0
  ! dd  -10, 5,-5, 5,0, 5,5, 5,10, 5
  ! dd  -10,10,-5,10,0,10,5,10,10,10
  ! dd  -10,15,-5,15,0,15,5,15,10,15
 lettre:
  !dd   2,16,16,48,46,18,18,2,32,26,26,30,30,46,34,28,28,32,34,48,12,16,16,18,18,12,-1,0,0,0,0,0
  !dd   2,11,11,32,32,13,13,2,2,15,15,47,47,19,19,2,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   5,16,16,25,25,22,22,29,29,18,18,9,9,12,12,5,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   10,6,6,11,11,12,12,8,8,14,14,13,13,18,18,24,24,28,28,23,23,22,22,26,26,20,20,21,21,16,16,10
  !dd   -1,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   5,16,16,25,25,22,22,29,29,18,18,9,9,12,12,5,11,23,13,21,-1,0,0,0,0,0,0,0,0,0,0,0
  !dd   10,6,6,11,11,12,12,8,8,14,14,13,13,18,18,24,24,28,28,23,23,22,22,26,26,20,20,21,21,16,16,10
  !dd   11,23,13,21,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,4,4,30,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   4,2,2,7,7,6,6,10,10,20,20,26,26,27,27,32,32,34,34,29,29,28,28,23,23,24,24,14,14,13,13,8
  !dd   8,9,9,4,6,26,7,27,-1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   6,10,10,16,16,25,25,21,21,22,22,27,27,29,29,23,23,19,19,8,8,12,12,6,-1,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

  !dd   1,5,5,25,25,31,31,33,33,29,29,9,9,3,3,1,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 0
  !dd   6,2,2,32,31,33,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 1
  !dd   5,1,1,3,3,9,9,14,14,30,30,34,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 2
  !dd   5,1,1,3,3,9,9,14,14,18,18,16,18,24,24,29,29,33,33,31,31,25,-1,0,0,0,0,0,0,0,0,0 ; 3
  !dd   3,20,20,24,3,33,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 4
  !dd   4,0,0,15,15,18,18,24,24,29,29,33,33,31,31,25,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 5
  !dd   9,3,3,1,1,5,5,25,25,31,31,33,33,29,29,24,24,18,18,16,16,20,-1,0,0,0,0,0,0,0,0,0 ; 6
  !dd   0,4,4,30,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ; 7
  !dd   1,5,5,10,10,16,16,20,20,25,25,31,31,33,33,29,29,24,24,18,18,14,14,9,9,3,3,1,16,18,-1,0 ; 8
  !dd   25,31,31,33,33,29,29,9,9,3,3,1,1,5,5,10,10,16,16,18,18,14,-1,0,0,0,0,0,0,0,0,0 ; 9


   
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

  !dd   1,3,3,14,14,34,1,10,10,30,15,19,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 
;  !dd   14,14,14,14,14,14,14,10,10,30,15,19,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  
  !dd   0,3,3,9,9,14,14,18,18,24,24,29,29,33,33,30,30,0,15,18,-1,0,0,0,0,0,0,0,0,0,0,0
  !dd   9,3,3,1,1,5,5,25,25,31,31,33,33,29,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   3,0,0,30,30,33,33,29,29,9,9,3,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   4,0,0,30,30,34,15,18,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   4,0,0,30,15,18,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   9,3,3,1,1,5,5,25,25,31,31,33,33,29,29,19,19,18,-1,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,30,4,34,15,19,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   1,3,2,32,31,33,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   4,29,29,33,33,31,31,25,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,30,15,17,17,4,17,34,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,30,30,34,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   30,0,0,12,12,4,4,34,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   30,0,0,34,34,4,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   3,1,1,5,5,25,25,31,31,33,33,29,29,9,9,3,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   15,18,18,14,14,9,9,3,3,0,0,30,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   3,1,1,5,5,25,25,31,31,33,33,29,29,9,9,3,22,34,-1,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,3,3,9,9,14,14,18,18,24,24,34,0,30,15,18,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   9,3,3,1,1,5,5,10,10,16,16,18,18,24,24,29,29,33,33,31,31,25,-1,0,0,0,0,0,0,0,0,0
  !dd   0,4,2,32,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,25,25,31,31,33,33,29,29,4,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,32,32,4,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,30,30,22,22,34,34,4,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,34,4,30,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,17,17,4,17,32,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   0,4,4,30,30,34,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   4,1,1,5,5,25,25,31,31,34,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  !dd   3,0,0,30,30,33,33,29,29,9,9,3,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 

 !section '.data' align 16
  !add_dat:
  !dd  0
 music0:
  !db   052h,049h,046h,046h
  !dd   6000-8
  !db   057h,041h,056h,045h,066h,06dh,074h,020h
  !dd   16
  !dw   1,2
  !dd   22050,88200
  !dw   4,16
  !db   064h,061h,074h,061h
  !dd   6000-44

  !br_rea:
  !rd  60000 
  !section '.data' align 16
 music1:
  !db   052h,049h,046h,046h
  !dd   15000-8
  !db   057h,041h,056h,045h,066h,06dh,074h,020h
  !dd   16
  !dw   1,2
  !dd   22050,88200
  !dw   4,16
  !db   064h,061h,074h,061h
  !dd   15000-44

  !br_tir:
  !rd  30000 
  !section '.data' align 16
  music2:
 
  !db   052h,049h,046h,046h
  !dd   6000-8
  !db   057h,041h,056h,045h,066h,06dh,074h,020h
  !dd   16
  !dw   1,2
  !dd   22050,88200
  !dw   4,16
  !db   064h,061h,074h,061h
  !dd   6000-44

  !br_exp:
  !rd  620000 
  !section '.data' align 16
   music3:
 
  !db   052h,049h,046h,046h
  !dd   15000-8
  !db   057h,041h,056h,045h,066h,06dh,074h,020h
  !dd   16
  !dw   1,2
  !dd   22050,88200
  !dw   4,16
  !db   064h,061h,074h,061h
  !dd   15000-44

  !br_expv:
  !rd  60000 
  !section '.data' align 16
  music8:
 
  !db   052h,049h,046h,046h
  !dd   6000-8
  !db   057h,041h,056h,045h,066h,06dh,074h,020h
  !dd   16
  !dw   1,2
  !dd   22050,88200
  !dw   4,16
  !db   064h,061h,074h,061h
  !dd   6000-44

  !br_enn:
  !rd  80000 
Répondre