philip-lynxLe 28/11/2010 à 13:09
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
}