

*************************************************************
*****************  GESTION DES LEMMINGS  ********************
*************************************************************

*****************  INTRODUCTION DES LEMMINGS EN JEU  ********************

INTRODUCTION LDA ANIMPORTE ; AJOUTE LES LEMMINGS EN JEU
 BNE INTRODUCTION1 ; () -> (X,Y,ETAT,PAS)
 RTS
INTRODUCTION1 LDA NBINDOOR ; IL RESTE DES LEMMINGS ?
 BNE INTRODUCTION2
 RTS
INTRODUCTION2 LDA INTROPAS ; A T'ON ASSEZ ATTENDU
INTRODUCTION3 CMP #$A0A0
 BEQ INTRODUCTION4
 INC INTROPAS
 RTS
**
INTRODUCTION4 STZ INTROPAS ; CA Y EST, IL SORT
 DEC NBINDOOR
 LDA ICONEVALEUR+2 ; VALEUR D'EN BAS
 LSR
 STA INTRODUCTION04+1 ; CONVERSION RATE -> INTERVALE
 LDA #$0035
 SEC
INTRODUCTION04 SBC #$A0A0
 STA INTRODUCTION3+1 ; NOUVEL INTERVAL
 LDA NUMEROLEVEL
 ASL
 ASL
 TAX
 LDY #$0000 ; ON CHERCHE UNE PLACE LIBRE DANS LA TABLE
INTRODUCTION5 LDA ETATAB,Y
 BEQ INTRODUCTION6
 INY
 INY
 CPY #$00C8
 BNE INTRODUCTION5
 BRK 00 ; PLUS DE PLACE ??
INTRODUCTION6 LDA INTROTAB ; X
 CLC
 ADC #$0040 ; DECALAGE BORDURES
 STA XTAB,Y
 LDA INTROTAB+2 ; Y
 CLC
 ADC #$0040 ; DECALAGE BORDURES
 STA YTAB,Y
 LDA #$8003 ; ETAT : TOMBE DROITE
 STA ETATAB,Y
 LDA #$0000 ; PAS/COMPTEUR : 0/0
 STA PASTAB,Y
 INC NBJEU
 LDA NUMEROLEVEL ; PATCH LEVEL MULTIPORTES
 CMP #$0010 ; 17
 BEQ INTRODUCTION05
 CMP #$0041 ; 66 = 17
 BEQ INTRODUCTION05
 CMP #$003A ; 59
 BEQ INTRODUCTION08
 LDX #$0000
 CMP #$0027 ; 40
 BEQ INTRODUCTION07
 LDX #$0002
 CMP #$003D ; 62
 BEQ INTRODUCTION07
 LDX #$0004
 CMP #$003F ; 64
 BEQ INTRODUCTION07
 CMP #$0055 ; 86
 BNE INTROTEMP
 JMP INTRODUCTION0A
INTROTEMP JMP INTRODUCTION7
***
INTRODUCTION07 LDA INTRODUCTIO07T,X
 STA INTRODUCTIO075+1
 STA INTRODUCTIO076+1
 LDA XTAB,Y  ; LEVEL 40/62/64 : 2 PORTES
 CLC
 ADC INTROPATCH
 STA XTAB,Y
 LDA INTROPATCH
INTRODUCTIO075 CMP #$0250
 BNE INTRODUCTIO077
 STZ INTROPATCH
 JMP INTRODUCTION7
INTRODUCTIO077 CLC
INTRODUCTIO076 ADC #$0250
 STA INTROPATCH
 JMP INTRODUCTION7
INTRODUCTIO07T HEX 5002,BC00,4000
***
INTRODUCTION05 LDA XTAB,Y ; LEVEL 17/66 : 4 PORTES
 CLC
 ADC INTROPATCH
 STA XTAB,Y
 LDA INTROPATCH
 CMP #$00C0
 BNE INTRODUCTION06
 STZ INTROPATCH
 JMP INTRODUCTION7
INTRODUCTION06 CLC
 ADC #$0040
 STA INTROPATCH
 JMP INTRODUCTION7
***
INTRODUCTION08 PHX ; LEVEL 55 : 3 PORTES
 LDA INTROPATCH
 ASL
 TAX
 LDA XTAB,Y ; X
 CLC
 ADC INTRO55XTAB,X
 STA XTAB,Y
 LDA YTAB,Y ; Y
 SEC
 SBC INTRO55YTAB,X
 STA YTAB,Y
 PLX
 LDA INTROPATCH
 CMP #$0002
 BNE INTRODUCTION09
 STZ INTROPATCH
 JMP INTRODUCTION7
INTRODUCTION09 INC INTROPATCH
 JMP INTRODUCTION7
***
INTRODUCTION0A PHX  ; LEVEL 86 : 3 PORTES
 LDA INTROPATCH
 ASL
 TAX
 LDA INTRODUCT86TBX,X
 STA XTAB,Y
 LDA INTRODUCT86TBY,X
 STA YTAB,Y
 PLX
 LDA INTROPATCH
 CMP #$0002
 BNE INTRODUCTION0B
 STZ INTROPATCH
 JMP INTRODUCTION7
INTRODUCTION0B INC INTROPATCH
 JMP INTRODUCTION7
INTRODUCT86TBX HEX DB02,5703,CB03
INTRODUCT86TBY HEX AC00,4800,AC00
***
INTRODUCTION7 LDA #$0001 ; NB DE LEMMINGS EN JEU
 STA AFFICHOUTFLAG
 RTS

INTROPAS HEX 0000 ; NB DE PAS EFFECTUE
INTROPATCH HEX 0000

INTROTAB HEX DB02,2C00 ; X,Y ADRESSE D'INTRODUCTION DES LEM
INTRO55XTAB HEX 0000,5000,B000
INTRO55YTAB HEX 0000,2C00,5000

****************  EVOLUTION OLD->NEW DES LEMMINGS  ****************

EVOLUTION LDX #$0000 ; OLD:(X,Y,ETAT,PAS) -> NEW:(X,Y,ETAT,PAS)
 STZ FIXECRANFLG ; AFFICHAGE DES OBJ FIXE APRES CREUSEMENT
 LDA NBJEU
 BNE EVOLUTION1 ; AUCUN LEMMINGS EN JEU
 RTS

EVOLUTION1 LDA ETATAB,X
 AND #$00FF
 BEQ EVOLUTIONXT
 DEC  ; LEMMING EN JEU
 ASL
 TAY
 LDA EVOLTAB,Y
 STA EVOLUTION2+1
 PHX
EVOLUTION2 JSR $A0A0 ; ON ENVOI A LA ROUTINE CONCERNEE
 PLX
EVOLUTIONXT INX  ; SUIVANT
 INX
 CPX #$00C8 ; 100 LEMMINGS
 BNE EVOLUTION1
 LDA FIXECRANFLG ; AFFICHAGE FIXE ?
 BEQ EVOLUTIONFIN
 JSR AFFICHFIXE ; AFFICHAGE EN 01/2000 ET EN 05/0000
 LDA BANC05
 STA AFFICHSOUSFIXA+2
 STZ FIXECRANFLG
EVOLUTIONFIN RTS

EVOLTAB DA EVOLMA,EVOLMM,EVOLTB,EVOLOP,EVOLTP
 DA EVOLES,EVOLRE,EVOLBL,EVOLEX,EVOLCH
 DA EVOLCD,EVOLCB,EVOLCO,EVOLPB,EVOLSO
 DA EVOLET,EVOLNO,EVOLDE,EVOLPE,EVOLEC
 DA EVOLGU

NBJEU HEX 0000 ; NB DE LEMMINGS EN JEU
NBIN HEX 0000 ; NB DE LEMMINGS RENTRE
NBINDOOR HEX 0000 ; NB DE LEMMINGS EN RESERVE

XTAB HEX 0000 ; ABSCISSE X DES 100 LEMMINGS
 DS 198
YTAB HEX 0000 ; ORDONNEE Y DES 100 LEMMINGS
 DS 198
ETATAB HEX 0000 ; ETAT GENERAL DES 100 LEMMINGS
 DS 198
PASTAB HEX 0000 ; NUMERO PAS / COMPTEUR DES 100 LEMMINGS
 DS 198

*****************  CREATION DE L'ENTOURAGE DES LEMMINGS  ******************

CREENTOUR LDX #$0000 ; (X,Y,ETAT,PAS) -> (X0,X1,Y0,Y1,@ SPR)
 LDA NBJEU
 BNE CREENTOUR0
 RTS  ; AUCUN LEMMING EN JEU

CREENTOUR0 LDA ETATAB,X ; POUR CHAQUE LEMMING
 AND #$00FF
 BNE CREENTOUR00
 JMP CREENTOURNXT
CREENTOUR00 DEC  ; LEMMING EN JEU
 ASL
 ASL
 ASL  ; *8
 STA CREENTOUR3+1
 LDA ETATAB,X ; GAUCHE/DROITE
 AND #$8000
 BNE CREENTOUR2
**
 LDA XTAB,X ; ** GAUCHE
 LSR
 BCC CREENTOUR1
 INC CREENTOUR3+1 ; IMPAIR
 INC CREENTOUR3+1
 BRA CREENTOUR3
CREENTOUR1 LDA CREENTOUR3+1 ; PAIR
 CLC
 ADC #$0006
 STA CREENTOUR3+1
 BRA CREENTOUR3
**
CREENTOUR2 LDA XTAB,X ; ** DROITE
 LSR
 BCC CREENTOUR3 ; PAIR
 LDA CREENTOUR3+1 ; IMPAIR
 CLC
 ADC #$0004
 STA CREENTOUR3+1
**
CREENTOUR3 LDY #$A0A0 ; 8*ETAT + (GP 6)(GI 2)(DP 0)(DI 4)
 LDA XX0TAB,Y
 STA CREENTOUR4+1
 LDA XX1TAB,Y
 STA CREENTOUR5+1
 LDA YY0TAB,Y
 STA CREENTOUR6+1
 LDA YY1TAB,Y
 STA CREENTOUR7+1
 LDA ADRSPRTAB,Y
 STA CREENTOUR8+1
 LDA PASTAB,X ; NUMERO DE PAS (0->xx)
 AND #$00FF ; ON VIRE LE COMPTEUR (TOMBE,BRIQUES...)
 ASL
 TAY  ; X=NUMERO PAS *2
 LDA XTAB,X ; X
 SEC
CREENTOUR4 SBC $A0A0,Y
 STA X0TAB,X ; X0
 LSR
 BCC CREENTOURTMP
 LDA #$0001 ; X0 IMPAIR :-(
 JSR BORD6
 BRK 00
CREENTOURTMP LDA XTAB,X ; X
 CLC
CREENTOUR5 ADC $A0A0,Y
 STA X1TAB,X ; X1
 LDA YTAB,X ; Y
 SEC
CREENTOUR6 SBC $A0A0,Y
 STA Y0TAB,X ; Y0
 CMP #$00E0 ; LEMMINGS SORT DE L'ECRAN ?
 BMI CREENTOUR60
 STZ ETATAB,X ; ON ENLEVE LE LEMMING DU JEU
 DEC NBJEU
 LDA COMPTAB,X
 BEQ CREENTOUR61
 DEC NBCOMPT
 STZ COMPTAB,X
CREENTOUR61 LDA #$0001 ; NB DE LEMMINGS EN JEU
 STA AFFICHOUTFLAG
 BRA CREENTOURNXT ; ON CONTINUE
CREENTOUR60 LDA YTAB,X ; Y
 CLC
CREENTOUR7 ADC $A0A0,Y
 STA Y1TAB,X ; Y1
CREENTOUR8 LDA $A0A0,Y ; ADRESSE SPRITE
 STA SPRTAB,X

CREENTOURNXT INX  ; LEMMING SUIVANT
 INX
CREENTOURNXT1 CPX #$00C8 ; 100 LEMMINGS MAX
 BEQ CREENTOURNXT2
RIEN JMP CREENTOUR0
CREENTOURNXT2 RTS

X0TAB DS 200
X1TAB DS 200
Y0TAB DS 200
Y1TAB DS 200
SPRTAB DS 200 ; ADRESSE SPRITE

XX0TAB DA XX0MA0,XX0MA1,XX0MA2,XX0MA3 ; MARCHE
 DA XX0MM0,XX0MM1,XX0MM2,XX0MM3 ; MONTE MARCHE
 DA XX0TB0,XX0TB1,XX0TB2,XX0TB3 ; TOMBE
 DA XX0OP0,XX0OP1,XX0OP2,XX0OP3 ; OUVERTURE PARACHUTE
 DA XX0TP0,XX0TP1,XX0TP2,XX0TP3 ; TOMBE PARACHUTE
 DA XX0ES0,XX0ES1,XX0ES2,XX0ES3 ; ESCALADE
 DA XX0RE0,XX0RE1,XX0RE2,XX0RE3 ; SE REDRESSE
 DA XX0BL0,XX0BL1,XX0BL1,XX0BL0 ; BLOQUE
 DA XX0EX0,XX0EX1,XX0EX1,XX0EX0 ; EXPLOSE
 DA XX0CH0,XX0CH1,XX0CH2,XX0CH3 ; CREUSE HORI
 DA XX0CD0,XX0CD1,XX0CD2,XX0CD3 ; CREUSE DIAG
 DA XX0CB0,XX0CB1,XX0CB1,XX0CB0 ; CREUSE BAS
 DA XX0CO0,XX0CO1,XX0CO2,XX0CO3 ; CONSTRUIT
 DA XX0PB0,XX0PB1,XX0PB2,XX0PB3 ; PLUS DE BRIQUES
 DA XX0SO0,XX0SO1,XX0SO1,XX0SO0 ; SORT SORTIE
 DA XX0ET0,XX0ET1,XX0ET1,XX0ET0 ; ECRASE PAR TERRE
 DA XX0NO0,XX0NO1,XX0NO1,XX0NO0 ; SE NOIE
 DA XX0DE0,XX0DE1,XX0DE1,XX0DE0 ; DESTRUCTION
 DA XX0PE0,XX0PE0,XX0PE0,XX0PE0 ; PENDAISON
 DA XX0EC0,XX0EC0,XX0EC0,XX0EC0 ; ECRASEMENT
 DA XX0GU0,XX0GU0,XX0GU0,XX0GU0 ; COUPE TETE
**
XX1TAB DA XX1MA0,XX1MA1,XX1MA2,XX1MA3 ; MARCHE
 DA XX1MM0,XX1MM1,XX1MM2,XX1MM3 ; MONTE MARCHE
 DA XX1TB0,XX1TB1,XX1TB2,XX1TB3 ; TOMBE
 DA XX1OP0,XX1OP1,XX1OP2,XX1OP3 ; OUVRE PARACHUTE
 DA XX1TP0,XX1TP1,XX1TP2,XX1TP3 ; TOMBE PARACHUTE
 DA XX1ES0,XX1ES1,XX1ES2,XX1ES3 ; ESCALADE
 DA XX1RE0,XX1RE1,XX1RE2,XX1RE3 ; SE REDRESSE
 DA XX1BL0,XX1BL1,XX1BL1,XX1BL0 ; BLOQUE
 DA XX1EX0,XX1EX1,XX1EX1,XX1EX0 ; EXPLOSE
 DA XX1CH0,XX1CH1,XX1CH2,XX1CH3 ; CREUSE HORI
 DA XX1CD0,XX1CD1,XX1CD2,XX1CD3 ; CREUSE DIAG
 DA XX1CB0,XX1CB1,XX1CB1,XX1CB0 ; CREUSE BAS
 DA XX1CO0,XX1CO1,XX1CO2,XX1CO3 ; CONSTRUIT
 DA XX1PB0,XX1PB1,XX1PB2,XX1PB3 ; PLUS DE BRIQUES
 DA XX1SO0,XX1SO1,XX1SO1,XX1SO0 ; SORT SORTIE
 DA XX1ET0,XX1ET1,XX1ET1,XX1ET0 ; ECRASE PAR TERRE
 DA XX1NO0,XX1NO1,XX1NO1,XX1NO0 ; SE NOIE
 DA XX1DE0,XX1DE1,XX1DE1,XX1DE0 ; DESTRUCTION
 DA XX1PE0,XX1PE0,XX1PE0,XX1PE0 ; PENDAISON
 DA XX1EC0,XX1EC0,XX1EC0,XX1EC0 ; ECRASEMENT
 DA XX1GU0,XX1GU0,XX1GU0,XX1GU0 ; COUPE TETE
**
YY0TAB DA YY0MA0,YY0MA1,YY0MA2,YY0MA3 ; MARCHE
 DA YY0MM0,YY0MM1,YY0MM2,YY0MM3 ; MONTE MARCHE
 DA YY0TB0,YY0TB1,YY0TB2,YY0TB3 ; TOMBE
 DA YY0OP0,YY0OP1,YY0OP2,YY0OP3 ; OUVRE PARACHUTE
 DA YY0TP0,YY0TP1,YY0TP2,YY0TP3 ; TOMBE PARACHUTE
 DA YY0ES0,YY0ES1,YY0ES2,YY0ES3 ; ESCALADE
 DA YY0RE0,YY0RE1,YY0RE2,YY0RE3 ; SE REDRESSE
 DA YY0BL0,YY0BL1,YY0BL1,YY0BL0 ; BLOQUE
 DA YY0EX0,YY0EX1,YY0EX1,YY0EX0 ; EXPLOSE
 DA YY0CH0,YY0CH1,YY0CH2,YY0CH3 ; CREUSE HORI
 DA YY0CD0,YY0CD1,YY0CD2,YY0CD3 ; CREUSE DIAG
 DA YY0CB0,YY0CB1,YY0CB1,YY0CB0 ; CREUSE BAS
 DA YY0CO0,YY0CO1,YY0CO2,YY0CO3 ; CONSTRUIT
 DA YY0PB0,YY0PB1,YY0PB2,YY0PB3 ; PLUS DE BRIQUES
 DA YY0SO0,YY0SO1,YY0SO1,YY0SO0 ; SORT SORTIE
 DA YY0ET0,YY0ET1,YY0ET1,YY0ET0 ; ECRASE PAR TERRE
 DA YY0NO0,YY0NO1,YY0NO1,YY0NO0 ; SE NOIE
 DA YY0DE0,YY0DE1,YY0DE1,YY0DE0 ; DESTRUCTION
 DA YY0PE0,YY0PE0,YY0PE0,YY0PE0 ; PENDAISON
 DA YY0EC0,YY0EC0,YY0EC0,YY0EC0 ; ECRASEMENT
 DA YY0GU0,YY0GU0,YY0GU0,YY0GU0 ; COUPE TETE
**
YY1TAB DA YY1MA0,YY1MA1,YY1MA2,YY1MA3 ; MARCHE
 DA YY1MM0,YY1MM1,YY1MM2,YY1MM3 ; MONTE MARCHE
 DA YY1TB0,YY1TB1,YY1TB2,YY1TB3 ; TOMBE
 DA YY1OP0,YY1OP1,YY1OP2,YY1OP3 ; OUVRE PARACHUTE
 DA YY1TP0,YY1TP1,YY1TP2,YY1TP3 ; TOMBE PARACHUTE
 DA YY1ES0,YY1ES1,YY1ES2,YY1ES3 ; ESCALADE
 DA YY1RE0,YY1RE1,YY1RE2,YY1RE3 ; SE REDRESSE
 DA YY1BL0,YY1BL1,YY1BL1,YY1BL0 ; BLOQUE
 DA YY1EX0,YY1EX1,YY1EX1,YY1EX0 ; EXPLOSE
 DA YY1CH0,YY1CH1,YY1CH2,YY1CH3 ; CREUSE HORI
 DA YY1CD0,YY1CD1,YY1CD2,YY1CD3 ; CREUSE DIAG
 DA YY1CB0,YY1CB1,YY1CB1,YY1CB0 ; CREUSE BAS
 DA YY1CO0,YY1CO1,YY1CO2,YY1CO3 ; CONSTRUIT
 DA YY1PB0,YY1PB1,YY1PB2,YY1PB3 ; PLUS DE BRIQUES
 DA YY1SO0,YY1SO1,YY1SO1,YY1SO0 ; SORT SORTIE
 DA YY1ET0,YY1ET1,YY1ET1,YY1ET0 ; ECRASE PAR TERRE
 DA YY1NO0,YY1NO1,YY1NO1,YY1NO0 ; SE NOIE
 DA YY1DE0,YY1DE1,YY1DE1,YY1DE0 ; DESTRUCTION
 DA YY1PE0,YY1PE0,YY1PE0,YY1PE0 ; PENDAISON
 DA YY1EC0,YY1EC0,YY1EC0,YY1EC0 ; ECRASEMENT
 DA YY1GU0,YY1GU0,YY1GU0,YY1GU0 ; COUPE TETE
**
ADRSPRTAB DA SPRMA0,SPRMA1,SPRMA2,SPRMA3 ; MARCHE
 DA SPRMM0,SPRMM1,SPRMM2,SPRMM3 ; MONTE MARCHE
 DA SPRTB0,SPRTB1,SPRTB2,SPRTB3 ; TOMBE
 DA SPROP0,SPROP1,SPROP2,SPROP3 ; OUVRE PARACHUTE
 DA SPRTP0,SPRTP1,SPRTP2,SPRTP3 ; TOMBE PARACHUTE
 DA SPRES0,SPRES1,SPRES2,SPRES3 ; ESCALADE
 DA SPRRE0,SPRRE1,SPRRE2,SPRRE3 ; SE REDRESSE
 DA SPRBL0,SPRBL1,SPRBL1,SPRBL0 ; BLOQUE
 DA SPREX0,SPREX1,SPREX1,SPREX0 ; EXPLOSE
 DA SPRCH0,SPRCH1,SPRCH2,SPRCH3 ; CREUSE HORI
 DA SPRCD0,SPRCD1,SPRCD2,SPRCD3 ; CREUSE DIAG
 DA SPRCB0,SPRCB1,SPRCB1,SPRCB0 ; CREUSE BAS
 DA SPRCO0,SPRCO1,SPRCO2,SPRCO3 ; CONSTRUIT
 DA SPRPB0,SPRPB1,SPRPB2,SPRPB3 ; PLUS DE BRIQUES
 DA SPRSO0,SPRSO1,SPRSO1,SPRSO0 ; SORT SORTIE
 DA SPRET0,SPRET1,SPRET1,SPRET0 ; ECRASE PAR TERRE
 DA SPRNO0,SPRNO1,SPRNO1,SPRNO0 ; SE NOIE
 DA SPRDE0,SPRDE1,SPRDE1,SPRDE0 ; DESTRUCTION
 DA SPRPE0,SPRPE0,SPRPE0,SPRPE0 ; PENDAISON
 DA SPREC0,SPREC0,SPREC0,SPREC0 ; ECRASEMENT
 DA SPRGU0,SPRGU0,SPRGU0,SPRGU0 ; COUPE TETE

*****************  CREATION DE LA TABLE D'AFFICHAGE  ****************

CREEAFFLEM LDX #$0000 ; ON NE S'OCCUPE QUE DE CEUX DE L'ECRAN
 STZ LEMSCRTAB-2 ; INIT : 0 LEMMING A AFFICHER
 LDA #$0008
 STA AFFICHLEMSTART ; ON DEMARRE A 8
 LDA NBJEU
 BNE CREEAFFLEM1
 RTS  ; AUCUN EN JEU :-(

CREEAFFLEM1 LDA ETATAB,X ; 0:INACTIF (NON EN JEU)
 BEQ CREEAFFLEM2 ; SUIVANT...
 LDA X0TAB,X ; X0
 CMP XDROITLEM
 BPL CREEAFFLEM2 ; EN DEHORS
 LDA XGAUCHLEM
 CMP X1TAB,X ; X1
 BPL CREEAFFLEM2 ; EN DEHORS
 BRA CREEAFFLEM3
CREEAFFLEM2 JMP CREEAFFLEMNXT ; SUIVANT...
***
CREEAFFLEM3 INC LEMSCRTAB-2 ; LEMMING DANS L'ECRAN++
 STZ CREEAFFLEMFLG
 STZ CREEAFFLEMFLG+2
 LDA Y0TAB,X ; HAUTEUR
 CMP #$0040
 BPL CREEAFFLEM30
 LDA Y1TAB,X  ; DEPASSE VERS LE HAUT
 SEC
 SBC #$0040
 STA CREEAFFLEMTAB+2 ; HAUTEUR
 LDA #$0040
 SEC
 SBC Y0TAB,X
 ASL
 TAY
 LDA TABLE,Y
 STA CREEAFFLEMFLG+2 ; DECALAGE @ SPRITE
 INC CREEAFFLEMFLG
 STZ CREEAFFLEMDMP3+1 ; Y0*2 (REFRESH LINES)
 BRA CREEAFFLEM5
CREEAFFLEM30 LDA Y1TAB,X
 CMP #$00E0
 BMI CREEAFFLEM4
 LDA #$00E0 ; DEPASSE VERS LE BAS
 SEC
 SBC Y0TAB,X
 STA CREEAFFLEMTAB+2 ; ON RACOURCIT
 LDA Y0TAB,X ; Y0*2 (REFRESH)
 SEC
 SBC #$0040
 ASL
 STA CREEAFFLEMDMP3+1
 BRA CREEAFFLEM5
CREEAFFLEM4 LDA Y1TAB,X ; HAUTEUR
 SEC
 SBC Y0TAB,X
 STA CREEAFFLEMTAB+2
 LDA Y0TAB,X ; Y0*2 (REFRESH)
 SEC
 SBC #$0040
 ASL
 STA CREEAFFLEMDMP3+1
CREEAFFLEM5 LDA X0TAB,X ; X0
 CMP XGAUCHLEM
 BMI CREEAFFLEMC1 ; CAS 1 : A CHEVAL SUR LA BORDURE GAUCHE
 LDA XDROITLEM
 CMP X1TAB,X ; X1
 BMI CREEAFFLEMC2 ; CAS 2 : A CHEVAL SUR LA BORDURE DROITE
***
 LDY #$0000 ; PLEIN ECRAN
 LDA CREEAFFLEMFLG
 BNE CREEAFFLEMC0
 LDA Y0TAB,X
 SEC
 SBC #$0040 ; DECALAGE BORDURES
 ASL
 TAY  ; Y
CREEAFFLEMC0 LDA X0TAB,X ; X0
 SEC
 SBC XGAUCHLEM
 LSR
 CLC
 ADC TABLE,Y
 STA CREEAFFLEMTAB+6 ; @ ECRAN
 LDA SPRTAB,X
 CLC
 ADC CREEAFFLEMFLG+2 ; DECALAGE @ SPRITE SI DEPASSEMENT HAUT
 STA CREEAFFLEMTAB+4 ; @ SPRITE
 LDA X1TAB,X
 SEC
 SBC X0TAB,X
 LSR
 STA CREEAFFLEMTAB ; LARGEUR*2
 BRA CREEAFFLEMDMP
***
CREEAFFLEMC1 LDY #$0000 ; BORDURE GAUCHE
 LDA CREEAFFLEMFLG
 BNE CREEAFFLEMC10
 LDA Y0TAB,X
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 ASL
 TAY
CREEAFFLEMC10 LDA TABLE,Y
 STA CREEAFFLEMTAB+6 ; @ ECRAN
 LDA X1TAB,X
 SEC
 SBC XGAUCHLEM
 LSR
 STA CREEAFFLEMTAB ; LARGEUR *2
 LDA XGAUCHLEM
 SEC
 SBC X0TAB,X
 LSR
 STA CREEAFFLEMC11+1
 LDA SPRTAB,X
 CLC
CREEAFFLEMC11 ADC #$A0A0
 CLC
 ADC CREEAFFLEMFLG+2 ; DECALAGE @ SPRITE SI DEPASSEMENT HAUT
 STA CREEAFFLEMTAB+4 ; @ SPRITE
 BRA CREEAFFLEMDMP
***
CREEAFFLEMC2 LDA SPRTAB,X ; BORDURE DROITE
 CLC
 ADC CREEAFFLEMFLG+2 ; DECALAGE @ SPRITE SI DEPASSEMENT HAUT
 STA CREEAFFLEMTAB+4 ; @ SPRITE
 LDY #$0000
 LDA CREEAFFLEMFLG
 BNE CREEAFFLEMC20
 LDA Y0TAB,X ; Y
 SEC
 SBC #$0040 ; DECALAGE BORDURES
 ASL
 TAY
CREEAFFLEMC20 LDA X0TAB,X ; X0
 SEC
 SBC XGAUCHLEM
 LSR
 CLC
 ADC TABLE,Y
 STA CREEAFFLEMTAB+6 ; @ ECRAN
 LDA XDROITLEM
 SEC
 SBC X0TAB,X ; X0
 LSR
 STA CREEAFFLEMTAB ; LARGEUR *2
***
CREEAFFLEMDMP LDA POTENCEFLAG ; DUMP LE TABLEAU VERS LA TABLE
 BEQ CREEAFFLEMDMP2
 CPX POTENCELEM ; LEMMINGS PRIORITAIRE ?
 BNE CREEAFFLEMDMP2
 PHX
 STZ AFFICHLEMSTART ; ON AFFICHE LE PRIORITAIRE
 DEC LEMSCRTAB-2
 LDX #$0000
 LDY #$0000
 BRA CREEAFFLEMDMP1
CREEAFFLEMDMP2 PHX
 LDA LEMSCRTAB-2 ; PLACE DANS LA TABLE
 ASL
 ASL  ; ON COMMENCE A REMPLIR A PARTIR DE 8
 ASL  ; *8
 TAX
 LDY #$0000
CREEAFFLEMDMP1 LDA CREEAFFLEMTAB,Y
 STA LEMSCRTAB,X ; RECOPIE
 INX
 INX
 INY
 INY
 CPY #$0008
 BNE CREEAFFLEMDMP1
CREEAFFLEMDMP3 LDX #$A0A0 ; Y0*2, REFRESH LINES
 LDY CREEAFFLEMTAB+2 ; HAUTEUR
 JSR FILLINETAB
 PLX
***
CREEAFFLEMSND JSR PUTSOUND ; SON A JOUER ?
***
CREEAFFLEMNXT INX  ; LEMMING SUIVANT
 INX
 CPX #$00C8 ; 100 LEMMINGS POSSIBLES
 BEQ CREEAFFLEMFIN
 JMP CREEAFFLEM1 ; SUIVANT
CREEAFFLEMFIN LDA AFFICHLEMSTART
 BNE CREEAFFLEMFIN1
 INC LEMSCRTAB-2 ; ON RAJOUTE LE PRIORITAIRE
CREEAFFLEMFIN1 RTS

CREEAFFLEMFLG HEX 0000,0000 ; FLAG DE DEPASSEMENT VERS LE HAUT / HAUTEUR NON AFFICHEE
CREEAFFLEMTAB HEX 0000,0000,0000,0000 ; LARGEUR*2,HAUTEUR,@ SPRITE,@ ECRAN

*****************  AFFICHAGE DES LEMMINGS  *******************

AFFICHLEM LDA LEMSCRTAB-2 ; ON AFFICHE LES LEMMINGS DE L'ECRAN
 BNE AFFICHLEM1
 RTS  ; AUCUN LEMMING A AFFICHER

AFFICHLEM1 STA AFFICHLEM10+1 ; NB DE LEMMINGS
 LDX AFFICHLEMSTART ; 0 OU 8
AFFICHLEM2 LDA LEMSCRTAB,X ; LARGEUR *2
 LSR
 BCC AFFICHLEM200
 JMP AFFICHLEM101

AFFICHLEM200 LDA LEMSCRTAB,X ; LARGEUR*2
 STA AFFICHLEM20+1
 LSR
 STA AFFICHLEM3+1
 LDA LEMSCRTAB+2,X ; HAUTEUR
 STA AFFICHLEM9+1
 LDA LEMSCRTAB+4,X ; @ SPRITE
 STA AFFICHLEM6+1
 STA AFFICHLEM5+1
 LDA LEMSCRTAB+6,X ; @ ECRAN
 CLC
 ADC #$2000
 STA AFFICHLEM4+1
 STA AFFICHLEM7+1
 LDA #$00A0 ; OFFSET POUR PASSER A LA LIGNE SUIVANTE
 SEC
AFFICHLEM20 SBC #$A0A0
 STA AFFICHLEM8+1
 PHX

 LDX #$0000 ; RECOPIE 1 LEMMING
AFFICHLEM3 LDY #$A0A0 ; NB DE *4
AFFICHLEM4 LDAL $012000,X ; ECRAN DEBUT
AFFICHLEM5 ANDL $090000,X ; MASQUE
AFFICHLEM6 ORAL $080000,X ; SPRITE
AFFICHLEM7 STAL $012000,X ; ECRAN FINAL
 INX
 INX
 DEY
 BNE AFFICHLEM4
 TXA
 CLC
AFFICHLEM8 ADC #$A0A0 ; NEXT LINE
 TAX
 DEC AFFICHLEM9+1
AFFICHLEM9 LDA #$A0A0 ; HAUTEUR
 BNE AFFICHLEM3

AFFICHLEM100 PLA  ; RECUPERE X
 CLC
 ADC #$0008 ; SIZEOF(LEMMINGS)
 TAX
 DEC AFFICHLEM10+1
AFFICHLEM10 LDA #$A0A0 ; NB DE LEM
 BNE AFFICHLEM2
 RTS
****
AFFICHLEM101 LDA LEMSCRTAB,X ; AFFICHAGE LEMMING (NB DE *2 IMPAIR)
 STA AFFICHLEM103+1
 LDA LEMSCRTAB+2,X ; HAUTEUR
 STA AFFICHLEM109+1
 LDA LEMSCRTAB+4,X ; @ SPRITE
 STA AFFICHLEM106+1
 STA AFFICHLEM105+1
 LDA LEMSCRTAB+6,X ; @ ECRAN
 CLC
 ADC #$2000
 STA AFFICHLEM104+1
 STA AFFICHLEM107+1
 PHX

 STZ AFFICHLEM108+1
AFFICHLEM1030 CLC
 XCE
 SEP #$30
 CLC  ; A:8 BIT, X/Y:16 BIT
 XCE
 REP #$10
AFFICHLEM103 LDY #$A0A0 ; NB DE *2
AFFICHLEM108 LDX #$0000
AFFICHLEM104 LDAL $012000,X ; ECRAN DEBUT
AFFICHLEM105 ANDL $090000,X ; MASQUE
AFFICHLEM106 ORAL $080000,X ; SPRITE
AFFICHLEM107 STAL $012000,X ; ECRAN FINAL
 INX
 DEY
 BNE AFFICHLEM104
 CLC
 XCE
 REP #$30 ; 16 BIT
 LDA AFFICHLEM108+1
 CLC
 ADC #$00A0 ; NEXT LINE
 STA AFFICHLEM108+1
 DEC AFFICHLEM109+1
AFFICHLEM109 LDA #$A0A0 ; HAUTEUR
 BNE AFFICHLEM1030
 JMP AFFICHLEM100
**
AFFICHLEMSTART HEX 0000 ; 0 SI LEMMINGS PRIORITAIRE, 8 SINON
 HEX 0000 ; NB DE LEMMINGS A AFFICHER
LEMSCRTAB DS 808 ; LARGEUR*4,HAUTEUR,@ SPRITE,@ ECRAN

*****************  EFFACEMENT DES LEMMINGS  *******************

CLEANLEM LDA LEMSCRTAB-2 ; ON EFFACE LES LEMMINGS DE L'ECRAN
 BNE CLEANLEM1
 RTS  ; AUCUN LEMMING A EFFACER

CLEANLEM1 STA CLEANLEM10+1 ; NB DE LEMMINGS
 LDX AFFICHLEMSTART
CLEANLEM2 LDA LEMSCRTAB,X ; LARGEUR *2
 DEC
 STA CLEANLEM3+1
 LDA LEMSCRTAB+2,X ; HAUTEUR
 STA CLEANLEM9+1
 LDA LEMSCRTAB+6,X ; @ ECRAN
 STA CLEANLEM4+1
 CLC
 ADC #$2000
 STA CLEANLEM7+1
 PHX

CLEANLEM4 LDX #$A0A0 ; SRC
CLEANLEM7 LDY #$A0A0 ; DEST
CLEANLEM3 LDA #$A0A0 ; NB OCTETS-1
INIT0522 MVN $050000,$010000
 PHK
 PLB
 LDA CLEANLEM4+1
 CLC
 ADC #$00A0
 STA CLEANLEM4+1
 CLC
 ADC #$2000
 STA CLEANLEM7+1
 DEC CLEANLEM9+1
CLEANLEM9 LDA #$A0A0 ; HAUTEUR
 BNE CLEANLEM4

 PLA  ; RECUPERE X
 CLC
 ADC #$0008 ; SIZEOF(LEMMINGS)
 TAX
 DEC CLEANLEM10+1
CLEANLEM10 LDA #$A0A0 ; NB DE LEM
 BNE CLEANLEM2
 RTS

************************************************************************
*******************  AFFICHAGE DES CHIFFRES EXPLO  *********************
************************************************************************

AFFICHCOMPT LDA NBCOMPT ; AFFICHAGE COMPTE A REBOURS
 BEQ AFFICHCOMPTFIN
 LDX #$0000
AFFICHCOMPT1 LDA COMPTAB,X
 BEQ AFFICHCOMPTNXT
 DEC  ; TROUVE
 STA COMPTAB,X
 CMP #$0040 ; 64
 BEQ AFFICHCOMPT2
 CMP #$0030 ; 48
 BEQ AFFICHCOMPT2
 CMP #$0020 ; 32
 BEQ AFFICHCOMPT2
 CMP #$0010 ; 16
 BEQ AFFICHCOMPT2
 CMP #$0000 ; 0 => EXPLOSION
 BNE AFFICHCOMPT3
 LDA ETATAB,X ; EXPLOSION
 AND #$00FF ; BLOCKER ?
 CMP #$0008
 BNE AFFICHCOMPT10
 JSR REMOVEBLOC
AFFICHCOMPT10 LDA #$0009
 STA ETATAB,X
 STZ PASTAB,X
 STZ COMPTAB,X
 DEC NBCOMPT
 BRA AFFICHCOMPTNXT
AFFICHCOMPT2 LDA ETATAB,X ; NOUVEAU CHIFFRE COMPTEUR
 AND #$0E00
 SEC
 SBC #$0200
 STA AFFICHCOMPT20+1
 LDA ETATAB,X
 AND #$F1FF
AFFICHCOMPT20 ORA #$A0A0
 STA ETATAB,X

AFFICHCOMPT3 LDA Y0TAB,X ; AFFICHAGE DU CHIFFRE
 SEC
 SBC #$0006
 PHA
 JSR XRECENTRVAL ; A: VALEUR
 SEC
 SBC #$0004
 PLY
 PHX
 JSR AFFICHSCRCPT ; AFFICHAGE ECRAN CHIFFRE (A:X,Y:Y)
 PLX

AFFICHCOMPTNXT INX
 INX
 CPX #$00C8
 BNE AFFICHCOMPT1
AFFICHCOMPTFIN RTS

NBCOMPT HEX 0000 ; NB DE LEMMINGS CONCERNES
COMPTAB DS 200 ; VALEUR EN PAS AVANT EXPLOSION
   ; L'INDICE DANS LE TABLEAU SERT A TROUVER LE LEMMINGS
********************  AFFICHAGE ECRAN DES CHIFFRES  *******************

AFFICHSCRCPT JSR ENTOURSCRCPT ; DETERMINE L'ENTOURAGE
 BCS AFFICHSCRCPT1
 RTS  ; RIEN A AFFICHER (HORS DE L'ECRAN)

AFFICHSCRCPT1 LDA DECALMASKCPT ; DECALAGE MASK
 STA AFFICHSCRCPT22+1
 LDA ADRSCRCPT ; ADRESSE ECRAN
 STA AFFICHSCRCPT23+1
 STA AFFICHSCRCPT26+1
 LDA ADRMASKCPT ; ADRESSE MASK
 STA AFFICHSCRCPT25+1
 CLC
 ADC #$0023 ; 35
 STA AFFICHSCRCPT24+1
 LDA LARGMASKCPT ; LARGEUR MASK
 STA AFFICHSCRCPT27+1
 LDA HAUTMASKCPT ; HAUTEUR MASK
 STA AFFICHSCRCPT28+1

AFFICHSCRCPT22 LDY #$A0A0 ; DECALAGE MASK
 LDX #$0000
AFFICHSCRCPT23 LDAL $012000,X
AFFICHSCRCPT24 AND CPTMASK1P+30,Y
AFFICHSCRCPT25 ORA CPTMASK1P,Y
AFFICHSCRCPT26 STAL $012000,X
 INX
 INX
 INY
 INY
AFFICHSCRCPT27 CPY #$A0A0 ; LARGEUR MASK
 BNE AFFICHSCRCPT23
 LDA AFFICHSCRCPT23+1 ; LIGNE ECRAN SUIVANTE
 CLC
 ADC #$00A0
 STA AFFICHSCRCPT23+1
 STA AFFICHSCRCPT26+1
 LDA AFFICHSCRCPT25+1 ; LIGNE MASK SUIVANTE
 CLC
 ADC #$0007
 STA AFFICHSCRCPT25+1
 CLC
 ADC #$0023 ; 35
 STA AFFICHSCRCPT24+1
 DEC AFFICHSCRCPT28+1
AFFICHSCRCPT28 LDA #$A0A0 ; NB DE LIGNES
 BNE AFFICHSCRCPT22
AFFICHSCRCPT3 LDX #$A0A0 ; Y0*2, REFRESH LINES
 LDY HAUTMASKCPT ; HAUTEUR
 JSR FILLINETAB
 RTS

********************  EFFACEMENT ECRAN DES CHIFFRES  ******************

CLEANSCRCPT LDA NBCOMPT ; ON EFFACE LES CHIFFRES
 BNE CLEANSCRCPT0
 RTS
CLEANSCRCPT0 LDX #$0000
CLEANSCRCPT1 LDA COMPTAB,X ; EN UTILISANT LA TABLE
 BEQ CLEANSCRCPTNXT
 PHX
 LDA Y0TAB,X ; RECHERCHE DES COORDONNEES X,Y
 SEC
 SBC #$0006
 PHA
 JSR XRECENTRVAL ; A: VALEUR
 SEC
 SBC #$0004
 PLY
 JSR ENTOURSCRCPT ; ENTOURAGE
 BCC CLEANSCRCPT3

 LDA DECALMASKCPT ; DECALAGE MASK
 STA CLEANSCRCPT22+1
 LDA ADRSCRCPT ; ADRESSE ECRAN
 STA CLEANSCRCPT26+1
 SEC
 SBC #$2000
 STA CLEANSCRCPT23+1
 LDA LARGMASKCPT ; LARGEUR MASK
 STA CLEANSCRCPT27+1
 LDA HAUTMASKCPT ; HAUTEUR MASK
 STA CLEANSCRCPT28+1

CLEANSCRCPT22 LDY #$A0A0 ; DECALAGE MASK
 LDX #$0000
CLEANSCRCPT23 LDAL $050000,X
CLEANSCRCPT26 STAL $012000,X
 INX
 INX
 INY
 INY
CLEANSCRCPT27 CPY #$A0A0 ; LARGEUR MASK
 BNE CLEANSCRCPT23
 LDA CLEANSCRCPT23+1 ; LIGNE ECRAN SUIVANTE
 CLC
 ADC #$00A0
 STA CLEANSCRCPT23+1
 CLC
 ADC #$2000
 STA CLEANSCRCPT26+1
 DEC CLEANSCRCPT28+1
CLEANSCRCPT28 LDA #$A0A0 ; NB DE LIGNES
 BNE CLEANSCRCPT22

CLEANSCRCPT3 PLX
CLEANSCRCPTNXT INX
 INX
 CPX #$00C8
 BNE CLEANSCRCPT1
 RTS

********************  DETERMINE L'ENTOURAGE DES CHIFFRES  **************

ENTOURSCRCPT PHA ; AFFICHAGE DU CHIFFRE AU DESSUS DU LEM
 PHY ; A:X, Y:Y
 LSR
 BCS ENTOURSCRCPT01
 LDA #CPTMASKPTAB ; PAIR
 BRA ENTOURSCRCPT02
ENTOURSCRCPT01 LDA #CPTMASKITAB ; IMPAIR
ENTOURSCRCPT02 STA ENTOURSCRCPT03+1
 STZ DECALMASKCPT ; INIT MASK
 LDA ETATAB,X
 AND #$0E00
 XBA
 TAY
ENTOURSCRCPT03 LDA $A0A0,Y ; MASK
 INC
 STA ADRMASKCPT
 PLA  ; Y
 CMP #$0040 ; BORDURE HAUTE
 BPL ENTOURSCRCPT05
**
 STA ENTOURSCRCPT04+1 ; CHEVAL BORDURE HAUTE
 LDA #$0040
 SEC
ENTOURSCRCPT04 SBC #$A0A0 ; NB DE LIGNES PERDU=DECALAGE
 STA ENTOURSCRCPT44+1
 ASL
 TAY
 LDA ADRMASKCPT
 CLC
 ADC SEPTAB,Y
 STA ADRMASKCPT ; DECALAGE MASK
 LDA #$0005
 SEC
ENTOURSCRCPT44 SBC #$A0A0 ; HAUTEUR MASK
 STA HAUTMASKCPT
 STZ AFFICHSCRCPT3+1 ; Y0*2 (REFRESH LINES)
 LDA #$0000
 BRA ENTOURSCRCPT06
**
ENTOURSCRCPT05 SEC  ; PLEIN ECRAN
 SBC #$0040
 ASL
 STA AFFICHSCRCPT3+1 ; Y0*2 (REFRESH LINE)
 LDY #$0005 ; HAUTEUR
 STY HAUTMASKCPT
**
ENTOURSCRCPT06 TAY  ; ADRESSE DEBUT LIGNE ECRAN
 LDA TABLE,Y
 CLC
 ADC #$2000
 STA ADRSCRCPT
**
 PLA  ; X *** GAUCHE/MILIEU/DROIT ***
 LSR
 ASL  ; ALIGNEMENT PAIR
 SEC
 SBC #$0040
 TAX
 CMP XDROIT
 BPL ENTOURSCRCPT2 ; EN DEHORS
 CLC
 ADC #$0008
 CMP XGAUCH
 BMI ENTOURSCRCPT2 ; EN DEHORS
 CMP XDROIT
 BPL ENTOURSCRCPT3 ; DROITE
 SEC
 SBC #$0008
 CMP XGAUCH
 BMI ENTOURSCRCPT5 ; GAUCHE
 BRA ENTOURSCRCPT4 ; MILIEU
ENTOURSCRCPT1 PLA  ; PAS DANS L'ECRAN
ENTOURSCRCPT2 CLC
 RTS

ENTOURSCRCPT3 TXA ; ** DROITE **
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC ADRSCRCPT ; ADRESSE ECRAN
 STA ADRSCRCPT

 STX ENTOURSCRCPT30+1
 LDA XDROIT
 SEC
ENTOURSCRCPT30 SBC #$A0A0 ; LARGEUR MASK
 LSR
 STA LARGMASKCPT
 LSR
 BCC ENTOURSCRCPT31 ; PAIR ?
 INC LARGMASKCPT ; LARGEUR MASK
 DEC ADRMASKCPT ; ADRESSE MASK
 DEC ADRSCRCPT ; ADRESSE ECRAN
ENTOURSCRCPT31 SEC
 RTS  ; ON AFFICHE
**
ENTOURSCRCPT4 LDA #$0006 ; ** MILIEU **
 STA LARGMASKCPT ; LARGEUR MASK
 TXA
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC ADRSCRCPT ; ADRESSE ECRAN
 STA ADRSCRCPT
 SEC
 RTS  ; ON AFFICHE
**
ENTOURSCRCPT5 TXA  ; ** GAUCHE **
 STA ENTOURSCRCPT50+1
 LDA XGAUCH
 SEC
ENTOURSCRCPT50 SBC #$A0A0
 LSR
 STA ENTOURSCRCPT51+1
 CLC
 ADC ADRMASKCPT
 STA ADRMASKCPT ; DECALAGE MASK
 LDA #$0006
 SEC
ENTOURSCRCPT51 SBC #$A0A0
 LSR
 ASL
 STA LARGMASKCPT ; LARGEUR MASK
 SEC
 RTS  ; ON AFFICHE
**
DECALMASKCPT HEX 0000 ; DECALAGE MASK
ADRSCRCPT HEX 0000 ; ADRESSE ECRAN
ADRMASKCPT HEX 0000 ; ADRESSE MASK
LARGMASKCPT HEX 0000 ; LARGEUR MASK
HAUTMASKCPT HEX 0000 ; HAUTEUR MASK

CPTMASKPTAB DA CPTMASK1P,CPTMASK1P,CPTMASK2P,CPTMASK3P,CPTMASK4P,CPTMASK5P
CPTMASKITAB DA CPTMASK1I,CPTMASK1I,CPTMASK2I,CPTMASK3I,CPTMASK4I,CPTMASK5I

CPTMASK1P HEX 00000330000000,00000330000000,00000330000000,00000330000000,00000330000000 ; 1
 HEX FFFFF00FFFFFFF,FFFFF00FFFFFFF,FFFFF00FFFFFFF,FFFFF00FFFFFFF,FFFFF00FFFFFFF
CPTMASK2P HEX 00333333000000,00000033000000,00333333000000,00330000000000,00333333000000 ; 2
 HEX FF000000FFFFFF,FFFFFF00FFFFFF,FF000000FFFFFF,FF00FFFFFFFFFF,FF000000FFFFFF
CPTMASK3P HEX 00333333000000,00000033000000,00333333000000,00000033000000,00333333000000 ; 3
 HEX FF000000FFFFFF,FFFFFF00FFFFFF,FF000000FFFFFF,FFFFFF00FFFFFF,FF000000FFFFFF
CPTMASK4P HEX 00330033000000,00330033000000,00333333000000,00000033000000,00000033000000 ; 4
 HEX FF00FF00FFFFFF,FF00FF00FFFFFF,FF000000FFFFFF,FFFFFF00FFFFFF,FFFFFF00FFFFFF
CPTMASK5P HEX 00333333000000,00330000000000,00333333000000,00000033000000,00333333000000 ; 5
 HEX FF000000FFFFFF,FF00FFFFFFFFFF,FF000000FFFFFF,FFFFFF00FFFFFF,FF000000FFFFFF
CPTMASK1I HEX 00000033000000,00000033000000,00000033000000,00000033000000,00000033000000 ; 1
 HEX FFFFFF00FFFFFF,FFFFFF00FFFFFF,FFFFFF00FFFFFF,FFFFFF00FFFFFF,FFFFFF00FFFFFF
CPTMASK2I HEX 00033333300000,00000003300000,00033333300000,00033000000000,00033333300000 ; 2
 HEX FFF000000FFFFF,FFFFFFF00FFFFF,FFF000000FFFFF,FFF00FFFFFFFFF,FFF000000FFFFF
CPTMASK3I HEX 00033333300000,00000003300000,00033333300000,00000003300000,00033333300000 ; 3
 HEX FFF000000FFFFF,FFFFFFF00FFFFF,FFF000000FFFFF,FFFFFFF00FFFFF,FFF000000FFFFF
CPTMASK4I HEX 00033003300000,00033003300000,00033333300000,00000003300000,00000003300000 ; 4
 HEX FFF00FF00FFFFF,FFF00FF00FFFFF,FFF000000FFFFF,FFFFFFF00FFFFF,FFFFFFF00FFFFF
CPTMASK5I HEX 00033333300000,00033000000000,00033333300000,00000003300000,00033333300000 ; 5
 HEX FFF000000FFFFF,FFF00FFFFFFFFF,FFF000000FFFFF,FFFFFFF00FFFFF,FFF000000FFFFF

SEPTAB HEX 0000,0700,0E00,1500,1C00,2300

**************************************************************************
*******************  AFFICHAGE PETITS LEMMINGS EN BAS  *******************
**************************************************************************

AFFICHSMALL LDX #$0000 ; AFFICHAGE DES LEMMINGS DANS LE PETIT LEVEL

AFFICHSMALL1 LDA ETATAB,X
 AND #$00FF
 BEQ AFFICHSMALLNXT

 JSR SMALLADRESSE ; CALCULE L'ADRESSE XTAB/YTAB
 STY AFFICHSMALL2+1
 STA AFFICHSMALL4+1 ; ADRESSE POINT
 STA AFFICHSMALL5+1
 STA AFFICHSMALLADR,X ; MET L'ADRESSE DANS LA TABLE
AFFICHSMALL2 LDA #$A0A0
 LSR
 BCC AFFICHSMALL3
 LDA #$FFF0 ; IMPAIR
 STA SMALLMASQ1+1
 LDA #$0004
 STA SMALLMASQ2+1
 BRA AFFICHSMALL4
AFFICHSMALL3 LDA #$FF0F ; PAIR
 STA SMALLMASQ1+1
 LDA #$0040
 STA SMALLMASQ2+1
AFFICHSMALL4 LDAL $012000 ; AFFICHAGE
SMALLMASQ1 AND #$A0A0
SMALLMASQ2 ORA #$A0A0
AFFICHSMALL5 STAL $012000

AFFICHSMALLNXT INX
 INX
 CPX #$00C8 ; 100 LEMMINGS MAX
 BNE AFFICHSMALL1
 RTS

AFFICHSMALLADR DS 200 ; TABLE DES ADRESSES ECRAN DES PETITS

*****************  EFFACEMENT PETITS LEMMINGS EN BAS  **************

CLEANSMALL LDX #$0000 ; EFFACEMENT DES LEMMINGS DANS LE PETIT LEVEL

CLEANSMALL1 LDA AFFICHSMALLADR,X
 BEQ CLEANSMALLNXT

 STA CLEANSMALL4+1 ; ADRESSE POINT
 SEC
 SBC #$2000
 STA CLEANSMALL3+1
CLEANSMALL3 LDAL $050000 ; AFFICHAGE
CLEANSMALL4 STAL $012000
 STZ AFFICHSMALLADR,X ; ON L'EFFACE DE LA TABLE

CLEANSMALLNXT INX
 INX
 CPX #$00C8 ; 100 LEMMINGS MAX
 BNE CLEANSMALL1
 RTS

**************  CREUSEMENT DES PETITS LEMMINGS EN BAS  ***************

CREUSESMALL PHX  ; ON TROUE EN BAS
 JSR SMALLADRESSE
 STY CREUSESMALL2+1
 SEC
 SBC #$2000
 TAX ; ADRESSE POINT
CREUSESMALL2 LDA #$A0A0
 LSR
 BCC CREUSESMALL3
 LDA #$FFF0 ; IMPAIR
 STA CREUSEMASQ1+1
 STA CREUSEMASQ2+1
 BRA CREUSESMALL4
CREUSESMALL3 LDA #$FF0F ; PAIR
 STA CREUSEMASQ1+1
 STA CREUSEMASQ2+1
CREUSESMALL4 LDAL $012000,X ; AFFICHAGE
CREUSEMASQ1 AND #$A0A0
 STAL $012000,X
CREUSESMALL5 LDAL $050000,X
CREUSEMASQ2 AND #$A0A0
CREUSESMALL7 STAL $050000,X
 PLX
 RTS

**************  EXPLOSION DES PETITS LEMMINGS EN BAS  ***************

EXPLOSESMALL JSR SMALLADRESSE  ; ON TROUE EN BAS
 STA EXPLOSESMALL4+1 ; ADRESSE POINT
 STA EXPLOSESMALL5+1
 SEC
 SBC #$00A0
 STA EXPLOSESMALL7+1 ; ADRESSE POINT
 STA EXPLOSESMALL8+1
 LDA EXPLOSESMALL4+1
 SEC
 SBC #$2000
 STA EXPLOSESMALL6+1
 STA EXPLOSESMALL60+1
 SEC
 SBC #$00A0
 STA EXPLOSESMALL9+1
 STA EXPLOSESMALL90+1
EXPLOSESMALL4 LDAL $012000 ; AFFICHAGE
 AND #$00FF
EXPLOSESMALL5 STAL $012000
EXPLOSESMALL60 LDAL $050000
 AND #$00FF
EXPLOSESMALL6 STAL $050000
EXPLOSESMALL7 LDAL $012000 ; AFFICHAGE
 AND #$00FF
EXPLOSESMALL8 STAL $012000
EXPLOSESMALL90 LDAL $050000
 AND #$00FF
EXPLOSESMALL9 STAL $050000
 RTS

**************  MET BRIQUE DES PETITS LEMMINGS EN BAS  ***************

METSMALL JSR SMALLADRESSE ; ON TROUE EN BAS
 STY METSMALL2+1
 STA METSMALL5+1
 SEC
 SBC #$2000
 STA METSMALL6+1
 STA METSMALL4+1
METSMALL2 LDA #$A0A0
 LSR
 BCC METSMALL3
 LDA #$FFF0 ; IMPAIR
 STA METMASQ1+1
 LDA #$0002
 STA METMASQ2+1
 BRA METSMALL4
METSMALL3 LDA #$FF0F ; PAIR
 STA METMASQ1+1
 LDA #$0020
 STA METMASQ2+1
METSMALL4 LDAL $050000 ; AFFICHAGE
METMASQ1 AND #$A0A0
METMASQ2 ORA #$0A0A
METSMALL5 STAL $012000
METSMALL6 STAL $050000
 RTS

******************  CALCULE L'ADRESSE SMALL  *********************

SMALLADRESSE LDA YTAB,X ; CALCULE L'ADRESSE SMALL (XTAB/YTAB)
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 LSR
 LSR
 LSR  ; /8
 CMP #$0013 ; EVITE D'ALLER TROP BAS
 BMI SMALLADRESSE0
 LDA #$0012
SMALLADRESSE0 ASL
 TAY
 LDA TABLE,Y
 CLC
 ADC #$2000
 STA SMALLADRESSE10+1
 LDA XTAB,X
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 LSR
 LSR
 LSR
 LSR  ; /16
 TAY
 LSR
 CLC
SMALLADRESSE10 ADC #$A0A0
 CLC
 ADC #$7049 ; OFFSET
 RTS

*******************************************************************************
***************  TESTE LE CONTACT DU LEMMING AVEC LES BLOCKERS  ***************
*******************************************************************************

CONTACTBLOC LDA NBLOCKERS ; ON TESTE TOUS LES LEMMINGS
 BEQ CONTACTBLOCFIN
 ASL
 STA CONTACTBLOC29+1
 LDX #$0000
CONTACTBLOC1 LDA ETATAB,X
 AND #$00FF
 CMP #$0001 ; MARCHE
 BEQ CONTACTBLOC2
 CMP #$000A ; CREUSE ->
 BEQ CONTACTBLOC2
 CMP #$000B ; CREUSE DIAG
 BEQ CONTACTBLOC2
 CMP #$000D ; CONSTRUIT
 BEQ CONTACTBLOC2
CONTACTBLOCNXT INX  ; LEMMINGS SUIVANT
 INX
 CPX #$00C8 ; 100 LEMMINGS
 BNE CONTACTBLOC1
CONTACTBLOCFIN RTS

CONTACTBLOC2 JSR XRECENTRVAL ; ON RECENTRE (X=NUMERO DU LEM)
 STA XVALUEBL
 JSR YRECENTRVAL
 STA YVALUEBL
 STZ XPARTBL ; PARTIE GAUCHE PAR DEFAUT
 STX CURRENTLEMBL ; NUMERO DU LEMMINGS EN COURS (SVG)
 LDY #$0000 ; ON TESTE TOUS LES BLOCKERS
CONTACTBLOC20 PHY
 LDX BLOCKERTAB,Y
 JSR XRECENTRVAL ; TESTE X
 SEC
 SBC #$0005
 CMP XVALUEBL
 BPL CONTACTBLOC28
 CLC
 ADC #$000A
 CMP XVALUEBL
 BMI CONTACTBLOC28
 SEC  ; TEST GAUCHE/DROITE
 SBC #$0005
 CMP XVALUEBL
 BPL CONTACTBLOC21
 INC XPARTBL
CONTACTBLOC21 JSR YRECENTRVAL ; TESTE Y
 CLC
 ADC #$0004 ; 0
 CMP YVALUEBL
 BMI CONTACTBLOC28
 SEC
 SBC #$000D ; 9
 CMP YVALUEBL
 BPL CONTACTBLOC28
 BRA CONTACTBLOC30 ; OK, ON EST EN CONTACT
CONTACTBLOC28 PLY  ; BLOCKERS SUIVANTS
 STZ XPARTBL ; PARTIE GAUCHE PAR DEFAUT
 INY
 INY
CONTACTBLOC29 CPY #$A0A0 ; NB DE BLOCKERS
 BNE CONTACTBLOC20
 LDX CURRENTLEMBL ; RECUPERE LE X
 BRA CONTACTBLOCNXT ; LEMMINGS SUIVANT

CONTACTBLOC30 LDX CURRENTLEMBL  ; ON EST EN CONTACT
 LDA ETATAB,X
 ROL
 ROL
 AND #$0001
 CMP XPARTBL
 BEQ CONTACTBLOC31 ; SORT DU BLOCKER
 JSR XRECENTR ; RECENTRAGE
 JSR YRECENTR
 LDA ETATAB,X ; ON LE FAIT MARCHER
 AND #$FF00
 ORA #$0001
 EOR #$8000 ; ON INVERSE LA DIRECTION
 STA ETATAB,X
 STZ PASTAB,X
CONTACTBLOC31 JMP CONTACTBLOC28 ; BLOCKER SUIVANT

XPARTBL HEX 0000 ; 0:GAUCHE,1:DROITE
XVALUEBL HEX 0000 ; X RECENTRE
YVALUEBL HEX 0000 ; Y RECENTRE
CURRENTLEMBL HEX 0000 ; NUMERO DU LEMMINGS EN TEST

NBLOCKERS HEX 0000 ; NB DE BLOCKERS
BLOCKERTAB DS 200 ; NUMERO DES BLOCKERS

REMOVEBLOC LDA NBLOCKERS ; ENLEVE UN DES BLOCKERS DE LA TABLE
 BEQ REMOVEBLOCPROB ; MOUAI...
 ASL
 STA REMOVEBLOC3+1
 STX REMOVEBLOC2+1 ; NUMERO DU BLOCKER RECHERCHE
 LDY #$0000
REMOVEBLOC1 LDA BLOCKERTAB,Y
REMOVEBLOC2 CMP #$A0A0
 BEQ REMOVEBLOC4
 INY
 INY
REMOVEBLOC3 CPY #$A0A0
 BNE REMOVEBLOC1
REMOVEBLOCPROB BRK 00 ; PROBLEME... :-(
REMOVEBLOC4 DEC NBLOCKERS
 PHX
 LDA NBLOCKERS
 ASL
 TAX
 LDA BLOCKERTAB,X ; ON MET LE DERNIER A SA PLACE
 STA BLOCKERTAB,Y
 PLX
 RTS

*******************************************************************************
*****************  TESTE LE CONTACT DU LEMMING AVEC UNE ZONE  *****************
*******************************************************************************

CONTACTZONE LDY #$0000 ; PRESENCE DE LAVE, FLAMME...
 LDA LAVETAB,Y ; NB DE ZONE A TRAITER
 STA CONTACTZONXT1+1
 BNE CONTACTZONE0
 RTS  ; RIEN A TRAITER

CONTACTZONE0 DEC CONTACTZONXT1+1 ; UNE ZONE DE MOINS
 LDX #$0000
CONTACTZONE01 LDA ETATAB,X
 AND #$00FF ; LEMMING NON EN JEU
 BEQ CONTACTZONE02
 CMP #$0009 ; EXPLOSE
 BEQ CONTACTZONE02
 CMP #$000F ; DEJA EN COURS DE SORTIE/DESTRUCTION
 BPL CONTACTZONE02
 LDA XTAB,X ; ON VERIFIE QUE LE LEMMING EST DANS LA ZONE
 CMP LAVETAB+4,Y ; X0
 BMI CONTACTZONE02
 CMP LAVETAB+6,Y ; X1
 BPL CONTACTZONE02
 PHX
 LDA LAVETAB+2,Y ; TYPE DE ZONE
 AND #$00FF
 DEC
 ASL
 TAX
 LDA CONTACTZONETAB,X
 STA CONTACTZONE03+1
 PLX
CONTACTZONE03 JMP $A0A0
CONTACTZONE02 INX
 INX
 CPX #$00C8 ; 100 LEMMINGS
 BNE CONTACTZONE01

CONTACTZONXT TYA ; ZONE SUIVANTE
 CLC
 ADC #$0006
 TAY
CONTACTZONXT1 LDA #$A0A0
 BNE CONTACTZONE0
 RTS

CONTACTZONETAB DA CONTACTZONE1,CONTACTZONE2,CONTACTZONE3,CONTACTZONE4,CONTACTZONE5
 DA CONTACTZONE6,CONTACTZONE7,CONTACTZONE8,CONTACTZONE9
**
CONTACTZONE6 LDA LAVETAB+2,Y ; FLAMME PISTOLET
 AND #$FF00
 XBA
 STA CONTACTZONE60+1 ; ON DECODE Y0/Y1
 CLC
 ADC #$0013
 STA CONTACTZONE61+1
 LDA YTAB,X
CONTACTZONE60 CMP #$A0A0 ; Y0
 BMI CONTACTZONE62
CONTACTZONE61 CMP #$A0A0 ; Y1
 BPL CONTACTZONE62
 LDA #$00FF ; DESTRUCTION
 STA PASTAB,X
 LDA #$0012
 STA ETATAB,X
 LDA COMPTAB,X
 BEQ CONTACTZONE62
 STZ COMPTAB,X ; COMPTEUR
 DEC NBCOMPT
CONTACTZONE62 JMP CONTACTZONE02
**
CONTACTZONE3 LDA LAVETAB+2,Y ; TOURNIQUET/FLAMME
 AND #$FF00
 XBA
 STA CONTACTZONE31+1 ; ON DECODE Y0/Y1
 SEC
 SBC #$0007
 STA CONTACTZONE30+1
 LDA YTAB,X
CONTACTZONE30 CMP #$A0A0 ; Y0
 BMI CONTACTZONE32
CONTACTZONE31 CMP #$A0A0 ; Y1
 BPL CONTACTZONE32
 LDA #$00FF ; DESTRUCTION
 STA PASTAB,X
 LDA #$0012
 STA ETATAB,X
 LDA COMPTAB,X
 BEQ CONTACTZONE32
 STZ COMPTAB,X ; COMPTEUR
 DEC NBCOMPT
CONTACTZONE32 JMP CONTACTZONE02
**
CONTACTZONE8 LDA LAVETAB+2,Y ; DESINTEGRATEUR VERT
 AND #$FF00
 XBA
 STA CONTACTZONE80+1 ; ON DECODE Y0/Y1
 CLC
 ADC #$001A
 STA CONTACTZONE81+1
 LDA YTAB,X
CONTACTZONE80 CMP #$A0A0 ; Y0
 BMI CONTACTZONE82
CONTACTZONE81 CMP #$A0A0 ; Y1
 BPL CONTACTZONE82
 LDA #$00FF ; DESTRUCTION
 STA PASTAB,X
 LDA #$0012
 STA ETATAB,X
 LDA COMPTAB,X
 BEQ CONTACTZONE82
 STZ COMPTAB,X ; COMPTEUR
 DEC NBCOMPT
CONTACTZONE82 JMP CONTACTZONE02
**
CONTACTZONE9 LDA LAVETAB+2,Y ; DESINTEGRATEUR HORI
 AND #$FF00
 XBA
 INC
 STA CONTACTZONE90+1 ; ON DECODE Y0/Y1
 LDA Y1TAB,X
CONTACTZONE90 CMP #$A0A0 ; Y1
 BNE CONTACTZONE92
 LDA #$00FF ; DESTRUCTION
 STA PASTAB,X
 LDA #$0012
 STA ETATAB,X
 LDA COMPTAB,X
 BEQ CONTACTZONE92
 STZ COMPTAB,X ; COMPTEUR
 DEC NBCOMPT
CONTACTZONE92 JMP CONTACTZONE02
**
CONTACTZONE1 LDA LAVETAB+2,Y ; LAVE BLEU/ROUGE
 AND #$FF00
 BNE CONTACTZONE11
 LDA Y1TAB,X
 CMP #$00D2 ;
 BMI CONTACTZONE10
 CMP #$00D6
 BPL CONTACTZONE10
 LDA #$00D3
 JSR CONTACTNOIE
CONTACTZONE10 JMP CONTACTZONE02
CONTACTZONE11 XBA  ; LAVE BLEU/ROUGE BASSE
 CLC
 ADC #$0005
 STA CONTACTZONE12+1
 INC
 STA CONTACTZONE14+1
 CLC
 ADC #$0003
 STA CONTACTZONE13+1
 LDA Y1TAB,X
CONTACTZONE12 CMP #$00D2 ; +5
 BMI CONTACTZONE10
CONTACTZONE13 CMP #$00D6 ; +9
 BPL CONTACTZONE10
CONTACTZONE14 LDA #$00D3 ; +6
 JSR CONTACTNOIE
 JMP CONTACTZONE02
**
CONTACTZONE2 LDA LAVETAB+2,Y ; LAVE VERTE
 AND #$FF00
 BNE CONTACTZONE21
 LDA Y1TAB,X
 CMP #$00CA
 BMI CONTACTZONE20
 CMP #$00CE
 BPL CONTACTZONE20
 LDA #$00CB
 JSR CONTACTNOIE
CONTACTZONE20 JMP CONTACTZONE02
CONTACTZONE21 XBA  ; LAVE VERTE HAUTE
 STA CONTACTZONE24+1
 DEC
 DEC
 STA CONTACTZONE22+1
 CLC
 ADC #$0004
 STA CONTACTZONE23+1
 LDA Y1TAB,X
CONTACTZONE22 CMP #$00CA ; -2
 BMI CONTACTZONE20
CONTACTZONE23 CMP #$00CE ; +2
 BPL CONTACTZONE20
CONTACTZONE24 LDA #$00CC
 JSR CONTACTNOIE
 JMP CONTACTZONE02
**
CONTACTZONE4 LDA LAVETAB+2,Y ; POTENCE
 AND #$FF00
 XBA
 CMP YTAB,X
 BNE CONTACTZONE40
 LDA POTENCEFLAG ; PENDU
 BNE CONTACTZONE40 ; OCCUPE...
 LDA #$0013 ; PENDAISON
 STA ETATAB,X
 STZ PASTAB,X
 LDA COMPTAB,X
 BEQ CONTACTZONE41
 STZ COMPTAB,X ; COMPTEUR
 DEC NBCOMPT
CONTACTZONE41 INC POTENCEFLAG ; POTENCE OCCUPEE
 STX POTENCELEM ; NUMERO DU LEMMINGS
CONTACTZONE40 JMP CONTACTZONE02
**
CONTACTZONE7 LDA LAVETAB+2,Y ; COUPE TETE
 AND #$FF00
 XBA
 CMP YTAB,X
 BNE CONTACTZONE70
 PHY
 LDY #$0000
 LDA NUMEROLEVEL
 CMP #$003D ; PATCH LEVEL 62
 BNE CONTACTZONE72
CONTACTZONE71 LDA CONTACTZONE7TAB,Y
 CMP XTAB,X
 BEQ CONTACTZONE72
 INY
 INY
 CPY #$0006
 BNE CONTACTZONE71
 LDA #$0004 ; PROBLEME :-)
 JSR BORD6
 BRK 00
CONTACTZONE72 LDA GUILLOFLAG,Y
 BNE CONTACTZONE73 ; OCCUPE
 LDA #$0015 ; ON COUPE :-)
 STA ETATAB,X
 STZ PASTAB,X
 LDA COMPTAB,X
 BEQ CONTACTZONE74
 STZ COMPTAB,X ; COMPTEUR
 DEC NBCOMPT
CONTACTZONE74 LDA #$0001
 STA GUILLOFLAG,Y ; ECRASEMENT OCCUPE
 TXA
 STA GUILLOLEM,Y ; NUMERO DU LEMMINGS
CONTACTZONE73 PLY
CONTACTZONE70 JMP CONTACTZONE02
CONTACTZONE7TAB HEX 1402,D403,3004 ; PATCH POUR LES 3 DU NIVEAU 62
**
CONTACTZONE5 LDA LAVETAB+2,Y  ; ECRASEMENT
 AND #$FF00
 XBA
 CMP YTAB,X
 BNE CONTACTZONE50
 PHY
 LDY #$0000
 LDA NUMEROLEVEL
 CMP #$0041 ; LEVEL 66 = 17
 BEQ CONTACTZONE51
 CMP #$0010 ; PATCH LEVEL 17
 BNE CONTACTZONE52
CONTACTZONE51 LDA CONTACTZONE5TAB,Y
 CMP XTAB,X
 BEQ CONTACTZONE52
 INY
 INY
 CPY #$0008
 BNE CONTACTZONE51
 LDA #$0004 ; PROBLEME :-)
 JSR BORD6
 BRK 00
CONTACTZONE52 LDA ECRASEFLAG,Y
 BNE CONTACTZONE53 ; OCCUPE
 LDA #$0014 ; ON ECRASE :-)
 STA ETATAB,X
 STZ PASTAB,X
 LDA COMPTAB,X
 BEQ CONTACTZONE54
 STZ COMPTAB,X ; COMPTEUR
 DEC NBCOMPT
CONTACTZONE54 LDA #$0001
 STA ECRASEFLAG,Y ; ECRASEMENT OCCUPE
 TXA
 STA ECRASELEM,Y ; NUMERO DU LEMMINGS
CONTACTZONE53 PLY
CONTACTZONE50 JMP CONTACTZONE02
CONTACTZONE5TAB HEX F002,3003,7003,B003 ; PATCH POUR LES 4 DU NIVEAU 17
**
CONTACTNOIE STA YTAB,X ; IL SE NOIE !!
 LDA #$00FF
 STA PASTAB,X
 LDA ETATAB,X
 AND #$F000 ; BLOQUE LE COMPTEUR
 ORA #$0011
 STA ETATAB,X
 LDA COMPTAB,X
 BEQ CONTACTNOIE0
 STZ COMPTAB,X ; COMPTEUR
 DEC NBCOMPT
CONTACTNOIE0 LDA ETATAB,X ; ON CALCULE LA DISTANCE AU BORD
 AND #$8000
 BNE CONTACTNOIE2
 LDA XTAB,X ; GAUCHE
 SEC
 SBC LAVETAB+4,Y ; X0 LAVE
 CMP #$0014
 BPL CONTACTNOIE1
 XBA
 ORA PASTAB,X
 STA PASTAB,X
 RTS
CONTACTNOIE1 LDA PASTAB,X
 ORA #$1400
 STA PASTAB,X
 RTS
CONTACTNOIE2 LDA LAVETAB+6,Y ; DROITE
 SEC
 SBC XTAB,X
 CMP #$0014
 BPL CONTACTNOIE3
 XBA
 ORA PASTAB,X
 STA PASTAB,X
 RTS
CONTACTNOIE3 LDA PASTAB,X
 ORA #$1400
 STA PASTAB,X
 RTS
**

LAVETAB HEX 0000 ; NB DE ZONES
 HEX 0200,2302,E603 ; TYPE/Y,X0,X1(1:BLEU/ROUGE,2:VERT,3:TOURN/FLAMME,4:POTENCE,5:ECRASE)
 DS 19*6 ; 20 ZONES MAX

********************************************************************************
