
****************************************************************************
*****************  RECUPERE LA VALEUR D'UN POINT DU DECOR  *****************
****************************************************************************

LOOKDECOR PHX ; A:Y, Y:X   :-) , RENVOI 000x
 PHA
 CMP #$0040
 BMI LOOKDECORHORS2 ; TROP HAUT
 CMP #$00E0
 BPL LOOKDECORHORS1 ; TROP BAS
 CPY #$0044
 BMI LOOKDECORHORS2 ; TROP GAUCHE
 CPY #$067C
 BPL LOOKDECORHORS2 ; TROP A DROITE
 PLA
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 CMP #$0050 ; 80
 BPL LOOKDECORBAS
 BRA LOOKDECORHAU

LOOKDECORHORS1 PLA  ; EN DEHORS DU CADRE
 PLX
 LDA #$0000 ; EN BAS, DU VIDE...
 RTS
LOOKDECORHORS2 PLA  ; EN DEHORS DU CADRE
 PLX
 LDA #$000F ; AILLEURS, C'EST PLEIN
 RTS

LOOKDECORHAU ASL  ; LIGNES 0 -> 79
 TAX
 LDA MILLESIXTAB,X
 STA MILLETMP
 TYA  ; X
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 LSR
 BCS LOOKDECORHAU2
 CLC  ; X PAIR
 ADC MILLETMP
 TAX
LOOKDECORHAU1 LDAL $0A0000,X
 PLX
 AND #$00F0
 LSR
 LSR
 LSR
 LSR
 RTS
LOOKDECORHAU2 CLC  ; X IMPAIR
 ADC MILLETMP
 TAX
LOOKDECORHAU3 LDAL $0A0000,X
 PLX
 AND #$000F
 RTS

LOOKDECORBAS SEC  ; LIGNES 80 -> 159
 SBC #$0050
 ASL
 TAX
 LDA MILLESIXTAB,X
 STA MILLETMP
 TYA  ; X
 SEC
 SBC #$0040 ; DECALAGE BORDURES
 LSR
 BCS LOOKDECORBAS2
 CLC  ; X PAIR
 ADC MILLETMP
 TAX
LOOKDECORBAS1 LDAL $0B0000,X
 PLX
 AND #$00F0
 LSR
 LSR
 LSR
 LSR
 RTS
LOOKDECORBAS2 CLC  ; X IMPAIR
 ADC MILLETMP
 TAX
LOOKDECORBAS3 LDAL $0B0000,X
 PLX
 AND #$000F
 RTS

MILLETMP HEX 0000

MILLESIXTAB HEX 0000,2003,4006,6009,800C,A00F,C012,E015 ; *800
 HEX 0019,201C,401F,6022,8025,A028,C02B,E02E
 HEX 0032,2035,4038,603B,803E,A041,C044,E047
 HEX 004B,204E,4051,6054,8057,A05A,C05D,E060
 HEX 0064,2067,406A,606D,8070,A073,C076,E079
 HEX 007D,2080,4083,6086,8089,A08C,C08F,E092
 HEX 0096,2099,409C,609F,80A2,A0A5,C0A8,E0AB
 HEX 00AF,20B2,40B5,60B8,80BB,A0BE,C0C1,E0C4
 HEX 00C8,20CB,40CE,60D1,80D4,A0D7,C0DA,E0DD
 HEX 00E1,20E4,40E7,60EA,80ED,A0F0,C0F3,E0F6
**
LOOKDECORZONE STA DECORZONEY ; ON DONNE EN PLUS LE TYPE DE DECOR
 STY DECORZONEX ; A:Y, Y:X
 PHX
 STZ DECORZONERES ; PAR DEFAUT...
 LDX #$0000
 LDA DECORZONETAB ; NB DE ZONE A TRAITER
 BEQ LOOKDECORZONE2
 STA LOOKDECORZONT1+1

LOOKDECORZONE1 LDA DECORZONEX
 CMP DECORZONETAB+2,X ; X0
 BMI LOOKDECORZONXT
 CMP DECORZONETAB+4,X ; X1
 BPL LOOKDECORZONXT
 LDA DECORZONEY
 CMP DECORZONETAB+6,X ; Y0
 BMI LOOKDECORZONXT
 LDA DECORZONETAB+8,X ; Y1
 AND #$00FF ; ATTENTION AU TYPE DE ZONE
 DEC
 CMP DECORZONEY
 BMI LOOKDECORZONXT
 LDA DECORZONETAB+8,X ; ON RECUPERE LE TYPE DE ZONE
 AND #$FF00
 STA DECORZONERES
 BRA LOOKDECORZONE2 ; FINI...

LOOKDECORZONXT TXA ; ZONE SUIVANTE
 CLC
 ADC #$0008
 TAX
 DEC LOOKDECORZONT1+1
LOOKDECORZONT1 LDA #$A0A0
 BNE LOOKDECORZONE1

LOOKDECORZONE2 PLX  ; ON CHERCHE MAINTENANT LA VALEUR DU POINT
 LDA DECORZONEY
 LDY DECORZONEX
 JSR LOOKDECOR
 ORA DECORZONERES ; ON AJOUTE LE TYPE DE ZONE
 RTS

DECORZONEX HEX 0000 ; X ET Y DEMANDE
DECORZONEY HEX 0000
DECORZONERES HEX 0000 ; RESULTAT

DECORZONETAB HEX 0400 ; NB DE ZONE
 HEX 4802,6002,CF00,E001  ; X0,X1,Y0,Y1/TYPE ZONE(0 FRIABLE,1 DUR,2 <=,3=>)
 DS 59*8 ; 60 ZONES DURES/FLECHEES MAX

**************************************************************************
**************************  PLACE LA BRIQUE  *****************************
**************************************************************************

METBRIQUE SEC ; X MET LA BRIQUE DANS LE DECOR
 SBC #$0040 ; DECALAGE BORDURE
 STA BRIQUECOOR
 TYA  ; Y
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 STA BRIQUECOOR+2
 CMP #$0050 ; CALCUL L'ADRESSE
 BPL METBRIQUE1
 ASL  ; LIGNES 0 -> 79
 TAX
 LDA MILLESIXTAB,X
 STA BRIQUEADR+2 ; ADRESSE NIVEAU Y
 LDA BANC0A
 STA BRIQUEADR ; BANC
 JSR METBANCBRIQ ; MET LE NUMERO DU BANC
 BRA METBRIQUE2
METBRIQUE1 SEC  ; LIGNES 80 -> 159
 SBC #$0050
 ASL
 TAX
 LDA MILLESIXTAB,X
 STA BRIQUEADR+2 ; ADRESSE NIVEAU Y
 LDA BANC0B
 STA BRIQUEADR ; BANC
 JSR METBANCBRIQ ; MET LE NUMERO DU BANC
METBRIQUE2 LDA BRIQUECOOR ; ON AJOUTE LE DECALAGE X
 LSR
 CLC
 ADC BRIQUEADR+2
 STA BRIQUEADR+2 ; ADRESSE DEF
**
 LDX BRIQUEADR+2 ; CREATION DU MASQUE
METBRIQUE30 LDAL $0A0000,X
 AND #$00FF
 TAY
 LDA #$8888
 AND MASKTABLE,Y
 STA BRIQUEMASQ
METBRIQUE31 LDAL $0A0001,X
 AND #$00FF
 TAY
 LDA #$8888
 AND MASKTABLE,Y
 STA BRIQUEMASQ+1
METBRIQUE32 LDAL $0A0002,X
 AND #$00FF
 TAY
 LDA #$8888
 AND MASKTABLE,Y
 STA BRIQUEMASQ+2
METBRIQUE33 LDAL $0A0003,X
 AND #$00FF
 TAY
 LDA #$8888
 AND MASKTABLE,Y
 STA BRIQUEMASQ+3
**
 STZ BRIQUEMASQ+4 ; AFFICHAGE
 LDA BRIQUECOOR
 LSR
 BCS METBRIQUE5
 STZ BRIQUEMASQ+3 ; AFFICHAGE PAIR
METBRIQUE40 LDAL $0A0000,X
 ORA BRIQUEMASQ
METBRIQUE41 STAL $0A0000,X
METBRIQUE42 LDAL $0A0002,X
 ORA BRIQUEMASQ+2
METBRIQUE43 STAL $0A0002,X
 BRA METBRIQUESCR
METBRIQUE5 LDA BRIQUEMASQ ; AFFICHE IMPAIR
 AND #$FF0F
 STA BRIQUEMASQ
 LDA BRIQUEMASQ+3
 AND #$00F0
 STA BRIQUEMASQ+3
METBRIQUE50 LDAL $0A0000,X
 ORA BRIQUEMASQ
METBRIQUE51 STAL $0A0000,X
METBRIQUE52 LDAL $0A0002,X
 ORA BRIQUEMASQ+2
METBRIQUE53 STAL $0A0002,X
METBRIQUE54 LDAL $0A0004,X
 ORA BRIQUEMASQ+4
METBRIQUE55 STAL $0A0004,X
**
METBRIQUESCR LDX #$0000 ; CREE LE MASQUE AND
METBRIQUEAND LDA BRIQUEMASQ,X
 AND #$00FF
 TAY
 LDA MASKTABLE,Y
 STA BRIQUEAND,X ; MASQUE AND
 INX
 CPX #$0004
 BNE METBRIQUEAND
 LDA #$FFFF
 STA BRIQUEAND+4

 LDA BRIQUECOOR ; MET LA BRIQUE EN BANC 05 SI BESOIN
 LSR
 ASL
 STA BRIQUECOOR+4
 CMP XDROIT
 BPL METBRIQUESCR1 ; EN DEHORS
 CLC
 ADC #$0008
 CMP XGAUCH
 BMI METBRIQUESCR1 ; EN DEHORS
 CMP XDROIT
 BPL METBRIQUESC4 ; BORDURE DROITE
 LDA BRIQUECOOR+4
 CMP XGAUCH
 BMI METBRIQUESC3 ; BORDURE GAUCHE
 JMP METBRIQUESC2 ; PLEIN ECRAN
METBRIQUESCR1 RTS
**
METBRIQUESC3 LDA BRIQUECOOR+2 ; BORDURE GAUCHE
 ASL
 TAX
 LDA TABLE,X
 TAX  ; ADRESSE ECRAN
 LDA XGAUCH
 SEC
 SBC BRIQUECOOR+4 ; X
 LSR  ; NB D'OCTETS EN DEHORS
 TAY
INIT0523 LDAL $050000,X
 AND BRIQUEAND,Y
 ORA BRIQUEMASQ,Y
INIT0524 STAL $050000,X
 STAL $012000,X
 INY
 INY
 CPY #$0004
 BPL METBRIQUESC30 ; FIN
 DEY
INIT0525 LDAL $050001,X
 AND BRIQUEAND,Y
 ORA BRIQUEMASQ,Y
INIT0526 STAL $050001,X
 STAL $012001,X
 INY
 CPY #$0004
 BPL METBRIQUESC30 ; FIN
INIT0527 LDAL $050002,X
 AND BRIQUEAND,Y
 ORA BRIQUEMASQ,Y
INIT0528 STAL $050002,X
 STAL $012002,X
METBRIQUESC30 RTS
**
METBRIQUESC4 LDA BRIQUECOOR+2 ; BORDURE DROITE
 ASL  ; Y
 TAX
 LDA BRIQUECOOR+4 ; X
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC TABLE,X ; ADRESSE ECRAN
 TAX
 LDA XDROIT
 SEC
 SBC BRIQUECOOR+4
 LSR  ; NB D'OCTET A AFFICHER
 TAY
 CMP #$0001
 BEQ METBRIQUESC41
INIT0529 LDAL $050000,X ; 2 PREMIERS OCTETS : 0 ET 1
 AND BRIQUEAND
 ORA BRIQUEMASQ
INIT0530 STAL $050000,X
 STAL $012000,X
 DEY
 DEY
 BEQ METBRIQUESC40 ; FIN
INIT0531 LDAL $050001,X ; 1 ET 2
 AND BRIQUEAND+1
 ORA BRIQUEMASQ+1
INIT0532 STAL $050001,X
 STAL $012001,X
 DEY
 BEQ METBRIQUESC40 ; FIN
INIT0533 LDAL $050002,X ; 2 ET 3
 AND BRIQUEAND+2
 ORA BRIQUEMASQ+2
INIT0534 STAL $050002,X
 STAL $012002,X
METBRIQUESC40 RTS
METBRIQUESC41 DEX ; 1 SEUL OCTET : 0
INIT0535 LDAL $050000,X
 AND BRIQUEAND-1
 ORA BRIQUEMASQ-1
INIT0536 STAL $050000,X
 STAL $012000,X
 RTS
**
METBRIQUESC2 LDA BRIQUECOOR+2 ; PLEIN ECRAN
 ASL  ; Y
 TAX
 LDA BRIQUECOOR+4 ; X
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC TABLE,X ; ADRESSE ECRAN
 TAX
INIT0537 LDAL $050000,X ; 4 OCTETS A AFFICHER
 AND BRIQUEAND
 ORA BRIQUEMASQ
INIT0538 STAL $050000,X
 STAL $012000,X
INIT0539 LDAL $050002,X ;
 AND BRIQUEAND+2
 ORA BRIQUEMASQ+2
INIT0540 STAL $050002,X
 STAL $012002,X
 RTS
**
METBANCBRIQ LDA METBRIQUE30+2 ; PLACE LE NUMERO DU BANC
 CMP BRIQUEADR
 BNE METBANCBRIQ1
 RTS  ; DEJA EN PLACE
METBANCBRIQ1 LDA BRIQUEADR
 STA METBRIQUE30+2
 STA METBRIQUE31+2
 STA METBRIQUE32+2
 STA METBRIQUE33+2
 STA METBRIQUE40+2
 STA METBRIQUE41+2
 STA METBRIQUE42+2
 STA METBRIQUE43+2
 STA METBRIQUE50+2
 STA METBRIQUE51+2
 STA METBRIQUE52+2
 STA METBRIQUE53+2
 STA METBRIQUE54+2
 STA METBRIQUE55+2
 RTS

BRIQUECOOR HEX 0000,0000,0000 ; X,Y, X AJUSTEE PAIR
BRIQUEADR HEX 0000,0000 ; BANC,ADRE
 HEX 0000
BRIQUEMASQ HEX 0000,0000,0000,0000 ; LES 888888 LA OU IL FAUT
 HEX FFFF
BRIQUEAND HEX 0000,0000,FFFF,FFFF ;

************  TESTE LA PRESENCE D'UNE PAROIE  **************

METPAROIE PHX  ; PAROIE DEVANT LE LEMMING
 LDA ETATAB,X
 AND #$8000
 BNE METPAROIE1
 LDA XTAB,X ; GAUCHE
 TAY
 JSR METPAROIE3 ; TESTE LA PAROIE
 BNE METPAROIE2
 DEY
 JSR METPAROIE3 ; TESTE LA PAROIE
 BNE METPAROIE2
 DEY
 JSR METPAROIE3 ; TESTE LA PAROIE
 BNE METPAROIE2
 PLX
 LDA #$0000 ; VIDE
 RTS
METPAROIE1 LDA XTAB,X ; DROITE
 TAY
 JSR METPAROIE3 ; TESTE LA PAROIE
 BNE METPAROIE2
 INY
 JSR METPAROIE3 ; TESTE LA PAROIE
 BNE METPAROIE2
 INY
 JSR METPAROIE3 ; TESTE LA PAROIE
 BNE METPAROIE2
 PLX
 LDA #$0000 ; VIDE
 RTS
METPAROIE2 PLX  ; TERRE
 LDA #$0001
 RTS

METPAROIE3 LDA Y1TAB,X
 DEC
 PHA
 JSR LOOKDECOR ; TESTE DECOR
 BEQ METPAROIEFIN
 PLA
 DEC
 PHA
 JSR LOOKDECOR ; TESTE DECOR
 BEQ METPAROIEFIN
 PLA
 DEC
 PHA
 JSR LOOKDECOR ; TESTE DECOR
 BEQ METPAROIEFIN
 PLA
 DEC
 PHA
 JSR LOOKDECOR ; TESTE DECOR
 BEQ METPAROIEFIN
 PLA
 DEC
 PHA
 JSR LOOKDECOR ; TESTE DECOR
 BEQ METPAROIEFIN
 PLA
 LDA #$0001 ; TERRE
 RTS
METPAROIEFIN PLA
 LDA #$0000 ; VIDE
 RTS

******************************************************************************
*************************  CREUSE APRES UNE EXPLOSION  ***********************
******************************************************************************

CREUSEXPLODEC PHX  ; X,Y  CREUSE EXPLOSION DECOR
 PHY
 JSR CREUSEXPLOSEI ; MASK PROPRE, INIT
 JSR MODIFMASKEX ; MODIFIE LE MASK EN FONCTION DES ZONES
**
 TXA  ; X (CADRE)
 SEC
 SBC #$0040
 LSR
 STA CREUSEXPLOADR ; OFFSET X DECOR
**
 TYA  ; Y (CADRE)
 CMP #$0040 ; BORDURE HAUTE
 BPL CREUSEXPLODC02
 STA CREUSEXPLODC01+1 ; **  CHEVAUCHE BORDURE HAUTE
 LDA #$0040
 SEC
CREUSEXPLODC01 SBC #$A0A0
 STA CREUSEXPLOFFH ; OFFSET HAUT
 LDA #$0016
 SEC
 SBC CREUSEXPLOFFH
 STA CREUSEXPLOHAU ; HAUTEUR
 BRA CREUSEXPLODEC0
CREUSEXPLODC02 CLC
 ADC #$0016
 CMP #$00E0 ; BORDURE BASSE
 BPL CREUSEXPLODC03
 LDA #$0016 ; **  AU CENTRE DE L'ECRAN
 STA CREUSEXPLOHAU
 STZ CREUSEXPLOFFH
 BRA CREUSEXPLODEC0
CREUSEXPLODC03 STY CREUSEXPLODC04+1 ; **  CHEVAUCHE BORDURE BASSE
 LDA #$00E0
 SEC
CREUSEXPLODC04 SBC #$A0A0
 STA CREUSEXPLOHAU ; HAUTEUR
 STZ CREUSEXPLOFFH ; OFFSET HAUT
**
CREUSEXPLODEC0 TYA
 SEC
 SBC #$0040
 CLC
 ADC CREUSEXPLOFFH
 TAY
 LDA CREUSEXPLOFFG ; OFFSET GAUCHE
 STA CREUSEXPLODE2+1
 LDA CREUSEXPLOHAU
 STA CREUSEXPLODEC2+1 ; HAUTEUR MASQ
**
CREUSEXPLODEC1 PHY
 JSR CREUSEXPLODE ; CREUSE 1 LIGNE DU MASQUE
 PLY
 INY
 DEC CREUSEXPLODEC2+1
CREUSEXPLODEC2 LDA #$A0A0 ; HAUTEUR MASQUE
 BNE CREUSEXPLODEC1
 PLY
 PLX
 JSR CREUSEXPLOSCR ; CREUSE ECRAN
 RTS

CREUSEXPLODE LDA BANC0A ; CREUSE 1 LIGNE, LIGNES 0->79
 CPY #$0050
 BMI CREUSEXPLODE1
 TYA
 SEC
 SBC #$0050
 TAY
 LDA BANC0B ; LIGNE 80->159
CREUSEXPLODE1 STA CREUSEXPLODE3+2
 STA CREUSEXPLODE4+2
 TYA
 ASL
 TAY
 LDA MILLESIXTAB,Y
 STA CREUSEXPLODE3+1
 STA CREUSEXPLODE4+1
 LDA CREUSEXPLOLAR ; LARGEUR (OCTETS)
 LSR
 STA CREUSEXPLODE5+1
CREUSEXPLODE2 LDY #$A0A0 ; OFFSET MASK GAUCHE
 LDX CREUSEXPLOADR ; DECALAGE X DECOR
CREUSEXPLODE3 LDAL $0A0000,X
 AND EXPLOSEMASK,Y
CREUSEXPLODE4 STAL $0A0000,X
 INX
 INX
 INY
 INY
 DEC CREUSEXPLODE5+1
CREUSEXPLODE5 LDA #$A0A0
 BNE CREUSEXPLODE3
 LDA CREUSEXPLODE2+1
 CLC
 ADC #$000C
 STA CREUSEXPLODE2+1
 RTS

CREUSEXPLOSEI PHX  ; REMET UN NOUVEAU MASK PROPRE
 LDX #$0106
CREUSEXPLOSEI1 LDA EXPLOSEMASKSVG,X
 STA EXPLOSEMASK,X
 DEX
 DEX
 BPL CREUSEXPLOSEI1
 LDA #$0002
 STA CREUSEXPLOFFG
 LDA #$0008
 STA CREUSEXPLOLAR
 PLX
 RTS

CREUSEXPLOADR HEX 0000 ; DECALAGE X DECOR
CREUSEXPLOLAR HEX 0800 ; LARGEUR (OCTETS)
CREUSEXPLOFFG HEX 0200 ; OFFSET MASK GAUCHE (OCTETS)
CREUSEXPLOFFH HEX 0000 ; OFFSET MASK HAUT
CREUSEXPLOHAU HEX 1600 ; HAUTEUR MASK

CREUSEXPLOSCR LDA CREUSEXPLOLAR  ; CREUSE EXPLOSION ECRAN
 ASL
 STA CREUSEXPLOSCR1+1 ; LARGEUR
 STA CREUSEXPLOSCR2+1
 TYA  ; X,Y
 SEC
 SBC #$0040
 CLC
 ADC CREUSEXPLOFFH ; OFFSET HAUT
 ASL
 TAY
 LDA TABLE,Y
 STA CREUSEXPLOSCM0+1 ; ADRESSE LIGNE
 TXA
 SEC
 SBC #$0040
 TAX
 CMP XDROIT
 BPL CREUSEXPLOSCR3 ; EN DEHORS
 CLC
CREUSEXPLOSCR1 ADC #$A0A0 ; LARGEUR
 CMP XGAUCH
 BMI CREUSEXPLOSCR3 ; EN DEHORS
 CMP XDROIT
 BPL CREUSEXPLOSCD ; BORDURE DROITE
 SEC
CREUSEXPLOSCR2 SBC #$A0A0
 CMP XGAUCH
 BPL CREUSEXPLOSCM ; MILIEU
 BRA CREUSEXPLOSCG ; BORDURE GAUCHE
CREUSEXPLOSCR3 RTS

CREUSEXPLOSCG TXA  ; GAUCHE
 STA CREUSEXPLOSCG1+1
 LDA XGAUCH
 SEC
CREUSEXPLOSCG1 SBC #$A0A0
 LSR
 STA CREUSEXPLOSCG2+1
 CLC
 ADC CREUSEXPLOFFG ; OFFSET GAUCHE MASK
 STA CREUSEXPLOFFG
 LDX XGAUCH ; NOUVEL X0
 LDA CREUSEXPLOLAR ; LARGEUR MASK
 SEC
CREUSEXPLOSCG2 SBC #$A0A0
 STA CREUSEXPLOLAR
 LSR  ; ON ALIGNE LA LARGEUR SUR 4 PIXELS
 BCC CREUSEXPLOSCM
 INC CREUSEXPLOLAR
 BRA CREUSEXPLOSCM ; ON AFFICHE

CREUSEXPLOSCD TXA  ; DROITE
 STA CREUSEXPLOSCD2+1
 LDA XDROIT ; LARGEUR MASK
 SEC
CREUSEXPLOSCD2 SBC #$A0A0
 LSR  ; NB OCTETS LARGEUR
 STA CREUSEXPLOLAR
 PHX
 PHY
 LDA CREUSEXPLOFFG ; OFFSET GAUCHE
 CLC
 ADC CREUSEXPLOLAR ; LARGEUR
 TAX  ;
 LDY #$0000
CREUSEXPLOSCD3 LDA #$FFFF ; MET UNE BANDE DE FFFF EN BORDURE
 STA EXPLOSEMASK,X
 TXA
 CLC
 ADC #$000C
 TAX
 INY
 CPY #$0016
 BNE CREUSEXPLOSCD3
 PLY
 PLX
 LDA CREUSEXPLOLAR ; ALIGNE LARGEUR SUR 4 PIXELS
 LSR
 BCC CREUSEXPLOSCM
 INC CREUSEXPLOLAR
 DEC CREUSEXPLOFFG
 DEC CREUSEXPLOSCM0+1

CREUSEXPLOSCM LDA CREUSEXPLOHAU ; MILIEU, ON AFFICHE
 STA CREUSEXPLOSCM6+1 ; HAUTEUR MASK
 LDA CREUSEXPLOFFH ; OFFSET HAUT
 ASL
 TAY
 LDA DOUZETAB,Y
 CLC
 ADC CREUSEXPLOFFG
 STA CREUSEXPLOSCM1+1 ; ADRESSE DEBUT MASK
 TXA
 SEC
 SBC XGAUCH
 LSR
 CLC
CREUSEXPLOSCM0 ADC #$A0A0
 STA CREUSEXPLOSCM2+1 ; DEBUT LIGNE ECRAN
CREUSEXPLOSCM1 LDY #$A0A0 ; DEBUT LIGNE MASK
CREUSEXPLOSCM2 LDX #$A0A0 ; DEBUT LIGNE ECRAN
 LDA CREUSEXPLOLAR
 LSR
 STA CREUSEXPLOSCM5+1 ; LARGEUR MASK
CREUSEXPLOSCM3 LDAL $050000,X
 AND EXPLOSEMASK,Y
CREUSEXPLOSCM4 STAL $050000,X
 STAL $012000,X
 INX
 INX
 INY
 INY
 DEC CREUSEXPLOSCM5+1 ; LARGEUR MASQUE
CREUSEXPLOSCM5 LDA #$A0A0
 BNE CREUSEXPLOSCM3
 LDA CREUSEXPLOSCM1+1 ; DEBUT LIGNE MASK
 CLC
 ADC #$000C
 STA CREUSEXPLOSCM1+1
 LDA CREUSEXPLOSCM2+1 ; DEBUT LIGNE ECRAN
 CLC
 ADC #$00A0
 STA CREUSEXPLOSCM2+1
 DEC CREUSEXPLOSCM6+1
CREUSEXPLOSCM6 LDA #$A0A0 ; HAUTEUR DU MASQUE
 BNE CREUSEXPLOSCM1
 RTS

EXPLOSEMASK HEX FFFF,FFFF,F000,000F,FFFF,FFFF
 HEX FFFF,FFFF,0000,0000,FFFF,FFFF
 HEX FFFF,FFF0,0000,0000,0FFF,FFFF
 HEX FFFF,FFF0,0000,0000,0FFF,FFFF
 HEX FFFF,FF00,0000,0000,00FF,FFFF
 HEX FFFF,FF00,0000,0000,00FF,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,FF00,0000,0000,00FF,FFFF
 HEX FFFF,FFF0,0000,0000,0FFF,FFFF
 HEX FFFF,FFFF,F000,000F,FFFF,FFFF

EXPLOSEMASKSVG HEX FFFF,FFFF,F000,000F,FFFF,FFFF
 HEX FFFF,FFFF,0000,0000,FFFF,FFFF
 HEX FFFF,FFF0,0000,0000,0FFF,FFFF
 HEX FFFF,FFF0,0000,0000,0FFF,FFFF
 HEX FFFF,FF00,0000,0000,00FF,FFFF
 HEX FFFF,FF00,0000,0000,00FF,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,0000,0000,0000,0000,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,F000,0000,0000,000F,FFFF
 HEX FFFF,FF00,0000,0000,00FF,FFFF
 HEX FFFF,FFF0,0000,0000,0FFF,FFFF
 HEX FFFF,FFFF,F000,000F,FFFF,FFFF

DOUZETAB HEX 0000,0C00,1800,2400,3000,3C00,4800,5400,6000,6C00
 HEX 7800,8400,9000,9C00,A800,B400,C000,CC00,D800,E400
 HEX F000,FC00,0801,1E01,2A01,3601,4201

*************  MODIF DU MASK POUR EXPLOSION  **************

MODIFMASKEX PHX  ; MODIF DU MASK EN FONCTION DES ZONES
 PHY  ; X,Y
 TXA
 STA MODIFMASKEXX0
 CLC
 ADC #$0010
 STA MODIFMASKEXX1
 TYA
 STA MODIFMASKEXY0
 CLC
 ADC #$0016
 STA MODIFMASKEXY1 ; ENTOURAGE

 LDX #$0000
 LDA DECORZONETAB ; NB DE ZONE A TRAITER
 STA MODIFMASKENXT1+1
 BNE MODIFMASKEX1
 JMP MODIFMASKEXFIN

MODIFMASKEX1 LDA DECORZONETAB+8,X   ; ON NE S'INTERESSE QU'AUX ZONES DURES
 AND #$FF00
 CMP #$0100
 BEQ MODIFMASKEX0
 JMP MODIFMASKEXNXT
MODIFMASKEX0 LDA DECORZONETAB+8,X ; Y1 ZONE
 AND #$00FF
 STA MODIFEXY1 ; SVG Y1 TEMPO
 LDA MODIFMASKEXX1
 CMP DECORZONETAB+2,X ; X0 ZONE
 BMI MODIFMASKEXNXT
 LDA MODIFMASKEXX0
 CMP DECORZONETAB+4,X ; X1 ZONE
 BPL MODIFMASKEXNXT
 LDA MODIFMASKEXY1
 CMP DECORZONETAB+6,X ; Y0 ZONE
 BEQ MODIFMASKEXNXT ; BUG BETA TESTER
 BMI MODIFMASKEXNXT
 LDA MODIFMASKEXY0
 CMP MODIFEXY1 ; Y1 ZONE
 BPL MODIFMASKEXNXT

 LDA DECORZONETAB+6,X ; Y0 ZONE : ON DETERMINE L'ENTOURAGE DE L'INTERSECTION MASK/ZONE
 CMP MODIFMASKEXY0
 BPL MODIFMASKEX2
 STZ MODIFZONEEXY0
 BRA MODIFMASKEX3
MODIFMASKEX2 SEC
 SBC MODIFMASKEXY0
 STA MODIFZONEEXY0
MODIFMASKEX3 LDA MODIFEXY1 ; Y1 ZONE
 CMP MODIFMASKEXY1
 BPL MODIFMASKEX4
 SEC
 SBC MODIFMASKEXY0
 STA MODIFZONEEXY1
 BRA MODIFMASKEX5
MODIFMASKEX4 LDA #$0016
 STA MODIFZONEEXY1
MODIFMASKEX5 LDA DECORZONETAB+2,X ; X0 ZONE
 CMP MODIFMASKEXX0
 BPL MODIFMASKEX6
 STZ MODIFZONEEXX0
 BRA MODIFMASKEX7
MODIFMASKEX6 SEC
 SBC MODIFMASKEXX0
 STA MODIFZONEEXX0
MODIFMASKEX7 LDA DECORZONETAB+4,X ; X1 ZONE
 CMP MODIFMASKEXX1
 BPL MODIFMASKEX8
 SEC
 SBC MODIFMASKEXX0
 STA MODIFZONEEXX1
 BRA MODIFMASKEX9
MODIFMASKEX8 LDA #$0010
 STA MODIFZONEEXX1
MODIFMASKEX9 JSR MODIFMASKPUT ; MET LES F POUR MASKER

MODIFMASKEXNXT TXA ; ZONE SUIVANTE
 CLC
 ADC #$0008
 TAX
 DEC MODIFMASKENXT1+1
MODIFMASKENXT1 LDA #$A0A0
 BEQ MODIFMASKEXFIN
 JMP MODIFMASKEX1

MODIFMASKEXFIN PLY  ; ON SORT
 PLX
 RTS

MODIFMASKEXX0 HEX 0000 ; X0,X1,Y0,Y1
MODIFMASKEXX1 HEX 0000 ; ENTOURAGE MASK
MODIFMASKEXY0 HEX 0000
MODIFMASKEXY1 HEX 0000
MODIFZONEEXX0 HEX 0000 ; X0,X1,Y0,Y1
MODIFZONEEXX1 HEX 0000 ; ENTOURAGE ZONE DANS LE MASK
MODIFZONEEXY0 HEX 0000
MODIFZONEEXY1 HEX 0000
MODIFEXY1 HEX 0000 ; Y1 ZONE

MODIFMASKPUT PHX ; MET LES F
 PHY
 LDA MODIFZONEEXY1
 SEC
 SBC MODIFZONEEXY0
 STA MODIFMASKPUTHA

 LDA MODIFZONEEXX0 ; 1ere COLONNE SI IMPAIR
 LSR
 BCC MODIFMASKPUT2
 LDA MODIFZONEEXX0 ; DEBUT DE ZONE DANS LE MASK
 LSR
 STA MODIFMASKPUT10+1
 LDA MODIFZONEEXY0
 ASL
 TAX
 LDA DOUZETAB,X
 CLC
MODIFMASKPUT10 ADC #$A0A0
 INC
 INC
 TAX
 LDY #$0000 ; ON MET LES F
MODIFMASKPUT11 LDA EXPLOSEMASK,X
 ORA #$000F
 STA EXPLOSEMASK,X
 TXA
 CLC
 ADC #$000C
 TAX
 INY
 CPY MODIFMASKPUTHA ; HAUTEUR
 BNE MODIFMASKPUT11
 INC MODIFZONEEXX0

MODIFMASKPUT2 LDA MODIFZONEEXX1  ; COLONNE CENTRALE
 SEC
 SBC MODIFZONEEXX0
 BNE MODIFMASKPUT20
 JMP MODIFMASKPUT4 ; FIN
MODIFMASKPUT20 CMP #$0001
 BEQ MODIFMASKPUT3 ; BANDE FINALE
 LSR
 STA MODIFMASKPUT24+1 ; LARGEUR EN OCTETS
 LDA MODIFZONEEXX0 ; DEBUT DE ZONE DANS LE MASK
 LSR
 STA MODIFMASKPUT21+1
 LDA MODIFZONEEXY0
 ASL
 TAX
 LDA DOUZETAB,X
 CLC
MODIFMASKPUT21 ADC #$A0A0
 INC
 INC
 STA MODIFMASKPUT22+1
MODIFMASKPUT22 LDX #$A0A0
 LDY #$0000 ; ON MET LES FF
MODIFMASKPUT23 LDA EXPLOSEMASK,X
 ORA #$00FF
 STA EXPLOSEMASK,X
 TXA
 CLC
 ADC #$000C
 TAX
 INY
 CPY MODIFMASKPUTHA ; HAUTEUR
 BNE MODIFMASKPUT23
 INC MODIFMASKPUT22+1 ; COLONNE SUIVANTE
 DEC MODIFMASKPUT24+1
MODIFMASKPUT24 LDA #$A0A0
 BNE MODIFMASKPUT22

MODIFMASKPUT3 LDA MODIFZONEEXX1 ; DERNIERE COLONNE SI IMPAIR
 LSR
 BCC MODIFMASKPUT4
 STA MODIFMASKPUT30+1 ; DEBUT DE ZONE DANS LE MASK
 LDA MODIFZONEEXY0
 ASL
 TAX
 LDA DOUZETAB,X
 CLC
MODIFMASKPUT30 ADC #$A0A0
 INC
 INC
 TAX
 LDY #$0000 ; ON MET LES F
MODIFMASKPUT31 LDA EXPLOSEMASK,X
 ORA #$00F0
 STA EXPLOSEMASK,X
 TXA
 CLC
 ADC #$000C
 TAX
 INY
 CPY MODIFMASKPUTHA ; HAUTEUR
 BNE MODIFMASKPUT31

MODIFMASKPUT4 PLY
 PLX
 RTS

MODIFMASKPUTHA HEX 0000 ; HAUTEUR

*******************************************************************************
*****************************  CREUSE HORIZONTAL  *****************************
*******************************************************************************

CREUSEHORI PHA ; CREUSE DIAGONALE DECOR
 STZ CREUSEDIAGOFF1
 STZ CREUSEDIAGOFF2
 CPY #$0040
 BPL CREUSEHORI1
 STY CREUSEHORI0+1 ; COLLISION BORDURE HAUTE
 LDA #$0040
 SEC
CREUSEHORI0 SBC #$A0A0
 STA CREUSEDIAGOFF2
 ASL
 TAY
 LDA CODELISTDIX,Y ; *10
 STA CREUSEDIAGOFF1
 LDY #$0040
CREUSEHORI1 LDA #$0009
 SEC
 SBC CREUSEDIAGOFF2
 STA CREUSEDIAGHAUT ; HAUTEUR
 PLA
 PHX
 PHY
 CMP #$0001 ; X,Y,A(0:GAUCH/1:DROIT)
 BEQ CREUSEHORI2
 TXA  ; ** GAUCHE **
 LSR
 BCS CREUSEHORI10
 LDA #CREUSEHOMASKGP ; GAUCHE PAIR
 CLC
 ADC CREUSEDIAGOFF1
 JMP CREUSEDIAG3
CREUSEHORI10 LDA #CREUSEHOMASKGI ; GAUCHE IMPAIR
 CLC
 ADC CREUSEDIAGOFF1
 JMP CREUSEDIAG3
CREUSEHORI2 TXA  ; ** DROITE **
 LSR
 BCS CREUSEHORI20
 LDA #CREUSEHOMASKDP ; DROITE PAIR
 CLC
 ADC CREUSEDIAGOFF1
 JMP CREUSEDIAG3
CREUSEHORI20 LDA #CREUSEHOMASKDI ; DROITE IMPAIR
 CLC
 ADC CREUSEDIAGOFF1
 JMP CREUSEDIAG3

CREUSEHOMASKGP HEX FFFF,FF0000000FFF,FFFF ; MASQUES CREUSEMENT HORI
 HEX FFFF,F00000000FFF,FFFF ; GAUCHE PAIR
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,F00000000FFF,FFFF
CREUSEHOMASKGI HEX FFFF,FFF0000000FF,FFFF ; GAUCHE IMPAIR
 HEX FFFF,FF00000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,FF00000000FF,FFFF
CREUSEHOMASKDP HEX FFFF,0000000FFFFF,FFFF ; DROITE PAIR
 HEX FFFF,00000000FFFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,00000000FFFF,FFFF
CREUSEHOMASKDI HEX FFFF,F0000000FFFF,FFFF ; DROITE IMPAIR
 HEX FFFF,F00000000FFF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F00000000FFF,FFFF

***************  VERIFIE LA COLLISION AVEC DES ZONES DUR  *****************

LOOKHORIZONE PHA ; (X,Y,A:0,1) CHECK THE GROUND...
 TXA
 STA LOOKDIAGZONE2+1 ; X0
 CLC
 ADC #$0009
 STA LOOKDIAGZONE1+1 ; X1
 TYA
 STA LOOKDIAGZONE4+1 ; Y0
 CLC
 ADC #$0008 ; 9-1
 STA LOOKDIAGZONE3+1 ; Y1
 PLA
 JMP LOOKDIAHORZONE

*******  TESTE LA PRESENCE DE TERRE DEVANT LE LEMMING  *********

HORIPAROIE TYA ; X,Y
 STA HORIPAROIE1+1
 CLC
 ADC #$0008
 STA HORIPAROIE3+1
 TXA  ; X
 CLC
 ADC #$0007
 STA HORIPAROIE4+1
 TXY

HORIPAROIE1 LDA #$A0A0 ; Y INITIAL
HORIPAROIE2 PHA
 JSR LOOKDECOR ; (X,Y CONSERVES)
 BNE HORIPAROIEFIN ; TERRE
 PLA
 INC
HORIPAROIE3 CMP #$A0A0 ; Y
 BNE HORIPAROIE2
 INY  ; X
HORIPAROIE4 CPY #$A0A0
 BNE HORIPAROIE1
 LDA #$0000 ; VIDE
 RTS

HORIPAROIEFIN PLA ; TERRE
 LDA #$0001
 RTS

************************************************************************
*************************  CREUSE DIAGONALE  ***************************
************************************************************************

CREUSEDIAG PHA ; CREUSE DIAGONALE DECOR
 STZ CREUSEDIAGOFF1
 STZ CREUSEDIAGOFF2
 CPY #$0040
 BPL CREUSEDIAG1
 STY CREUSEDIAG0+1 ; COLLISION BORDURE HAUTE
 LDA #$0040
 SEC
CREUSEDIAG0 SBC #$A0A0
 STA CREUSEDIAGOFF2
 ASL
 TAY
 LDA CODELISTDIX,Y ; *10
 STA CREUSEDIAGOFF1
 LDY #$0040
CREUSEDIAG1 LDA #$000F
 SEC
 SBC CREUSEDIAGOFF2
 STA CREUSEDIAGHAUT ; HAUTEUR
 PLA
 PHX
 PHY
 CMP #$0001 ; X,Y,A(0:GAUCH/1:DROIT)
 BEQ CREUSEDIAG2
 TXA  ; ** GAUCHE **
 LSR
 BCS CREUSEDIAG10
 LDA #CREUSEDIMASKGP ; GAUCHE PAIR
 CLC
 ADC CREUSEDIAGOFF1
 JMP CREUSEDIAG3
CREUSEDIAG10 LDA #CREUSEDIMASKGI ; GAUCHE IMPAIR
 CLC
 ADC CREUSEDIAGOFF1
 JMP CREUSEDIAG3
CREUSEDIAG2 TXA  ; ** DROITE **
 LSR
 BCS CREUSEDIAG20
 LDA #CREUSEDIMASKDP ; DROITE PAIR
 CLC
 ADC CREUSEDIAGOFF1
 JMP CREUSEDIAG3
CREUSEDIAG20 LDA #CREUSEDIMASKDI ; DROITE IMPAIR
 CLC
 ADC CREUSEDIAGOFF1
 JMP CREUSEDIAG3

CREUSEDIMASKGP HEX FFFF,FFFFFFF0FFFF,FFFF ; MASQUES CREUSEMENT DIAG
 HEX FFFF,FFFF00000FFF,FFFF ; GAUCHE PAIR
 HEX FFFF,FFF000000FFF,FFFF
 HEX FFFF,FF0000000FFF,FFFF
 HEX FFFF,F00000000FFF,FFFF
 HEX FFFF,F00000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,F0000000FFFF,FFFF
 HEX FFFF,FF0000FFFFFF,FFFF
CREUSEDIMASKGI HEX FFFF,FFFFFFFF0FFF,FFFF ; GAUCHE IMPAIR
 HEX FFFF,FFFFF00000FF,FFFF
 HEX FFFF,FFFF000000FF,FFFF
 HEX FFFF,FFF0000000FF,FFFF
 HEX FFFF,FF00000000FF,FFFF
 HEX FFFF,FF00000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,FF0000000FFF,FFFF
 HEX FFFF,FFF0000FFFFF,FFFF
CREUSEDIMASKDP HEX FFFF,F0FFFFFFFFFF,FFFF ; DROITE PAIR
 HEX FFFF,00000FFFFFFF,FFFF
 HEX FFFF,000000FFFFFF,FFFF
 HEX FFFF,0000000FFFFF,FFFF
 HEX FFFF,00000000FFFF,FFFF
 HEX FFFF,00000000FFFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,F0000000FFFF,FFFF
 HEX FFFF,FFF0000FFFFF,FFFF
CREUSEDIMASKDI HEX FFFF,FF0FFFFFFFFF,FFFF ; DROITE IMPAIR
 HEX FFFF,F00000FFFFFF,FFFF
 HEX FFFF,F000000FFFFF,FFFF
 HEX FFFF,F0000000FFFF,FFFF
 HEX FFFF,F00000000FFF,FFFF
 HEX FFFF,F00000000FFF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,FF0000000FFF,FFFF
 HEX FFFF,FFFF0000FFFF,FFFF

**********  VERIFIE LA COLLISION AVEC DES ZONES DUR  *************

LOOKDIAGZONE PHA ; (X,Y,A) CHECK THE GROUND...
 TXA
 STA LOOKDIAGZONE2+1 ; X0
 CLC
 ADC #$0008
 STA LOOKDIAGZONE1+1 ; X1
 TYA
 STA LOOKDIAGZONE4+1 ; Y0
 CLC
 ADC #$000E ; 15-1
 STA LOOKDIAGZONE3+1 ; Y1
 PLA
 JMP LOOKDIAHORZONE

************************************************************************
*************************  CREUSE VERTICALE  ***************************
************************************************************************

CREUSEBAS LDA #$0004 ; CREUSE DIAGONALE DECOR
 STA CREUSEDIAGHAUT ; HAUTEUR
 PHX
 PHY
 TXA  ; X,Y,A=3
 LSR
 BCS CREUSEBAS10
 LDA #CREUSEBAMASKP ; PAIR
 JMP CREUSEDIAG3
CREUSEBAS10 LDA #CREUSEBAMASKI ; IMPAIR
 JMP CREUSEDIAG3

CREUSEBAMASKP HEX FFFF,000000000FFF,FFFF ; MASQUES CREUSEMENT VERTICAL
 HEX FFFF,000000000FFF,FFFF ; PAIR
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
 HEX FFFF,000000000FFF,FFFF
CREUSEBAMASKI HEX FFFF,F000000000FF,FFFF ; IMPAIR
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF
 HEX FFFF,F000000000FF,FFFF

*******  TESTE LA PRESENCE DE TERRE SOUS LE LEMMING  *********

VERTPAROIE TXA ; X,Y
 CLC
 ADC #$0008 ; 9-1
 STA VERTPAROIE3+1
 TYA  ; Y
 TXY  ; X
VERTPAROIE2 PHA
 JSR LOOKDECOR ; (X,Y CONSERVES)
 BNE VERTPAROIEFIN ; TERRE
 PLA
 INY
VERTPAROIE3 CPY #$A0A0 ; X
 BNE VERTPAROIE2
 LDA #$0000 ; VIDE
 RTS
VERTPAROIEFIN PLA ; TERRE
 LDA #$0001
 RTS

**********  VERIFIE LA COLLISION AVEC DES ZONES DUR  *************

LOOKBASZONE TXA ; (X,Y) CHECK THE GROUND...
 STA LOOKDIAGZONE2+1 ; X0
 CLC
 ADC #$0008
 STA LOOKDIAGZONE1+1 ; X1
 TYA
 STA LOOKDIAGZONE4+1 ; Y0
 CLC
 ADC #$0003 ; 4-1
 STA LOOKDIAGZONE3+1 ; Y1
 LDA #$0002 ; VERTICAL => IGNORE LES -> ET <-
 JMP LOOKDIAHORZONE

******************************************************************************
********  CREUSEMENT DECOR/ECRAN POUR HORIZONTAL/DIAGONAL/VERTICAL  **********

CREUSEDIAG3 STA CREUSEDIAGDEC6+1 ; TYPE DE MASQUE  *** CREUSE DECOR ***
 TXA  ; ADRESSE OFFSET X DECOR
 SEC
 SBC #$0040 ; BORDURE
 LSR
 STA CREUSEDIAGDEC7+1
 TYA  ; NB DE LIGNES
 SEC
 SBC #$0040 ; BORDURE
 TAY
 CLC
 ADC CREUSEDIAGHAUT ; HAUTEUR
 STA CREUSEDIAG40+1
 LDA #$0002  ; INIT
 STA CREUSEDIAGDEC2+1
CREUSEDIAG4 PHY
 JSR CREUSEDIAGDEC ; CREUSE 1 LIGNE
 PLY
 INY
CREUSEDIAG40 CPY #$A0A0
 BNE CREUSEDIAG4
 PLY
 PLX
 JSR CREUSEDIAGSC ; CREUSE ECRAN
 RTS

CREUSEDIAGDEC LDA BANC0A ; CREUSE 1 LIGNE, LIGNES 0->79
 CPY #$0050
 BMI CREUSEDIAGDEC1
 TYA
 SEC
 SBC #$0050
 TAY
 LDA BANC0B ; LIGNE 80->159
CREUSEDIAGDEC1 STA CREUSEDIAGDEC3+2
 STA CREUSEDIAGDEC4+2
 TYA
 ASL
 TAY
 LDA MILLESIXTAB,Y
 STA CREUSEDIAGDEC3+1
 STA CREUSEDIAGDEC4+1
 LDA #$0006 ; LARGEUR (OCTETS)
 LSR
 STA CREUSEDIAGDEC5+1
CREUSEDIAGDEC2 LDY #$0002 ; OFFSET MASK GAUCHE
CREUSEDIAGDEC7 LDX #$A0A0 ; DECALAGE X DECOR
CREUSEDIAGDEC3 LDAL $0A0000,X
CREUSEDIAGDEC6 AND CREUSEDIMASKGP,Y
CREUSEDIAGDEC4 STAL $0A0000,X
 INX
 INX
 INY
 INY
 DEC CREUSEDIAGDEC5+1
CREUSEDIAGDEC5 LDA #$A0A0
 BNE CREUSEDIAGDEC3
 LDA CREUSEDIAGDEC2+1
 CLC
 ADC #$000A
 STA CREUSEDIAGDEC2+1
 RTS

CREUSEDIAGSC LDA CREUSEDIAGDEC6+1 ; CREUSEMENT ECRAN X,Y
 STA CREUSEDIAGSC46+1 ; TYPE DU MASQUE
 LDA CREUSEDIAGHAUT
 STA CREUSEDIAGSC48+1 ; HAUTEUR
 TYA
 SEC
 SBC #$0040
 ASL
 TAY
 LDA TABLE,Y
 STA CREUSEDIAGSC43+1 ; Y
 TXA  ; *** GAUCHE/MILIEU/DROIT ***
 LSR
 ASL  ; ALIGNEMENT PAIR
 SEC
 SBC #$0040
 TAX
 CMP XDROIT
 BPL CREUSEDIAGSC0 ; EN DEHORS
 CLC
 ADC #$000C
 CMP XGAUCH
 BMI CREUSEDIAGSC0 ; EN DEHORS
 CMP XDROIT
 BPL CREUSEDIAGSC3 ; DROITE
 SEC
 SBC #$000C
 CMP XGAUCH
 BMI CREUSEDIAGSC1 ; GAUCHE
 BRA CREUSEDIAGSC2 ; MILIEU
CREUSEDIAGSC0 RTS
CREUSEDIAGSC1 STX CREUSEDIAGSC10+1 ; *** GAUCHE ***
 LDA XGAUCH
 SEC
CREUSEDIAGSC10 SBC #$A0A0
 LSR
 CLC
 ADC #$0002
 STA CREUSEDIAGSC44+1 ; OFFSET MASQUE
 TXA
 CLC
 ADC #$000C
 SEC
 SBC XGAUCH
 LSR
 CMP #$0002 ; AU FORCE AU MOINS A 2
 BPL CREUSEDIAGSC11
 LDA #$0002
CREUSEDIAGSC11 STA CREUSEDIAGSC4+1 ; LARGEUR
 JMP CREUSEDIAGSC4

CREUSEDIAGSC2 LDA #$0006 ; *** MILIEU ***
 STA CREUSEDIAGSC4+1 ; LARGEUR
 LDA #$0002
 STA CREUSEDIAGSC44+1 ; OFFSET MASQUE
 TXA
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC CREUSEDIAGSC43+1
 STA CREUSEDIAGSC43+1 ; X
 JMP CREUSEDIAGSC4

CREUSEDIAGSC3 LDA #$0002 ; *** DROITE ***
 STA CREUSEDIAGSC44+1 ; OFFSET MASQUE
 STX CREUSEDIAGSC30+1
 LDA XDROIT
 SEC
CREUSEDIAGSC30 SBC #$A0A0
 LSR  ; NB OCTETS
 CMP #$0002
 BPL CREUSEDIAGSC31
 LDA #$0002
CREUSEDIAGSC31 STA CREUSEDIAGSC4+1 ; LARGEUR
 TXA
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC CREUSEDIAGSC43+1
 STA CREUSEDIAGSC43+1 ; X

CREUSEDIAGSC4 LDA #$A0A0 ; LARGEUR (OCTETS)  *** AFFICHAGE ***
 INC
 LSR
CREUSEDIAGSC42 STA CREUSEDIAGSC47+1
CREUSEDIAGSC43 LDX #$A0A0 ; ADRESSE ECRAN
CREUSEDIAGSC44 LDY #$A0A0 ; OFFSET MASQUE
CREUSEDIAGSC45 LDAL $050000,X
CREUSEDIAGSC46 AND CREUSEDIMASKGP,Y
INIT0541 STAL $050000,X
 STAL $012000,X
 INX
 INX
 INY
 INY
 DEC CREUSEDIAGSC47+1 ; LARGEUR
CREUSEDIAGSC47 LDA #$A0A0
 BNE CREUSEDIAGSC45
 LDA CREUSEDIAGSC43+1 ; LIGNE SUIVANTE ECRAN
 CLC
 ADC #$00A0
 STA CREUSEDIAGSC43+1
 LDA CREUSEDIAGSC44+1 ; LIGNE SUIVANTE MASQUE
 CLC
 ADC #$000A
 STA CREUSEDIAGSC44+1
 DEC CREUSEDIAGSC48+1 ; HAUTEUR
CREUSEDIAGSC48 LDA #$A0A0
 BNE CREUSEDIAGSC4
 RTS

CREUSEDIAGHAUT HEX 0000 ; HAUTEUR DU MASQUE
CREUSEDIAGOFF1 HEX 0000 ; OFFSET*10 HAUT MASQ
CREUSEDIAGOFF2 HEX 0000 ; OFFSET

********************************************************************************
*******  VERIFIE LA PRESENCE DE ZONE DUR POUR CREUSEMENT HORI/DIAG/VERT  *******

LOOKDIAHORZONE CMP #$0002 ; CHECK THE GROUND...
 BEQ LOOKDIAGZONE00
 CMP #$0001
 BEQ LOOKDIAGZONE0 ; A (G:0/D:1)
 LDA #$0002 ; GAUCHE
 BRA LOOKDIAGZONE01
LOOKDIAGZONE00 LDA #$0002  ; VERTICAL => PAS DE PROB
 STA LOOKDIAGZONE6+1
 LDA #$0003
 STA LOOKDIAGZONE7+1
 BRA LOOKDIAGZONE02
LOOKDIAGZONE0 LDA #$0003 ; DROITE
LOOKDIAGZONE01 STA LOOKDIAGZONE6+1 ; ZONE FRIABLE
 STA LOOKDIAGZONE7+1
LOOKDIAGZONE02 LDX #$0000
 LDA DECORZONETAB ; NB DE ZONE A TRAITER
 BEQ LOOKDIAGZONXT2
 STA LOOKDIAGZONXT1+1

LOOKDIAGZONE1 LDA #$A0A0 ; X1
 CMP DECORZONETAB+2,X ; X0 ZONE
 BMI LOOKDIAGZONXT
LOOKDIAGZONE2 LDA #$A0A0 ; X0
 CMP DECORZONETAB+4,X ; X1 ZONE
 BPL LOOKDIAGZONXT
LOOKDIAGZONE3 LDA #$A0A0 ; Y1
 CMP DECORZONETAB+6,X ; Y0 ZONE
 BMI LOOKDIAGZONXT
 LDA DECORZONETAB+8,X ; Y1 ZONE
 AND #$00FF ; ATTENTION AU TYPE DE ZONE
 STA LOOKDIAGZONE5+1
LOOKDIAGZONE4 LDA #$A0A0 ; Y0
LOOKDIAGZONE5 CMP #$A0A0 ; Y1 ZONE
 BPL LOOKDIAGZONXT

 LDA DECORZONETAB+8,X ; TROUVE : ON RECUPERE LE TYPE DE ZONE
 AND #$FF00
 XBA
LOOKDIAGZONE6 CMP #$A0A0 ; ZONE FRIABLE 1 ?
 BEQ LOOKDIAGZONXT
LOOKDIAGZONE7 CMP #$A0A0 ; ZONE FRIABLE 2 ?
 BEQ LOOKDIAGZONXT
 LDA #$0001
 RTS  ; FINI, ON SORT

LOOKDIAGZONXT TXA ; ZONE SUIVANTE
 CLC
 ADC #$0008
 TAX
 DEC LOOKDIAGZONXT1+1
LOOKDIAGZONXT1 LDA #$A0A0
 BNE LOOKDIAGZONE1
LOOKDIAGZONXT2 LDA #$0000 ; RIEN TROUVE...
 RTS

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