30

ah, merci de m'éclairer. smile
Au début du code, j'ai rajouté: #define SWITCHES 0x01

Mais quand je fais fait la modif dans le code, ça va pas : ) if (SWITCHES & BUTTON_PAUSE
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

31

beauregard (./30) :
ah, merci de m'éclairer. smile
Au début du code, j'ai rajouté:#define SWITCHES 0x01

Mais quand je fais fait la modif dans le code, ça va pas :) if (SWITCHES & BUTTON_PAUSE

Rassures moi, t'en fais exprès ?

J'ai bien dit que switch était en 0xFCB1, non ? Parce que si tu le définis à 1 alors 1 ET 1 ça fait toujours 1 en logique booléenne, donc ton test il sera toujours vrai...

Il faut le définir comme adresse à 0xFCB1 et pas comme valeur... Et encore pour le coup, y'a RIEN à faire vu que la variable "switches" est définie dans lynx.h :uchar sprsys at 0xfc92, joystick at 0xfcb0, switches at 0xfcb1, cart0 at 0xfcb2;
ES, faut l'oublier et ton test, il faut le remplacer parif (switches & BUTTON_PAUSE)Donc ta définition de SWITCH en supposant que l'include de lynx.h est déjà fait corretement(mais ça doit être le cas sinon test tests sur la variable joystick ne marcheraient pas).

C'est pas tout à fait la même chose vu qu'il s'agit de TI68k mais je pense que tu pourrais y gagner à lire le tutoriel sur le langage C que Squale92 a écrit...
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

32

Je maitrise tout juste les bases du C, mais ça va, je progresse malgré tout.
vince (./31) :

Il faut le définir comme adresse à 0xFCB1 et pas comme valeur... Et encore pour le coup, y'a RIEN à faire vu que la variable "switches" est définie dans lynx.h :uchar sprsys at 0xfc92, joystick at 0xfcb0, switches at 0xfcb1, cart0 at 0xfcb2;
ES, faut l'oublier et ton test, il faut le remplacer parif (switches & BUTTON_PAUSE)Donc ta définition de SWITCH en supposant que l'include de lynx.h est déjà fait corretement(mais ça doit être le cas sinon test tests sur la variable joystick ne marcheraient pas).
oui, c'est ce que j'avais fait au début, mais il y a un message d'erreur (undefined symbol), car j'avais mis switches en majuscule, et non en minuscule, merci pour votre patience.



il y a un moyen de transformer les conditions en C, en assembleur ?


avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

33

RYGAR (./26) :
ensuite la vitesses des globules et des cailloux est toujours la même que l'on est un score de 10, 100 ou 700points alors qu'il serait bien qu'elle augmente histoire de rendre la partie plus intense
j'ai fait des tests, et j'ai décidé de rajouter un 2ème cailloux, avec même un zoom puisque la LYNX le permet facilement. Prochaine version très bientôt.

RYGAR (./26) :
Et puis ton code et la simplicité du game play m'a redonné envie d'essayer de programmer de petites choses pour la Lynx alors là aussi chapeau top
Mr Gunpei yokoi a montré la voie avec ses Game&watch (parachute) hehe
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

34

mise à jour majeure (4 niveaux jouable)
version0.4
[URL=http://img507.imageshack.us/i/fofo3.jpg/][IMG]http://img507.imageshack.us/img507/6223/fofo3.jpg[/IMG][/URL]

exe:
tromb Fichier joint : globshoot_04.o

code source, 1er partie: /* Glob Shoot version 0.4 - LYNX - kit BLL (newcc65) 10/11/2010 console tenu à la verticale Handy/Option/Rotate Screen(Right) D-pad et bouton pause LYNX-image */ #include <lynx.h> #include <lynxlib.h> #include <stdlib.h> #include "inc\fond1.pal" // Ceci sert à inclure le fichier palette généré par sprpck /* LYNX-specific #defines: */ #define JOY_RIGHT 0x10 #define JOY_LEFT 0x20 #define JOY_DOWN 0x40 #define JOY_UP 0x80 #define BUTTON_OPTION1 0x08 #define BUTTON_OPTION2 0x04 #define BUTTON_LEFT 0x02 #define BUTTON_RIGHT 0x01 #define BUTTON_PAUSE 0x01 //#define SWITCHES 0x01 //#define SC BSTRETC H(a) (*(uint *)((a)+15)) // déformation, macro //#define SC BTILT(a) (*(uint *)((a)+17)) // déformation, macro char SCREEN[8160] at (MEMTOP-16320); char RENDER[8160] at (MEMTOP-8160); extern char fond1[]; // ecran titre //extern char fond2[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche. extern char fondlvl[]; // image fond level, d'une taille de 32*102; extern char gameover[]; // image game over, d'une taille de 20*32; extern char ipause[]; // image game over, d'une taille de 13*43; extern char pushup[]; // image game over, d'une taille de 48*35; char SCB[]; #asm _SCB dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm extern char fond2[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche. extern char fond3[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche. char SCBfond2[]; // à la 3ème ligna asm, j'ai remplacé 100 par 200 pour doubler la largeur du décor (nbre de colonne * 2) #asm _SCBfond2 dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$200,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ char SCBgsf1[]; // déclaration d'un nouveau controleur de sprite char SCBgsf2[]; // déclaration d'un nouveau controleur de sprite char SCBgsf3[]; // déclaration d'un nouveau controleur de sprite char SCBgsf4[]; // déclaration d'un nouveau controleur de sprite char SCBgsf5[]; // déclaration d'un nouveau controleur de sprite char SCBgsf6[]; // déclaration d'un nouveau controleur de sprite #asm _SCBgsf1 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf2 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf3 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf4 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf5 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf6 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // déclaration des objets sprites qui seront linkés char sprite1[]; // extern char sprite2[]; // coque (taille: 30*24) // A partir du sprite1, je souhaite obtenir 6 images, de 0 à 5, du moteur à élice : // clip du sprite 1 extern char sp000000[]; extern char sp000001[]; extern char sp000002[]; extern char sp000003[]; extern char sp000004[]; extern char sp000005[]; char *sprtab[6] = {sp000000, sp000001, sp000002, sp000003, sp000004, sp000005}; char SCBsprite1[]; // déclaration d'un nouveau controleur de sprite, moteur à hélice char SCBsprite2[]; // déclaration d'un nouveau controleur de sprite, coque #asm _SCBsprite1 dc.b $c7,$10,$20 dc.w _SCBsprite2,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBsprite2 dc.b $c7,$10,$20 dc.w 0, _sprite2 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // $c0 couleur 0 pas transparente // $c7 couleur transparente // ------------------------------------ char chiffres[]; // // clip du sprite chiffres: 0123456789.L extern char ch000000[]; extern char ch000001[]; extern char ch000002[]; extern char ch000003[]; extern char ch000004[]; extern char ch000005[]; extern char ch000006[]; extern char ch000007[]; extern char ch000008[]; extern char ch000009[]; extern char ch000010[]; extern char ch000011[]; char *chiffrestab[12] = {ch000000, ch000001, ch000002, ch000003, ch000004, ch000005, ch000006, ch000007, ch000008,ch000009, ch000010, ch000011}; char SCBchiffres1[]; // déclaration d'un nouveau controleur de sprite char SCBchiffres2[]; // déclaration d'un nouveau controleur de sprite char SCBchiffres3[]; // déclaration d'un nouveau controleur de sprite #asm _SCBchiffres1 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBchiffres2 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBchiffres3 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // ------------------------------------ char jauge[]; // // clip du sprite jauge d'énergie du shiplayer extern char ja000000[]; extern char ja001000[]; extern char ja002000[]; extern char ja003000[]; extern char ja004000[]; extern char ja005000[]; extern char ja006000[]; extern char ja007000[]; extern char ja008000[]; extern char ja009000[]; char *jaugetab[10] = {ja000000, ja001000, ja002000, ja003000, ja004000, ja005000, ja006000, ja007000, ja008000, ja009000}; char SCBjauge[]; // déclaration d'un nouveau controleur de sprite #asm _SCBjauge dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // ------------------------------------ char rhume[]; // // clip du sprite rhume, que le nanoship doit capturer. extern char rh000000[]; extern char rh000001[]; extern char rh000002[]; extern char rh000003[]; extern char rh000004[]; extern char rh000005[]; extern char rh000006[]; char *rhumetab[7] = {rh000000, rh000001, rh000002, rh000003, rh000004, rh000005, rh000006}; char SCBrhume[]; // déclaration d'un nouveau controleur de sprite #asm _SCBrhume dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ c0 à la plce de c7 desactive la couleur 0 (transparente) // ------------------------------------ char roch[]; // // clip du sprite rhume, que le nanoship doit capturer. extern char ro000000[]; extern char ro000001[]; extern char ro000002[]; extern char ro000003[]; extern char ro000004[]; extern char ro000005[]; extern char ro000006[]; extern char ro000007[]; extern char ro000008[]; extern char ro000009[]; extern char ro000010[]; extern char ro000011[]; extern char ro000012[]; extern char ro000013[]; extern char ro000014[]; extern char ro000015[]; extern char ro000016[]; extern char ro000017[]; char *rochtab[18] = {ro000000, ro000001, ro000002, ro000003, ro000004, ro000005, ro000006, ro000007, ro000008, ro000009, ro000010, ro000011, ro000012, ro000013, ro000014, ro000015, ro000016, ro000017}; char SCBroch[]; // déclaration d'un nouveau controleur de sprite char SCBroch2[]; // déclaration d'un nouveau controleur de sprite #asm _SCBroch dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBroch2 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // variable (int = 2 octets ; char = 1 octet) int posx,posy,level,xpush,ypush,xlvla,xlvlb,xlvlc,xlvld,xlvle,elvl; // int i,score,energ,nbrnext,nbrnexu; // nbrnext : nombre de fois où l'on repositionne le décor, afin de déterminer la longueur d'un level... int compteur,scrollx; char goship,t,tempa,tempb,tempc,tempd,tempe,etape,gspause,gslife,stopm,drap1,nodecor,boumgb,aaroch,nbboum,scboom,outship,gsblip; // de -128 à 127 char tyroch,chroch; char tyroch2,chroch2; char gshas,gshat; // hasard "aidé" (incrementation en attendant l'appuis sur D-pad haut) int govil,vil,vilx,tempvilx,speedvil,vily,avil,tempavil,hasa,hasam,hasar; int aroch,temparoch; int goroch,eroch,rochx,temprochx,rochy,rasa,rasam,rasar; int goroch2,eroch2,roch2x,temprochx2,roch2y,rbsa,rbsam,rbsar; int unite; int dizaine; int centaine; int tgovil,vroch; int atest; // variable utilisée pour tester des trucs et des machins (pas de debug, donc système D) // assembler vertical retrace syncronisation routine void Vsync() { #asm vretrace: lda $fd0a bne vretrace #endasm } // Hors de l'assembleur, point de salut... // L'utilisation de la procedure suivante, lors de l'écran d'action, // fait ramer le jeu. void Fchiffres(clx,cly,classe) int clx,cly,classe; { SCBDATA(SCBchiffres1) = chiffrestab[classe%12]; SCBX(SCBchiffres1) = clx; SCBY(SCBchiffres1) = cly; DrawSprite(SCBchiffres1); } /************************************************************************** ** ** ** ** **************************************************************************/ char main() //main() { InitIRQ(); CLI; SetBuffers(SCREEN, RENDER ,0); // SCBX(SCB) = 0; // SCBY(SCB) = 0; // SCBDATA(SCB) = fond1; // SCBNEXT(SCB) = SCBromeo; // chainage de sprite // SCBX(SCBromeo) = 0; // SCBY(SCBromeo) = 0; // SCBDATA(SCBromeo) = romeotab[0%6]; /* set the palette */ SetRGB(pal); // Ceci sert à changer la palette de la Lynx (16 couleurs). //DrawFBox(0,0,160,102,0); SCBX(SCB) = 0; SCBY(SCB) = 0; SCBDATA(SCB) = fond1; // SCBNEXT(SCB) = SCBfond2; // chainage de sprite // SCBX(SCBfond2) = 0; // SCBY(SCBfond2) = 0; // SCBDATA(SCBfond2) = fond2; // SCBNEXT(SCBfond2) = SCBsprite1; // chainage de sprite // SCBX(SCBsprite1) = 0; // SCBY(SCBsprite1) = 0; // SCBDATA(SCBsprite1) = sprite1; // SCBNEXT(SCBsprite1) = SCBsprite2; // chainage de sprite // SCBX(SCBsprite2) = 58; // SCBY(SCBsprite2) = 52; // SCBDATA(SCBsprite2) = sprite2; // 1er sprite chainé (fond + shiplayer) SCBX(SCBgsf1) = 0; SCBY(SCBgsf1) = 0; SCBDATA(SCBgsf1) = fond2; SCBNEXT(SCBgsf1) = SCBgsf2; // chainage de sprite 2ème image fond SCBX(SCBgsf2) = 32; SCBY(SCBgsf2) = 0; SCBDATA(SCBgsf2) = fond2; SCBNEXT(SCBgsf2) = SCBgsf3; // chainage de sprite 3ème image fond SCBX(SCBgsf3) = 64; SCBY(SCBgsf3) = 0; SCBDATA(SCBgsf3) = fond2; SCBNEXT(SCBgsf3) = SCBgsf4; // chainage de sprite 4ème image fond SCBX(SCBgsf4) = 96; SCBY(SCBgsf4) = 0; SCBDATA(SCBgsf4) = fond2; SCBNEXT(SCBgsf4) = SCBgsf5; // chainage de sprite 5ème image fond SCBX(SCBgsf5) = 128; SCBY(SCBgsf5) = 0; SCBDATA(SCBgsf5) = fond2; SCBNEXT(SCBgsf5) = SCBgsf6; // chainage de sprite 6ème image fond SCBX(SCBgsf6) = 160; SCBY(SCBgsf6) = 0; SCBDATA(SCBgsf6) = fond2; SCBNEXT(SCBgsf6) = SCBsprite1; // chainage de sprite shiplayer SCBX(SCBsprite1) = 0; SCBY(SCBsprite1) = 0; SCBDATA(SCBsprite1) = sprite1; // coordonnées X et Y du shiplayer, moteur à hélice : // SCBX(SCBsprite1) = 0; // SCBY(SCBsprite1) = 0; // SCBDATA(SCBsprite1) = sprite1; // coordonnées X et Y du shiplayer, coque : // SCBX(SCBsprite2) = 58; // SCBY(SCBsprite2) = 52; // SCBDATA(SCBsprite2) = sprite2; // 2ème sprite chainé (rocher et rhume) SCBX(SCBroch) = 0; SCBY(SCBroch) = 0; SCBDATA(SCBroch) = roch;//rochtab[0%18]; SCBNEXT(SCBroch) = SCBroch2; // chainage de sprite SCBX(SCBroch2) = 0; SCBY(SCBroch2) = 0; SCBDATA(SCBroch2) = roch;//rochtab[0%18]; SCBNEXT(SCBroch2) = SCBrhume; // chainage de sprite SCBX(SCBrhume) = 32; SCBY(SCBrhume) = 0; SCBDATA(SCBrhume) = rhume; // 3ème sprite chainé (jauge et score) // SCBX(SCBjauge) = 0; // SCBY(SCBjauge) = 0; // SCBDATA(SCBjauge) = jauge;//rochtab[0%18]; // SCBNEXT(SCBjauge) = chiffres; // chainage de sprite // SCBX(SCBchiffres) = 0; // SCBY(SCBchiffres) = 0; // SCBDATA(SCBchiffres) = chiffres; // 3ème sprite chainé (score) SCBX(SCBchiffres1) = 0; SCBY(SCBchiffres1) = 0; SCBDATA(SCBchiffres1) = chiffres; SCBNEXT(SCBchiffres1) = SCBchiffres2; // chainage de sprite SCBX(SCBchiffres2) = 0; SCBY(SCBchiffres2) = 0; SCBDATA(SCBchiffres2) = chiffres; SCBNEXT(SCBchiffres2) = SCBchiffres3; // chainage de sprite SCBX(SCBchiffres3) = 0; SCBY(SCBchiffres3) = 0; SCBDATA(SCBchiffres3) = chiffres; // coordonnées X et Y de la jauge : SCBX(SCBjauge) = 0; SCBY(SCBjauge) = 0; SCBDATA(SCBjauge) = jauge; // coordonnées X et Y des chiffres et des lettres : // SCBX(SCBchiffres) = 0; // SCBY(SCBchiffres) = 0; // SCBDATA(SCBchiffres) = chiffres; // posx = -40; // posy = -39; xpush=-48; ypush=34; xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160; elvl=0; /************************************************************************** ** BOUCLE PRINCIPALE ** **************************************************************************/ for(;;) // boucle principale { // test affichage nombre de sprite: if (joystick & (BUTTON_RIGHT)) nodecor=1;//{nodecor=1;DrawFBox(0,0,160,102,0);} if (joystick & (BUTTON_LEFT)) nodecor=0; // ********************************************************************************************* if (etape==0) // écran titre { SCBX(SCB) = 0; SCBY(SCB) = 0; SCBDATA(SCB) = fond1; DrawSprite(SCB); // affichage fond1 // SCBDATA(SCBchiffres1) = chiffrestab[0%12]; // 0 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 20; // DrawSprite(SCBchiffres1); Fchiffres(2,20,0); // 0 // SCBDATA(SCBchiffres1) = chiffrestab[10%12]; // . // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 25; // DrawSprite(SCBchiffres1); Fchiffres(2,25,10); //. // SCBDATA(SCBchiffres1) = chiffrestab[4%12]; // 4 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 30; // DrawSprite(SCBchiffres1); Fchiffres(2,30,4); //3 // SCBDATA(SCBchiffres1) = chiffrestab[2%12]; // 2 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 35; // DrawSprite(SCBchiffres1); // Fchiffres(2,35,2); //2 Fchiffres(88,75,2); // 2 Fchiffres(88,79,0); // 0 Fchiffres(88,83,1); // 1 Fchiffres(88,87,0); // 0 SCBDATA(SCB) = pushup; SCBX(SCB) = xpush;//48; SCBY(SCB) = ypush; DrawSprite(SCB); if (xpush<8) xpush=xpush+2; if (xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu. { xpush=7; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=200; if (joystick & JOY_RIGHT) { level=1;//3;//1; tempa=0;xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; etape=1; energ=10;score=0;drap1=0; // drap1 agit sur l'affichage du score. goship=0; posx=-40; posy=39;gslife=3; govil=0;goroch=0;tyroch=0;chroch=0; SCBDATA(SCB) = fondlvl; } } } // ********************************************************************************************* if (etape==1 | etape==8 | etape==9) // écran level OU ecran perd une vie/game over { if (elvl<4) DrawFBox(0,0,160,102,0); SCBDATA(SCB) = fondlvl; for (compteur = 0 ; compteur < 5 ; compteur++) // de 0 à 4, ce qui fait 5. Grâce à la boucle for... { //SCBX(SCB) = compteur*32; // ...on incrémente la position X de chaque nouvelle image... //SCBX(SCB) = (compteur*32)+xlvl; // ...on incrémente la position X de chaque nouvelle image... // if (compteur==elvl) // { // xlvl=xlvl-4; // if (xlvl<1+(elvl*32)) {xlvl=0+(elvl*32);++elvl;} // SCBX(SCB) = (compteur*32)+xlvl; // if (compteur!=elvl) {xlvl=160;} // } if (compteur==0) { if (elvl==0) { xlvla=xlvla-8; if (xlvla<1) {xlvla=0;++elvl;} } SCBX(SCB) = xlvla; } if (compteur==1) { if (elvl==1) { xlvlb=xlvlb-8; if (xlvlb<33) {xlvlb=32;++elvl;} } SCBX(SCB) = xlvlb; } if (compteur==2) { if (elvl==2) { xlvlc=xlvlc-8; if (xlvlc<65) {xlvlc=64;++elvl;} } SCBX(SCB) = xlvlc; } if (compteur==3) { if (elvl==3) { xlvld=xlvld-8; if (xlvld<97) {xlvld=96;++elvl;} } SCBX(SCB) = xlvld; } if (compteur==4) { if (elvl==4) { xlvle=xlvle-8; if (xlvle<127) {xlvle=128;++elvl;} } SCBX(SCB) = xlvle; } SCBY(SCB) =0; DrawSprite(SCB); // ... et ainsi on affiche fondlvl 5 fois la même image (taille: 32*102) l'une àprès l'autre, à un intervalle de 32. } } // ********************************************************************************************* if (etape==1) { if (level>4) level=1; // temporaire // SCBDATA(SCBchiffres) = chiffrestab[11%12]; // L // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44; // DrawSprite(SCBchiffres); Fchiffres(118,44,11); // SCBDATA(SCBchiffres) = chiffrestab[10%12]; // - // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44+5; // DrawSprite(SCBchiffres); Fchiffres(118,49,10); // SCBDATA(SCBchiffres) = chiffrestab[level%12]; // 1 // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44+10; // DrawSprite(SCBchiffres); Fchiffres(118,57,level); Fchiffres(86,57,gslife); // nbre de vie SCBDATA(SCBrhume) = rhumetab[5%7]; // coeur SCBX(SCBrhume) = 82; SCBY(SCBrhume) = 39; DrawSprite(SCBrhume); // if (tempa<80) ++tempa; // durée de l'écran de présentation : level et nbre de life // if (tempa>79) // { SCBDATA(SCB) = pushup; SCBX(SCB) = xpush;//48; SCBY(SCB) = ypush; DrawSprite(SCB); if (xpush<8 & elvl==5) xpush=xpush+2; if (xpush>7) { xpush=8; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=200; // SCBX(SCBroch) = 20; // SCBY(SCBroch) = 39; // SCBDATA(SCBroch) = rochtab[18%18]; // DrawSprite(SCBroch); // Affichage sprites chainés (rocher + rhume) ++gshas; if (gshas==3) gshas=1; // 1 ou 2 //if (joystick & (BUTTON_LEFT)) if (joystick & JOY_RIGHT) { gshat=1; // hasard "aidé" SCBX(SCBroch) = 200; tempa=0;xpush=-48;ypush=34;etape=2;SCBDATA(SCB) = fond2;drap1=1; xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; govil=0; eroch=0;goroch=0;eroch2=0;goroch2=0; rochx=180;SCBX(SCBroch) = rochx; roch2x=180;SCBX(SCBroch2) = roch2x; boumgb=0;SCBX(SCBrhume) = -100; // level 1 : virus lent ; petit rocher lent // level 2 : virus rapide ; petit rocher lent ; gros rocher lent // level 3 : virus rapide ; petit rocher rapide ; gros rocher rapide // level 4 : virus rapide*2 ; petit rocher rapide ; gros rocher rapide // level 5 : virus rapide*2 ; petit rocher rapide *2; gros rocher rapide *2 // level 6 : virus rapide*3 ; petit rocher rapide *2; gros rocher rapide *2 // level 7 : virus rapide*3 ; petit rocher rapide *3; gros rocher rapide *3 // level 1,2,3,4,5 et 6: virus --> govil>31 // level 7 : virus lent ; petit rocher lent // level 8 : virus lent ; petit rocher lent ; gros rocher lent // level 9 : virus rapide ; petit rocher lent ; gros rocher lent // level 10 : virus rapide ; petit rocher rapide ; gros rocher rapide // level 11 : virus rapide ; petit rocher rapide *2; gros rocher rapide *2 // level 12 : virus rapide ; petit rocher rapide *4; gros rocher rapide *4 // level 7,8,9,10,11 et 12: virus --> govil>93 if (level>0 & level<8) {tgovil=32;} // vitesse de sortie des virus if (level>7 & level<11) {tgovil=96;} speedvil=0; // vitesse de déplacement des virus // if (level==1) speedvil=1; // if (level==2 | level==3) speedvil=2; // if (level==4 | level==5) speedvil=3; // if (level==6 | level==7) speedvil=4; //if (level==1) speedvil=1; if (level==1 | level==2 | level==3 | level==4) speedvil=1; //if (level==5) speedvil=1; if (level==6 | level==7 | level==8 | level==9) speedvil=0; //if (level==10) speedvil=1; //if (level==6 | level==7) speedvil=1; //speedvil=1; // vitesse des rochers : vroch=1; if (level==1) {eroch2=-1;} // interdit le 2ème rocher pour le 1er niveau if (level==3 | level==4) vroch=2; // //if (level==3) vroch=1,5; // //if (level==4) vroch=2; // //if (level==5 | level==6) vroch=3;// trop rapide //if (level==7) vroch=4;// trop rapide SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100; tyroch=0;chroch=0; if (level>1) tyroch=1; SCBHS(SCBroch2) = 0x100;SCBVS(SCBroch2) = 0x100; tyroch2=0;chroch2=0; if (level>2) tyroch2=1; if (level==1 | level==6) { SCBDATA(SCBgsf1) = fond2; SCBDATA(SCBgsf2) = fond2; SCBDATA(SCBgsf3) = fond2; SCBDATA(SCBgsf4) = fond2; SCBDATA(SCBgsf5) = fond2; SCBDATA(SCBgsf6) = fond2; } if (level==2 | level==7) { SCBDATA(SCBgsf1) = fond3; SCBDATA(SCBgsf2) = fond3; SCBDATA(SCBgsf3) = fond3; SCBDATA(SCBgsf4) = fond3; SCBDATA(SCBgsf5) = fond3; SCBDATA(SCBgsf6) = fond3; } if (level==3 | level==8) { SCBDATA(SCBgsf1) = fond2; SCBDATA(SCBgsf2) = fond2; SCBDATA(SCBgsf3) = fond2; SCBDATA(SCBgsf4) = fond2; SCBDATA(SCBgsf5) = fond2; SCBDATA(SCBgsf6) = fond2; } if (level==4 | level==9) { SCBDATA(SCBgsf1) = fond3; SCBDATA(SCBgsf2) = fond3; SCBDATA(SCBgsf3) = fond3; SCBDATA(SCBgsf4) = fond3; SCBDATA(SCBgsf5) = fond3; SCBDATA(SCBgsf6) = fond3; } } } } // ********************************************************************************************* // Affichage de 4 images pour le décors, les 2 images du shiplayer, la jauge et les 2 images du score. if (etape==2) { ++gsblip; // economie ressource machine --> certaines des conditions n'ont pas besoin d'être lu par la LYNX à chaque boucle. if (gsblip==5) { gsblip=1; /* if (joystick & BUTTON_PAUSE) { if (gspause==0) gspause=1; } if (!(joystick & BUTTON_PAUSE)) { if (gspause==1) gspause=2; } if (joystick & BUTTON_PAUSE) { if (gspause==2) gspause=3; } if (!(joystick & BUTTON_PAUSE)) { if (gspause==3) gspause=0; } */ // /* probleme à resoudre : bouton pause if (switches & BUTTON_PAUSE) { if (gspause==0) gspause=1; } if (!(switches & BUTTON_PAUSE)) { if (gspause==1) gspause=2; } if (switches & BUTTON_PAUSE) { if (gspause==2) gspause=3; } if (!(switches & BUTTON_PAUSE)) { if (gspause==3) gspause=0; } // */ } // ********* decor : //scrollx=2 if (gspause==0) scrollx=2; // vitesse de défilement du décor if (gspause>0) { scrollx=0; // vitesse de défilement du décor // SCBX(SCBroch) = 70; // SCBY(SCBroch) = 39; // SCBDATA(SCBroch) = rochtab[19%18]; // DrawSprite(SCBroch); // Affichage sprites chainés (rocher + rhume) // SCBDATA(SCB) = ipause; // SCBX(SCB) = 70; // SCBY(SCB) = 39; // DrawSprite(SCB); } /*************************************************************************** ** Problème de ralentissement au bout de 20 secondes de jeu : ** ** problème résolu en chainant les sprites. ** ***************************************************************************/ if (SCBX(SCBgsf1)<=-32) { SCBX(SCBgsf1) = 0; SCBX(SCBgsf2) = 32; SCBX(SCBgsf3) = 64; SCBX(SCBgsf4) = 96; SCBX(SCBgsf5) = 128; SCBX(SCBgsf6) = 160; if (nbrnexu==0) { ++nbrnext ; if (nbrnexu==0) { if (stopm==0 & boumgb==0 & gspause==0) { if (nbrnext>(60*level)) // longueur d'un level //if (nbrnext>30) // longueur d'un level { nbrnexu=1; } } } } } SCBX(SCBgsf1)=SCBX(SCBgsf1)-scrollx; SCBX(SCBgsf2)=SCBX(SCBgsf2)-scrollx; SCBX(SCBgsf3)=SCBX(SCBgsf3)-scrollx; SCBX(SCBgsf4)=SCBX(SCBgsf4)-scrollx; SCBX(SCBgsf5)=SCBX(SCBgsf5)-scrollx; SCBX(SCBgsf6)=SCBX(SCBgsf6)-scrollx; // ********* shiplayer : if (gspause==0) { if (nbrnexu==2) { ++posx; // le shiplayer quitte le niveau en automatique if (posx>160) {nbrnexu=3;} } if (goship==0 & posx<20) { posx=posx+1; if (posx>=20) {posx=20; goship=1;} } if (goship==1 & stopm==0 & nbrnexu<2) { if (joystick & JOY_RIGHT) posx++; // direction Droite if (posx>120) posx=120; if (joystick & JOY_LEFT) posx--; // direction Gauche if (posx<2) posx=2; if (joystick & JOY_UP) posy--; // direction Haut if (posy<-2) posy=-2; if (joystick & JOY_DOWN) posy++; // direction Bas if (posy>80) posy=80; } // sprite 1 du shiplayer: moteur à hélice (6 images d'une taille de 8*22 chacunes) SCBX(SCBsprite1) = posx; SCBY(SCBsprite1) = posy; ++tempa; // vitesse animation de l'hélice if (tempa>=3+stopm) { tempa=0; ++t; if (stopm>0 & stopm<32) ++stopm; // Arrêt progressif du moteur à hélice... } if (stopm>1) // ...et le shiplayer sort progressivement de l'écran. { ++tempe; if (tempe>=4) {tempe=0;--posx;++outship;} // } // clip du sprite 1 if (t>=5) t=0; } SCBDATA(SCBsprite1) = sprtab[t%6]; // rappel: Le sprite 2 (coque) est lié au sprite 1 (hélice). SCBX(SCBsprite2) = posx+8; SCBY(SCBsprite2) = posy-1; //DrawSprite(SCBsprite1); DrawSprite(SCBgsf1); // Affichage sprites chainés (décor + shiplayer)
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

35

code source, 2ème partie:
if (gspause==0) { ++temparoch; // animation des rochers if (temparoch>5) { temparoch=0;++aroch; if (aroch>15) aroch=0; } SCBDATA(SCBroch) = rochtab[aroch%18]; SCBX(SCBroch) = rochx; SCBY(SCBroch) = rochy; SCBDATA(SCBroch2) = rochtab[aroch%18]; SCBX(SCBroch2) = roch2x; SCBY(SCBroch2) = roch2y; // ********* rocher 1 : if (eroch==0 & nbrnexu==0) { rochx=180; if (goroch<32) ++goroch; // petite temporisation avant apparition du 1er rocher if (goship==1 & goroch>31 & stopm==0) { rasam=rasa; rasa=random()%4; // de 0 à 3 if (rasa==rasam) // Si le même nombre sort 2 fois de suite, alors... { rasar=random()%2; // de 0 à 1 if (rasar==0) ++rasa; if (rasar==1) --rasa; } if (rasa>3) rasa=0; if (rasa<0) rasa=3; if (gshat==1) // hasard "aidé" { //++atest; gshat=0; if (rasa>1) rasa=rasa-gshas; if (rasa<2) rasa=rasa+gshas; if (rasa>3) rasa=0; if (rasa<0) rasa=3; } if (tyroch==0) rochy=rasa*24; if (tyroch==1) { ++chroch; if (chroch==3) chroch=1; if (chroch==1) {SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100;} if (chroch==2) {SCBHS(SCBroch) = 0x150;SCBVS(SCBroch) = 0x150;} if (rasa==3 & chroch==2) rasa=0; rochy=rasa*34; } eroch=1;rochx=180;temprochx=0;rochy=rochy+3; // Taille rocher1: 24*24 ; objectif : // 4 positions de départ Y pour le rocher : rochy = 3 ou 27 ou 51 ou 75 // espacement de 3 lignes en haut et en bas : 3 et 99 (75 + 24 (nbre de ligne du rocher1)) } } if (eroch==1) { rochx=rochx-vroch; if (rochx<-36) {eroch=0;rochx=180;SCBX(SCBroch) = rochx;} // si rocher1 sort de l'écran, alors remise à 0 de sa création. // collision rocher1/shiplayer !!! if (gsblip==1 & stopm==0) { if (rochy+12>posy-4 & rochy+12<posy+28) // test colision rocher 24*24 { if (rochx+12>posx & rochx+12<posx+40) { eroch=0;goroch=0;rochx=180; boumgb=1;aaroch=16; stopm=1;energ=0;SCBX(SCBjauge) = 200; // panne sèche: arrêt du moteur à hélice } } if (eroch==1 & chroch==2 & rochy+24>posy-4 & rochy+24<posy+28) // test colision rocher 36*36 { if (rochx+24>posx & rochx+24<posx+40) { eroch=0;goroch=0;rochx=180; boumgb=1;aaroch=16; stopm=1;energ=0;SCBX(SCBjauge) = 200; // panne sèche: arrêt du moteur à hélice } } } } // ********* rocher 2 : if (eroch2==0 & nbrnexu==0) { roch2x=180; // if (goroch2<128-(gshas*8)) ++goroch2; // petite temporisation avant apparition du 1er rocher // if (goship==1 & goroch2>127-(gshas*8) & stopm==0) // vroch=1; // if (level==3 | level==4) vroch=2; // if (level==5 | level==6) vroch=3; // if (level==7) vroch=4;// trop rapide if (goroch2<32+(216-(vroch*72))) ++goroch2; // petite temporisation avant apparition du 1er rocher if (goship==1 & goroch2>31+(215-(vroch*72)) & stopm==0) { rbsam=rbsa; rbsa=random()%4; // de 0 à 3 if (rbsa==rbsam) // Si le même nombre sort 2 fois de suite, alors... { rbsar=random()%2; // de 0 à 1 if (rbsar==0) ++rbsa; if (rbsar==1) --rbsa; } if (rbsa>3) rbsa=0; if (rbsa<0) rbsa=3; //rasa=3; //atest=rasa; //atest=rbsa; if (rbsa==rasa) //(rbsa==3)//atest) //(atest==rasa)//(atest==0) si le même que le rocher 1, alors... { // rbsa=1; // ++atest; //rbsa=1; rbsar=random()%2; // de 0 à 1 if (rbsar==0) ++rbsa; if (rbsar==1) --rbsa; if (rbsa>3) rbsa=0; if (rbsa<0) rbsa=3; } if (tyroch2==0) roch2y=rbsa*24; if (tyroch2==1) { ++chroch2; if (chroch2==3) chroch2=1; if (chroch2==1) {SCBHS(SCBroch2) = 0x100;SCBVS(SCBroch2) = 0x100;} if (chroch2==2) {SCBHS(SCBroch2) = 0x150;SCBVS(SCBroch2) = 0x150;} if (rbsa==3 & chroch2==2) rbsa=0; roch2y=rbsa*34; } eroch2=1;roch2x=180;temprochx2=0;roch2y=roch2y+3; // Taille rocher1: 24*24 ; objectif : // 4 positions de départ Y pour le rocher : rochy = 3 ou 27 ou 51 ou 75 // espacement de 3 lignes en haut et en bas : 3 et 99 (75 + 24 (nbre de ligne du rocher1)) } } if (eroch2==1) { roch2x=roch2x-vroch; if (roch2x<-36) {eroch2=0;roch2x=180;SCBX(SCBroch2) = roch2x;} // si rocher1 sort de l'écran, alors remise à 0 de sa création. // collision rocher2/shiplayer !!! if (gsblip==3 & stopm==0) { if (roch2y+12>posy-4 & roch2y+12<posy+28) // test colision rocher 24*24 { if (roch2x+12>posx & roch2x+12<posx+40) { eroch2=0;goroch2=0;roch2x=180; boumgb=1;aaroch=16; stopm=1;energ=0;SCBX(SCBjauge) = 200; // panne sèche: arrêt du moteur à hélice } } if (eroch2==1 & chroch2==2 & roch2y+24>posy-4 & roch2y+24<posy+28) // test colision rocher 36*36 { if (roch2x+24>posx & roch2x+24<posx+40) { eroch2=0;goroch2=0;roch2x=180; boumgb=1;aaroch=16; stopm=1;energ=0;SCBX(SCBjauge) = 200; // panne sèche: arrêt du moteur à hélice } } } } // if (eroch>0) // affichage // { // SCBDATA(SCBroch) = rochtab[aroch%18]; // SCBX(SCBroch) = rochx; // SCBY(SCBroch) = rochy; //DrawSprite(SCBroch); // } // test3: //SCBDATA(SCBchiffres) = chiffrestab[10%12]; //SCBX(SCBchiffres) = rochx+12; //SCBY(SCBchiffres) = rochy+12; //DrawSprite(SCBchiffres); // fin test3 // ********* rhume (vilain 1) : if (vil==0 & goship==1) { if (govil<tgovil) //32 { vilx=160;++govil; // petite temporisation avant l'attaque virale } //if (govil==tgovil & stopm==0 & nbrnexu==0) //31 if (stopm==0 & nbrnexu==0) //31 { vilx=160; hasam=hasa; hasa=random()%6; // de 0 à 5 // if (hasa==hasam) ++hasa; // if (hasa>5) hasa=0; if (hasa==hasam | hasa==rasam) // Si le même nombre sort 2 fois de suite, alors... { hasar=random()%2; // de 0 à 1 if (hasar==0) ++hasa; if (hasar==1) --hasa; } if (hasa>5) hasa=0; if (hasa<0) hasa=5; vil=1;vilx=160;tempvilx=0;vily=hasa*16;vily=vily+3;avil=0;tempavil=0; // Taille vilain1: 16*16 ; objectif : // 6 positions de départ Y pour le vilain1 : vily = 3 ou 19 ou 35 ou 51 ou 67 ou 83 // espacement de 3 lignes en haut et en bas : 3 et 99 (83 + 16 (nbre de ligne du vilain1)) } } // // test1: // SCBDATA(SCBchiffres) = chiffrestab[10%12]; // SCBX(SCBchiffres) = posx+30; // SCBY(SCBchiffres) = posy+9; // DrawSprite(SCBchiffres); // SCBX(SCBchiffres) = posx+30; // SCBY(SCBchiffres) = posy+12; // DrawSprite(SCBchiffres); // SCBX(SCBchiffres) = posx+40; // SCBY(SCBchiffres) = posy+9; // DrawSprite(SCBchiffres); // SCBX(SCBchiffres) = posx+40; // SCBY(SCBchiffres) = posy+12; // DrawSprite(SCBchiffres); // fin test1 if (vil==1) { ++tempvilx; // vitesse du vilain 1 en fonction du niveau. if (tempvilx>speedvil) { tempvilx=0;--vilx; } // vilx=vilx-speedvil; // if (level==2 & tempvilx>0) // { // tempvilx=0;--vilx; // } ++tempavil; // animation du vilain 1 /*************************************************************************** ** Les conditions suivantes ralentissent le jeu ! Alors j'opte pour une ** ** seule condition... il faut limiter le nbre de condition. ***************************************************************************/ // if (tempavil==41) tempavil=1; // if (tempavil>0 & tempavil<11) avil=0; // 1 à 10 // if (tempavil>10 & tempavil<21) avil=1; // 11 à 20 // if (tempavil>20 & tempavil<31) avil=2; // 21 à 30 // if (tempavil>30 & tempavil<41) avil=1; // 31 à 40 if (tempavil>10) { tempavil=0;++avil; if (avil>2) avil=0; } // SCBDATA(SCBrhume) = rhumetab[avil%7]; // SCBX(SCBrhume) = vilx; // SCBY(SCBrhume) = vily; // DrawSprite(SCBrhume); if (vilx<-16) {vil=0;govil=0;} // si vilain1 sort de l'écran, alors remise à 0 de sa création. // test2: // SCBX(SCBchiffres) = vilx; // SCBY(SCBchiffres) = vily+8; // DrawSprite(SCBchiffres); // fin test2 // capture du vilain1 !!! // atest=0; // if (vily+8>posy+9 & vily+8<posy+12) atest=1; // if (vily+6>posy+7 & vily+8<posy+16) atest=1; if (stopm==0) { if (vily+8>posy+7 & vily+8<posy+16) { if (vilx>posx+30 & vilx<posx+40) { // atest=1; vil=2;avil=3;tempavil=0; } } } // vily // posx // posy } if (vil==2) // virus capturé le nanoship ! { // avil=3; vily=posy+3;vilx=posx+38; tempd=0; // ici, on stoppe temporairement la jauge. if (tempavil<31) ++tempavil; // animation du vilain 1 if (tempavil>0 & tempavil<11) avil=4; // 1 à 10 if (tempavil>10 & tempavil<21) avil=3; // 11 à 20 if (tempavil>20 & tempavil<31) avil=4; // 21 à 30 if (tempavil==31 | boumgb>0) { tempavil=0;vil=0;govil=0; vilx=160;SCBX(SCBrhume) = vilx; if (boumgb==0) { energ=energ+4;++score; if (energ>10) energ=10; } // --energ; // if (energ<1) energ=10; } } if (vil>0) // affichage { SCBDATA(SCBrhume) = rhumetab[avil%7]; SCBX(SCBrhume) = vilx; SCBY(SCBrhume) = vily; // DrawSprite(SCBrhume); } } // if (gspause==0) DrawSprite(SCBroch); // Affichage sprites chainés (rocher + rhume) // ********* jauge d'énergie du shiplayer: if (gsblip==2) { if (energ>0 & gspause==0 & nbrnexu==0) // Si le shiplayer a encore de l'énergie, alors... { ++tempd; // ...incremente une petite tempo if (tempd>11) // 59 { tempd=0;--energ; if (energ==0) { stopm=1; // panne sèche: arrêt du moteur à hélice SCBX(SCBjauge) = 200; // mettre image jauge hors de l'écran. } } } //energ=1; if (energ>0 & gspause==0) { --energ; // energ de 1 à 10 --> mais de 0 à 9 pour le n° image SCBDATA(SCBjauge) = jaugetab[energ%10]; SCBX(SCBjauge) = 55; SCBY(SCBjauge) = 4; // DrawSprite(SCBjauge); ++energ; } } DrawSprite(SCBjauge); // Affichage sprites (jauge ) if (stopm>0 & gspause==0) { if (boumgb>0) // explosion du shiplayer { ++aaroch; if (aaroch==18) { aaroch=16;nbboum++; // nombre de boum ++scboom; if (scboom>4) scboom=1; } SCBDATA(SCBroch) = rochtab[aaroch%18]; if (scboom==1) { SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100; SCBX(SCBroch) = posx+10;SCBY(SCBroch) = posy-1; } if (scboom==2 | scboom==4) { SCBHS(SCBroch) = 0x140;SCBVS(SCBroch) = 0x140; SCBX(SCBroch) = posx+6;SCBY(SCBroch) = posy-4; } if (scboom==3) { SCBHS(SCBroch) = 0x180;SCBVS(SCBroch) = 0x180; SCBX(SCBroch) = posx+2;SCBY(SCBroch) = posy-7; } DrawSprite(SCBroch); SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100; } // | cette barre verticale veut dire OR/OU en langage C if (nbboum>31 | outship>31) // outship voir plus haut (pour faire une recherche, appuyez sur Ctrl + F) { SCBX(SCBroch) = 200;SCBX(SCBroch2) = 200; // mettre image rocher et virus hors de l'écran. nbboum=0;scboom=0;outship=0; --gslife; // perd un ship... stopm=0;etape=1;tempa=0;energ=10;goship=0;posx=-40;posy=39;boumgb=0;aaroch=0; govil=0;vil=0;vilx=0;tempvilx=0;vily=0;avil=0;tempavil=0; hasa=0;hasam=0;hasar=0; goroch=0;eroch=0;rochx=0;rochy=0; goroch2=0;eroch2=0;roch2x=0;roch2y=0; temprochx=0;aroch=0;temparoch=0; rasa=0;rasam=0;rasar=0; rbsa=0;rbsam=0;rbsar=0; nbrnexu=0;nbrnext=0; if (gslife>0) // ...mais s'il en reste encore, alors retour à l'étape 1. { etape=1; } if (gslife<1) // ...mais s'il n'en plus, alors game over. { etape=8;tempa=0;xpush=-48;ypush=34; } } } // ********* passage au prochein niveau if (nbrnexu>0) { if (nbrnexu==1 & vil<1 & eroch<1 & eroch2<1) { nbrnexu=2; // joueur n'a plus le contrôle du shiplayer } if (nbrnexu==3) // passage au level suivant { SCBX(SCBroch) = 200;SCBX(SCBroch2) = 200; // mettre image rocher et virus hors de l'écran. //nbboum=0;outship=0; //--gslife; // perd un ship... stopm=0;etape=1;tempa=0;energ=10;goship=0;posx=-40;posy=39;boumgb=0;aaroch=0; govil=0;vil=0;vilx=0;tempvilx=0;vily=0;avil=0;tempavil=0; hasa=0;hasam=0;hasar=0; goroch=0;eroch=0;rochx=0;rochy=0; goroch2=0;eroch2=0;roch2x=0;roch2y=0; temprochx=0;aroch=0;temparoch=0; rasa=0;rasam=0;rasar=0; rbsa=0;rbsam=0;rbsar=0; nbrnexu=0;nbrnext=0; // if (gslife>0) // ...mais s'il en reste encore, alors retour à l'étape 1. // { etape=1;++level; } } } // if (etape==2) // ********************************************************************************************* // if (etape==3) // { // } // ********************************************************************************************* if (etape>7) { SCBDATA(SCB) = gameover; SCBX(SCB) = 70; SCBY(SCB) = 34; DrawSprite(SCB); if (etape==9) { if (!(joystick & BUTTON_LEFT)) { etape=0;SCBX(SCB)=0;SCBY(SCB)=0;SCBDATA(SCB)=fond1; SCBX(SCBchiffres2) = 200; SCBX(SCBchiffres3) = 200; } } if (etape==8) // game over. { SCBDATA(SCB) = pushup; SCBX(SCB) = xpush; SCBY(SCB) = ypush; DrawSprite(SCB); if (xpush<8 & elvl==5) xpush=xpush+2; if (xpush>7) { xpush=7; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=200; if (joystick & JOY_RIGHT) { tempa=0;xpush=-48;ypush=34; etape=9; } } } } // ********************************************************************************************* // ********* affichage du score : if ((etape==1 & drap1==1) | etape==2 | etape==8 | etape==9) { if (score<1000) { unite = score % 10; dizaine = score / 10 % 10; centaine = score / 100 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 150; SCBY(SCBchiffres1) = 53; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%12]; SCBX(SCBchiffres2) = 150; SCBY(SCBchiffres2) = 53-4; // centaine: SCBDATA(SCBchiffres3) = chiffrestab[centaine%12]; // 0 SCBX(SCBchiffres3) = 150; SCBY(SCBchiffres3) = 53-8; } DrawSprite(SCBchiffres1); // Affichage sprites chainés (score) /*************************************************************************** ** Test (lignes suivantes a désactivées) ** ***************************************************************************/ /* //unite = gshas % 10; unite = nbrnexu % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 130; SCBY(SCBchiffres1) = 23; DrawSprite(SCBchiffres1); // Affichage valeur testé unite = rasa % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 130; SCBY(SCBchiffres1) = 53; DrawSprite(SCBchiffres1); // Affichage valeur testé //unite = rbsa % 10; //unite = roch2x % 10; //dizaine = roch2x / 10 % 10; //centaine = roch2x / 100 % 10; unite = goroch2 % 10; dizaine = goroch2 / 10 % 10; centaine = goroch2 / 100 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 120; SCBY(SCBchiffres1) = 53; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%12]; SCBX(SCBchiffres2) = 120; SCBY(SCBchiffres2) = 53-4; // centaine: SCBDATA(SCBchiffres3) = chiffrestab[centaine%12]; // 0 SCBX(SCBchiffres3) = 120; SCBY(SCBchiffres3) = 53-8; DrawSprite(SCBchiffres1); // Affichage valeur testé unite = atest % 10; dizaine = atest / 10 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 100; SCBY(SCBchiffres1) = 53; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%12]; SCBX(SCBchiffres2) = 100; SCBY(SCBchiffres2) = 53-4; DrawSprite(SCBchiffres1); // Affichage valeur testé */ /*************************************************************************** ** Fin Test ** ***************************************************************************/ } // ********************************************************************************************* //Fchiffres(8,92,etape); // test de variable (mais où est le debogueur ?) if (etape==2 & gspause>0) { SCBDATA(SCB) = ipause; SCBX(SCB) = 73; SCBY(SCB) = 30; DrawSprite(SCB); } Vsync(); SwapBuffers(); } /************************************************************************** ** FIN de la BOUCLE PRINCIPALE ** **************************************************************************/ }
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

36

Chouette une nouvelle version à tester ce soir tongue

Ça commence à faire un jolie code et tu t'approches de la limite de taille du *.o
Mon site sur la LYNX :ZoneLynx

37

RYGAR (./36) :
Chouette une nouvelle version à tester ce soir tongue

Ça commence à faire un jolie code et tu t'approches de la limite de taille du *.o
Merci, je prépare une version 0.5 avec quelques bruitages à l'aide de ABCmusic smile
J'ai visité ton site top , et j'ai découvert plein de trucs, n'oublie pas de le mettre à jour au moins une fois par an. wink
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

38

Vraiment de mieux en mieux ton jeu, les niveaux, les cailloux de différentes tailles... vivement les bruitages !
Par contre je trouve que la barre d'énergie diminue très très vite (trop vite). Si tu rates 2 virus c'est déjà mort.

Bon pour le site c'est vrai que j'ai un peu laisser tombé mais depuis le deuxième bébé j'avoue que le temps me manque.
J'aimerais reprogrammer un peu, mettre mon site à jour, poursuivre mes test des jeux, finir des projets de hardware.... Un jour surement tongue

Mon site sur la LYNX :ZoneLynx

39

RYGAR (./38) :
Vraiment de mieux en mieux ton jeu, les niveaux, les cailloux de différentes tailles... vivement les bruitages !
Par contre je trouve que la barre d'énergie diminue très très vite (trop vite). Si tu rates 2 virus c'est déjà mort.
L'astuce, c'est qu'il ne faut pas trop rester au bas de l'écran. Pour remonter la barre d'énergie, et gonfler le score, il faut monter de temps en temps pour gober les virus (car ils réapparaissent immédiatement après avoir été gober). smile

mise à jour majeure (toutes les images sont désormais chainées + bruitages)
version0.5 exe :

tromb Fichier joint : globshoot_05.o

[URL=http://img534.imageshack.us/i/jaquetteaglobshoot.jpg/][IMG]http://img534.imageshack.us/img534/6051/jaquetteaglobshoot.jpg[/IMG][/URL]

[URL=http://img225.imageshack.us/i/jaquettebglobshoot.jpg/][IMG]http://img225.imageshack.us/img225/6470/jaquettebglobshoot.jpg[/IMG][/URL]



avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

40

source 1er partie:
/* Glob Shoot version 0.5 - LYNX - kit BLL (newcc65) 27/11/2010 console tenu à la verticale Handy/Option/Rotate Screen(Right) D-pad et bouton pause LYNX - video game */ #include <lynx.h> #include <lynxlib.h> #include <stdlib.h> //#include "inc\fond1.pal" // Ceci sert à inclure le fichier palette généré par sprpck //{ extern void silence(); extern void abcmusic(); extern void update_music(); char abcmusic0[]; char abcmusic1[]; char abcmusic2[]; char abcmusic3[]; char abcmenu1[]; char abcmenu2[]; char abcbric[]; char abcaptvir[]; char abcboum[]; char abcpanne[]; char abces[]; #asm xref _abcmenu1 xref _abcmenu2 xref _abcbric xref _abcaptvir xref _abcboum xref _abcpanne xref _abces xref _abcmusic0 xref _abcmusic1 xref _abcmusic2 xref _abcmusic3 _abcmenu1 dc.b "O2X7I1V32T20R54H7K8" dc.b "|:C4" dc.b 0 _abcmenu2 dc.b "O3X7I1V16T20R54H7K12" dc.b "|:c2" dc.b 0 _abcbric dc.b "O4X7I1V16T20R54H7K12" dc.b "|:C1" dc.b 0 _abcaptvir dc.b "O2X15I1V32T1R14H6K30" dc.b "|:C4D4C4E4D4C4D4" dc.b 0 _abcboum dc.b "O2X248I1V16T50R80H2K2" dc.b "|:C2" dc.b 0 _abcpanne dc.b "O4X6I1V127T6R5H6K6" dc.b "|:C4D4C4E4D4C4D4E4C4" dc.b 0 _abces dc.b "O4X6I1V127T6R16H2K3" dc.b "|:C2D2C2E2D2C2D2E2C2" dc.b 0 _abcmusic0 dc.b "O2X3I1V70T20R54H2K1" dc.b "|:C4O3T2C4" dc.b 0 _abcmusic1 dc.b "O2X7I0V45T20R80H8K1" dc.b "|:C4D4E4F4" dc.b "C4D4E4F4" dc.b "c4B4A4E4" dc.b "c4B4A4E4" dc.b "E4F4G4A4" dc.b "E4F4G4A4" dc.b "C4D4E4F4" dc.b "C4D4E4F4:" dc.b 0 _abcmusic2 dc.b "O1X7I0V45T20R40H2K3" dc.b "zzzzzzzz" dc.b "|:CDEEDEFFEFGEFDGG" dc.b "I1CDEEDEFFEFGEFDCC" dc.b "I0cBAABAGGAGFFEDEE" dc.b "cBAABAGGAGFFEDCC" dc.b "ECDDFDEEGEFGABcc" dc.b "ECDDFDEEGEFGABcc" dc.b "CDEEDEFFEFGEFDGG" dc.b "CDEEDEFFEFGEFDCC:" dc.b 0 _abcmusic3 dc.b "O2X7I0V45T20R80H8K1" dc.b "z4z4z2" dc.b "|:C4D4E4F4" dc.b "C4D4E4F4" dc.b "c4B4A4E4" dc.b "c4B4A4E4" dc.b "E4F4G4A4" dc.b "E4F4G4A4" dc.b "C4D4E4F4" dc.b "C4D4E4F4:" dc.b 0 #endasm //} /* LYNX-specific #defines: */ #define JOY_RIGHT 0x10 #define JOY_LEFT 0x20 #define JOY_DOWN 0x40 #define JOY_UP 0x80 #define BUTTON_OPTION1 0x08 #define BUTTON_OPTION2 0x04 #define BUTTON_LEFT 0x02 #define BUTTON_RIGHT 0x01 #define BUTTON_PAUSE 0x01 //#define SCBSTRETC H(a) (*(uint *)((a)+15)) // déformation, macro //#define SCBTILT(a) (*(uint *)((a)+17)) // déformation, macro char SCREEN[8160] at (MEMTOP-16320); char RENDER[8160] at (MEMTOP-8160); //char redir[]={0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF}; char pal[]={ 0x00,0x0F,0x0B,0x08,0x03,0x04,0x06,0x0A,0x00,0x00,0x07,0x07,0x03,0x00,0x05,0x03, 0x00,0x0F,0x0B,0x06,0x00,0x30,0x54,0xAA,0x08,0x05,0x0E,0xAF,0x5F,0x0F,0xC0,0x61}; // ------------------------------------ extern char pushup[]; // image appuyez sur haut, d'une taille de 48*35; char SCBp[]; #asm _SCBp dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ extern char fond1[]; // ecran titre char SCBl[]; #asm _SCBl dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ extern char fondlvl[]; // image fond level, d'une taille de 32*102; extern char gameover[]; // image game over, d'une taille de 20*32; extern char ipause[]; // image pause, d'une taille de 13*43; char SCB[]; #asm _SCB dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ extern char fond2[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche. extern char fond3[]; // image decor monde 1, d'une taille de 32*102; il faudra donc scroller 6 images de droite à gauche. char SCBfond2[]; // à la 3ème ligna asm, j'ai remplacé 100 par 200 pour doubler la largeur du décor (nbre de colonne * 2) #asm _SCBfond2 dc.b $c0,$10,$20 dc.w 0,0 dc.w 0,0,$200,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ char SCBgsf1[]; // déclaration d'un nouveau controleur de sprite char SCBgsf2[]; // déclaration d'un nouveau controleur de sprite char SCBgsf3[]; // déclaration d'un nouveau controleur de sprite char SCBgsf4[]; // déclaration d'un nouveau controleur de sprite char SCBgsf5[]; // déclaration d'un nouveau controleur de sprite char SCBgsf6[]; // déclaration d'un nouveau controleur de sprite #asm _SCBgsf1 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf2 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf3 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf4 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf5 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBgsf6 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // clip du sprite 1 --> 6 images, de 0 à 5, du moteur à élice : extern char sp000000[]; extern char sp000001[]; extern char sp000002[]; extern char sp000003[]; extern char sp000004[]; extern char sp000005[]; char *sprtab[6] = {sp000000, sp000001, sp000002, sp000003, sp000004, sp000005}; char SCBsprite1[]; // déclaration d'un nouveau controleur de sprite, moteur à hélice #asm _SCBsprite1 dc.b $c7,$10,$20 dc.w 0, 0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ extern char sprite2[]; // coque (taille: 30*24) char SCBsprite2[]; // déclaration d'un nouveau controleur de sprite, coque #asm _SCBsprite2 dc.b $c7,$10,$20 dc.w 0, 0 ;dc.w 0,_sprite2 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // $c0 couleur 0 pas transparente // $c7 couleur transparente // ------------------------------------ // clip du sprite chiffres: 0123456789.L extern char ch000000[]; extern char ch000001[]; extern char ch000002[]; extern char ch000003[]; extern char ch000004[]; extern char ch000005[]; extern char ch000006[]; extern char ch000007[]; extern char ch000008[]; extern char ch000009[]; extern char ch000010[]; extern char ch000011[]; char *chiffrestab[12] = {ch000000, ch000001, ch000002, ch000003, ch000004, ch000005, ch000006, ch000007, ch000008,ch000009, ch000010, ch000011}; char SCBchiffres1[]; // déclaration d'un nouveau controleur de sprite char SCBchiffres2[]; // déclaration d'un nouveau controleur de sprite char SCBchiffres3[]; // déclaration d'un nouveau controleur de sprite char SCBscore1[]; // déclaration d'un nouveau controleur de sprite (score unité) char SCBscore2[]; // déclaration d'un nouveau controleur de sprite (score dizaine) char SCBscore3[]; // déclaration d'un nouveau controleur de sprite (score centaine) #asm _SCBchiffres1 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBchiffres2 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBchiffres3 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBscore1 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBscore2 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef ; _SCBscore3 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // ------------------------------------ char jauge[]; // // clip du sprite jauge d'énergie du shiplayer extern char ja000000[]; extern char ja001000[]; extern char ja002000[]; extern char ja003000[]; extern char ja004000[]; extern char ja005000[]; extern char ja006000[]; extern char ja007000[]; extern char ja008000[]; extern char ja009000[]; char *jaugetab[10] = {ja000000, ja001000, ja002000, ja003000, ja004000, ja005000, ja006000, ja007000, ja008000, ja009000}; char SCBjauge[]; // déclaration d'un nouveau controleur de sprite #asm _SCBjauge dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // ------------------------------------ char rhume[]; // // clip du sprite rhume, que le nanoship doit capturer. extern char rh000000[]; extern char rh000001[]; extern char rh000002[]; extern char rh000003[]; extern char rh000004[]; extern char rh000005[]; extern char rh000006[]; char *rhumetab[7] = {rh000000, rh000001, rh000002, rh000003, rh000004, rh000005, rh000006}; char SCBrhume[]; // déclaration d'un nouveau controleur de sprite #asm _SCBrhume dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ c0 à la plce de c7 desactive la couleur 0 (transparente) // ------------------------------------ //char roch[]; // // clip du sprite rhume, que le nanoship doit capturer. extern char ro000000[]; extern char ro000001[]; extern char ro000002[]; extern char ro000003[]; extern char ro000004[]; extern char ro000005[]; extern char ro000006[]; extern char ro000007[]; extern char ro000008[]; extern char ro000009[]; extern char ro000010[]; extern char ro000011[]; extern char ro000012[]; extern char ro000013[]; extern char ro000014[]; extern char ro000015[]; extern char ro000016[]; extern char ro000017[]; char *rochtab[18] = {ro000000, ro000001, ro000002, ro000003, ro000004, ro000005, ro000006, ro000007, ro000008, ro000009, ro000010, ro000011, ro000012, ro000013, ro000014, ro000015, ro000016, ro000017}; char SCBroch[]; // déclaration d'un nouveau controleur de sprite char SCBroch2[]; // déclaration d'un nouveau controleur de sprite #asm _SCBroch dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef _SCBroch2 dc.b $c7,$10,$20 dc.w 0,0 dc.w 0,0,$100,$100 dc.b $01,$23,$45,$67,$89,$ab,$cd,$ef #endasm // ------------------------------------ // variable (int = 2 octets ; char = 1 octet) int posx,posy,level,xpush,ypush,xlvla,xlvlb,xlvlc,xlvld,xlvle,elvl; // int i,score,energ,nbrnext,nbrnexu; // nbrnext : nombre de fois où l'on repositionne le décor, afin de déterminer la longueur d'un level... int compteur,scrollx; char goship,t,tempa,tempb,tempc,tempd,tempe,etape,gspause,gslife,stopm,drap1,nodecor,boumgb,aaroch,nbboum,scboom,outship,gsblip; // de -128 à 127 char tyroch,chroch; char tyroch2,chroch2; char gshas,gshat; // hasard "aidé" (incrementation en attendant l'appuis sur D-pad haut) char bruitm; int govil,vil,vilx,tempvilx,speedvil,vily,avil,tempavil,hasa,hasam,hasar; int aroch,temparoch; int goroch,eroch,rochx,temprochx,rochy,rasa,rasam,rasar; int goroch2,eroch2,roch2x,temprochx2,roch2y,rbsa,rbsam,rbsar; int unite; int dizaine; int centaine; int tgovil,vroch; int atest; // variable utilisée pour tester des trucs et des machins (pas de debug, donc système D) // assembler vertical retrace syncronisation routine void Vsync() { #asm vretrace: lda $fd0a bne vretrace #endasm } // Hors de l'assembleur, point de salut... // L'utilisation de la procedure suivante, lors de l'écran d'action, // fait ramer le jeu. void Fchiffres(clx,cly,classe) int clx,cly,classe; { SCBDATA(SCBchiffres1) = chiffrestab[classe%12]; SCBX(SCBchiffres1) = clx; SCBY(SCBchiffres1) = cly; DrawSprite(SCBchiffres1); } /************************************************************************** ** ** ** ** **************************************************************************/ char main() //main() { InitIRQ(); CLI; SetBuffers(SCREEN, RENDER ,0); xpush=-48;ypush=34; /* set the palette */ SetRGB(pal); // Ceci sert à changer la palette de la Lynx (16 couleurs). //DrawFBox(0,0,160,102,0); //extern char fondlvl[]; // image fond level, d'une taille de 32*102; //extern char gameover[]; // image game over, d'une taille de 20*32; //extern char ipause[]; // image pause, d'une taille de 13*43; SCBX(SCB) = 0; SCBY(SCB) = 0; SCBDATA(SCB) = fond1; // 1er sprite chainé (fond intro + fond jeu + shiplayer moteur + shiplayer coque + rocher1 + rocher2 + vilainrhume + pushup + jauge) SCBX(SCBl) = 0; SCBY(SCBl) = 0; SCBDATA(SCBl) = fond1; SCBNEXT(SCBl) = SCBgsf1; // chainage de sprite 2ème image fond SCBX(SCBgsf1) = 0; SCBY(SCBgsf1) = -102; SCBDATA(SCBgsf1) = fond2; SCBNEXT(SCBgsf1) = SCBgsf2; // chainage de sprite 2ème image fond SCBX(SCBgsf2) = 32; SCBY(SCBgsf2) = -102; SCBDATA(SCBgsf2) = fond2; SCBNEXT(SCBgsf2) = SCBgsf3; // chainage de sprite 3ème image fond SCBX(SCBgsf3) = 64; SCBY(SCBgsf3) = -102; SCBDATA(SCBgsf3) = fond2; SCBNEXT(SCBgsf3) = SCBgsf4; // chainage de sprite 4ème image fond SCBX(SCBgsf4) = 96; SCBY(SCBgsf4) = -102; SCBDATA(SCBgsf4) = fond2; SCBNEXT(SCBgsf4) = SCBgsf5; // chainage de sprite 5ème image fond SCBX(SCBgsf5) = 128; SCBY(SCBgsf5) = -102; SCBDATA(SCBgsf5) = fond2; SCBNEXT(SCBgsf5) = SCBgsf6; // chainage de sprite 6ème image fond SCBX(SCBgsf6) = 160; SCBY(SCBgsf6) = -102; SCBDATA(SCBgsf6) = fond2; SCBNEXT(SCBgsf6) = SCBsprite1; // chainage du moteur à élice du shiplayer SCBX(SCBsprite1) = 0; SCBY(SCBsprite1) = -200; SCBDATA(SCBsprite1) = sprtab[t%6]; SCBNEXT(SCBsprite1) = SCBsprite2; // chainage de la coque du shiplayer SCBX(SCBsprite2) = 0; SCBY(SCBsprite2) = -200; SCBDATA(SCBsprite2) = sprite2; SCBNEXT(SCBsprite2) = SCBroch; // chainage de sprite rocher 1 SCBX(SCBroch) = 0; SCBY(SCBroch) = -200; SCBDATA(SCBroch) = rochtab[0%18];//roch;//rochtab[0%18]; SCBNEXT(SCBroch) = SCBroch2; // chainage de sprite rocher 2 SCBX(SCBroch2) = 0; SCBY(SCBroch2) = -200; SCBDATA(SCBroch2) = rochtab[0%18];//roch;//rochtab[0%18]; SCBNEXT(SCBroch2) = SCBrhume; // chainage de sprite vilainrhume SCBX(SCBrhume) = 32; SCBY(SCBrhume) = 0; SCBDATA(SCBrhume) = rhume; SCBNEXT(SCBrhume) = SCBp; // chainage de sprite info commande SCBX(SCBp) = xpush; SCBY(SCBp) = ypush; SCBDATA(SCBp) = pushup; SCBNEXT(SCBp) = SCBjauge; // chainage du sprite jauge SCBX(SCBjauge) = 0;SCBY(SCBjauge) = -200; // coordonnées X et Y de la jauge SCBDATA(SCBjauge) = jauge; SCBNEXT(SCBjauge) = SCBscore1; // chainage score unité SCBX(SCBscore1) = 4;SCBY(SCBscore1) = -200; SCBDATA(SCBscore1) = chiffrestab[0%14]; // SCBNEXT(SCBscore1) = SCBscore2; // chainage score dizaine SCBX(SCBscore2) = 4;SCBY(SCBscore2) = -200; SCBDATA(SCBscore2) = chiffrestab[0%14]; // SCBNEXT(SCBscore2) = SCBscore3; // chainage score centaine SCBX(SCBscore3) = 4;SCBY(SCBscore3) = -200; SCBDATA(SCBscore3) = chiffrestab[0%14]; // // 2ème sprite chainé (test) SCBX(SCBchiffres1) = 0; SCBY(SCBchiffres1) = 0; //SCBDATA(SCBchiffres1) = chiffres; SCBNEXT(SCBchiffres1) = SCBchiffres2; // chainage de sprite SCBX(SCBchiffres2) = 0; SCBY(SCBchiffres2) = 0; //SCBDATA(SCBchiffres2) = chiffres; SCBNEXT(SCBchiffres2) = SCBchiffres3; // chainage de sprite SCBX(SCBchiffres3) = 0; SCBY(SCBchiffres3) = 0; //SCBDATA(SCBchiffres3) = chiffres; // coordonnées X et Y des chiffres et des lettres : // SCBX(SCBchiffres) = 0; // SCBY(SCBchiffres) = 0; // SCBDATA(SCBchiffres) = chiffres; // posx = -40; // posy = -39; xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160; elvl=0; /************************************************************************** ** BOUCLE PRINCIPALE ** **************************************************************************/ for(;;) // boucle principale { update_music(); // petite subtilité de la gestion sonore /* // test affichage nombre de sprite: if (joystick & (BUTTON_RIGHT)) nodecor=1;//{nodecor=1;DrawFBox(0,0,160,102,0);} if (joystick & (BUTTON_LEFT)) nodecor=0; if (joystick & BUTTON_OPTION1) // test sonore { if (atest==0){ ++atest; silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); } } */ // ********************************************************************************************* if (etape==0) // écran titre { SCBX(SCBp) = xpush;SCBY(SCBp) = ypush; DrawSprite(SCBl); // Affichage sprites chainés (fond intro + fond jeu + shiplayer moteur + shiplayer coque + rocher1 + rocher2 + vilainrhume + pushup) // SCBDATA(SCBchiffres1) = chiffrestab[0%12]; // 0 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 20; // DrawSprite(SCBchiffres1); Fchiffres(2,20,0); // 0 // SCBDATA(SCBchiffres1) = chiffrestab[10%12]; // . // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 25; // DrawSprite(SCBchiffres1); Fchiffres(2,25,10); //. // SCBDATA(SCBchiffres1) = chiffrestab[4%12]; // 4 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 30; // DrawSprite(SCBchiffres1); Fchiffres(2,30,5); //5 // SCBDATA(SCBchiffres1) = chiffrestab[2%12]; // 2 // SCBX(SCBchiffres1) = 2; // SCBY(SCBchiffres1) = 35; // DrawSprite(SCBchiffres1); // Fchiffres(2,35,2); //2 Fchiffres(88,75,2); // 2 Fchiffres(88,79,0); // 0 Fchiffres(88,83,1); // 1 Fchiffres(88,87,0); // 0 if (xpush<8) xpush=xpush+2; if (xpush>7)//(tempa>24 & etape==0) // petite teporisation avant d'autoriser le joueur de recommencer le jeu. { xpush=7; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=200; if (joystick & JOY_RIGHT) { level=1;//3;//1; tempa=0;xpush=-48;ypush=34;xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; etape=1; energ=10;score=0;drap1=0; // drap1 agit sur l'affichage du score. goship=0; posx=-40; posy=39;gslife=3; govil=0;goroch=0;tyroch=0;chroch=0; SCBDATA(SCB) = fondlvl; // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); SCBY(SCBl) = -200; // fond intro mis hors de l'écran // // bruitage panne sèche : // silence(); // abcmusic(3,abcpanne); } } } // ********************************************************************************************* if (etape==1 | etape==8 | etape==9) // écran level OU ecran perd une vie/game over { if (elvl<4) DrawFBox(0,0,160,102,0); SCBDATA(SCB) = fondlvl; for (compteur = 0 ; compteur < 5 ; compteur++) // de 0 à 4, ce qui fait 5. Grâce à la boucle for... { //SCBX(SCB) = compteur*32; // ...on incrémente la position X de chaque nouvelle image... //SCBX(SCB) = (compteur*32)+xlvl; // ...on incrémente la position X de chaque nouvelle image... // if (compteur==elvl) // { // xlvl=xlvl-4; // if (xlvl<1+(elvl*32)) {xlvl=0+(elvl*32);++elvl;} // SCBX(SCB) = (compteur*32)+xlvl; // if (compteur!=elvl) {xlvl=160;} // } // bruitage boum : if (compteur==0) { if (elvl==0) { xlvla=xlvla-8; if (xlvla<1) {xlvla=0;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvla; } if (compteur==1) { if (elvl==1) { xlvlb=xlvlb-8; if (xlvlb<33) {xlvlb=32;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvlb; } if (compteur==2) { if (elvl==2) { xlvlc=xlvlc-8; if (xlvlc<65) {xlvlc=64;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvlc; } if (compteur==3) { if (elvl==3) { xlvld=xlvld-8; if (xlvld<97) {xlvld=96;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvld; } if (compteur==4) { if (elvl==4) { xlvle=xlvle-8; if (xlvle<127) {xlvle=128;++elvl;silence();abcmusic(2,abcbric);} } SCBX(SCB) = xlvle; } SCBY(SCB) =0; DrawSprite(SCB); // ... et ainsi on affiche fondlvl 5 fois la même image (taille: 32*102) l'une àprès l'autre, à un intervalle de 32. } } // ********************************************************************************************* if (etape==1) { if (level>4) level=1; // temporaire SCBX(SCBp) = xpush;SCBY(SCBp) = ypush; DrawSprite(SCBl); // Affichage sprites chainés (fond intro + fond jeu + shiplayer moteur + shiplayer coque + rocher1 + rocher2 + vilainrhume + pushup) // SCBDATA(SCBchiffres) = chiffrestab[11%12]; // L // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44; // DrawSprite(SCBchiffres); Fchiffres(118,44,11); // SCBDATA(SCBchiffres) = chiffrestab[10%12]; // - // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44+5; // DrawSprite(SCBchiffres); Fchiffres(118,49,10); // SCBDATA(SCBchiffres) = chiffrestab[level%12]; // 1 // SCBX(SCBchiffres) = 93; // SCBY(SCBchiffres) = 44+10; // DrawSprite(SCBchiffres); Fchiffres(118,57,level); Fchiffres(86,57,gslife); // nbre de vie SCBDATA(SCBrhume) = rhumetab[5%7]; // coeur SCBX(SCBrhume) = 82; SCBY(SCBrhume) = 39; DrawSprite(SCBrhume); // if (tempa<80) ++tempa; // durée de l'écran de présentation : level et nbre de life // if (tempa>79) // { // SCBDATA(SCB) = pushup; // SCBX(SCB) = xpush;//48; // SCBY(SCB) = ypush; // DrawSprite(SCB); if (xpush<8 & elvl==5) xpush=xpush+2; if (xpush>7) { xpush=8; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=200; // SCBX(SCBroch) = 20; // SCBY(SCBroch) = 39; // SCBDATA(SCBroch) = rochtab[18%18]; // DrawSprite(SCBroch); // Affichage sprites chainés (rocher + rhume) ++gshas; if (gshas==3) gshas=1; // 1 ou 2 //if (joystick & (BUTTON_LEFT)) if (joystick & JOY_RIGHT) { gshat=1; // hasard "aidé" SCBX(SCBroch) = 200; tempa=0;xpush=-48;ypush=34;SCBX(SCBp) = xpush;etape=2;drap1=1; SCBX(SCBjauge) = 55;SCBY(SCBjauge) = 4; xlvla=160;xlvlb=160;xlvlc=160;xlvld=160;xlvle=160;elvl=0; govil=0; eroch=0;goroch=0;eroch2=0;goroch2=0; rochx=180;SCBX(SCBroch) = rochx; roch2x=180;SCBX(SCBroch2) = roch2x; boumgb=0;SCBX(SCBrhume) = -100; SCBY(SCBgsf1) = 0;SCBY(SCBgsf2) = 0;SCBY(SCBgsf3) = 0;SCBY(SCBgsf4) = 0;SCBY(SCBgsf5) = 0;SCBY(SCBgsf6) = 0; // level 1 : virus lent ; petit rocher lent // level 2 : virus rapide ; petit rocher lent ; gros rocher lent // level 3 : virus rapide ; petit rocher rapide ; gros rocher rapide // level 4 : virus rapide*2 ; petit rocher rapide ; gros rocher rapide // level 5 : virus rapide*2 ; petit rocher rapide *2; gros rocher rapide *2 // level 6 : virus rapide*3 ; petit rocher rapide *2; gros rocher rapide *2 // level 7 : virus rapide*3 ; petit rocher rapide *3; gros rocher rapide *3 // level 1,2,3,4,5 et 6: virus --> govil>31 // level 7 : virus lent ; petit rocher lent // level 8 : virus lent ; petit rocher lent ; gros rocher lent // level 9 : virus rapide ; petit rocher lent ; gros rocher lent // level 10 : virus rapide ; petit rocher rapide ; gros rocher rapide // level 11 : virus rapide ; petit rocher rapide *2; gros rocher rapide *2 // level 12 : virus rapide ; petit rocher rapide *4; gros rocher rapide *4 // level 7,8,9,10,11 et 12: virus --> govil>93 if (level>0 & level<8) {tgovil=32;} // vitesse de sortie des virus if (level>7 & level<11) {tgovil=96;} speedvil=0; // vitesse de déplacement des virus // if (level==1) speedvil=1; // if (level==2 | level==3) speedvil=2; // if (level==4 | level==5) speedvil=3; // if (level==6 | level==7) speedvil=4; //if (level==1) speedvil=1; if (level==1 | level==2 | level==3 | level==4) speedvil=1; //if (level==5) speedvil=1; if (level==6 | level==7 | level==8 | level==9) speedvil=0; //if (level==10) speedvil=1; //if (level==6 | level==7) speedvil=1; //speedvil=1; // vitesse des rochers : vroch=1; if (level==1) {eroch2=-1;} // interdit le 2ème rocher pour le 1er niveau if (level==3 | level==4) vroch=2; // //if (level==3) vroch=1,5; // //if (level==4) vroch=2; // //if (level==5 | level==6) vroch=3;// trop rapide //if (level==7) vroch=4;// trop rapide SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100; tyroch=0;chroch=0; if (level>1) tyroch=1; SCBHS(SCBroch2) = 0x100;SCBVS(SCBroch2) = 0x100; tyroch2=0;chroch2=0; if (level>2) tyroch2=1; if (level==1 | level==6) { SCBDATA(SCBgsf1) = fond2; SCBDATA(SCBgsf2) = fond2; SCBDATA(SCBgsf3) = fond2; SCBDATA(SCBgsf4) = fond2; SCBDATA(SCBgsf5) = fond2; SCBDATA(SCBgsf6) = fond2; } if (level==2 | level==7) { SCBDATA(SCBgsf1) = fond3; SCBDATA(SCBgsf2) = fond3; SCBDATA(SCBgsf3) = fond3; SCBDATA(SCBgsf4) = fond3; SCBDATA(SCBgsf5) = fond3; SCBDATA(SCBgsf6) = fond3; } if (level==3 | level==8) { SCBDATA(SCBgsf1) = fond2; SCBDATA(SCBgsf2) = fond2; SCBDATA(SCBgsf3) = fond2; SCBDATA(SCBgsf4) = fond2; SCBDATA(SCBgsf5) = fond2; SCBDATA(SCBgsf6) = fond2; } if (level==4 | level==9) { SCBDATA(SCBgsf1) = fond3; SCBDATA(SCBgsf2) = fond3; SCBDATA(SCBgsf3) = fond3; SCBDATA(SCBgsf4) = fond3; SCBDATA(SCBgsf5) = fond3; SCBDATA(SCBgsf6) = fond3; } // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); } } } // ********************************************************************************************* // Affichage de 4 images pour le décors, les 2 images du shiplayer, la jauge et les 2 images du score. if (etape==2) { ++gsblip; // economie ressource machine --> certaines des conditions n'ont pas besoin d'être lu par la LYNX à chaque boucle. if (gsblip==5) { gsblip=1; if (switches & BUTTON_PAUSE) { if (gspause==0) {gspause=1;silence();abcmusic(0,abcaptvir);} } if (!(switches & BUTTON_PAUSE)) { if (gspause==1) gspause=2; } if (switches & BUTTON_PAUSE) { if (gspause==2) gspause=3; } if (!(switches & BUTTON_PAUSE)) { if (gspause==3) gspause=0; } } // ********* decor : //scrollx=2 if (gspause==0) scrollx=2; // vitesse de défilement du décor if (gspause>0) { scrollx=0; // vitesse de défilement du décor }
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

41

source 2eme partie:
/*************************************************************************** ** Problème de ralentissement au bout de 20 secondes de jeu : ** ** problème résolu en chainant les sprites. ** ***************************************************************************/ if (SCBX(SCBgsf1)<=-32) { SCBX(SCBgsf1) = 0; SCBX(SCBgsf2) = 32; SCBX(SCBgsf3) = 64; SCBX(SCBgsf4) = 96; SCBX(SCBgsf5) = 128; SCBX(SCBgsf6) = 160; if (nbrnexu==0) { ++nbrnext ; if (nbrnexu==0) { if (stopm==0 & boumgb==0 & gspause==0) { if (nbrnext>(60*level)) // longueur d'un level //if (nbrnext>30) // longueur d'un level { nbrnexu=1; } } } } } SCBX(SCBgsf1)=SCBX(SCBgsf1)-scrollx; SCBX(SCBgsf2)=SCBX(SCBgsf2)-scrollx; SCBX(SCBgsf3)=SCBX(SCBgsf3)-scrollx; SCBX(SCBgsf4)=SCBX(SCBgsf4)-scrollx; SCBX(SCBgsf5)=SCBX(SCBgsf5)-scrollx; SCBX(SCBgsf6)=SCBX(SCBgsf6)-scrollx; // ********* affichage du score : unite = score % 10; dizaine = score / 10 % 10; centaine = score / 100 % 10; // unité: SCBDATA(SCBscore1) = chiffrestab[unite%12]; SCBX(SCBscore1) = 150;SCBY(SCBscore1) = 53; // dizaine: SCBDATA(SCBscore2) = chiffrestab[dizaine%12]; SCBX(SCBscore2) = 150;SCBY(SCBscore2) = 53-4; // centaine: SCBDATA(SCBscore3) = chiffrestab[centaine%12]; // 0 SCBX(SCBscore3) = 150;SCBY(SCBscore3) = 53-8; // ********* shiplayer : if (gspause==0) { if (nbrnexu==2) { ++posx; // le shiplayer quitte le niveau en automatique if (posx>160) {nbrnexu=3;} } if (goship==0 & posx<20) { if (bruitm==0 & posx>0) { bruitm=1; // bruitage moteur shiplayer rentree sortie : silence(); abcmusic(3,abces); } posx=posx+1; if (posx>=20) {posx=20; goship=1; bruitm=0;} } if (goship==1 & stopm==0 & nbrnexu<2) { if (joystick & JOY_RIGHT) posx++; // direction Droite if (posx>120) posx=120; if (joystick & JOY_LEFT) posx--; // direction Gauche if (posx<2) posx=2; if (joystick & JOY_UP) posy--; // direction Haut if (posy<-2) posy=-2; if (joystick & JOY_DOWN) posy++; // direction Bas if (posy>80) posy=80; } // sprite 1 du shiplayer: moteur à hélice (6 images d'une taille de 8*22 chacunes) SCBX(SCBsprite1) = posx; SCBY(SCBsprite1) = posy; ++tempa; // vitesse animation de l'hélice if (tempa>=3+stopm) { tempa=0; ++t; if (stopm>0 & stopm<32) ++stopm; // Arrêt progressif du moteur à hélice... } if (stopm>1) // ...et le shiplayer sort progressivement de l'écran. { ++tempe; if (tempe>=4) {tempe=0;--posx;++outship;} // } // clip du sprite 1 if (t>=5) t=0; } SCBDATA(SCBsprite1) = sprtab[t%6]; // rappel: Le sprite 2 (coque) est lié au sprite 1 (hélice). SCBX(SCBsprite2) = posx+8; SCBY(SCBsprite2) = posy-1; //DrawSprite(SCBsprite1); DrawSprite(SCBl); // Affichage sprites chainés (décor + shiplayer) if (gspause==0) { ++temparoch; // animation des rochers if (temparoch>5) { temparoch=0;++aroch; if (aroch>15) aroch=0; } SCBDATA(SCBroch) = rochtab[aroch%18]; SCBX(SCBroch) = rochx; SCBY(SCBroch) = rochy; SCBDATA(SCBroch2) = rochtab[aroch%18]; SCBX(SCBroch2) = roch2x; SCBY(SCBroch2) = roch2y; // ********* rocher 1 : if (eroch==0 & nbrnexu==0) { rochx=180; if (goroch<32) ++goroch; // petite temporisation avant apparition du 1er rocher if (goship==1 & goroch>31 & stopm==0) { rasam=rasa; rasa=random()%4; // de 0 à 3 if (rasa==rasam) // Si le même nombre sort 2 fois de suite, alors... { rasar=random()%2; // de 0 à 1 if (rasar==0) ++rasa; if (rasar==1) --rasa; } if (rasa>3) rasa=0; if (rasa<0) rasa=3; if (gshat==1) // hasard "aidé" { //++atest; gshat=0; if (rasa>1) rasa=rasa-gshas; if (rasa<2) rasa=rasa+gshas; if (rasa>3) rasa=0; if (rasa<0) rasa=3; } if (tyroch==0) rochy=rasa*24; if (tyroch==1) { ++chroch; if (chroch==3) chroch=1; if (chroch==1) {SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100;} if (chroch==2) {SCBHS(SCBroch) = 0x150;SCBVS(SCBroch) = 0x150;} if (rasa==3 & chroch==2) rasa=0; rochy=rasa*34; } eroch=1;rochx=180;temprochx=0;rochy=rochy+3; // Taille rocher1: 24*24 ; objectif : // 4 positions de départ Y pour le rocher : rochy = 3 ou 27 ou 51 ou 75 // espacement de 3 lignes en haut et en bas : 3 et 99 (75 + 24 (nbre de ligne du rocher1)) } } if (eroch==1) { rochx=rochx-vroch; if (rochx<-36) {eroch=0;rochx=180;SCBX(SCBroch) = rochx;} // si rocher1 sort de l'écran, alors remise à 0 de sa création. // collision rocher1/shiplayer !!! if (gsblip==1 & stopm==0) { if (rochy+12>posy-4 & rochy+12<posy+28) // test colision rocher 24*24 { if (rochx+12>posx & rochx+12<posx+40) { eroch=0;goroch=0;rochx=180; boumgb=1;aaroch=16; stopm=1;energ=0;SCBY(SCBjauge) = -200; // panne sèche: arrêt du moteur à hélice } } if (eroch==1 & chroch==2 & rochy+24>posy-4 & rochy+24<posy+28) // test colision rocher 36*36 { if (rochx+24>posx & rochx+24<posx+40) { eroch=0;goroch=0;rochx=180; boumgb=1;aaroch=16; stopm=1;energ=0;SCBY(SCBjauge) = -200; // panne sèche: arrêt du moteur à hélice } } } } // ********* rocher 2 : if (eroch2==0 & nbrnexu==0) { roch2x=180; // if (goroch2<128-(gshas*8)) ++goroch2; // petite temporisation avant apparition du 1er rocher // if (goship==1 & goroch2>127-(gshas*8) & stopm==0) // vroch=1; // if (level==3 | level==4) vroch=2; // if (level==5 | level==6) vroch=3; // if (level==7) vroch=4;// trop rapide if (goroch2<32+(216-(vroch*72))) ++goroch2; // petite temporisation avant apparition du 1er rocher if (goship==1 & goroch2>31+(215-(vroch*72)) & stopm==0) { rbsam=rbsa; rbsa=random()%4; // de 0 à 3 if (rbsa==rbsam) // Si le même nombre sort 2 fois de suite, alors... { rbsar=random()%2; // de 0 à 1 if (rbsar==0) ++rbsa; if (rbsar==1) --rbsa; } if (rbsa>3) rbsa=0; if (rbsa<0) rbsa=3; //rasa=3; //atest=rasa; //atest=rbsa; if (rbsa==rasa) //(rbsa==3)//atest) //(atest==rasa)//(atest==0) si le même que le rocher 1, alors... { // rbsa=1; // ++atest; //rbsa=1; rbsar=random()%2; // de 0 à 1 if (rbsar==0) ++rbsa; if (rbsar==1) --rbsa; if (rbsa>3) rbsa=0; if (rbsa<0) rbsa=3; } if (tyroch2==0) roch2y=rbsa*24; if (tyroch2==1) { ++chroch2; if (chroch2==3) chroch2=1; if (chroch2==1) {SCBHS(SCBroch2) = 0x100;SCBVS(SCBroch2) = 0x100;} if (chroch2==2) {SCBHS(SCBroch2) = 0x150;SCBVS(SCBroch2) = 0x150;} if (rbsa==3 & chroch2==2) rbsa=0; roch2y=rbsa*34; } eroch2=1;roch2x=180;temprochx2=0;roch2y=roch2y+3; // Taille rocher1: 24*24 ; objectif : // 4 positions de départ Y pour le rocher : rochy = 3 ou 27 ou 51 ou 75 // espacement de 3 lignes en haut et en bas : 3 et 99 (75 + 24 (nbre de ligne du rocher1)) } } if (eroch2==1) { roch2x=roch2x-vroch; if (roch2x<-36) {eroch2=0;roch2x=180;SCBX(SCBroch2) = roch2x;} // si rocher1 sort de l'écran, alors remise à 0 de sa création. // collision rocher2/shiplayer !!! if (gsblip==3 & stopm==0) { if (roch2y+12>posy-4 & roch2y+12<posy+28) // test colision rocher 24*24 { if (roch2x+12>posx & roch2x+12<posx+40) { eroch2=0;goroch2=0;roch2x=180; boumgb=1;aaroch=16; stopm=1;energ=0;SCBY(SCBjauge) = -200; // panne sèche: arrêt du moteur à hélice } } if (eroch2==1 & chroch2==2 & roch2y+24>posy-4 & roch2y+24<posy+28) // test colision rocher 36*36 { if (roch2x+24>posx & roch2x+24<posx+40) { eroch2=0;goroch2=0;roch2x=180; boumgb=1;aaroch=16; stopm=1;energ=0;SCBY(SCBjauge) = -200; // panne sèche: arrêt du moteur à hélice } } } } // if (eroch>0) // affichage // { // SCBDATA(SCBroch) = rochtab[aroch%18]; // SCBX(SCBroch) = rochx; // SCBY(SCBroch) = rochy; //DrawSprite(SCBroch); // } // test3: //SCBDATA(SCBchiffres) = chiffrestab[10%12]; //SCBX(SCBchiffres) = rochx+12; //SCBY(SCBchiffres) = rochy+12; //DrawSprite(SCBchiffres); // fin test3 // ********* rhume (vilain 1) : if (vil==0 & goship==1) { if (govil<tgovil) //32 { vilx=160;++govil; // petite temporisation avant l'attaque virale } //if (govil==tgovil & stopm==0 & nbrnexu==0) //31 if (stopm==0 & nbrnexu==0) //31 { vilx=160; hasam=hasa; hasa=random()%6; // de 0 à 5 // if (hasa==hasam) ++hasa; // if (hasa>5) hasa=0; if (hasa==hasam | hasa==rasam) // Si le même nombre sort 2 fois de suite, alors... { hasar=random()%2; // de 0 à 1 if (hasar==0) ++hasa; if (hasar==1) --hasa; } if (hasa>5) hasa=0; if (hasa<0) hasa=5; vil=1;vilx=160;tempvilx=0;vily=hasa*16;vily=vily+3;avil=0;tempavil=0; // Taille vilain1: 16*16 ; objectif : // 6 positions de départ Y pour le vilain1 : vily = 3 ou 19 ou 35 ou 51 ou 67 ou 83 // espacement de 3 lignes en haut et en bas : 3 et 99 (83 + 16 (nbre de ligne du vilain1)) } } // // test1: // SCBDATA(SCBchiffres) = chiffrestab[10%12]; // SCBX(SCBchiffres) = posx+30; // SCBY(SCBchiffres) = posy+9; // DrawSprite(SCBchiffres); // SCBX(SCBchiffres) = posx+30; // SCBY(SCBchiffres) = posy+12; // DrawSprite(SCBchiffres); // SCBX(SCBchiffres) = posx+40; // SCBY(SCBchiffres) = posy+9; // DrawSprite(SCBchiffres); // SCBX(SCBchiffres) = posx+40; // SCBY(SCBchiffres) = posy+12; // DrawSprite(SCBchiffres); // fin test1 if (vil==1) { ++tempvilx; // vitesse du vilain 1 en fonction du niveau. if (tempvilx>speedvil) { tempvilx=0;--vilx; } // vilx=vilx-speedvil; // if (level==2 & tempvilx>0) // { // tempvilx=0;--vilx; // } ++tempavil; // animation du vilain 1 /*************************************************************************** ** Les conditions suivantes ralentissent le jeu ! Alors j'opte pour une ** ** seule condition... il faut limiter le nbre de condition. ***************************************************************************/ // if (tempavil==41) tempavil=1; // if (tempavil>0 & tempavil<11) avil=0; // 1 à 10 // if (tempavil>10 & tempavil<21) avil=1; // 11 à 20 // if (tempavil>20 & tempavil<31) avil=2; // 21 à 30 // if (tempavil>30 & tempavil<41) avil=1; // 31 à 40 if (tempavil>10) { tempavil=0;++avil; if (avil>2) avil=0; } // SCBDATA(SCBrhume) = rhumetab[avil%7]; // SCBX(SCBrhume) = vilx; // SCBY(SCBrhume) = vily; // DrawSprite(SCBrhume); if (vilx<-16) {vil=0;govil=0;} // si vilain1 sort de l'écran, alors remise à 0 de sa création. // test2: // SCBX(SCBchiffres) = vilx; // SCBY(SCBchiffres) = vily+8; // DrawSprite(SCBchiffres); // fin test2 // capture du vilain1 !!! // atest=0; // if (vily+8>posy+9 & vily+8<posy+12) atest=1; // if (vily+6>posy+7 & vily+8<posy+16) atest=1; if (stopm==0) { if (vily+8>posy+7 & vily+8<posy+16) { if (vilx>posx+30 & vilx<posx+40) { // atest=1; vil=2;avil=3;tempavil=0; // bruitage capture virus : silence(); abcmusic(0,abcaptvir); } } } // vily // posx // posy } if (vil==2) // virus capturé le nanoship ! { // avil=3; vily=posy+3;vilx=posx+38; tempd=0; // ici, on stoppe temporairement la jauge. if (tempavil<31) ++tempavil; // animation du vilain 1 if (tempavil>0 & tempavil<11) avil=4; // 1 à 10 if (tempavil>10 & tempavil<21) avil=3; // 11 à 20 if (tempavil>20 & tempavil<31) avil=4; // 21 à 30 if (tempavil==31 | boumgb>0) { tempavil=0;vil=0;govil=0; vilx=160;SCBX(SCBrhume) = vilx; if (boumgb==0) { energ=energ+4;++score; if (energ>10) energ=10; } // --energ; // if (energ<1) energ=10; } } if (vil>0) // affichage { SCBDATA(SCBrhume) = rhumetab[avil%7]; SCBX(SCBrhume) = vilx; SCBY(SCBrhume) = vily; // DrawSprite(SCBrhume); } } // if (gspause==0) // DrawSprite(SCBroch); // Affichage sprites chainés (rocher + rhume) // ********* jauge d'énergie du shiplayer: if (gsblip==2) { if (energ>0 & gspause==0 & nbrnexu==0) // Si le shiplayer a encore de l'énergie, alors... { ++tempd; // ...incremente une petite tempo if (tempd>11) // 59 { tempd=0;--energ; if (energ==0) { stopm=1; // panne sèche: arrêt du moteur à hélice SCBY(SCBjauge) = -200; // mettre image jauge hors de l'écran. // bruitage panne sèche : silence(); abcmusic(3,abcpanne); } } } //energ=1; if (energ>0 & gspause==0) { --energ; // energ de 1 à 10 --> mais de 0 à 9 pour le n° image SCBDATA(SCBjauge) = jaugetab[energ%10]; SCBX(SCBjauge) = 55;SCBY(SCBjauge) = 4; ++energ; } } //DrawSprite(SCBjauge); // Affichage sprites (jauge ) if (stopm>0 & gspause==0) { if (boumgb>0) // explosion du shiplayer { ++aaroch; if (aaroch==18) { aaroch=16;nbboum++; // nombre de boum ++scboom; if (scboom>4) { scboom=1; // bruitage boum : silence(); abcmusic(1,abcboum); } } SCBDATA(SCBroch) = rochtab[aaroch%18]; if (scboom==1) { SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100; SCBX(SCBroch) = posx+10;SCBY(SCBroch) = posy-1; } if (scboom==2 | scboom==4) { SCBHS(SCBroch) = 0x140;SCBVS(SCBroch) = 0x140; SCBX(SCBroch) = posx+6;SCBY(SCBroch) = posy-4; } if (scboom==3) { SCBHS(SCBroch) = 0x180;SCBVS(SCBroch) = 0x180; SCBX(SCBroch) = posx+2;SCBY(SCBroch) = posy-7; } //DrawSprite(SCBroch); // Affichage sprites chainés (rocher + rhume) SCBHS(SCBroch) = 0x100;SCBVS(SCBroch) = 0x100; } // | cette barre verticale veut dire OR/OU en langage C if (nbboum>31 | outship>47) // outship voir plus haut (pour faire une recherche, appuyez sur Ctrl + F) { SCBX(SCBroch) = 200;SCBX(SCBroch2) = 200; // mettre image rocher et virus hors de l'écran. nbboum=0;scboom=0;outship=0; --gslife; // perd un ship... stopm=0;etape=1;tempa=0;energ=10;goship=0;posx=-40;posy=39;boumgb=0;aaroch=0; govil=0;vil=0;vilx=0;tempvilx=0;vily=0;avil=0;tempavil=0; hasa=0;hasam=0;hasar=0; goroch=0;eroch=0;rochx=0;rochy=0; goroch2=0;eroch2=0;roch2x=0;roch2y=0; temprochx=0;aroch=0;temparoch=0; rasa=0;rasam=0;rasar=0; rbsa=0;rbsam=0;rbsar=0; nbrnexu=0;nbrnext=0; if (gslife>0) // ...mais s'il en reste encore, alors retour à l'étape 1. { etape=1; SCBY(SCBgsf1) = -200;SCBY(SCBgsf2) = -200;SCBY(SCBgsf3) = -200;SCBY(SCBgsf4) = -200;SCBY(SCBgsf5) = -200;SCBY(SCBgsf6) = -200; SCBY(SCBsprite1) = -200;SCBY(SCBsprite2) = -200;SCBY(SCBroch) = -200;SCBY(SCBroch2) = -200;SCBY(SCBrhume) = -200;SCBY(SCBjauge) = -200; } if (gslife<1) // ...mais s'il n'en plus, alors game over. { etape=8;tempa=0;xpush=-48;ypush=34; SCBY(SCBgsf1) = -200;SCBY(SCBgsf2) = -200;SCBY(SCBgsf3) = -200;SCBY(SCBgsf4) = -200;SCBY(SCBgsf5) = -200;SCBY(SCBgsf6) = -200; SCBY(SCBsprite1) = -200;SCBY(SCBsprite2) = -200;SCBY(SCBroch) = -200;SCBY(SCBroch2) = -200;SCBY(SCBrhume) = -200;SCBY(SCBjauge) = -200; } } } // ********* passage au prochein niveau if (nbrnexu>0 & boumgb==0) { if (nbrnexu==1 & vil<1 & eroch<1 & eroch2<1) { nbrnexu=2; // joueur n'a plus le contrôle du shiplayer // bruitage moteur shiplayer rentree sortie : silence(); abcmusic(3,abces); } if (nbrnexu==3) // passage au level suivant { SCBX(SCBroch) = 200;SCBX(SCBroch2) = 200; // mettre image rocher et virus hors de l'écran. //nbboum=0;outship=0; //--gslife; // perd un ship... stopm=0;tempa=0;energ=10;goship=0;posx=-40;posy=39;boumgb=0;aaroch=0; govil=0;vil=0;vilx=0;tempvilx=0;vily=0;avil=0;tempavil=0; hasa=0;hasam=0;hasar=0; goroch=0;eroch=0;rochx=0;rochy=0; goroch2=0;eroch2=0;roch2x=0;roch2y=0; temprochx=0;aroch=0;temparoch=0; rasa=0;rasam=0;rasar=0; rbsa=0;rbsam=0;rbsar=0; nbrnexu=0;nbrnext=0; etape=1;++level; SCBY(SCBgsf1) = -200;SCBY(SCBgsf2) = -200;SCBY(SCBgsf3) = -200;SCBY(SCBgsf4) = -200;SCBY(SCBgsf5) = -200;SCBY(SCBgsf6) = -200; SCBY(SCBsprite1) = -200;SCBY(SCBsprite2) = -200;SCBY(SCBroch) = -200;SCBY(SCBroch2) = -200;SCBY(SCBrhume) = -200;SCBY(SCBjauge) = -200; } } } // if (etape==2) // ********************************************************************************************* // if (etape==3) // { // } // ********************************************************************************************* if (etape>7) { SCBDATA(SCB) = gameover; SCBX(SCB) = 70; SCBY(SCB) = 34; DrawSprite(SCB); if (etape==9) { if (!(joystick & BUTTON_LEFT)) { etape=0; SCBY(SCBscore1) = -200;SCBY(SCBscore2) = -200;SCBY(SCBscore3) = -200; // score SCBX(SCBl) = 0;SCBY(SCBl) = 0; // coordonnées fond intro } } if (etape==8) // game over. { SCBX(SCBp) = xpush;SCBY(SCBp) = ypush; DrawSprite(SCBl); // Affichage sprites chainés (fond intro + fond jeu + shiplayer moteur + shiplayer coque + rocher1 + rocher2 + vilainrhume + pushup) //SCBDATA(SCB) = pushup; //SCBX(SCB) = xpush; //SCBY(SCB) = ypush; //DrawSprite(SCB); if (xpush<8 & elvl==5) xpush=xpush+2; if (xpush>7) { xpush=7; ++tempa; // bulle info clignote doucement if (tempa>63) tempa=1; if (tempa>0 & tempa<32) ypush=34; if (tempa>31) ypush=200; if (joystick & JOY_RIGHT) { tempa=0;xpush=-48;ypush=34; etape=9; // bruitage menu : silence(); abcmusic(0,abcmenu1); abcmusic(1,abcmenu2); } } } } // ********************************************************************************************* /*************************************************************************** ** Test (lignes suivantes a désactivées) ** ***************************************************************************/ /* //unite = gshas % 10; unite = nbrnexu % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 130; SCBY(SCBchiffres1) = 23; DrawSprite(SCBchiffres1); // Affichage valeur testé unite = rasa % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 130; SCBY(SCBchiffres1) = 53; DrawSprite(SCBchiffres1); // Affichage valeur testé //unite = rbsa % 10; //unite = roch2x % 10; //dizaine = roch2x / 10 % 10; //centaine = roch2x / 100 % 10; unite = goroch2 % 10; dizaine = goroch2 / 10 % 10; centaine = goroch2 / 100 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 120; SCBY(SCBchiffres1) = 53; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%12]; SCBX(SCBchiffres2) = 120; SCBY(SCBchiffres2) = 53-4; // centaine: SCBDATA(SCBchiffres3) = chiffrestab[centaine%12]; // 0 SCBX(SCBchiffres3) = 120; SCBY(SCBchiffres3) = 53-8; DrawSprite(SCBchiffres1); // Affichage valeur testé */ /*************************************************************************** ** Fin Test ** ***************************************************************************/ // ********************************************************************************************* //Fchiffres(8,92,etape); // test de variable (mais où est le debogueur ?) if (etape==2 & gspause>0) { SCBDATA(SCB) = ipause; SCBX(SCB) = 73; SCBY(SCB) = 30; DrawSprite(SCB); } /* unite = atest % 10; dizaine = atest / 10 % 10; // unité: SCBDATA(SCBchiffres1) = chiffrestab[unite%12]; SCBX(SCBchiffres1) = 100; SCBY(SCBchiffres1) = 53; // dizaine: SCBDATA(SCBchiffres2) = chiffrestab[dizaine%12]; SCBX(SCBchiffres2) = 100; SCBY(SCBchiffres2) = 53-4; DrawSprite(SCBchiffres1); // Affichage valeur testé */ Vsync(); SwapBuffers(); } /************************************************************************** ** FIN de la BOUCLE PRINCIPALE ** **************************************************************************/ }
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

42

Petit retour après la Ejagfest.

Unanimement, le jeu a été trouvé joli et bien ficelé par tous ceux qui l'ont essayé, mais trop dur. Effectivement, si on rate un virus, il faut vraiment aller le chercher en faut de l'écran. Et vu que les arrivées sont aléatoires, il suffit qu'il soit sur un rocher pour que le niveau soit perdu à quasi rien.
Autre truc, en attendant qu'un virus soit éloigné du rocher, si on est trop avancé, il n'est pas possible de le récupérer en reculant, mais c'est peut-être voulu.
avatar
De nouveaux jeux pour vos vieilles consoles ? En 2022 ?
https://yastuna-games.com

43

Merci pour le retour, c'est bien cool. smile
Bientôt la version 0.6 ^^


avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

44

beauregard (./43) :
Bientôt la version 0.6 ^^


top

Mon site sur la LYNX :ZoneLynx

45

version 0.6
tromb Fichier joint : globshoot_06.lnx

exe conservé indéfiniment:
http://www.mirari.fr/9uRR
Le code est maintenant très long, si quelqu'un souhaite que je le mette ici, qu'il se manifeste.

Dans les niveaux 1 et 2, on peut faire du scoring, alors qu'avec les niveaux 3 et 4, il faut surtout survivre ^^. Bon jeu !
boing



ps: avec l'émulateur mednafen, pour mettre l'écran à la verticale: touche F8
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

46

Petit retour ici aussi pour ta dernière mise à jour et comme pour Fission je ne me concentrerais que sur les 2 défauts majeurs que j'ai relevé :

1 Mon dieu que ça rame !!! Le premier niveau passe encore mais dés le deuxième c'est atroce sad

2 Heu la différence entre les niveaux 1/2 et 3/4 j'ai pas bien vu ???confus pour moi c'est toujours pareil il suffit d'attraper un certain nombre d'ennemis pour passer au niveau suivant non ?

Par contre la gestion de la pause miam

Mon site sur la LYNX :ZoneLynx

47

RYGAR (./46) :
Petit retour ici aussi pour ta dernière mise à jour et comme pour Fission je ne me concentrerais que sur les 2 défauts majeurs que j'ai relevé :

1 Mon dieu que ça rame !!! Le premier niveau passe encore mais dés le deuxième c'est atroce sad
merci pour le retour smile Un jeu qui rame, c'est effectivement atroce, car le joueur sort du jeu, pas glop. C'était déjà le cas pour les autres versions de Glob Shoot ?

RYGAR (./46) :
2 Heu la différence entre les niveaux 1/2 et 3/4 j'ai pas bien vu ???confus pour moi c'est toujours pareil il suffit d'attraper un certain nombre d'ennemis pour passer au niveau suivant non ?
si le jeu ralentis considérablement, forcément, ça va pas le faire. Mais la bonne nouvelle, c'est que je sais maintenant comment marche voff et hoff, la prochaine mise à jour devrait, je l'espère, régler le soucis (ou pas).

avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

48

beauregard (./47) :
la prochaine mise à jour devrait, je l'espère, réglera le soucis (ou pas).


top
Mon site sur la LYNX :ZoneLynx

49

Glob Shoot exe version 0.61 (tourne sans accroc via mednafen) : http://www.mirari.fr/RtPd

j'attend ton retour avec une impatience non dissimulé smile
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

50

Alors là on s'approche du tout bon top
La vitesse est constante et ce peut importe le nombre de sprites a l'écran ! En 20 minutes de test j'ai même pas réussi a finir le niveau 4 tellement les cailloux vont vite tongue (d'ailleurs a t'il seulement une fin ce niveau ou est ce juste faire le score maxi ?)

Par contre histoire de râler encore un peu, il y a une chose qui me dérange c'est que lorsque l'on recul la vitesse du vaisseau devient identique à celle du décor et cela donne une impression immobilité. Ne pourrais tu pas accélérer légèrement le scroling du décor pour éviter ce problème ?
Mon site sur la LYNX :ZoneLynx

51

Ultime version pour l'année 2010, la version 0.62 : http://www.mirari.fr/ECzH

Des niveaux moins longs, un défilement du décor 2 fois plus rapide, et chaque 20 points, une vie supplémentaire de gagné : une courte mélodie se fera alors entendre... smile

philippe
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

52

Mais c'est parfais !
Le scrolling est fluide et rapide c'est un vrai plaisir. C'est dingue comme tu es passé en peu de temps d'une version lente et avec des ralentissements à cette version ci, ça prouve que tu maitrises de mieux en mieux la programmation sur Lynx. top

Tu comptes encore modifier le jeu ou tu vas le laisser tel quel ?
Dans le 1er cas je brule une Eprom et je me fait une cartouche dans le second je te donnerais encore mon avis de joueur perpétuellement insatisfait tongue
Mon site sur la LYNX :ZoneLynx

53

RYGAR (./52) :
Mais c'est parfais !
Le scrolling est fluide et rapide c'est un vrai plaisir. C'est dingue comme tu es passé en peu de temps d'une version lente et avec des ralentissements à cette version ci, ça prouve que tu maitrises de mieux en mieux la programmation sur Lynx. top

Tu comptes encore modifier le jeu ou tu vas le laisser tel quel ?
Dans le 1er cas je brule une Eprom et je me fait une cartouche dans le second je te donnerais encore mon avis de joueur perpétuellement insatisfait tongue
Ouf, bon ben il vaut mieux ne plus toucher à rien, je pense que je vais le laisser comme ça, merci pour tes retours smile
Dis le moi si tu met une vidéo du jeu sur ta chaine Youtube.
http://www.youtube.com/user/zonelynx#g/u

@+
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx

54

beauregard (./53) :
Ouf, bon ben il vaut mieux ne plus toucher à rien, je pense que je vais le laisser comme ça


Alors il est temps de te lancer un énorme bravo ! Tu as réalisé en peu de temps un boulot énorme et un petit jeu complet et très bien fini.
Tu as un challenge, des scores, du son, des graphisme, ca bouge, c'est jolie... bref félicitation !

Dés que je refais faire une série de cartouches je m'en fait une de ton jeu c'est sur et pour la vidéo c'est prévu aussi dés que je l'aurais "cartouchifié"

(et dés que j'ai encore plus de temps faut vraiment que j'essaie d'étudier ton code car ça m'a l'air tellement simple et bien foutu que ça donne envie !!!!)
Mon site sur la LYNX :ZoneLynx

55

RYGAR (./54) :
pour la vidéo c'est prévu aussi dés que je l'aurais "cartouchifié"
merci beaucoup, j'ai bien hâte de montrer la vidéo à ma entourage smile
avatar
Travaux, concept of proof, divers :
Megadrive
topics/172-143753-moved-juju-densetsu
Lynx
sections/255-developpeurs-lynx