Après quelques petits bonhommes de sable


Je suis de retour, avant tout merci à djes d'avoir organisé le punch de Noël !
Merci à falsam pour son astuce, les musiques auraient été un peu moins musicales

Bravo aux participants, dommage qu'il y en ait eu si peu.
Je n'ai pas encore voté mais ça va venir, en attendant, voici le code de mon punch.
http://www.purebasic.fr/english/viewtop ... 47#p458247
La partie qui va être utile pour mes futurs codes, c'est la procédure subdivision et la partie normalisation de la courbe,
le reste, c'est un exemple d'utilisation avec les listes chaînées qui mérite d'être améliorée car vu les délais du punch, j'ai fait au mieux mais je ne cache pas que j'ai vu plusieurs fois le message d'erreur du compilateur :
cet élément n'existe pas et donc je plante , na !
J'espère que cela sera utile à quelqu'un !
Il n'y a pas trop de maths, juste différentes utilisations un peu originales du théorème de Pythagore (sauce Huitbit

(ne pas oublier de sauvegarder avant d'exécuter à cause du fichier midi !)
Clic droit pour quitter en cours de partie
A la fin taper Entrée pour le MessageRequester()
Code : Tout sélectionner
; PurePunch Noël 2014
; Huitbit
lEcran = 800
hEcran = 600
longueurCourbe.l
cosinus.f
sinus.f
hypothenuse.f
Enumeration
#EN_ATTENTE
#BOULE_TOUCHEE
#VERIFICATION
#etoile = 7 ; car les boules sont les sprites de 1 à 6 , (0 non utilisé, valeur de boule()\spr à l'initialisation)
#sapin
EndEnumeration
r = 12 ; rayon d'une boule
d = 2 * r + 1 ; diamètre d'une boule
Structure pt
x.l
y.l ; y = a * x + b
s.l ; abscisse curviligne
a.f ; pente
b.f ; ordonnée à l'origine
EndStructure
Structure courbe
x.f
y.f ; y = a * x + b
attente.l ; indique si la voie est libre ou pas
EndStructure
Structure boule
x.f
y.f
s.l ; abscisse curviligne de la boule
ds.f ; déplacement positif ou négatif
spr.l
retour.l ; indique si la boule est en marche arrière
EndStructure
;- Label pour bouclage du jeu
jeu:
NewList boule.boule()
nbrSubdv = 4 ; nombre de subdivisions pour le chemin des boules
nPtCtrl = 12 ; nombre de points de contrôle
rapportSubdv.f = 0.25 ; rapport utilisé pour les subdivisions de la courbe
Dim p.pt(nPtCtrl) ; tableau de stockage des points de contrôle, il sera redimensionné à chaque passage
; dans la procedure subdv
P(0)\x = 362
P(0)\y = 20
; création de la forme de la guirlande avec une fonction sinus "améliorée"
For n = 0 To nPtCtrl - 1
P(n + 1)\y = P(n)\y + 480 / nPtCtrl + Random(20) * Pow(-1, n)
P(n + 1)\x = P(n)\y * Sin(2 * #PI * P(n)\y / 200) + 400 + Random(20) * Pow(-1, n)
Next n
Macro affine(a, b, xA, yA, xB, yB) ; y = a*x+b
If xB = xA ; interdire les portions verticales où le coefficient directeur n'est pas défini
xB = xA + 1
EndIf
; prise en compte du sens de déplacement pour le calcul de la pente
If xA < xB
a = (yB - yA) / (xB - xA)
Else
a = (yB - yA) / (xA - xB)
EndIf
b = yB - a * xB
EndMacro
Macro creerBoule(id, couleur)
CreateSprite(id, d, d)
StartDrawing(SpriteOutput(id))
Circle(r, r, r, couleur)
StopDrawing()
EndMacro
Procedure.l subdv(Array pP.pt(1), pNptCtrl, pNbrSubdv, pRapportSubdv.f)
Dim Ptemp.pt(pNptCtrl)
CopyArray(pP(), Ptemp())
For nSubdv = 1 To pNbrSubdv
ReDim pP(2 * pNptCtrl - 1)
For n = 0 To pNptCtrl - 1
pP(2 * n)\x = Ptemp(n)\x + pRapportSubdv * (Ptemp(n + 1)\x - Ptemp(n)\x)
pP(2 * n)\y = Ptemp(n)\y + pRapportSubdv * (Ptemp(n + 1)\y - Ptemp(n)\y)
pP(2 * n + 1)\x = Ptemp(n)\x + (1 - pRapportSubdv) * (Ptemp(n + 1)\x - Ptemp(n)\x)
pP(2 * n + 1)\y = Ptemp(n)\y + (1 - pRapportSubdv) * (Ptemp(n + 1)\y - Ptemp(n)\y)
Next n
pNptCtrl = 2 * pNptCtrl - 1
ReDim Ptemp.pt(pNptCtrl)
CopyArray(pP(), Ptemp())
Next nSubdv
ProcedureReturn pNptCtrl
EndProcedure
;- @@début génération courbe
; Subdivision courbe
nPtCtrl = subdv(P(), nPtCtrl, nbrSubdv, rapportSubdv)
;- Calculs des équations affines de chaque segment
For n = 0 To nPtCtrl - 1
affine(P(n)\a, P(n)\b, P(n)\x, P(n)\y, P(n + 1)\x, P(n + 1)\y)
Next n
;- calcul de la longueur de la courbe L=Somme(dL) avec dL =Sqr[1+(dy/dx)²].dx et dy/dx = a
; et détermination de l'abscisse curviligne s des points de contrôle
; comparaison des triangles rectangles (côté adj : dx ; côté opp: dy ; hyp : dL )
; et (côté adj : 1 ; côté opp: a ;hyp : Sqr[1+(dy/dx)²] )
; dL / dx = cos(angle) = 1 / Sqr[1+(dy/dx)²] )
P(0)\s = 0
longueurCourbe = 0
For n = 0 To nPtCtrl - 1
longueurCourbe = longueurCourbe + Sqr(1 + P(n)\a * P(n)\a) * Abs(P(n + 1)\x - P(n)\x)
P(n + 1)\s = longueurCourbe
Next n
;- Abscisse curviligne (correspondance entre la position sur la courbe de 0 à longueurCourbe et les coordonnées cartésiennes (x,y)
Dim s.courbe(longueurCourbe)
; On va graduer la courbe de 1 en 1 et récuperer les coordonnées (x,y) de chaque graduation
; on va de point de contrôle P(n) en point de contrôle P(n+1) situés à des distances quelconques
; travail dans le triangle rectangle (côté adj : cos(angle) ; côté opp: sin(angle) ; hyp : 1 )
; avec cos(angle) = +-1 / Sqr[1+a²] et sin(angle) = a / Sqr[1+a²]
; cas du premier point de contrôle P(0)
; l=0
s(0)\x = P(0)\x
s(0)\y = P(0)\y
hypothenuse = Sqr(1 + P(0)\a * P(0)\a)
l = 1 ; suite des calculs à partir de la graduation 1 de la courbe
For n = 0 To nPtCtrl - 1
hypothenuse = Sqr(1 + P(n)\a * P(n)\a)
cosinus = Sign(P(n + 1)\x - P(n)\x) / hypothenuse ; prise en compte du sens des x croissants pour les calculs
sinus = P(n)\a / hypothenuse
While l < P(n + 1)\s
s(l)\x = s(l - 1)\x + cosinus
s(l)\y = s(l - 1)\y + sinus
l = l + 1
Wend
; ajustement de la valeur des coordonnées à chaque point de contrôle
If l = P(n + 1)\s
s(l)\x = P(n + 1)\x
s(l)\y = P(n + 1)\y
l = l + 1
EndIf
Next n
;- @@fin génération courbe
;- -
;- musique
If CreateFile(0, "zic.mid")
WriteData(0, ?mid_start, ?mid_end - ?mid_start)
CloseFile(0)
EndIf ; ;;;;;;;;;;
;- PROGRAMME PRINCIPAL
;-
InitSprite()
InitMouse()
InitMovie()
OpenWindow(0, 0, 0, lEcran, hEcran, "PunchNoël", #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0), 0, 0, lEcran, hEcran, 1, 0, 0, #PB_Screen_SmartSynchronization)
LoadMovie(0, "zic.mid")
;- étoile
Dim pDessin.pt(11) ; 11 points de contrôle
Restore etoile
For i = 0 To 10
Read.l pDessin(i)\x
Read.l pDessin(i)\y
Next i
nMax = subdv(pDessin(), 10, 4, 0.10)
pDessin(nMax)\x = pDessin(0)\x
pDessin(nMax)\y = pDessin(0)\y
CreateSprite(#etoile, 88, 88)
StartDrawing(SpriteOutput(#etoile))
For i = 0 To nMax - 1
For j = 0 To 1
LineXY(pDessin(i)\x + j, pDessin(i)\y + j, pDessin(i + 1)\x + j, pDessin(i + 1)\y + j, RGB(255, 255, 0))
Next j
Next i
FillArea(44, 44, RGB(255, 255, 0), RGB(255, 200, 32))
StopDrawing()
;- sapin
Dim pDessin.pt(20) ; 11 points de contrôle
Restore sapin
For i = 0 To 19
Read.l pDessin(i)\x
Read.l pDessin(i)\y
Next i
nMax = subdv(pDessin(), 19, 4, 0.10)
pDessin(nMax)\x = pDessin(0)\x
pDessin(nMax)\y = pDessin(0)\y
CreateSprite(#sapin, lEcran, hEcran)
StartDrawing(SpriteOutput(#sapin))
For n = 0 To 999 ; étoiles
Box(Random(999), Random(999), 1, 1, RGB(255, 255, 255))
Next n
Ellipse(400, 600, 1000, 200, RGB(220, 255, 255))
For i = 0 To nMax - 1
For j = 0 To 2
LineXY(pDessin(i)\x + j + 200, pDessin(i)\y + j + 60, pDessin(i + 1)\x + j + 200, pDessin(i + 1)\y + j + 60, RGB(0, 255, 0))
Next j
Next i
FillArea(200 + 200, 100 + 60, RGB(0, 255, 0), RGB(0, 192, 64))
Ellipse(P(nPtCtrl)\x, P(nPtCtrl)\y, 30, 10, RGB(64, 64, 64))
StopDrawing()
;- création des boules
creerBoule(1, RGB(255, 0, 0)) ; rouge
creerBoule(2, RGB(255, 255, 0)) ; jaune
creerBoule(3, RGB(0, 255, 0)) ; verte
creerBoule(4, RGB(0, 0, 255)) ; bleu
creerBoule(5, RGB(255, 0, 255)) ; magenta
creerBoule(6, RGB(64, 64, 64)) ; grise
;-
;- BOUCLE PRINCIPALE
;-
sprTir = Random(5, 1)
collision = #EN_ATTENTE
total = 0
MouseLocate(lEcran * 0.5, hEcran - 2 * d)
Repeat
;- gestion de la musique
If MovieStatus(0) = 0
PlayMovie(0, WindowID(0))
Delay(9) ; petite pause pour limiter le blocage du programme lorsque la musique reprend
EndIf
;- gestion de la souris
ExamineMouse()
If ElapsedMilliseconds() - chronoClic > 80
chronoClic = ElapsedMilliseconds()
If MouseButton(#PB_MouseButton_Left) And clic = 0 ; variable clic pour gérer le relâchement du bouton gauche
; et éviter une détection en continu du clic gauche
clic = 1
tir = 1
xTir = MouseX()
EndIf ; MouseButton(#PB_MouseButton_Left) clic = 0
EndIf ; ElapsedMilliseconds() - chronoClic >80
If MouseButton(#PB_MouseButton_Left) = 0 ; on détecte si le bouton est relâché
clic = 0
EndIf ; MouseButton(#PB_MouseButton_Left) = 0
If tir = 1 ; on déplace la boule tirée verticalement
xTir = xTir
yTir = yTir - r
If yTir < d ; la boule sort de l'écran
tir = 0
sprTir = Random(5, 1)
EndIf ; yTir < d
Else ; on suit la souris en bas de l'écran
xTir = MouseX()
yTir = hEcran - 2 * d
EndIf ; tir=1
;- collision
ForEach boule()
If SpriteCollision(sprTir, xTir, yTir, boule()\spr, boule()\x, boule()\y) And collision = #EN_ATTENTE
; - insertion de la boule, décalage des autres éléments, vérification si trois boules alignées
collision = #BOULE_TOUCHEE
Break
EndIf
Next
If collision = #BOULE_TOUCHEE
; décaler toutes les propriétés de la boule vers l'avant
Repeat
sprBouleTouchee = boule()\spr
boule()\spr = sprTir
sprTir = sprBouleTouchee
Until PreviousElement(boule()) = 0
FirstElement(boule())
sPremier = boule()\s
If sPremier + d < longueurCourbe ; si la bouche d'aération n'est pas atteinte, on ajoute la boule tirée
InsertElement(boule())
boule()\s = sPremier + d
boule()\spr = sprBouleTouchee
Else ; sinon, la partie est finie
fin = 1
EndIf ; sPremier+d<longueurCourbe
collision = #VERIFICATION ; vérification de la chaîne à faire (étape suivante)
tir = 0
sprTir = Random(5, 1)
EndIf ; collision = #BOULE_TOUCHEE
;- vérification chaîne
If collision = #VERIFICATION
ForEach boule()
recommencerVerification = 0
If ListIndex(boule()) < ListSize(boule()) - 2
bouleA = boule()\spr
indexA = ListIndex(boule())
NextElement(boule())
bouleB = boule()\spr
NextElement(boule())
bouleC = boule()\spr
indexC = ListIndex(boule())
NextElement(boule())
bouleD = boule()\spr
indexD = ListIndex(boule())
If bouleA = bouleB And bouleA = bouleC And bouleA = bouleD
SelectElement(boule(), indexD)
If boule()\s > d
sCourant = boule()\s ; on récupère l'abscisse curviligne de la quatrième boule D
EndIf ; boule()\s>d
total = total + 4
DeleteElement(boule())
DeleteElement(boule())
DeleteElement(boule())
DeleteElement(boule())
For sC = sCourant To longueurCourbe
s(sC)\attente = 0
Next sC
recommencerVerification = 1
ElseIf bouleA = bouleB And bouleA = bouleC
SelectElement(boule(), indexC)
If boule()\s > d
sCourant = boule()\s ; on récupère l'abscisse curviligne de la troisième boule C
EndIf ; boule()\s>d
total = total + 3
DeleteElement(boule())
DeleteElement(boule())
DeleteElement(boule())
For sC = sCourant To longueurCourbe
s(sC)\attente = 0
Next sC
recommencerVerification = 1
EndIf ; combo ABC ou ABCD
If recommencerVerification = 1
FirstElement(boule())
Else
SelectElement(boule(), indexA)
EndIf
EndIf ; ListIndex(boule()) < ListSize(boule())-2
Next ; boule()
collision = #EN_ATTENTE
EndIf ; collision=#VERIFICATION
LastElement(boule())
;- temporisation du jeu
If ElapsedMilliseconds() - chronoBoule > 30
chronoBoule = ElapsedMilliseconds()
;- entrée des boules sur la piste
If s(0)\attente = 0
AddElement(boule())
boule()\s = 0
boule()\x = s(boule()\s)\x
boule()\y = s(boule()\s)\y
boule()\ds = 1
; première boule grise
If ListIndex(boule()) = 0
boule()\spr = 6
Else
boule()\spr = Random(5, 1)
; interdire le tirage de trois boules identiques consécutives
While boule()\spr = sprPrecedent1 And boule()\spr = sprPrecedent2
boule()\spr = Random(5, 1)
Wend
EndIf
sprPrecedent3 = sprPrecedent2 ; début du jeu à la 3ème boule
sprPrecedent2 = sprPrecedent1
sprPrecedent1 = boule()\spr
EndIf ; s(0)\attente = 0
;- gestion des déplacements
ForEach boule()
If boule()\s < longueurCourbe
; recule si rien derrière
If boule()\s > d + 1 ; on ne regarde pas la valeur pour s négatif
; comparaison de la distance entre deux boules consécutives
indexA = ListIndex(boule())
sA = boule()\s
SelectElement(boule(), indexA + 1)
indexB = ListIndex(boule())
sB = boule()\s
If (sA - sB) > d + 1
SelectElement(boule(), indexA) ; retour à la boule en cours
boule()\ds = -4
boule()\retour = 1
Else
SelectElement(boule(), indexA) ; retour à la boule en cours
boule()\retour = 0
boule()\s = sb + d ; ajustement des boules
s(boule()\s)\attente = 0
EndIf ; (sA-sB)>d
EndIf ; boule()\s>d
; avance si piste dégagée
If s(boule()\s)\attente = 1
boule()\ds = 0
Else
If boule()\retour = 0
boule()\ds = 1
s(boule()\s)\attente = 1
If boule()\s >= d
s(boule()\s - d)\attente = 0
EndIf
EndIf ; boule()\retour=0
EndIf ; s(boule()\s+1)\attente = 1
boule()\s = boule()\s + boule()\ds
boule()\x = s(boule()\s)\x
boule()\y = s(boule()\s)\y
Else
fin = 1
EndIf ; s<longueurCourbe
Next ; boule()
FirstElement(boule())
;- "nettoyage" de la courbe des résidus s()\attente=1 en aval de la première boule
sCourant = boule()\s
For sC = sCourant To longueurCourbe - 1
s(sC)\attente = 0
Next sC
EndIf ; ElapsedMilliseconds()-chronoBoule>30
;- Affichage
DisplaySprite(#sapin, 0, 0)
ForEach boule()
If ListIndex(boule()) < ListSize(boule()) - 1
DisplayTransparentSprite(boule()\spr, boule()\x - r, boule()\y - r)
EndIf
Next
If sprPrecedent3 <> 0 ; début du jeu à la 3ème boule
DisplayTransparentSprite(sprTir, xTir - r, yTir - r)
EndIf ; sprPrecedent3<>0
DisplayTransparentSprite(#etoile, 342, 0)
If total >= 365
MessageRequester("", "Félicitations !")
End
End
EndIf
If fin = 1
MessageRequester("", "Argh, pauvre Santa " + total + " boules !")
fin = 0
total = 0
Goto jeu
EndIf
FlipBuffers()
Until WindowEvent() = #PB_Event_RightClick
DataSection
etoile:
Data.l 30, 68, 66, 84, 63, 54, 87, 30, 60, 27, 45, 1, 28, 27, 2, 32, 22, 53, 13, 82, 30, 68
sapin:
Data.l 150, 392, 248, 424, 374, 378, 275, 255, 328, 221, 262, 182, 244, 139, 286, 120, 217, 63
Data.l 182, 2, 140, 75, 83, 121, 110, 146, 75, 207, 27, 232, 89, 268, 49, 323, 0, 351, 38, 406, 109, 411, 150, 392
mid_start:
Data.q $060000006468544D, $544D780003000100, $FF00D70000006B72, $7F0303120F05397F
Data.q $61482D0401FF007F, $656C7261702D7475, $6165522820737275, $676948206B65746C
Data.q $696E696665442068, $647541206E6F6974, $050F7FFF00296F69, $302E353130321C0F
Data.q $FF00030131312E31, $63694D2D0F052C7F, $532074666F736F72, $6972655320736E61
Data.q $462C35322E382C66, $6C61462C65736C61, $FF00302C312C6573, $0000000300600554
Data.q $7E05F000000121FF, $0121FF00F701097F, $1802040458FF0000, $0000000259FF0008
Data.q $60834F45060351FF, $7A696C65461E06FF, $6461646976614E20, $2065736F4A202D20
Data.q $6E616963696C6546, $72544D002FFF006F, $7FFF00B20900006B, $B9004848090F0505
Data.q $C9000000B900400A, $7FFF007F07B90001, $656E6547060F050F, $4944494D206C6172
Data.q $19100F05047FFF00, $03FF00000121FF00, $20646E616C6F520C, $79B900736D757244
Data.q $0000050000010000, $2399000040007F0B, $0000381E5F38006E, $00451E55451E0023
Data.q $451E5545005F251E, $006E231E00250000, $00381E5F38005545, $451E002300004500
Data.q $1E6E231E00451E55, $5F38006E401E0023, $451E00400000381E, $0000401E6E400055
Data.q $5F38006E231E0045, $451E00230000381E, $005F251E00451E55, $00250000451E5545
Data.q $38005545006E231E, $0000450000381E5F, $00451E55451E0023, $3E1E6E3E006E231E
Data.q $006E401E00230000, $00400000381E5F38, $401E6E400055451E, $006E231E00450000
Data.q $00230000381E5F38, $251E00451E55451E, $0000451E5545005F, $5545006E231E0025
Data.q $450000381E5F3800, $1E55451E00230000, $00231E6E231E0045, $381E5F38006E401E
Data.q $0055451E00400000, $00450000401E6E40, $381E5F38006E231E, $1E55451E00230000
Data.q $5545005F251E0045, $231E00250000451E, $1E5F38005545006E, $0023000045000038
Data.q $231E00451E55451E, $00003E1E6E3E006E, $5F38006E401E0023, $451E00400000381E
Data.q $0000401E6E400055, $5F38006E231E0045, $451E00230000381E, $005F251E00451E55
Data.q $00250000451E5545, $38005545006E231E, $0000450000381E5F, $00451E55451E0023
Data.q $401E00231E6E231E, $0000381E5F38006E, $6E400055451E0040, $231E00450000401E
Data.q $0000381E5F38006E, $00451E55451E0023, $451E5545005F251E, $006E231E00250000
Data.q $00381E5F38005545, $451E002300004500, $006E231E00451E55, $002300003E1E6E3E
Data.q $381E5F38006E401E, $0055451E00400000, $00450000401E6E40, $381E5F38006E231E
Data.q $1E55451E00230000, $5545005F251E0045, $231E00250000451E, $1E5F38005545006E
Data.q $0023000045000038, $231E00451E55451E, $006E401E00231E6E, $00400000381E5F38
Data.q $401E6E400055451E, $006E231E00450000, $00230000381E5F38, $251E00451E55451E
Data.q $0000451E5545005F, $5545006E231E0025, $450000381E5F3800, $006E235A00230000
Data.q $002300003E1E6E3E, $381E5F38006E401E, $1E6E401E00400000, $5F38006E231E0040
Data.q $451E00230000381E, $005F251E00451E55, $00250000451E5545, $38005545006E231E
Data.q $0000450000381E5F, $00451E55451E0023, $401E00231E6E231E, $0000381E5F38006E
Data.q $6E400055451E0040, $231E00450000401E, $0000381E5F38006E, $00451E55451E0023
Data.q $451E5545005F251E, $006E231E00250000, $00381E5F38005545, $451E002300004500
Data.q $006E231E00451E55, $002300003E1E6E3E, $381E5F38006E401E, $0055451E00400000
Data.q $00450000401E6E40, $381E5F38006E231E, $1E55451E00230000, $5545005F251E0045
Data.q $231E00250000451E, $1E5F38005545006E, $0023000045000038, $231E00451E55451E
Data.q $006E401E00231E6E, $00400000381E5F38, $401E6E400055451E, $006E231E00450000
Data.q $00230000381E5F38, $251E00451E55451E, $0000451E5545005F, $5545006E231E0025
Data.q $450000381E5F3800, $1E55451E00230000, $6E3E006E231E0045, $401E002300003E1E
Data.q $0000381E5F38006E, $6E400055451E0040, $231E00450000401E, $0000381E5F38006E
Data.q $00451E55451E0023, $451E5545005F251E, $006E231E00250000, $00381E5F38005545
Data.q $451E002300004500, $1E6E231E00451E55, $5F38006E401E0023, $451E00400000381E
Data.q $0000401E6E400055, $5F38006E231E0045, $451E00230000381E, $005F251E00451E55
Data.q $00250000451E5545, $38005545006E231E, $0000450000381E5F, $00451E55451E0023
Data.q $3E1E6E3E006E231E, $006E401E00230000, $00400000381E5F38, $401E6E400055451E
Data.q $006E231E00450000, $00230000301E6430, $251E00451E55451E, $0000451E5545005F
Data.q $5545006E231E0025, $450000291E642900, $1E55451E00230000, $642D006E231E0045
Data.q $401E002300002D1E, $0055451E00401E6E, $00291E6429006E40, $231E004500004000
Data.q $0000291E6429006E, $00381E5F385A0023, $2A5A002A1E7F2A5A, $006E235A002A1E7F
Data.q $00381E5F38007F2A, $2A1E002300002A00, $0000451E5545007F, $5545007F2A1E002A
Data.q $450000261E5F2600, $006E231E002A0000, $5F38005545007F2A, $2A0000230000381E
Data.q $1E7F2A1E00450000, $7F2A006E231E002A, $2A00003E1E6E3E00, $007F2A1E00230000
Data.q $5F26005F38006E40, $4000002A0000261E, $006E401E00380000, $004000002E1E782E
Data.q $38007F2A006E231E, $00002A0000381E5F, $5545007F2A1E0023, $2A1E002A0000451E
Data.q $1E5F26005545007F, $002A000045000026, $45007F2A006E231E, $0000381E5F380055
Data.q $004500002A000023, $231E002A1E7F2A1E, $1E6E3E007F2A006E, $002300002A00003E
Data.q $38006E40007F2A1E, $0000261E5F26005F, $003800004000002A, $2E1E782E006E401E
Data.q $006E231E00400000, $00381E5F38007F2A, $2A1E002300002A00, $0000451E5545007F
Data.q $5545007F2A1E002A, $450000261E5F2600, $006E231E002A0000, $5F38005545007F2A
Data.q $2A0000230000381E, $1E7F2A1E00450000, $7F2A006E231E002A, $2A00003E1E6E3E00
Data.q $007F2A1E00230000, $5F26005F38006E40, $4000002A0000261E, $006E401E00380000
Data.q $004000002E1E782E, $38007F2A006E231E, $00002A0000381E5F, $5545007F2A1E0023
Data.q $2A1E002A0000451E, $1E5F26005545007F, $002A000045000026, $45007F2A006E231E
Data.q $0000381E5F380055, $004500002A000023, $231E002A1E7F2A1E, $1E6E3E007F2A006E
Data.q $002300002A00003E, $38006E40007F2A1E, $0000261E5F26005F, $003800004000002A
Data.q $2E1E782E006E401E, $006E231E00400000, $00381E5F38007F2A, $2A1E002300002A00
Data.q $0000451E5545007F, $5545007F2A1E002A, $450000261E5F2600, $006E231E002A0000
Data.q $5F38005545007F2A, $2A0000230000381E, $1E7F2A1E00450000, $7F2A006E231E002A
Data.q $2A00003E1E6E3E00, $007F2A1E00230000, $5F26005F38006E40, $4000002A0000261E
Data.q $006E401E00380000, $004000002E1E782E, $38007F2A006E231E, $00002A0000381E5F
Data.q $5545007F2A1E0023, $2A1E002A0000451E, $1E5F26005545007F, $002A000045000026
Data.q $45007F2A006E231E, $0000381E5F380055, $004500002A000023, $231E002A1E7F2A1E
Data.q $1E6E3E007F2A006E, $002300002A00003E, $38006E40007F2A1E, $0000261E5F26005F
Data.q $003800004000002A, $2E1E782E006E401E, $006E231E00400000, $00381E5F38007F2A
Data.q $2A1E002300002A00, $0000451E5545007F, $5545007F2A1E002A, $450000261E5F2600
Data.q $006E231E002A0000, $5F38005545007F2A, $2A0000230000381E, $1E7F2A1E00450000
Data.q $7F2A006E231E002A, $2A00003E1E6E3E00, $007F2A1E00230000, $5F26005F38006E40
Data.q $4000002A0000261E, $006E401E00380000, $004000002E1E782E, $38007F2A006E231E
Data.q $00002A0000381E5F, $5545007F2A1E0023, $2A1E002A0000451E, $1E5F26005545007F
Data.q $002A000045000026, $45007F2A006E231E, $0000381E5F380055, $004500002A000023
Data.q $231E002A1E7F2A1E, $1E6E3E007F2A006E, $002300002A00003E, $38006E40007F2A1E
Data.q $0000261E5F26005F, $003800004000002A, $2E1E782E006E401E, $037FFF1E00400000
Data.q $4D002FFF000A0F05, $001B0300006B7254, $4008090F05057FFF, $47060F050F7FFF00
Data.q $4D206C6172656E65, $000079B000494449, $00565BB000445DB0, $004A0AB0007F0BB0
Data.q $FF000AC0006807B0, $206B636172540703, $E000000120FF0033, $1E68459034814000
Data.q $216E4A901E684580, $1B684990576E4A80, $1D684A9021684980, $4D6847901F684A80
Data.q $6347904784684780, $684C901863478024, $684A9041684C8037, $63479019684A8023
Data.q $684590226347801A, $4590408468458055, $4A902A6845801968, $4990336E4A80396E
Data.q $4A901D6E4980216E, $47901E634A802563, $4390526E4780576E, $45902A4D4380134D
Data.q $47901B6845802568, $4590546E4780286E, $45904D6845802C68, $4590456845802B68
Data.q $4390106845802D68, $4590346343804263, $4290286845801B68, $9073845F42805A5F
Data.q $902A5A4580145A45, $90526E4A80226E4A, $90216E49801B6E49, $901E634A8021634A
Data.q $56846847803C6847, $225647801B564790, $3B6E4C803C6E4C90, $0E6E4A802C6E4A90
Data.q $215F47801D5F4790, $8468458061684590, $6345802A6345902F, $684A8042684A9015
Data.q $6E4980276E499033, $6E4A80296E4A9016, $6E4780686E479015, $524380165243904B
Data.q $6345802963459027, $6847804068479015, $6345804163459039, $6845803768459035
Data.q $6345802663459043, $6843804368439015, $5F4380265F439036, $5F4280785F429016
Data.q $4E80136E4E905F83, $4E8015634E902A6E, $4E8017634E902563, $4E80506E4E902763
Data.q $4C8019684C90276E, $4A80145A4A902368, $4A80456E4A90295A, $4780105A4790316E
Data.q $47803E6847902C5A, $4A804C6E4A903868, $8012684C9024816E, $8015684C902A684C
Data.q $8017634C9027684C, $804D684C9029634C, $8019684A902C684C, $801156479023684A
Data.q $80406E47902B5647, $8010494590366E47, $802E6845902D4945, $802C5A45904A6845
Data.q $0F564E9044815A45, $12634E902B564E80, $16634E902A634E80, $216E4E9027634E80
Data.q $125A4C901B6E4E80, $145A4C902B5A4C80, $13564A90275A4C80, $416E4A902A564A80
Data.q $12524790356E4A80, $445F47902C524780, $0F454A90375F4780, $14564A9029454A80
Data.q $1B634A9029564A80, $2163499022634A80, $766849901A634980, $19564A903C684980
Data.q $81684C9023564A80, $634C9035684C8002, $4A902D634C800281, $B057684A80598168
Data.q $FF000078B000007B
Data.b $2F, $00
mid_end:
EndDataSection
Hasta la vista !