:.INIMAP
:[000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]→GDB1
:[000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
:[000038888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888884]
:[000063888888888888888888888888888888438888888888888888888888888888888888888888888888888888888888888845]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000066BCA00000000000000000000000000955A000000000000000000000000000000000000000000000000000000000000955]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000066BC0000000000000000000000000000550000000000000000000000000000000000000000000000000000000000000055]
:[000062777777777777777777740000000000550000000000340000000000388888888888888888888888888884000000000055]
:[000063888888888888888888810000000000550000000000560000000000288888888888888888888888888845000000000055]
:[00006600000000000000000000000000000055000000000056000000000000000000000000000000000000BC55000000000055]
:[000066A0000000000000000000000000000055000000000056000000000000000000000000000000000009BC55000000000055]
:[00006600000000000000000000000000000055000000000056000000000000000000000000000000000000BC55000000000055]
:[00006600000000000000000000000000000055000000000056000000000000000000000000000000000000BC55000000000055]
:[00006600000000000000000000000000000055000000000056000000000000000000000000000000000000BC55000000000055]
:[00006600000000000000000000000000000055000000000056000000000000000000000000000000000000BC55000000000055]
:[00006600000000000000000000000000000055000000000056000000000000000000000000000000000000BC55000000000055]
:[00006600000000000000000000000000000055000000000056000000000000000000000000000000000000BC55000000000055]
:[000066000000000377777777777777777777150000000000527777777777777777777777777777777777777715000000000055]
:[000066000000000277777777777777777777710000000000538888888888888888888888888888888888888881000000000055]
:[00006600000000000000000000000000000000000000000055BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BCA0000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[00006600000000000000000000000000000000000000000056BC00000000000000000000000000000000000000000000000055]
:[000062777777777777777777777777777777777777777777127777777777777777777777777777777777777777777777777715]
:[000027777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777771]
:[000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
:[000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
:vMAP"→Str1
:If GetCalc(Str1)
: DelVar Str1
:End
:UnArchive Str1
:If GetCalc(Str1)
: DelVar Str1
:End
:GetCalc(Str1,1989)→A
:conj(GDB1,A,1989)
:Archive Str1
:.INITILE
:.Pour le buffer
:[0000000000000000→GDB1
:.Angle bas droite
:[DBDB1BFBFB03FFFF]
:.Angle bas gauche
:[DBDBD8DFDFC0FFFF]
:.Angle haut gauche
:[FFFFC0DFDFD8DBDB]
:.Angle haut droite
:[FFFF03FBFB1BDBDB]
:.Vertical
:[DBDBDBDBDBDBDBDB]
:[DBDBDBDBDBDBDBDB]
:.Horizontal
:[FFFF00FFFF00FFFF]
:[FFFF00FFFF00FFFF]
:.Hide droit
:[FF7F3F1F0F070301]
:.Hide gauche
:[FFFEFCF8F0E0C080]
:.Walls
:[CCCC666633336666]
:[CCCC666633336666]
:
:
:
:.Pour le back buffer
:[0000000000000000]
:.Angle bas droite
:[DBDB1BFBFB03FFFF]
:.Angle bas gauche
:[DBDBD8DFDFC0FFFF]
:.Angle haut gauche
:[FFFFC0DFDFD8DBDB]
:.Angle haut droite
:[FFFF03FBFB1BDBDB]
:.Vertical
:[DBDBDBDBDBDBDBDB]
:[DBDBDBDBDBDBDBDB]
:.Horizontal
:[FFFF00FFFF00FFFF]
:[FFFF00FFFF00FFFF]
:.Hide droit
:[FF7F3F1F0F070301]
:.Hide gauche
:[FFFEFCF8F0E0C080]
:.Walls
:[CCCC666633336666]
:[CCCC666633336666]
:
:vTILE"→Str1
:If GetCalc(Str1)
: DelVar Str1
:End
:UnArchive Str1
:If GetCalc(Str1)
: DelVar Str1
:End
:GetCalc(Str1,208)→A
:conj(GDB1,A,208)
:Archive Str1
:.AWA
:identity(07E00810300C24244C329C3980018181818180019C394C322424300C081007E0)
:"<fonct>v</fonct>MAP"→Str1
:"<fonct>v</fonct>TILE"→Str2
:ClrHome
:0→N→Θ
:sub(NOG)
:[00→Pic8N
:Repeat getKey(9)
:getKey(10) and (N<7)-(getKey(11) and (N>0))+N→N
:If getKey(14)
:{Pic8N}→N
:1→Θ
:Goto 8N
:End
:sub(NOG)
:Text(0,0,"Nbre Joueur :",N+1►Dec
:End
:N→{Pic8N}
:Lbl 8N
:sub(NOG)
:
:If GetCalc(Str1)→D
:Goto DA
:End
:UnArchive Str1
:If GetCalc(Str1)→D
:Goto DA
:End
:Text(10,16,"PAS DE LICENCE
:Repeat getKey(9)
:End
:Return
:
:Lbl DA
:If GetCalc(Str2)→E
:Goto DB
:End
:UnArchive Str2
:If GetCalc(Str2)→E
:Goto DB
:End
:Text(10,16,"PAS DE LICENCE
:Repeat getKey(9)
:End
:Return
:
:Lbl DB
:[788CD4D4864B613E→Pic1
:[78DCD484CA62211F00788CD4D785493E]
:
:[7088DCDA8E4E4830→Pic2
:[7088DCDA8E4E4A30]
:[7088DCDB8F4E4A30]
:[7088DCDB8F4E4830]
:
:[003E539696533E00→Pic3
:[F08C92B14143261D]
:
:
:0→W→J→Z→H+1→T
:8→O
:40→U
:32→V
:∆List(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)→GDB0
:!If Θ
:For(Θ,0,N)
:rand^94+7→{Θ*3+GDB0}
:rand^33+5→{Θ*3+GDB0+1}
:Repeat sub(GN,5+{Θ*3+GDB0},4+{Θ*3+GDB0+1})=0
:rand^94+7→{Θ*3+GDB0}
:rand^33+5→{Θ*3+GDB0+1}
:End
:0→{Θ*3+GDB0+2}
:End
:End
:ClrDraw
:ClrDraw<sup>r</sup>
:FnOff
:N+1→M
:0→N
:Repeat getKey(15)
:If getKey(12)
:N+1→N
:!If N<M
:0→N
:End
:sub(NOG)
:0→J
:End
:If getKey(49)
:1-J→J
:sub(NOG)
:End
:If J
:sub(AXY)
:End
:sub(AXX)
:
:.Fonction dessin
:sub(FD)
:.gravité
:sub(G)
:If J
:sub(JET)
:Else
:sub(0)
:End
:End
:Archive Str1
:Archive Str2
:Return
:
:Lbl NOG
:While getKey(0)
:Pause 2
:End
:Return
:
:Lbl G
:For(Θ,0,M)
:If sub(GN,5+{Θ*3+GDB0},5+{Θ*3+GDB0+1})=0 and (getKey(4)=0
:{Θ*3+GDB0+1}+1→{Θ*3+GDB0+1}
:End
:End
:Return
:
:Lbl DS
:!If J
:If 1-H→H
:sub(0)
:Else
:!If 1-Z→Z
:sub(8)
:Else
:sub(16)
:End
:End
:End
:Return
:
:Lbl SE
:sub(GR)
:DispGraph
:sub(GR)
:Return
:
:Lbl GR
:For(Θ,0,M)
:{Θ*3+GDB0}-{N*3+GDB0}*8+40→U
:{Θ*3+GDB0+1}-{N*3+GDB0+1}*8+32→V
:If U<96 and (V<64
:
:If {Θ*3+GDB0+2}
:Pt-Change(U,V,r<sub>1</sub>
:Else
:Pt-Change(U,V,ShadeϜ(r<sub>1</sub>)
:End
:End
:End
:40→U
:32→V
:Return
:
:Lbl 0
:sub(SE,Pic1)
:Return
:Lbl 8
:sub(SE,Pic1+8)
:Return
:Lbl 16
:sub(SE,Pic1+16)
:Return
:Lbl SN
:sub(SE,ShadeNorm(Pic1))
:Return
:Lbl S
:sub(SE,Shadeχ²(Pic1))
:Return
:Lbl ST
:sub(SE,Shade_t(Pic1))
:Return
:Lbl JET
:sub(SE,T*8+Pic2)
:Return
:
:Lbl AXY
:If getKey(4) and (sub(GN,5+{N*3+GDB0},3+{N*3+GDB0+1})=0
:{N*3+GDB0+1}-1→{N*3+GDB0+1}
:1→T
:sub(DS,0,0,4)
:Else
:0→T
:End
:Return
:
:Lbl AXX
:If getKey(3) and (sub(GN,6+{N*3+GDB0},4+{N*3+GDB0+1})=0
:If T=1
:2→T
:Else
:3→T
:End
:!If {N*3+GDB0+2}
:{N*3+GDB0}+1→{N*3+GDB0}
:sub(DS,0,0,1)
:Else
:0→{N*3+GDB0+2}
:End
:ElseIf getKey(2) and (sub(GN,4+{N*3+GDB0},4+{N*3+GDB0+1})=0
:If T=1
:2→T
:Else
:3→T
:End
:If {N*3+GDB0+2}
:{N*3+GDB0}-1→{N*3+GDB0}
:sub(DS,0,0,2)
:Else
:1→{N*3+GDB0+2}
:End
:.Else
:.0→T
:End
:Return
:
:.Fonction de dessin
:Lbl FD
:ClrDraw
:ClrDraw<sup>r</sup>
:For(X,0,11)
:For(Y,0,7)
:sub(GN,X+{N*3+GDB0},Y+{N*3+GDB0+1})→W
:Pt-On(X*8,Y*8,W*8+E)
:End
:End
:Return
:
:Lbl GN
:r<sub>2</sub>*102+r<sub>1</sub>→r<sub>3</sub>
:{r<sub>3</sub>/2+D}→r<sub>4</sub>
:If r<sub>3</sub>^2
:r<sub>4</sub>^16
:Else
:r<sub>4</sub>/16
:End
Je n'avance plus trop en ce moment, j'essayerai de m'y remettre pendant les vacances prochaines. :)Étais-ce un poisson d'avril et qu'en fait tu a avancé beaucoup? ;D
Euh, suis-je boulet si je demande toutes?Nan laisse tomber pour le son... on verra si on peut pas faire une animation spéciale pour la St Grenade. ;)
Sinon, la st grenade est un must-have. Essayé d'envoyer sur le port en même temps son alléluia mythique.
:L1+704→°WIDTH
:L1+702→°LENGT
Celles ci garde toujours les même valeurs ::256/8→WIDTH
:256→LENGT
:256/8→°WIDTH
:256→°LENGT
Et ensuite les réutiliser de cette manière ::°WIDTH*°LENGT→r1
Elles seront juste remplacées lors de la compilation. Comme je ne sais pas si tu compte les modifier (avec des map 512*128 ou 1024*64), j'ai pas fais la modification. ;)
c'est plutôt bien optimisé en général. ;)*.* Moi, je code optimisé !?! Lolwat ?
Elles seront juste remplacées lors de la compilation. Comme je ne sais pas si tu compte les modifier (avec des map 512*128 ou 1024*64), j'ai pas fais la modification. ;)C'était exactement mon but, J'ai juste mis 256*256 pour le test :)
Plop,Ok, je vais tenter. Mais ce sera pas pour demain, j'ai colle de maths et d'anglais D:
Désolé de te demander ça, mais est ce que tu peux refaire les cercles avec cet axiom (http://ourl.ca/15343/289168) ?
Ce sera beaucoup plus léger et on pourra changer la taille du pinceau au delà des 8*8. :)
Génial, par contre c'est bizarre que la routine de cercle qu'utilise l'axiom ne ressemble pas à un cercle mais plus à un carre lorsque l'échelle est petite... O_oC'est pas faux >.<
If touches de déplacement ou autre
:If A
:copier écran dans l'appvar
:0=>A
:End
:.code si touches de déplacement ou autre
:Else
:1=>A
:End
Je vais tester un truc pour copier l'écran dans l'appvar. :w00t: (pas sûr que ça marche)
@Hayleia : je viens de penser à un truc pour une option "annuler action". En gros on sauve l'écran dans l'appvar à un seul moment, c'est quand on appuie sur une touche pour déplacer ou dessiner ou faire apparaître le menu (une option que je viens d'inventer :p). Dans un code :C'est faisable: pour l'instant, l'écran n'est sauvé que si on bouge la map ;)Code: [Select]If touches de déplacement ou autre
Je vais tester un truc pour copier l'écran dans l'appvar. :w00t: (pas sûr que ça marche)
:If A
:copier écran dans l'appvar
:0=>A
:End
:.code si touches de déplacement ou autre
:Else
:1=>A
:End
:getCalc("appvAPPV")=>APPV
:For(I,0,63)
:96*256+1=>{I*12-2+L6}r
:.Après comme on affiche l'appvar directement sur l'écran on verra pas les trucs modifiés
:Bitmap(0,0,I*12+L6,I+X*32+Y+APPV,1)
:End
:Lbl DrawY
:Copy(→r1-Y*32+°IMG+2,L1+2,32)
:Fill(r1*12+L6,12,ᴱ0100→{L1}r)
:Bitmap(X,r1,L1)
:Return
Il ne reste plus qu'à comprendre comment ça marche.
.PIXELM Map scrolling test
"|vSAVE"→^^oSAVE
L5→^^oIMG
Return!If GetCalc(^^oSAVE)
→IMG
DiagnosticOff
FnOff
ClrDraw
.Affichage de la map
Bitmap(~80→X,~64→Y,IMG)
...
Petites explications :
Les coordonnées X et Y sont compris entre ~160 et 0 (les deux)
Car 160+96=256
Y-1 c'est une ligne en dessous, et X-1 une colonne à droite
Autre optimisation
-X sera donc positif (de même pour -Y)
...
.Boucle principale
While 1
DispGraph
If getKey(1)
.Si il n'y a pas le bout de la map en bas
!If Y-1<~160
Y--
.On décale en bas
Vertical -
.Pour afficher la ligne 63 manquante
63:DrawY()
End
End
If getKey(2)
.Si il n'y a pas le bout de la map à gauche
If X
+1→X
.On décale à gauche
Horizontal +
.Pour afficher la colonne de gauche (L comme left) manquante
DrawL()
End
End
If getKey(3)
.Si il n'y a pas le bout de la map à droite
!If X-1<~160
X--
.On décale à droite
Horizontal -
.Pour afficher la colonne de droite (R comme right) manquante
DrawR()
End
End
If getKey(4)
.Si il n'y a pas le bout de la map en haut
If Y
+1→Y
.On décale en haut
Vertical +
.Pour afficher la ligne 0 manquante
0:DrawY()
End
End
EndIf getKey(15)
Return
.Affiche les lignes
Lbl DrawY
.On copie les 256 pixels d'une ligne de l'appvar dans L1+2
Copy(→r1-Y*32+IMG+2,L1+2,32)
...
On efface la ligne à remplacer
parce que la commande vertical +/- ne le fait pas
autant faire une optimisation pour remplir les deux premier octets de L1
correspondant à la taille de la bitmap à afficher
...
Fill(r1*12+L6,12,|E0100→{L1}r)
.Et la c'est magique, la ligne s'affiche ;)
Bitmap(X,r1,L1)
Return
.Pour la colonne de droite
Lbl DrawR
.Dans cette octet on est en haut à droite de l'écran (buffer)
11+L6→r3
.Ici le masque de l'écran est 00000001, parce que c'est bit tout à droite que l'on veut modifier
|E01→r4
95
Goto Draw0
.Pour la colonne de gauche
Lbl DrawL
.Dans cette octet on est en haut à gauche de l'écran (buffer)
L6→r3
.Le masque de l'écran est 10000000, parce qu'on veut modifier le bit tout à gauche
|E80→r4
and 0
.Affiche les colonnes
Lbl Draw0
...
Rappel : HL-X vaut le nombre de colonnes
Optimisation assez tordue, nombre de colonnes^8 correspond au nombre de bits qui séparent le
dernier octet du bord de l'écran en valeur numérique
Donc quand ça vaut 0, r2 vaut le premier Masks10000000
Donc quand ça vaut 1, r2 vaut le deuxième Masks01000000
Donc quand ça vaut 2, r2 vaut le troisième Masks00100000
Donc quand ça vaut 3, r2 vaut le quatrième Masks00010000
Donc quand ça vaut 4, r2 vaut le cinquième Masks00001000
Donc quand ça vaut 5, r2 vaut le sixième Masks00000100
Donc quand ça vaut 6, r2 vaut le septième Masks00000010
Donc quand ça vaut 7, r2 vaut le huitième Masks00000001
...
Select(-X,{^8+^^oMasks}→r2)
.le nombre de colonnes/8 + le nombre de lignes (en octet) + le début de pointeur de la map dans HL
*32/256-(Y*32)+IMG+2
.Pour les 64 lignes
For(64)
...
Le plus chaud :
On masque octet trouvé dans l'appvar pour garder que le bit qu'il nous faut
Quand on soustrais par 1 et qu'on divise par 256 :
si aucun bit ne correspondait au mask, 0-1=65355 puis /256 ça fait 255
Si un bit correspondait au mask alors ça renvoie un nombre en 1 et 128 dans HL
HL-1/256 vaudra toujours 0 dans ce cas là (logique)
En inversé on créé un nouveau mask qui est soit 255 (un bit correspond au mask
soit 0 (aucun bit correspond au mask)
En fait cette manip sert juste à aligner le bit trouvé dans l'appvar, au bon
emplacement sur l'écran, donc là vient r4 le masque de l'écran
Ensuite un or logique permet d'ajouter le bit (ou non) dans le buffer (pointé par r3)
Et après il y a une dròle d'optimisation {r3}+12->r3 car ça fait r3+12->r3 en réalité o_o
...
not({→r1} and r2-1/256) and r4 or {r3}→{r3}+12→r3
.On passe la ligne suivante ^^
r1+32
End
Return
[8040201008040201]→^^oMasks
Generated by the BBify'r (http://clrhome.org/resources/bbify/ (http://clrhome.org/resources/bbify/))
"L'enregistrement dans l'appvar marchait très bien (bravo hayleia), mais maintenant c'est optimisé pour. "En gros maintenant ça édite l'appvar MAPTEMP au lieu d'en créer une à chaque fois, de plus il y a quelques optimisations de réduction du poids se font à l'aide de cette appvar, ainsi que la fonction "annuler action". Donc la sauvegarde de l'appvar est en temps réel.
Optimisé pour... pour quoi ?
"il me semble que les fonctions d'affichage sont pas très optimisées."Je pensais aux fonctions, mais finalement ce n'est pas si simple. Donc je préfère laisser comme ça. ;)
Celles que j'ai faites ou les fonctions de l'Axe ?
:Lbl Initialisation
:.Chargement de la map dans l'appvar (sauf si on garde celle déjà présente dans l'appvar)
:.Apparition des worms aléatoire sur le terrain (partie blanche de la map) + gravité (voir moteur physique)
:
:Lbl déplacement
:.caméra centré sur un worm
:.gestion des sauts à l'aide du moteur physique (seulement lors d'un saut)
:.Visé avant de tirer (on pourra utiliser des cos et sin préalablement enregistrés dans une liste)
:
:Lbl phase de tire
:.Explosions, flammes
:.Bref, tout ce qui risque de lagger :)
:
:Lbl caméra
:.S'occupe du déplacement de la map
:
:Lbl Moteur physique
:.Caméra centré sur l'action
:.Gravité + chute
:.frottements
:.Gestion des dégâts (sauf à l'initialisation)
:
Après avoir testé pas mal l'éditeur de dessin, je me suis rendu compte qu'il n'éditais pas la map à cause de la barre d'option en bas (je vais donc régler ça).???