philip-lynxLe 28/11/2010 à 14:29
source, 1er partie:
/*
Fission (casse brique) 0.2 - 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 <stdlib.h>
#include <lynx.h>
#include <lynxlib.h>
//{
extern void silence();
extern void abcmusic();
extern void update_music();
char abcmusic0[];
char abcmusic1[];
char abcmusic2[];
char abcmusic3[];
char abcmenu1[];
char abcmenu2[];
char abcball1[];
char abcball2[];
char abcbric[];
char abcaptvir[];
char abcboum[];
char abcpanne[];
char abces[];
#asm
xref _abcmenu1
xref _abcmenu2
xref _abcball1
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
; ball :
_abcball1
dc.b "O4X3I1V70T20R32H2K1"
dc.b "|:C4"
_abcball2
dc.b "O4X3I1V70T20R32H2K1"
dc.b "|:D4"
_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 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);
char pali[]={
0x00,0x0F,0x02,0x03,0x0A,0x04,0x05,0x06,0x07,0x0B,0x08,0x09,0x04,0x0B,0x0C,0x01,
0x00,0xFF,0x22,0x33,0xAA,0x44,0x55,0x66,0x77,0x00,0x88,0x99,0x53,0xBB,0xCC,0x11};
char palg[]={
0x00,0x0F,0x0A,0x00,0x03,0x05,0x08,0x0A,0x0C,0x0E,0x0D,0x00,0x04,0x03,0x02,0x00,
0x00,0xFF,0xF0,0x0F,0x3F,0x5F,0x8F,0xAF,0xCF,0xEF,0x28,0xF8,0x53,0x63,0x52,0x21};
/*****************************************************************************
** Ci-dessous, le contenu du fichier batchfile pour l'image imole.bmp **
**
set image01=imole.bmp
SPRPCK -t6 -S072072 -r001001 -a036036 -p0 %image01%
cmd
**
** Le point d'action de l'image imole est mis au centre de celle-ci, **
** 72/2 = 36 (-a036036). Le but de la manoeuvre est de réaliser un zoom **
** correctement. **
*****************************************************************************/
extern char ipause[]; // image game over, d'une taille de 13*43;
extern char ititre[]; // image titre, d'une taille de 15*49;
extern char iname[]; // image nom/prénom de auteur, d'une taille de 93*9;
extern char imole[]; // image molecule, d'une taille de 72*72;
char SCB[];
#asm
_SCB 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 fondg[]; // image fond game, d'une taille de 160*102;
char SCBg[];
#asm
_SCBg 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 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 raquet[]; // image raquette, d'une taille de 8*24;
char SCBr[];
#asm
_SCBr 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 chiffres, chacun d'une taille de 8*8: 0123456789.LEV
extern char bc000000[];
extern char bc000001[];
extern char bc000002[];
extern char bc000003[];
extern char bc000004[];
extern char bc000005[];
extern char bc000006[];
extern char bc000007[];
extern char bc000008[];
extern char bc000009[];
extern char bc000010[];
extern char bc000011[];
extern char bc000012[];
extern char bc000013[];
char *chiffrestab[14] = {bc000000, bc000001, bc000002, bc000003, bc000004,
bc000005, bc000006, bc000007, bc000008, bc000009,
bc000010, bc000011, bc000012, bc000013};
char SCBchiffres1[]; // déclaration d'un nouveau controleur de sprite (test)
char SCBchiffres2[]; // déclaration d'un nouveau controleur de sprite (test)
char SCBchiffres3[]; // déclaration d'un nouveau controleur de sprite (test)
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)
char SCBscore4[]; // déclaration d'un nouveau controleur de sprite (score millier)
#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
;
_SCBscore4 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 fleche[]; //
// clip du sprite fleches
extern char fd000000[];
extern char fd000001[];
extern char fd000002[];
extern char fd000003[];
extern char fd000004[];
extern char fd000005[];
extern char fd000006[];
char *fdtab[7] = {fd000000, fd000001, fd000002, fd000003, fd000004,
fd000005, fd000006};
char SCBfd[]; // déclaration d'un nouveau controleur de sprite
#asm
_SCBfd 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
// ------------------------------------
/*****************************************************************************
** Ci-dessous, le contenu du fichier batchfile pour l'image fball.bmp **
**
set image01=fball.bmp
SPRPCK -t6 -S005005 -r001001 -a002002 -p0 %image01%
cmd
**
** Le point d'action de l'image fball est mis au centre de celle-ci, **
** 0 1 2 3 4 --> la valeur 2 correspond exactement au centre (-a002002) **
*****************************************************************************/
extern char fball[]; // image balle, d'une taille de 5*5;
char SCBball[];
#asm
_SCBball 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 fbriq[]; //
// clip du sprite brique, d'une taille de 6*14, normale, dure et incassable.
extern char br000000[];
extern char br000001[];
extern char br000002[];
char *brtab[3] = {br000000, br000001, br000002};
// nombreuses déclarations des nouveaux controleurs de sprite pour les briques.
char SCBbr01[];
char SCBbr02[];
char SCBbr03[];
char SCBbr04[];
char SCBbr05[];
char SCBbr06[];
char SCBbr07[];
char SCBbr08[];
char SCBbr09[];
char SCBbr10[];
char SCBbr11[];
char SCBbr12[];
char SCBbr13[];
char SCBbr14[];
char SCBbr15[];
char SCBbr16[];
char SCBbr17[];
char SCBbr18[];
char SCBbr19[];
char SCBbr20[];
char SCBbr21[];
char SCBbr22[];
char SCBbr23[];
char SCBbr24[];
char SCBbr25[];
#asm
_SCBbr01 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
;
_SCBbr02 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
;
_SCBbr03 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
;
_SCBbr04 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
;
_SCBbr05 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
;
_SCBbr06 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
;
_SCBbr07 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
;
_SCBbr08 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
;
_SCBbr09 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
;
_SCBbr10 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
;
_SCBbr11 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
;
_SCBbr12 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
;
_SCBbr13 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
;
_SCBbr14 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
;
_SCBbr15 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
;
_SCBbr16 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
;
_SCBbr17 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
;
_SCBbr18 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
;
_SCBbr19 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
;
_SCBbr20 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
;
_SCBbr21 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
;
_SCBbr22 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
;
_SCBbr23 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
;
_SCBbr24 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
;
_SCBbr25 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
// ------------------------------------ ouf !
int posx,posy,level,score,xpush,ypush,relach;
int i;
char tempa,tempb,tempc,tempd,tempe,etape,filife,drap1,gspause,gsblip,mhaut,mbas; // de -128 à 127
int molescx,molescy,gmole;
int atest,unite,dizaine,centaine,horszone;
// ydirf --> déplacer légérement la flèche.
// dirf --> direction fleche de 0 à 6, mais aussi direction Y de la balle (-3 -2 -1 0 +1 +2 +3) (ici gauche/droite car LYNX verticale).
// bdirx --> direction X de la balle (ici haut/bas car le jeu se joue la LYNX tenu à la verticale).
char ydirf,dirf,bdirx,speedX,oboucl,basar;
int balldirX,balldirY;
int yplayer;
char odirx,Xtemp,Ytemp;
char compteurx, compteury;
int nbrbriqx, nbrbriqy, brix[5], briy[5], brie[3]; // brique : coordonnées X et Y, et l'état.
// 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%14];
SCBX(SCBchiffres1) = clx;
SCBY(SCBchiffres1) = cly;
DrawSprite(SCBchiffres1);
}
/* test
*/
ShowScreen()
{
//horszone=0;// mettre les briques hors de l'écran visible. Sprite brique d'une taille de 6*14, 0=normale 1=dure 2=incassable.
if (etape==10 & horszone>0) {
horszone=horszone-4;
if (horszone<1) horszone=0;
}
SCBX(SCBbr01) = 85-horszone;
SCBY(SCBbr01) = 16;
SCBDATA(SCBbr01) = brtab[0%3]; //
SCBX(SCBbr02) = 85-horszone;
SCBY(SCBbr02) = 16+14;
SCBDATA(SCBbr02) = brtab[0%3]; //
SCBX(SCBbr03) = 85-horszone;
SCBY(SCBbr03) = 16+28;
SCBDATA(SCBbr03) = brtab[0%3]; //
SCBX(SCBbr04) = 85-horszone;
SCBY(SCBbr04) = 16+42;
SCBDATA(SCBbr04) = brtab[0%3]; //
SCBX(SCBbr05) = 85-horszone;
SCBY(SCBbr05) = 16+56;
SCBDATA(SCBbr05) = brtab[0%3]; //
SCBX(SCBbr06) = 91-horszone;
SCBY(SCBbr06) = 16;
SCBDATA(SCBbr06) = brtab[0%3]; //
SCBX(SCBbr07) = 91-horszone;
SCBY(SCBbr07) = 16+14;
SCBDATA(SCBbr07) = brtab[0%3]; //
SCBX(SCBbr08) = 91-horszone;
SCBY(SCBbr08) = 16+28;
SCBDATA(SCBbr08) = brtab[0%3]; //
SCBX(SCBbr09) = 91-horszone;
SCBY(SCBbr09) = 16+42;
SCBDATA(SCBbr09) = brtab[0%3]; //
SCBX(SCBbr10) = 91-horszone;
SCBY(SCBbr10) = 16+56;
SCBDATA(SCBbr10) = brtab[0%3]; //
SCBX(SCBbr11) = 97-horszone;
SCBY(SCBbr11) = 16;
SCBDATA(SCBbr11) = brtab[0%3]; //
SCBX(SCBbr12) = 97-horszone;
SCBY(SCBbr12) = 16+14;
SCBDATA(SCBbr12) = brtab[0%3]; //
SCBX(SCBbr13) = 97-horszone;
SCBY(SCBbr13) = 16+28;
SCBDATA(SCBbr13) = brtab[0%3]; //
SCBX(SCBbr14) = 97-horszone;
SCBY(SCBbr14) = 16+42;
SCBDATA(SCBbr14) = brtab[0%3]; //
SCBX(SCBbr15) = 97-horszone;
SCBY(SCBbr15) = 16+56;
SCBDATA(SCBbr15) = brtab[0%3]; //
SCBX(SCBbr16) = 103-horszone;
SCBY(SCBbr16) = 16;
SCBDATA(SCBbr16) = brtab[0%3]; //
SCBX(SCBbr17) = 103-horszone;
SCBY(SCBbr17) = 16+14;
SCBDATA(SCBbr17) = brtab[0%3]; //
SCBX(SCBbr18) = 103-horszone;
SCBY(SCBbr18) = 16+28;
SCBDATA(SCBbr18) = brtab[0%3]; //
SCBX(SCBbr19) = 103-horszone;
SCBY(SCBbr19) = 16+42;
SCBDATA(SCBbr19) = brtab[0%3]; //
SCBX(SCBbr20) = 103-horszone;
SCBY(SCBbr20) = 16+56;
SCBDATA(SCBbr20) = brtab[0%3]; //
SCBX(SCBbr21) = 109-horszone;
SCBY(SCBbr21) = 16;
SCBDATA(SCBbr21) = brtab[0%3]; //
SCBX(SCBbr22) = 109-horszone;
SCBY(SCBbr22) = 16+14;
SCBDATA(SCBbr22) = brtab[0%3]; //
SCBX(SCBbr23) = 109-horszone;
SCBY(SCBbr23) = 16+28;
SCBDATA(SCBbr23) = brtab[0%3]; //
SCBX(SCBbr24) = 109-horszone;
SCBY(SCBbr24) = 16+42;
SCBDATA(SCBbr24) = brtab[0%3]; //
SCBX(SCBbr25) = 109-horszone;
SCBY(SCBbr25) = 16+56;
SCBDATA(SCBbr25) = brtab[0%3]; //
if (etape==30 & horszone==0)
{
// horszone=horszone-4;
// if (horszone<1) horszone=0;
}
}