
POSITIONX EQU 125

        org        20000

include "graphics.i"

        pla
        
	cld

	lda	#1
	sta	731
// Reservation de 8 ko pour les players missiles
        lda        reserve
        cmp        #0
        bne initfait

        sec
        lda        106
        sbc        #16
        sta        106        

        lda        #1
        sta        reserve
// Du fait de la reservation, refaire un changement de mode graphique
// Nous ne serons ainsi pas dans l'ecran

optionlevel:
	/* Au cas ou les sprites seraient a l ecran */
	ldx	#0
	stx        53248
        stx        53249
	stx        53250
        stx        53251

	jsr SelectLevel

startlevel	
	lda	#3
	sta	nbvie
	lda	#0
	sta 	fingame
	sta	cpttroue // Compteur pour dessiner un troue dans le pont
        jsr initecran
	jsr initdraw
        jsr initplayer
	jsr initcarac

        jsr INITVBI // Lancer l'interruption VBI
	jsr initscore

restart:
	jsr initCollision	// Initialisation des variables utilisees lors d'une collision PMs avec PMs ou PFs
        // Position de notre voiture a l'ecran
        lda        #POSITIONX
        sta        53248
        sta        53249
        sta        positionXCar

        // Affichage des players...
        lda        #58
        sta        559
        
        lda        106
        sta        54279

        lda        #3
        sta        53277
             
// Couleur de la voiture
        lda        #36
        sta        704

        lda        #0
        sta        705

initfait:

        // Animation

        //
// Lecture STICKOK geree par ma VBI
// Permet de ralentir la lecture du joystick !
        lda        STICKOK
        cmp        #1
        bne TrtAffichage

// Ok, on a pris en compte la possibilite de lire le stick !
//	jsr incscore
        lda        #0
        sta        STICKOK

	lda	colV0
	cmp	#0 // Si collision, plus de deplacement possible
	bne TrtAffichage

        lda        632	
        cmp        #11
        bne droite
 
// Deplacement de la voiture a gauche
        ldx        positionXCar
	cpx	   #48 // Limiter le deplacement de la voiture sur l'ecran afin de ne pas sortir de celui-ci
	beq ajustepos
        dex
        jmp ajustepos
droite:                        
        cmp        #7
        bne TrtAffichage

// Deplacemement de la voiture a droite
        ldx        positionXCar
	cpx	   #200  // Limiter le deplacement de la voiture sur l'ecran afin de ne pas sortir de celui-ci
	beq ajustepos
	inx

// On positionne la voiture a sa nouvelle position
ajustepos:
        stx        53248
        stx        53249
        stx        positionXCar

TrtAffichage: 
        ldx colV0
	cpx #4
	// beq suitecourse
	bne TrtAffichage1
	// Fin de collision
	jsr SynchroWaitVBI
	ldx	pausecol
	inx
	stx	pausecol
	cpx	#10
	bne suitecourse
	ldx	#0
	stx	pausecol
	jsr initplayer

TrtAffichage1:
	inx
	stx 	incscroll
	lda 	fingame
	cmp 	#1
	bne TrtAffichage1b
	ldx	level // Bidouille, lors de l'affichage, je fais appel au code suite a selection d'un menu, comme il incremente level, je le decremente pour ne pas avoir un changement de ligne
	dex
	stx     level
	jmp optionlevel
TrtAffichage1b:
	jsr clignote
        jsr scrolllog
        jsr drawline
	jsr calccentre
	jsr affscore
	jsr affnbcar // On en profite pour afficher le nombre de car encore disponibles
        jsr changelapage
	jsr deplaceadver
	jsr collision
	jmp suitecourse
PasDepDeco:
	jsr SynchroWaitVBI
	jsr deplaceadver

suitecourse:
	lda	phaseJump
	cmp	#0
	beq strig
	jsr Jump
	jmp clavier
strig:
	lda	644 // Strig
	cmp	#0
	bne clavier
	jsr Jump
clavier:
        lda        753
        cmp        #3   // Clavier presse
        beq trtClav

contclavier:
	lda	53279
	cmp	#6
	beq startpresse
	cmp	#3
	beq optionpresse
	jmp initfait

startpresse:
	lda	53279	// Attendre que l'utilisateur relache le bouton !
	cmp	#7
	bne startpresse

	lda	#0
	sta	53248
	sta	53249
	sta	53250
	sta	53251
	jmp startlevel

optionpresse:
	lda	53279	// Attendre que l'utilisateur relache le bouton !
	cmp	#7
	bne optionpresse
	lda	#0
	sta	53248
	sta	53249
	sta	53250
	sta	53251
	ldx	level // Bidouille, lors de l'affichage, je fais appel au code suite a selection d'un menu, comme il incremente level, je le decremente pour ne pas avoir un changement de ligne
	cpx	#1
	bne decrx
	ldx	#4
	jmp readylevel
decrx:
	dex
readylevel:
	stx level
	jmp optionlevel

trtClav:
	lda	754
	cmp	#28
	beq exitGame
	cmp	#33
	beq pause
	cmp	#10
	beq pause
	jmp contclavier

pause
        lda        753
        cmp        #3   // Clavier presse
        beq pause
tstfinpause
        lda        753
        cmp        #3   // Clavier presse
        bne tstfinpause
	jmp contclavier

exitGame
// Restauration du systeme

        lda        #0
        sta        53277

        lda        #34
        sta        559

        lda        106
        clc
        adc        #16
        sta        106

        lda        #0
        sta        reserve

        jsr DESADLI
        jsr FINVBI
        jmp $C2AA

        rts

        include "players.asm"
        include "graphics.asm"
        include "dli.asm"
        include "screen.asm"
	include "screen1.asm"
        include "vbiimm.asm"
	include "collision.asm"
	include "level.asm"
	include "score.asm"
	include "carac.asm"

memx    db 0
reserve db 0

// Position de la voiture
positionXCar db 0
positionYCar db 0
pausecol db 0

incscroll db 0
nbvie    db 3
fingame  db 0