
***********************************************************************
***********  EVOLUTION POUR TOUS LES TYPES DE MOUVEMENTS  *************
***********************************************************************

******************  MARCHE  *********************

EVOLMA STZ EVOLMAFLG
 LDA XTAB,X ; MARCHE ...
 TAY  ; X
 LDA Y1TAB,X ; ** VIDE EN DESSOUS **
 JSR LOOKDECOR
 BNE EVOLMA20
 INC EVOLMAFLG
**
EVOLMA20 LDA Y1TAB,X ; LE PIED HEURTE QQCHOSE
 DEC
 JSR LOOKDECOR ; ** COLISION FACIALE **
 BEQ EVOLMA21
 JMP EVOLMA10
EVOLMA21 LDA EVOLMAFLG
 BEQ EVOLMA00
 JMP EVOLMA01 ; VIDE

EVOLMAFLG HEX 0000 ; VIDE + PAROIE :-)
**
EVOLMA00 LDA NUMEROLEVEL ; SORTIE ?
 CMP #$004C ; LEVEL 77 = 23
 BEQ EVOLMA0001
 CMP #$0016
 BEQ EVOLMA0001
 CMP #$0040 ; 63
 BEQ EVOLMA0002
 BRA EVOLMA001
EVOLMA0002 LDA Y1TAB,X ; PATCH LEVEL 65 : 2 SORTIES
 CMP #$00D0
 BEQ EVOLMA002
EVOLMA0001 LDA Y1TAB,X
 CMP #$0078 ; PATCH LEVEL 23 : 2 SORTIES
 BEQ EVOLMA002
EVOLMA001 LDA Y1TAB,X
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 DEC
 CMP SORTIEY
 BNE EVOLMA0
EVOLMA002 LDA XTAB,X
 LSR
 BCS EVOLMA0 ; PAIR UNIQUEMENT
 LDA XTAB,X
 SEC
 SBC #$0040 ; DECALAGE BORDURE
 CMP SORTIEX0
 BMI EVOLMA0
 CMP SORTIEX1
 BPL EVOLMA0
 LDA #$000F ; ON SORT...
 STA ETATAB,X
 STZ PASTAB,X
 LDA COMPTAB,X ; COMPTEUR
 BEQ EVOLMA000
 DEC NBCOMPT
 STZ COMPTAB,X
EVOLMA000 RTS
**
EVOLMA0 LDA PASTAB,X ; ON CONTINUE
 INC
 CMP #$0008
 BNE EVOLMA1
 LDA #$0000
EVOLMA1 STA PASTAB,X ; PAS++
 LDA ETATAB,X
 AND #$8000
 BEQ EVOLMA2
 INC XTAB,X ; -> X++
 RTS
EVOLMA2 DEC XTAB,X ; <- X--
 RTS
**
EVOLMA01 LDA Y1TAB,X ; VIDE EN DESSOUS
 INC ; ** VIDE EN DESSOUS **
 JSR LOOKDECOR
 BEQ EVOLMA010
 INC YTAB,X ; VIDE 1 LIGNE
 BRA EVOLMA0 ; ON CONTINUE
EVOLMA010 LDA Y1TAB,X
 INC
 INC
 JSR LOOKDECOR
 BEQ EVOLMA011
 INC YTAB,X ; VIDE 2 LIGNES
 INC YTAB,X
 BRA EVOLMA0 ; ON CONTINUE
EVOLMA011 LDA ETATAB,X ; ON TOMBE
 AND #$FF00
 ORA #$0003 ; COMPTEUR A ZERO
 STA ETATAB,X
 STZ PASTAB,X
 RTS
**
EVOLMA10 LDA Y1TAB,X ; COLLISION
 DEC
 DEC
 JSR LOOKDECOR
 BNE EVOLMA15
 DEC YTAB,X ; UNE SIMPLE MARCHE
 BRA EVOLMA0 ; ON CONTINUE
EVOLMA15 LDA Y1TAB,X
 DEC
 DEC
 DEC
 JSR LOOKDECOR
 BNE EVOLMA16
 DEC YTAB,X ; UNE DOUBLE MARCHE
 DEC YTAB,X
 BRA EVOLMA0 ; ON CONTINUE
EVOLMA16 LDA Y1TAB,X
 SEC
 SBC #$0007
 JSR LOOKDECOR
 BNE EVOLMA17 ; TROP HAUT, RETOURNEMENT OU ESCALADE
**
 DEC YTAB,X ; ON MONTE LA GRANDE MARCHE
 DEC YTAB,X
 STZ PASTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0002
 STA ETATAB,X ; MONTE MARCHE
 RTS
**
EVOLMA17 LDA ETATAB,X ; UNE PAROIE DEVANT
 AND #$2000
 BEQ EVOLMA11 ; ON SE RETOURNE
**
 LDA ETATAB,X ; ON ESCALADE
 AND #$8000
 BEQ EVOLMA18
 DEC XTAB,X  ; ->
 BRA EVOLMA19
EVOLMA18 INC XTAB,X  ; <-
EVOLMA19 LDA ETATAB,X
 AND #$FF00
 ORA #$0006
 STA ETATAB,X
 STZ PASTAB,X
 RTS
**
EVOLMA11 LDA ETATAB,X ; ON SE RETOURNE
 AND #$8000
 BEQ EVOLMA12
 DEC XTAB,X
 BRA EVOLMA13
EVOLMA12 INC XTAB,X
EVOLMA13 LDA ETATAB,X
 EOR #$8000 ; ON INVERSE GAUCHE/DROITE
 STA ETATAB,X
 LDA PASTAB,X ; ON CONTINUE
 INC
 CMP #$0008
 BNE EVOLMA14
 LDA #$0000
EVOLMA14 STA PASTAB,X ; PAS++
 RTS

XX0MA0 HEX 0200,0400,0400,0400,0200,0400,0400,0400 ; MARCHE -> PAIR
XX1MA0 HEX 0200,0400,0400,0400,0200,0400,0400,0400
YY0MA0 HEX 0400,0500,0400,0400,0400,0500,0400,0400
YY1MA0 HEX 0500,0500,0500,0500,0500,0500,0500,0500
SPRMA0 HEX C900,CC00,D100,D600,DB00,DE00,E300,E800
XX0MA1 HEX 0100,0300,0300,0300,0100,0300,0300,0300 ; MARCHE <- IMPAIR
XX1MA1 HEX 0300,0500,0500,0500,0300,0500,0500,0500
YY0MA1 HEX 0400,0500,0400,0400,0400,0500,0400,0400
YY1MA1 HEX 0500,0500,0500,0500,0500,0500,0500,0500
SPRMA1 HEX D107,D407,3907,3E07,4307,E607,4B07,5007
XX0MA2 HEX 0300,0300,0300,0300,0300,0300,0300,0300 ; MARCHE -> IMPAIR
XX1MA2 HEX 0500,0500,0500,0500,0500,0500,0500,0500
YY0MA2 HEX 0400,0500,0400,0400,0400,0500,0400,0400
YY1MA2 HEX 0500,0500,0500,0500,0500,0500,0500,0500
SPRMA2 HEX A907,AE07,1307,1807,BD07,C207,2707,2C07
XX0MA3 HEX 0400,0400,0400,0400,0400,0400,0400,0400 ; MARCHE <- PAIR
XX1MA3 HEX 0400,0400,0400,0400,0400,0400,0400,0400
YY0MA3 HEX 0400,0500,0400,0400,0400,0500,0400,0400
YY1MA3 HEX 0500,0500,0500,0500,0500,0500,0500,0500
SPRMA3 HEX ED00,F200,F700,FC00,0101,0601,0B01,1001

******************  MONTE MARCHE  *********************

EVOLMM LDA ETATAB,X ; MONTE LA MARCHE
 AND #$8000
 BEQ EVOLMMGAU

EVOLMMDRO LDA XTAB,X ; ->
 TAY
 LDA Y1TAB,X
 DEC
 JSR LOOKDECOR
 BEQ EVOLMM3 ; MARCHE
 LDA Y1TAB,X
 DEC
 DEC
 JSR LOOKDECOR
 BEQ EVOLMM0 ; MONTE DE 1
 BRA EVOLMM1 ; MONTE DE 2

EVOLMMGAU LDA XTAB,X  ; <-
 TAY
 LDA Y1TAB,X
 DEC
 JSR LOOKDECOR
 BEQ EVOLMM2  ; MARCHE
 LDA Y1TAB,X
 DEC
 DEC
 JSR LOOKDECOR
 BEQ EVOLMM0 ; MONTE DE 1
 BRA EVOLMM1 ; MONTE DE 2
**
EVOLMM0 DEC YTAB,X ; ON MONTE DE 1
 RTS
**
EVOLMM1 DEC YTAB,X ; ON MONTE DE 2
 DEC YTAB,X
 RTS
**
EVOLMM2 DEC XTAB,X ; ON RE-MARCHE <-
 BRA EVOLMM4
EVOLMM3 INC XTAB,X ; ON RE-MARCHE ->
EVOLMM4 STZ PASTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 RTS

XX0MM0 HEX 0200 ; MONTE MARCHE -> PAIR
XX1MM0 HEX 0200
YY0MM0 HEX 0500
YY1MM0 HEX 0500
SPRMM0 HEX 2F0F
XX0MM1 HEX 0100 ; MONTE MARCHE <- IMPAIR
XX1MM1 HEX 0300
YY0MM1 HEX 0500
YY1MM1 HEX 0500
SPRMM1 HEX 270F
XX0MM2 HEX 0500 ; MONTE MARCHE -> IMPAIR
XX1MM2 HEX 0300
YY0MM2 HEX 0500
YY1MM2 HEX 0500
SPRMM2 HEX 320F
XX0MM3 HEX 0400 ; MONTE MARCHE <- PAIR
XX1MM3 HEX 0400
YY0MM3 HEX 0500
YY1MM3 HEX 0500
SPRMM3 HEX 2A0F

******************  TOMBE  **********************

EVOLTB LDA XTAB,X ; CHUTE LIBRE...
 TAY  ; X
 LDA Y1TAB,X
 JSR LOOKDECOR ; POINT DU DECOR (000x)
 BNE EVOLTB11
 LDA Y1TAB,X
 INC
 JSR LOOKDECOR
 BNE EVOLTB12
 LDA Y1TAB,X
 INC
 INC
 JSR LOOKDECOR
 BNE EVOLTB13
**
EVOLTB1 LDA PASTAB,X ; RIEN EN DESSOUS
 AND #$FF00
 XBA
 CMP #$000F ; 15 LIGNES
 BMI EVOLTB01
 LDA ETATAB,X  ; PARACHUTE ?
 AND #$4000
 BEQ EVOLTB01
 JMP EVOLTB00
**
EVOLTB01 LDA YTAB,X ; ON CHUTE
 INC
 INC
 INC
 STA YTAB,X ; Y=Y+3
 LDA PASTAB,X
 AND #$00FF
 CMP #$0003 ; PAS 3 => PAS 0
 BNE EVOLTB10
 LDA PASTAB,X
 AND #$FF00
 CLC
 ADC #$0300 ; COMPTEUR +3
 STA PASTAB,X
 RTS
EVOLTB10 LDA PASTAB,X
 CLC
 ADC #$0301 ; COMPTEUR +3
 STA PASTAB,X
 RTS
**
EVOLTB11 LDA PASTAB,X ; LE SOL EN DESSOUS
 CLC
 ADC #$0200
 STA PASTAB,X
 LDA Y1TAB,X
 DEC
 JSR LOOKDECOR ; PATCH POUR LE SPRITE PLUS HAUT
 BNE EVOLTB110
 LDA Y1TAB,X
 BRA EVOLTB14
EVOLTB110 LDA Y1TAB,X
 DEC
 BRA EVOLTB14
EVOLTB12 LDA PASTAB,X ; LE SOL +2
 CLC
 ADC #$0100
 STA PASTAB,X
 LDA Y1TAB,X
 INC
 BRA EVOLTB14
EVOLTB13 LDA Y1TAB,X ; LE SOL +3
 INC
 INC
EVOLTB14 SEC
 SBC #$0005
 STA YTAB,X ; Y NEW
 LDA PASTAB,X ; ECRASEMENT OU MARCHE
 AND #$FF00
 XBA
 CMP #$003C ; 60 LIGNES...
 BPL EVOLTB15
 STZ PASTAB,X ; ** MARCHEUR : PAS NEW
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001 ; MARCHEUR
 STA ETATAB,X ; ETAT NEW
 RTS
**
EVOLTB15 LDA YTAB,X ; ** ECRASE
 CLC
 ADC #$0004
 STA YTAB,X
 STZ PASTAB,X
 LDA #$0010 ; BLOQUE COMPTEUR
 STA ETATAB,X
 LDA COMPTAB,X
 BEQ EVOLTB150
 STZ COMPTAB,X
 DEC NBCOMPT
EVOLTB150 RTS
**
EVOLTB00 LDA YTAB,X  ; OUVERTURE PARACHUTE
 CLC
 ADC #$0003
 STA YTAB,X ; Y
 LDA PASTAB,X
 AND #$FF00
 STA PASTAB,X ; PAS
 LDA ETATAB,X
 AND #$FF00
 ORA #$0004
 STA ETATAB,X , ETAT
 RTS

XX0TB0 HEX 0400,0400,0400,0400 ; TOMBE -> PAIR
XX1TB0 HEX 0400,0400,0400,0400
YY0TB0 HEX 0400,0400,0400,0400
YY1TB0 HEX 0500,0500,0600,0500
SPRTB0 HEX A100,A600,AB00,B000
XX0TB1 HEX 0300,0300,0300,0300 ; TOMBE <- IMPAIR
XX1TB1 HEX 0500,0500,0500,0500
YY0TB1 HEX 0400,0400,0400,0400
YY1TB1 HEX 0500,0500,0600,0500
SPRTB1 HEX B500,BA00,BF00,C400
XX0TB2 HEX 0300,0300,0300,0300 ; TOMBE -> IMPAIR
XX1TB2 HEX 0500,0500,0500,0500
YY0TB2 HEX 0400,0400,0400,0400
YY1TB2 HEX 0500,0500,0600,0500
SPRTB2 HEX E106,E606,8B07,F006
XX0TB3 HEX 0400,0400,0400,0400 ; TOMBE <- PAIR
XX1TB3 HEX 0400,0400,0400,0400
YY0TB3 HEX 0400,0400,0400,0400
YY1TB3 HEX 0500,0500,0600,0500
SPRTB3 HEX F506,FA06,9F07,0407

****************  OUVERTURE PARACHUTE  ****************

EVOLOP LDA XTAB,X ; OUVERTURE PARACHUTE
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR
 BNE EVOLOP5
 LDA Y1TAB,X
 INC
 JSR LOOKDECOR
 BNE EVOLOP4
 LDA Y1TAB,X
 INC
 INC
 JSR LOOKDECOR
 BNE EVOLOP3
 JMP EVOLOP0
**
EVOLOP3 LDA PASTAB,X  ; SOL EN DESSOUS +3
 CLC
 ADC #$0200
 STA PASTAB,X
 LDA Y1TAB,X
 INC
 INC
 BRA EVOLOP6
EVOLOP4 LDA PASTAB,X  ; SOL EN DESSOUS +2
 CLC
 ADC #$0100
 STA PASTAB,X
 LDA Y1TAB,X
 INC
 BRA EVOLOP6
EVOLOP5 LDA Y1TAB,X  ; SOL EN DESSOUS +1
EVOLOP6 SEC
 SBC #$0005
 STA YTAB,X ; Y NEW
 LDA PASTAB,X
 AND #$FF00
 XBA
 CMP #$003C ; 60 LIGNES...
 BPL EVOLPO7
**
 STZ PASTAB,X ; ON MARCHE
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001 ; MARCHEUR
 STA ETATAB,X
 RTS
**
EVOLPO7 LDA YTAB,X ; ON S'ECRASE
 CLC
 ADC #$0004
 STA YTAB,X
 STZ PASTAB,X
 LDA #$0010
 STA ETATAB,X
 LDA COMPTAB,X ; COMPTEUR
 BEQ EVOLPO70
 DEC NBCOMPT
 STZ COMPTAB,X
EVOLPO70 RTS
**
EVOLOP0 LDA PASTAB,X ; VIDE EN DESSOUS
 AND #$00FF
 CMP #$0006
 BEQ EVOLOP2 ; OUVERTURE FINIE
 CMP #$0004
 BNE EVOLOP1
 DEC YTAB,X ; ON REMONTE 1 LIGNE
 LDA PASTAB,X
 SEC
 SBC #$0100
 STA PASTAB,X ; COMPTEUR CHUTE
 INC PASTAB,X
 RTS
EVOLOP1 ASL ; PAS SUIVANT
 TAY
 LDA YTAB,X
 CLC
 ADC OPTAB,Y
 STA YTAB,X ; Y
 LDA OPTAB,Y
 XBA
 CLC
 ADC PASTAB,X
 STA PASTAB,X ; COMPTEUR DE CHUTE
 INC PASTAB,X
 RTS
EVOLOP2 INC YTAB,X ; ON PASSE A TOMBE PARACHUTE
 INC YTAB,X
 STZ PASTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0005 ; TOMBE PARACHUTE
 STA ETATAB,X
 RTS

OPTAB HEX 0300,0300,0300,0300,FFFF,0200

XX0OP0 HEX 0400,0400,0400,0400,0600,0600,0600 ; -> PAIR
XX1OP0 HEX 0400,0400,0400,0800,0600,0600,0600
YY0OP0 HEX 0400,0400,0400,0900,0A00,0A00,0A00
YY1OP0 HEX 0500,0500,0500,0500,0500,0500,0500
SPROP0 HEX 8F20,6F27,4F2E,9420,942A,942A,942A
XX0OP1 HEX 0300,0300,0300,0700,0500,0500,0500 ; <- IMPAIR
XX1OP1 HEX 0500,0500,0500,0500,0700,0700,0700
YY0OP1 HEX 0400,0400,0400,0900,0A00,0A00,0A00
YY1OP1 HEX 0500,0500,0500,0500,0500,0500,0500
SPROP1 HEX 2F35,0F3C,EF42,3435,343F,343F,343F
XX0OP2 HEX 0500,0500,0300,0500,0700,0700,0700 ; -> IMPAIR
XX1OP2 HEX 0300,0300,0500,0700,0500,0500,0500
YY0OP2 HEX 0400,0400,0400,0900,0A00,0A00,0A00
YY1OP2 HEX 0500,0500,0500,0500,0500,0500,0500
SPROP2 HEX 9B20,7B27,5B2E,A020,A02A,A02A,A02A
XX0OP3 HEX 0200,0200,0400,0600,0400,0400,0400 ; <- PAIR
XX1OP3 HEX 0600,0600,0400,0600,0800,0800,0800
YY0OP3 HEX 0400,0400,0400,0900,0A00,0A00,0A00
YY1OP3 HEX 0500,0500,0500,0500,0500,0500,0500
SPROP3 HEX 3B35,1B3C,FB42,4035,403F,403F,403F

****************  TOMBE PARACHUTE  ********************

EVOLTP LDA XTAB,X ; TOMBE EN PARACHUTE
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR
 BNE EVOLTP2
 LDA Y1TAB,X
 INC
 JSR LOOKDECOR
 BNE EVOLTP3
**
 INC YTAB,X ; ON CONTINUE A TOMBER
 INC YTAB,X
 LDA PASTAB,X
 AND #$00FF
 CMP #$0004 ; ON CYCLE SUR LES 4
 BEQ EVOLTP1
 INC PASTAB,X
 RTS
EVOLTP1 LDA PASTAB,X
 AND #$FF00
 STA PASTAB,X
 RTS
**
EVOLTP2 LDA Y1TAB,X ; SOL+1
 BRA EVOLTP4
EVOLTP3 LDA Y1TAB,X ; SOL+2
 INC
EVOLTP4 SEC
 SBC #$0005
 STA YTAB,X
 STZ PASTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 RTS

XX0TP0 HEX 0600,0600,0600,0600,0600 ; -> PAIR
XX1TP0 HEX 0600,0600,0600,0600,0600
YY0TP0 HEX 0A00,0A00,0900,0A00,0B00
YY1TP0 HEX 0500,0500,0500,0500,0500
SPRTP0 HEX CF49,D649,DD49,E449,EB49
XX0TP1 HEX 0500,0500,0500,0500,0500 ; <- IMPAIR
XX1TP1 HEX 0700,0700,0700,0700,0700
YY0TP1 HEX 0A00,0A00,0900,0A00,0B00
YY1TP1 HEX 0500,0500,0500,0500,0500
SPRTP1 HEX 0F5F,165F,DD5D,245F,6B60
XX0TP2 HEX 0500,0500,0500,0500,0500 ; -> IMPAIR
XX1TP2 HEX 0700,0700,0700,0700,0700
YY0TP2 HEX 0A00,0A00,0900,0A00,0B00
YY1TP2 HEX 0500,0500,0500,0500,0500
SPRTP2 HEX 6F54,7654,DD53,8454,2B55
XX0TP3 HEX 0600,0600,0600,0600,0600 ; <- PAIR
XX1TP3 HEX 0600,0600,0600,0600,0600
YY0TP3 HEX 0A00,0A00,0900,0A00,0B00
YY1TP3 HEX 0500,0500,0500,0500,0500
SPRTP3 HEX AF69,B669,DD67,C469,AB6B

****************  ESCALADE LA PAROIE  *****************

EVOLES LDA XTAB,X  ; ESCALADE LA PAROIE
 TAY
 LDA Y0TAB,X
 JSR LOOKDECOR
 BNE EVOLES6 ; ON SE HEURTE A LA PAROIE
 LDA ETATAB,X
 AND #$8000
 BEQ EVOLES0
 INY  ; ->
 BRA EVOLES2
EVOLES0 DEY  ; <-
EVOLES2 LDA Y0TAB,X
 DEC
 JSR LOOKDECOR
 BEQ EVOLES3 ; ON SE REDRESSE
 BRA EVOLES4 ; ON CONTINUE
**
EVOLES3 STZ PASTAB,X ; ON SE REDRESSE SUR LE PLAT
 LDA ETATAB,X
 AND #$FF00
 ORA #$0007 ; REDRESSEMENT
 STA ETATAB,X
 LDA Y0TAB,X ; ON AJUSTE Y
 INC
 INC
 INC
 STA YTAB,X
 RTS
**
EVOLES4 LDA PASTAB,X ; ON CONTINUE
 AND #$00FF
 ASL
 TAY
 LDA YTAB,X ; NOUVEL Y
 SEC
 SBC ESTAB,Y
 STA YTAB,X
 LDA PASTAB,X
 CMP #$0007
 BEQ EVOLES5
 INC PASTAB,X
 RTS
EVOLES5 STZ PASTAB,X
 RTS
**
EVOLES6 STZ PASTAB,X ; HEURTE A LA PAROIE
 LDA ETATAB,X
 AND #$FF00
 ORA #$0003 ; ON TOMBE
 EOR #$8000 ; ON SE RETOURE
 STA ETATAB,X
 RTS

ESTAB HEX 0000,0000,0000,0100,0100,0100,0100,0000

XX0ES0 HEX 0600,0600,0600,0600,0600,0A00,0600,0600 ; -> PAIR
XX1ES0 HEX 0200,0200,0200,0200,0200,0200,0200,0200
YY0ES0 HEX 0400,0500,0500,0600,0500,0400,0300,0300
YY1ES0 HEX 0500,0500,0500,0500,0500,0500,0500,0500
SPRES0 HEX F70D,9C0E,410F,460F,0B0E,500F,570F,1C0E
XX0ES1 HEX 0100,0100,0100,0100,0100,0100,0100,0100 ; <- IMPAIR
XX1ES1 HEX 0700,0700,0700,0700,0700,0B00,0700,0700
YY0ES1 HEX 0400,0500,0500,0600,0500,0400,0300,0300
YY1ES1 HEX 0500,0500,0500,0500,0500,0500,0500,0500
SPRES1 HEX 210E,660F,2B0E,300E,750F,FA11,0112,0612
XX0ES2 HEX 0500,0500,0500,0500,0900,0900,0900,0500 ; -> IMPAIR
XX1ES2 HEX 0300,0300,0300,0300,0300,0300,0300,0300
YY0ES2 HEX 0400,0500,0500,0600,0500,0400,0300,0300
YY1ES2 HEX 0500,0500,0500,0500,0500,0500,0500,0500
SPRES2 HEX AA16,AF16,B416,1916,BE16,6517,2C16,3316
XX0ES3 HEX 0200,0200,0200,0200,0200,0200,0200,0200 ; <- PAIR
XX1ES3 HEX 0600,0600,0600,0600,0A00,0A00,0A00,0600
YY0ES3 HEX 0400,0500,0500,0600,0500,0400,0300,0300
YY1ES3 HEX 0500,0500,0500,0500,0500,0500,0500,0500
SPRES3 HEX 9815,FD14,E216,E716,4C16,F316,DA18,4118

****************  SE REDRESSE SUR LE PLAT  ********************

EVOLRE LDA PASTAB,X ; SE REDRESSE APRES L'ESCALADE
 CMP #$0007
 BEQ EVOLRE2
 CMP #$0000
 BNE EVOLRE1
 LDA YTAB,X ; DECALAGE POUR LE 2eme SPRITE
 SEC
 SBC #$0008
 STA YTAB,X
EVOLRE1 INC PASTAB,X
 RTS
**
EVOLRE2 LDA ETATAB,X ; ON REMARCHE...
 AND #$8000
 BEQ EVOLRE3
 INC XTAB,X ; ->
 INC XTAB,X
 BRA EVOLRE4
EVOLRE3 DEC XTAB,X ; <-
 DEC XTAB,X
EVOLRE4 STZ PASTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 RTS

XX0RE0 HEX 0400,0600,0600,0200,0200,0200,0200,0200 ; -> PAIR
XX1RE0 HEX 0400,0200,0200,0200,0200,0600,0600,0600
YY0RE0 HEX 0500,0100,0100,0100,0400,0300,0300,0400
YY1RE0 HEX 0400,0800,0600,0500,0500,0400,0400,0500
SPRRE0 HEX 4B13,5013,5513,BA12,BD12,311A,F618,9B19
XX0RE1 HEX 0300,0100,0100,0100,0100,0500,0500,0500 ; <- IMPAIR
XX1RE1 HEX 0500,0700,0700,0300,0300,0300,0300,0300
YY0RE1 HEX 0500,0100,0100,0100,0400,0300,0300,0400
YY1RE1 HEX 0400,0800,0600,0500,0500,0400,0400,0500
SPRRE1 HEX 4618,2B1A,261F,0B21,0E21,D11F,D61F,7B20
XX0RE2 HEX 0500,0300,0300,0300,0300,0300,0300,0300 ; -> IMPAIR
XX1RE2 HEX 0300,0500,0500,0500,0500,0500,0500,0500
YY0RE2 HEX 0500,0100,0100,0100,0400,0300,0300,0400
YY1RE2 HEX 0400,0800,0600,0500,0500,0400,0400,0500
SPRRE2 HEX 891D,2E1E,331E,381E,3D1E,421E,471E,6C1C
XX0RE3 HEX 0200,0400,0400,0400,0400,0400,0400,0400 ; <-PAIR
XX1RE3 HEX 0600,0400,0400,0400,0400,0400,0400,0400
YY0RE3 HEX 0500,0100,0100,0100,0400,0300,0300,0400
YY1RE3 HEX 0400,0800,0600,0500,0500,0400,0400,0500
SPRRE3 HEX 711C,761C,7B1C,601E,051F,0A1F,CF1D,D41D

*****************************  BLOQUE  *********************************

EVOLBL LDA PASTAB,X ; BLOQUE LES LEMMINGS
* AND #$00FF
* BEQ EVOLBL3
 LDA XTAB,X
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR
 BEQ EVOLBL2 ; VIDE
EVOLBL3 LDA PASTAB,X
 AND #$00FF
 CMP #$000A ; PAS SUIVANT
 BEQ EVOLBL1
 INC PASTAB,X
 RTS
EVOLBL1 STZ PASTAB,X
 RTS
**
EVOLBL2 STZ PASTAB,X ; VIDE EN DESSOUS
 LDA ETATAB,X
 AND #$FF00
 ORA #$0003 ; TOMBE
 STA ETATAB,X
 JSR REMOVEBLOC ; ENLEVE LE BLOCKER DE LA TABLE
 RTS

XX0BL0 HEX 0600,0600,0600,0600,0600,0600,0600,0600,0600,0600,0600 ; PAIR
XX1BL0 HEX 0600,0600,0600,0600,0600,0600,0600,0600,0600,0600,0600
YY0BL0 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
YY1BL0 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRBL0 HEX 411F,2126,012D,E133,C13A,A141,8148,614F,4156,215D,0164
XX0BL1 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500 ; IMPAIR
XX1BL1 HEX 0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700
YY0BL1 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
YY1BL1 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRBL1 HEX 481F,2826,082D,E833,C83A,A841,8848,684F,4856,285D,0864

***************************  EXPLOSE  ******************************

EVOLEX LDA PASTAB,X ; EXPLOSION DU LEMMING
 AND #$00FF
 CMP #$0009 ; CREUSE
 BEQ EVOLEX0
 CMP #$000C ; PAS SUIVANT
 BEQ EVOLEX1
 INC PASTAB,X
 RTS
**
EVOLEX0 PHX  ; CREUSE
 LDA YTAB,X
 SEC
 SBC #$0009
 TAY
 LDA XTAB,X
 LSR
 ASL  ; PAIR...
 SEC
 SBC #$0006
 TAX
 JSR CREUSEXPLODEC ; CREUSE DECOR
 PLX
 JSR EXPLOSESMALL ; CREUSE EN BAS
 INC PASTAB,X
 INC FIXECRANFLG ; ON RE-AFFICHE LES OBJ FIXES
 RTS
**
EVOLEX1 STZ ETATAB,X ; C'EST FINI...
 DEC NBJEU
 LDA #$0001
 STA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 RTS

XX0EX0 HEX 0200,0200,0400,0400,0400,0200,0200,0400,0200,1000,0A00,1000,1400 ; PAIR
XX1EX0 HEX 0600,0600,0800,0800,0800,0600,0600,0400,0600,1000,0E00,1000,1400
YY0EX0 HEX 0500,0500,0500,0500,0500,0500,0300,0300,0300,1000,1500,1C00,2600
YY1EX0 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,1000,0800,0500,0500
SPREX0 HEX 3F76,4476,4976,5076,5776,5E76,A377,A877,AD77,BC68,AD6A,3A68,0B62
XX0EX1 HEX 0100,0300,0300,0300,0300,0300,0300,0300,0100,0F00,0900,0F00,1300 ; IMPAIR
XX1EX1 HEX 0300,0500,0500,0500,0500,0500,0500,0500,0700,1100,0F00,1100,1500
YY0EX1 HEX 0500,0500,0500,0500,0500,0500,0300,0300,0300,1000,1500,1C00,2600
YY1EX1 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,1000,0800,0500,0500
SPREX1 HEX 816B,846B,896B,2176,2676,2B76,7077,7577,7A77,BC68,AD6A,3A68,0B62

***************  CREUSE HORIZONTALEMENT  *************

EVOLCH LDA ETATAB,X ; CREUSE VERS LA DROITE OU LA GAUCHE
 AND #$8000
 BEQ EVOLCHG
 JMP EVOLCHD
*****
EVOLCHG LDA PASTAB,X ; GAUCHE
 ASL
 TAY
 LDA EVOLCHGTAB,Y ; ON DISPATCH SELON LE NUMERO DU PAS
 STA EVOLCHG1+1
EVOLCHG1 JMP $A0A0

EVOLCHGTAB DA EVOLCH0,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCHG511,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCH0
 DA EVOLCHGA,EVOLCHGB,EVOLCHGC,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCHG511,EVOLCH0,EVOLCH0
 DA EVOLCHG15,EVOLCH0,EVOLCHG17
**
EVOLCH0 INC PASTAB,X ; ON CONTINUE...
 RTS
**
EVOLCHG511 PHX  ; PAS 5/11 : CREUSE
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 SEC
 SBC #$0008
 TAX
 LDA #$0000
 JSR CREUSEHORI ; DECOR/ECRAN
 PLX
 JSR CREUSESMALL ; CREUSE EN BAS
 INC PASTAB,X
 INC FIXECRANFLG ; ON RE-AFFICHE LES OBJ FIXES
 RTS
**
EVOLCHGA LDA XTAB,X ; PAS A : X-3
 SEC
 SBC #$0003
 STA XTAB,X
 INC PASTAB,X
 RTS
**
EVOLCHGB DEC XTAB,X ; PAS B : X-1
 INC PASTAB,X
 RTS
**
EVOLCHGC LDA XTAB,X ; PAS C : PAROIE/MARCHE/TOMBE
 DEC
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR
 BNE EVOLCHGC1
 DEC XTAB,X ; TOMBE
 LDA ETATAB,X
 AND #$FF00
 ORA #$0003
 STA ETATAB,X
 STZ PASTAB,X
 RTS
EVOLCHGC1 PHX  ; PAROIE DEVANT ?
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 SEC
 SBC #$0008
 TAX
 JSR HORIPAROIE
 BEQ EVOLCHGC2 ; VIDE => MARCHE
 PLX  ; ZONE DURE DEVANT
 PHX
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 SEC
 SBC #$0008
 TAX
 LDA #$0000 ; GAUCHE
 JSR LOOKHORIZONE
 BNE EVOLCHGC2
 PLX  ; ON CONTINUE
 INC PASTAB,X
 RTS
EVOLCHGC2 PLX  ; MARCHE
 DEC XTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 STZ PASTAB,X
 RTS
**
EVOLCHG15 LDA XTAB,X ; PAS 15 : PAROIE/MARCHE/TOMBE
 SEC
 SBC #$0005
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR
 BNE EVOLCHG151
 LDA XTAB,X ; TOMBE
 SEC
 SBC #$0005
 STA XTAB,X
 STZ PASTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0003
 STA ETATAB,X
 RTS
EVOLCHG151 PHX ; PAROIE DEVANT ?
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 SEC
 SBC #$000C
 TAX
 JSR HORIPAROIE
 BEQ EVOLCHG152 ; VIDE => MARCHE
 PLX  ; ZONE DURE DEVANT
 PHX
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 SEC
 SBC #$000C
 TAX
 LDA #$0000 ; GAUCHE
 JSR LOOKHORIZONE
 BNE EVOLCHG152
 PLX  ; ON CONTINUE
 INC PASTAB,X
 RTS
EVOLCHG152 PLX  ; MARCHE
 LDA XTAB,X
 SEC
 SBC #$0005
 STA XTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 STZ PASTAB,X
 RTS
**
EVOLCHG17 LDA XTAB,X ; PAS 17 : X-4
 SEC
 SBC #$0004
 STA XTAB,X
 STZ PASTAB,X
 RTS
************
EVOLCHD LDA PASTAB,X ; DROITE
 ASL
 TAY
 LDA EVOLCHDTAB,Y ; ON DISPATCH SELON LE NUMERO DU PAS
 STA EVOLCHD1+1
EVOLCHD1 JMP $A0A0

EVOLCHDTAB DA EVOLCH0,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCHD511,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCH0
 DA EVOLCHDA,EVOLCHDB,EVOLCHDC,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCH0,EVOLCHD511,EVOLCH0,EVOLCH0
 DA EVOLCHD15,EVOLCH0,EVOLCHD17
**
EVOLCHD511 PHX  ; PAS 5/11 : CREUSE
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 TAX
 LDA #$0001
 JSR CREUSEHORI
 PLX
 JSR CREUSESMALL ; CREUSE EN BAS
 INC PASTAB,X
 INC FIXECRANFLG ; ON RE-AFFICHE LES OBJ FIXES
 RTS
**
EVOLCHDA LDA XTAB,X ; PAS A : X+3
 CLC
 ADC #$0003
 STA XTAB,X
 INC PASTAB,X
 RTS
**
EVOLCHDB INC XTAB,X ; PAS B : X+1
 INC PASTAB,X
 RTS
**
EVOLCHDC LDA XTAB,X ; PAS C : PAROIE/MARCHE/TOMBE
 DEC
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR
 BNE EVOLCHDC1
 INC XTAB,X ; TOMBE
 LDA ETATAB,X
 AND #$FF00
 ORA #$0003
 STA ETATAB,X
 STZ PASTAB,X
 RTS
EVOLCHDC1 PHX  ; TERRE DEVANT ?
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 INC
 TAX
 JSR HORIPAROIE
 BEQ EVOLCHDC2 ; VIDE => MARCHE
 PLX  ; ZONE DURE
 PHX
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 INC
 TAX
 LDA #$0001 ; DROITE
 JSR LOOKHORIZONE
 BNE EVOLCHDC2
 PLX  ; ON CONTINUE
 INC PASTAB,X
 RTS
EVOLCHDC2 PLX  ; MARCHE
 INC XTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 STZ PASTAB,X
 RTS
**
EVOLCHD15 LDA XTAB,X  ; PAS 15 : PAROIE/MARCHE/TOMBE
 SEC
 SBC #$0005
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR
 BNE EVOLCHD151
 LDA XTAB,X ; TOMBE
 CLC
 ADC #$0005
 STA XTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0003
 STA ETATAB,X
 STZ PASTAB,X
 RTS
EVOLCHD151 PHX ; PAROIE DEVANT ?
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 CLC
 ADC #$0004
 TAX
 JSR HORIPAROIE
 BEQ EVOLCHD152 ; VIDE
 PLX  ; ZONE DURE
 PHX
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA XTAB,X
 CLC
 ADC #$0004
 TAX
 LDA #$0001
 JSR LOOKHORIZONE
 BNE EVOLCHD152
 PLX  ; ON CONTINUE
 INC PASTAB,X
 RTS
EVOLCHD152 PLX  ; MARCHE
 LDA XTAB,X
 CLC
 ADC #$0005
 STA XTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 STZ PASTAB,X
 RTS
**
EVOLCHD17 LDA XTAB,X ; PAS 17 : X+4
 CLC
 ADC #$0004
 STA XTAB,X
 STZ PASTAB,X
 RTS

XX0CH0 HEX 0400,0400,0200,0200,0200,0400,0600,0800,0600,0800,0800,0800,0400,0200,0200 ; -> PAIR
 HEX 0200,0400,0400,0600,0800,0800,0400,0600,0600
XX1CH0 HEX 0400,0400,0600,0600,0A00,0800,0600,0800,0600,0800,0800,0800,0400,0600,0600
 HEX 0A00,0800,0800,0600,0800,0800,0800,0A00,0A00
YY0CH0 HEX 0400,0400,0400,0300,0300,0200,0200,0300,0400,0400,0400,0400,0400,0400,0300
 HEX 0300,0300,0200,0300,0400,0400,0400,0400,0400
YY1CH0 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRCH0 HEX C1B5,01BC,41C2,81C8,21CE,C6B5,66BB,06C1,46C7,88CD,CDB5,0FBC,4FC2,91C8,D1CE
 HEX D6B5,18BC,F6C2,F6C7,96CD,DDB5,1FBC,FDC2,DFC9
XX0CH1 HEX 0300,0300,0500,0500,0900,0700,0500,0700,0500,0700,0700,0700,0300,0500,0500 ; <- IMPAIR
 HEX 0900,0700,0700,0500,0700,0700,0700,0900,0900
XX1CH1 HEX 0500,0500,0300,0300,0300,0500,0700,0900,0700,0900,0900,0900,0500,0300,0300
 HEX 0300,0500,0500,0700,0900,0900,0500,0700,0700
YY0CH1 HEX 0400,0400,0400,0300,0300,0200,0200,0300,0400,0400,0400,0400,0400,0400,0300
 HEX 0300,0300,0200,0300,0400,0400,0400,0400,0400
YY1CH1 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRCH1 HEX 11B6,51BC,91C2,D1C8,71CE,16B6,B6BB,56C1,96C7,D8CD,1DB6,5FBC,9FC2,E1C8,21CF
 HEX 26B6,68BC,46C3,46C8,E6CD,2DB6,6FBC,4DC3,2FCA
XX0CH2 HEX 0700,0300,0300,0100,0300,0500,0700,0900,0700,0900,0900,0900,0300,0300,0100 ; -> IMPAIR
 HEX 0300,0300,0500,0700,0900,0900,0500,0700,0700
XX1CH2 HEX 0500,0500,0500,0700,0900,0700,0900,0700,0900,0700,0B00,0700,0500,0500,0700
 HEX 0900,0900,0700,0900,0700,0700,0B00,0900,0900
YY0CH2 HEX 0400,0400,0400,0300,0300,0200,0200,0300,0400,0400,0400,0400,0400,0400,0300
 HEX 0300,0300,0200,0300,0400,0400,0400,0400,0400
YY1CH2 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRCH2 HEX E8B5,48BC,68C2,A8C8,48CE,EFB5,8DBB,2DC1,6DC7,AFCD,F6B5,36BC,76C2,B8C8,F8CE
 HEX 01B6,DFBC,1DC3,1DC8,BDCD,08B6,46BC,26C3,06CA
XX0CH3 HEX 0400,0400,0400,0600,0800,0600,0800,0600,0800,0600,0A00,0600,0400,0400,0600 ; <- PAIR
 HEX 0800,0800,0600,0800,0600,0600,0A00,0800,0800
XX1CH3 HEX 0800,0400,0400,0200,0400,0600,0800,0A00,0800,0A00,0A00,0A00,0400,0400,0200
 HEX 0400,0400,0600,0800,0A00,0A00,0600,0800,0800
YY0CH3 HEX 0400,0400,0400,0300,0300,0200,0200,0300,0400,0400,0400,0400,0400,0400,0300
 HEX 0300,0300,0200,0300,0400,0400,0400,0400,0400
YY1CH3 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRCH3 HEX 38B6,78BC,B8C2,F8C8,98CE,3FB6,DDBB,7DC1,BDC7,FFCD,46B6,86BC,C6C2,08C9,48CF
 HEX 51B6,2FBD,6DC3,6DC8,0DCE,58B6,96BC,76C3,56CA

**************  CREUSE EN DIAGONALE  ****************

EVOLCD LDA PASTAB,X ; CREUSE EN DIAGONALE
 CMP #$0004
 BEQ EVOLCD2
 CMP #$0012 ; 18
 BEQ EVOLCD1
 INC PASTAB,X
 RTS
**
EVOLCD1 STZ PASTAB,X ; FIN : ON BOUCLE OU TOMBE SI VIDE
 LDA XTAB,X
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR ; VIDE EN DESSOUS ?
 BEQ EVOLCD10
 RTS  ; ON CONTINUE A CREUSER
EVOLCD10 LDA ETATAB,X ; ON TOMBE
 AND #$FF00
 ORA #$0003
 STA ETATAB,X
 RTS
**
EVOLCD2 INC PASTAB,X ; CREUSE : AVANCE ET DESCEND
 LDA XTAB,X
 STA EVOLCD23+1 ; AU CAS OU...
 LDA YTAB,X
 STA EVOLCD24+1
 INC YTAB,X
 INC YTAB,X
 LDA ETATAB,X
 AND #$8000
 BNE EVOLCD21
**
 LDA XTAB,X ; GAUCHE
 SEC
 SBC #$0004
 STA XTAB,X
 PHX  ; CREUSE GAUCHE
 LDA YTAB,X
 SEC
 SBC #$000A
 TAY
 LDA XTAB,X
 SEC
 SBC #$0004
 TAX
 LDA #$0000
 PHX
 PHY
 JSR LOOKDIAGZONE ; ZONE DURE ?
 BNE EVOLCD22
 PLY
 PLX
 LDA #$0000
 JSR CREUSEDIAG ; X,Y,A
 PLX
 JSR CREUSESMALL ; CREUSE EN BAS
 INC FIXECRANFLG ; ON RE-AFFICHE LES OBJ FIXES
 RTS
**
EVOLCD21 LDA XTAB,X ; DROITE
 CLC
 ADC #$0004
 STA XTAB,X
 PHX  ; CREUSE
 LDA YTAB,X
 SEC
 SBC #$000A
 TAY
 LDA XTAB,X
 SEC
 SBC #$0004
 TAX
 LDA #$0001
 PHX
 PHY
 JSR LOOKDIAGZONE ; ZONE DURE ?
 BNE EVOLCD22
 PLY
 PLX
 LDA #$0001
 JSR CREUSEDIAG ; X,Y,A
 PLX
 JSR CREUSESMALL ; CREUSE EN BAS
 INC FIXECRANFLG ; ON RE-AFFICHE LES OBJ FIXES
 RTS  ; ON CONTINUE
**
EVOLCD22 PLY
 PLX
 PLX
 STZ PASTAB,X  ; ON MARCHE
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
EVOLCD23 LDA #$A0A0
 STA XTAB,X
EVOLCD24 LDA #$A0A0
 STA YTAB,X
 RTS

XX0CD0 HEX 0400,0400,0800,0800,0400,0600,0600,0600,0600,0800,0800,0A00,0A00,0400,0400,0400,0200,0200,0200 ; PAIR ->
XX1CD0 HEX 0800,0800,0400,0400,0800,0600,0600,0600,0600,0800,0800,0600,0600,0800,0800,0800,0600,0600,0600
YY0CD0 HEX 0500,0700,0800,0700,0700,0400,0400,0400,0800,0800,0700,0500,0500,0500,0500,0500,0600,0400,0500
YY1CD0 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRCD0 HEX 01D5,08D5,0FD5,16D5,1DD5,24D5,2BD5,32D5,39D5,40D5,49D5,52D5,5BD5,64D5,6BD5,72D5,79D5,7ED5,83D5
XX0CD1 HEX 0700,0700,0300,0300,0700,0500,0500,0500,0500,0700,0700,0500,0500,0700,0700,0700,0500,0500,0500 ; IMPAIR <-
XX1CD1 HEX 0500,0500,0900,0900,0500,0700,0700,0700,0700,0900,0900,0B00,0B00,0500,0500,0500,0300,0300,0300
YY0CD1 HEX 0500,0700,0800,0700,0700,0400,0400,0400,0800,0800,0700,0500,0500,0500,0500,0500,0600,0400,0500
YY1CD1 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRCD1 HEX C1E7,C8E7,CFE7,D6E7,DDE7,E4E7,EBE7,F2E7,F9E7,00E8,09E8,12E8,1BE8,24E8,2BE8,32E8,39E8,3EE8,43E8
XX0CD2 HEX 0500,0500,0900,0900,0500,0700,0700,0700,0700,0900,0900,0B00,0B00,0500,0500,0500,0300,0300,0300 ; IMPAIR ->
XX1CD2 HEX 0700,0700,0300,0300,0700,0500,0500,0500,0500,0700,0700,0500,0500,0700,0700,0700,0500,0500,0500
YY0CD2 HEX 0500,0700,0800,0700,0700,0400,0400,0400,0800,0800,0700,0500,0500,0500,0500,0500,0600,0400,0500
YY1CD2 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRCD2 HEX 61DE,68DE,6FDE,76DE,7DDE,84DE,8BDE,92DE,99DE,A0DE,A9DE,B2DE,BBDE,C4DE,CBDE,D2DE,D9DE,DEDE,E3DE
XX0CD3 HEX 0600,0600,0200,0200,0600,0400,0400,0400,0400,0600,0600,0400,0400,0600,0600,0600,0400,0400,0400 ; PAIR <-
XX1CD3 HEX 0600,0600,0A00,0A00,0600,0800,0800,0800,0800,0A00,0A00,0C00,0C00,0600,0600,0600,0400,0400,0400
YY0CD3 HEX 0500,0700,0800,0700,0700,0400,0400,0400,0800,0800,0700,0500,0500,0500,0500,0500,0600,0400,0500
YY1CD3 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRCD3 HEX 21F1,28F1,2FF1,36F1,3DF1,44F1,4BF1,52F1,59F1,60F1,69F1,72F1,7BF1,84F1,8BF1,92F1,99F1,9EF1,A3F1

***************  CREUSE VERS LE BAS  *****************

EVOLCB LDA PASTAB,X ; CREUSE VERTICALEMENT
 AND #$00FF
 CMP #$0000
 BEQ EVOLCB3 ; ON DESCEND
 CMP #$0008
 BEQ EVOLCB3 ; ON DESCEND
 CMP #$000F
 BEQ EVOLCB1 ; ON CYCLE
 INC PASTAB,X
 RTS
**
EVOLCB1 STZ PASTAB,X ; ON CONTINUE
 RTS
**
EVOLCB3 PHX ; ON DESCEND
 LDA YTAB,X
 CLC
 ADC #$0003
 TAY
 LDA XTAB,X
 SEC
 SBC #$0004
 TAX
 JSR VERTPAROIE ; VIDE EN DESSOUS ?
 BEQ EVOLCB30 ; TOMBE...
 PLX
 PHX
 LDA YTAB,X
 TAY
 LDA XTAB,X
 SEC
 SBC #$0004
 TAX
 PHX
 PHY
 JSR LOOKBASZONE ; ZONE DUR ?
 BNE EVOLCB31 ; MARCHE...
 PLY
 PLX
 JSR CREUSEBAS ; CREUSE
 PLX
 JSR CREUSESMALL ; ON CREUSE EN BAS
 INC YTAB,X
 INC PASTAB,X
 INC FIXECRANFLG ; ON RE-AFFICHE LES OBJ FIXES
 RTS
**
EVOLCB30 PLX  ; ON TOMBE
 STZ PASTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$0003 ; TOMBE
 STA ETATAB,X
 RTS
**
EVOLCB31 PLY  ; ON MARCHE
 PLX
EVOLCB32 PLX
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001 ; MARCHE
 STA ETATAB,X
 STZ PASTAB,X
 LDA YTAB,X
 DEC
 DEC
 STA YTAB,X
 RTS

XX0CB0 HEX 0600,0800,0800,0800,0800,0800,0600,0600,0400,0400,0400,0400,0400,0400,0600,0600 ; PAIR
XX1CB0 HEX 0600,0400,0400,0400,0400,0800,0600,0600,0800,0800,0800,0C00,0C00,0C00,0600,0600
YY0CB0 HEX 0900,0900,0900,0900,0800,0700,0600,0800,0900,0900,0900,0900,0800,0700,0600,0800
YY1CB0 HEX 0300,0400,0500,0400,0300,0300,0300,0300,0300,0400,0500,0400,0300,0300,0300,0300
SPRCB0 HEX 8740,8E40,9540,1C43,EA41,513C,D143,D843,5F41,6641,6D41,B442,BD42,E536,EE36,663E
XX0CB1 HEX 0700,0700,0700,0900,0900,0900,0500,0500,0500,0300,0300,0300,0300,0500,0500,0500 ; IMPAIR
XX1CB1 HEX 0500,0500,0500,0700,0700,0700,0700,0700,0700,0900,0900,0D00,0D00,0B00,0700,0700
YY0CB1 HEX 0900,0900,0900,0900,0800,0700,0600,0800,0900,0900,0900,0900,0800,0700,0600,0800
YY1CB1 HEX 0300,0400,0500,0400,0300,0300,0300,0300,0300,0400,0500,0400,0300,0300,0300,0300
SPRCB1 HEX 924A,794C,804C,074A,F04B,F94B,C24A,694B,104C,174C,DE4A,8646,6D3E,763E,8F46,F645

********************  CONSTRUIT  *********************

EVOLCO LDA PASTAB,X ; CONSTRUCTION DES MARCHES
 AND #$00FF
 CMP #$000C
 BEQ EVOLCO1
 CMP #$000D
 BEQ EVOLCO2
 CMP #$000E
 BEQ EVOLCO4
 CMP #$000F
 BEQ EVOLCO3
 INC PASTAB,X ; ON CONTINUE
 RTS
**
EVOLCO1 INC PASTAB,X ; PAS 12
 DEC YTAB,X
 LDA ETATAB,X
 BPL EVOLCO10
* LDA XTAB,X ; ->
* INC
* JSR EVOLCOL ; COLLISON ?
 INC XTAB,X
 RTS
EVOLCO10 LDA XTAB,X ; <-
* DEC
* JSR EVOLCOL ; COLLISON ?
 DEC XTAB,X
 RTS
**
EVOLCO2 INC PASTAB,X ; PAS 13
 LDA ETATAB,X
 BPL EVOLCO20
 LDA XTAB,X ; ->
* INC
* JSR EVOLCOL ; COLLISON ?
 INC XTAB,X
 RTS
EVOLCO20 LDA XTAB,X ; <-
* DEC
* JSR EVOLCOL ; COLLISON ?
 DEC XTAB,X
 RTS
**
EVOLCO4 LDA Y1TAB,X  ; PAS 14
 DEC
 TAY
 LDA ETATAB,X
 BPL EVOLCO40
 LDA XTAB,X ; ->
 SEC
 SBC #$0003
 BRA EVOLCO41
EVOLCO40 LDA XTAB,X ; <-
 DEC
 DEC
EVOLCO41 PHX ; AFFICHE LA BRIQUE (DECOR+BANC 05)
 JSR METBRIQUE
 PLX
 INC PASTAB,X
 RTS
**
EVOLCO3 LDA ETATAB,X ; PAS 15
 BPL EVOLCO30
 LDA XTAB,X ; ->
 INC
 INC
 JSR EVOLCOL ; COLLISION ?
 BRA EVOLCO32
EVOLCO30 LDA XTAB,X ; <-
 DEC
 DEC
 JSR EVOLCOL ; COLLISION ?
EVOLCO32 LDA PASTAB,X
 AND #$FF00
 BEQ EVOLCO34 ; PLUS DE BRIQUES
 SEC
 SBC #$0100 ; ON CONTINUE
 STA PASTAB,X
 CMP #$0600
 BNE EVOLCO33
 JSR METSMALL ; CONSTRUIT EN BAS
EVOLCO33 RTS
EVOLCO34 LDA ETATAB,X ; PLUS DE BRIQUES
 AND #$FF00
 ORA #$000E
 STA ETATAB,X
 STZ PASTAB,X
 JSR METSMALL ; CONTRUIT EN BAS
 RTS
**
EVOLCOL TAY  ; COLLISION ?
 LDA Y1TAB,X
 DEC
 JSR LOOKDECOR ; HEURTE UNE PAROIE ?
 BNE EVOLCOL1
 INY
 LDA Y1TAB,X
 DEC
 JSR LOOKDECOR
 BNE EVOLCOL1
 LDA Y0TAB,X ; COGNE LA TETE ?
 JSR LOOKDECOR
 BNE EVOLCOL1
 RTS  ; BEN NON, ON CONTINUE
EVOLCOL1 LDA ETATAB,X ; MARCHE
 EOR #$8000 ; RETOURNE
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 STZ PASTAB,X
 PLA  ; RECUP JSR
 RTS

XX0CO0 HEX 0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400 ; -> PAIR
XX1CO0 HEX 0400,0400,0400,0400,0400,0400,0400,0400,0800,0800,0800,0800,0800,0400,0400,0400
YY0CO0 HEX 0400,0400,0400,0400,0400,0500,0800,0500,0200,0200,0400,0400,0400,0400,0400,0400
YY1CO0 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0600,0600,0500
SPRCO0 HEX 6724,0C25,1125,D623,1B25,2025,E523,EA23,4F23,5623,5D23,E425,AB24,B224,B724,1C1F
XX0CO1 HEX 0300,0300,0300,0300,0300,0300,0300,0300,0700,0700,0700,0700,0700,0300,0300,0300 ; <- IMPAIR
XX1CO1 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
YY0CO1 HEX 0400,0400,0400,0400,0400,0500,0800,0500,0200,0200,0400,0400,0400,0400,0400,0400
YY1CO1 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0600,0600,0500
SPRCO1 HEX 472B,EC2B,F12B,B62A,FB2B,A02C,452D,6A2B,EF28,F628,3D2A,C42C,8B2B,322C,372C,FC25
XX0CO2 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500 ; -> IMPAIR
XX1CO2 HEX 0300,0300,0300,0300,0300,0300,0300,0700,0700,0700,0700,0700,0700,0700,0300,0300
YY0CO2 HEX 0400,0400,0400,0400,0400,0500,0800,0500,0200,0200,0400,0400,0400,0400,0400,0400
YY1CO2 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0600,0600,0500
SPRCO2 HEX 2732,CC32,D132,9631,DB32,2034,A536,EA32,912E,1831,9F33,A633,AD33,B433,BB33,C033
XX0CO3 HEX 0200,0200,0200,0200,0200,0200,0200,0600,0600,0600,0600,0600,0600,0600,0200,0200 ; <- PAIR
XX1CO3 HEX 0600,0600,0600,0600,0600,0600,0600,0600,0600,0600,0600,0600,0600,0600,0600,0600
YY0CO3 HEX 0400,0400,0400,0400,0400,0500,0800,0500,0200,0200,0400,0400,0400,0400,0400,0400
YY1CO3 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0600,0600,0500
SPRCO3 HEX 0739,AC39,B139,7638,BB39,A03B,0540,6A3A,3134,B836,7F3A,863A,8D3A,343B,3B3B,A03A

*******************  PLUS DE BRIQUES  *************************

EVOLPB LDA PASTAB,X  ; PLUS DE BRIQUES POUR CONSTRUIRE
 AND #$00FF
 CMP #$0005
 BEQ EVOLPB1
 INC PASTAB,X
 RTS
EVOLPB1 LDA ETATAB,X ; MARCHE
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 STZ PASTAB,X
 RTS

XX0PB0 HEX 0200,0400,0400,0400,0400,0400 ; -> PAIR
XX1PB0 HEX 0200,0400,0400,0400,0400,0400
YY0PB0 HEX 0500,0500,0500,0500,0500,0500
YY1PB0 HEX 0500,0500,0500,0500,0500,0500
SPRPB0 HEX 811E,C424,0926,EE27,7325,5827
XX0PB1 HEX 0100,0300,0300,0300,0300,0300 ; <- IMPAIR
XX1PB1 HEX 0300,0500,0500,0500,0500,0500
YY0PB1 HEX 0500,0500,0500,0500,0500,0500
YY1PB1 HEX 0500,0500,0500,0500,0500,0500
SPRPB1 HEX 811E,C424,0926,EE27,7325,5827
XX0PB2 HEX 0300,0300,0500,0500,0500,0500 ; -> IMPAIR
XX1PB2 HEX 0500,0500,0700,0700,0700,0700
YY0PB2 HEX 0500,0500,0500,0500,0500,0500
YY1PB2 HEX 0500,0500,0500,0500,0500,0500
SPRPB2 HEX 412C,862D,6B2F,722F,792F,F936
XX0PB3 HEX 0200,0200,0400,0400,0400,0400 ; <- PAIR
XX1PB3 HEX 0600,0600,0800,0800,0800,0800
YY0PB3 HEX 0500,0500,0500,0500,0500,0500
YY1PB3 HEX 0500,0500,0500,0500,0500,0500
SPRPB3 HEX 412C,862D,6B2F,722F,792F,F936

****************  SORT PAR LA SORTIE  *****************

EVOLSO LDA PASTAB,X ; SORT SORTIE
 CMP #$0007
 BEQ EVOLSO1
 ASL
 TAY
 LDA YTAB,X
 SEC
 SBC SORTIETAB,Y
 STA YTAB,X
 INC PASTAB,X
 RTS
EVOLSO1 DEC NBJEU ; FIN...
 STZ ETATAB,X ; N'EXISTE PLUS
 LDA #$0001
 STA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 LDA NBIN
 CLC
 ADC SUCCESS1
 STA NBIN
 LDA SUCCESS3
 CLC
 ADC SUCCESS2
 CMP #$0064
 BPL EVOLSO2
 STA SUCCESS3
 BRA EVOLSO3
EVOLSO2 SEC  ; ON A DEPASSE 100, ON INCREMENTE
 SBC #$0064
 STA SUCCESS3
 INC NBIN
**
EVOLSO3 LDA #$0001
 STA AFFICHINFLAG ; NB DE LEMMINGS RENTRE
 RTS

SUCCESS1 HEX 0000 ; AVANT LA VIRGULE
SUCCESS2 HEX 0000 ; APRES LA VIRGULE
SUCCESS3 HEX 0000 ; RETENUE

SORTIEX0 HEX 6803 ; ZONE DE SORTIE
SORTIEX1 HEX 6C03
SORTIEY HEX 8200

SORTIETAB HEX 0200,0200,0000,0000,0000,0000,0000

XX0SO0 HEX 0400,0400,0400,0400,0400,0400,0400,0400 ; PAIR
XX1SO0 HEX 0400,0400,0400,0400,0400,0400,0400,0400
YY0SO0 HEX 0500,0500,0400,0400,0300,0400,0300,0100
YY1SO0 HEX 0500,0600,0600,0400,0300,0100,0100,0100
SPRSO0 HEX F05A,F55A,FA5A,FF5A,045B,095B,0E5B,135B
XX0SO1 HEX 0100,0300,0100,0100,0100,0100,0100,0100 ; IMPAIR
XX1SO1 HEX 0300,0500,0300,0300,0300,0300,0300,0300
YY0SO1 HEX 0500,0500,0400,0400,0300,0400,0300,0100
YY1SO1 HEX 0500,0600,0600,0400,0300,0100,0100,0100
SPRSO1 HEX 1501,1801,1D01,F507,9808,FD07,BD0B,F80C

*********************  S'ECRASE AU SOL  ******************************

EVOLET LDA PASTAB,X ; S'ECRASE...
 CMP #$000E
 BEQ EVOLET1
 INC PASTAB,X ; ON CONTINUE...
 RTS
EVOLET1 DEC NBJEU ; FINI...
 STZ ETATAB,X
 LDA #$0001
 STA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 RTS

XX0ET0 HEX 0400,0400,0400,0400,0600,0600,0800,0800,0800,0800,0800,0800,0800,0600,0400 ; ECRASE PAIR
XX1ET0 HEX 0800,0800,0800,0800,0A00,0A00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0600,0400
YY0ET0 HEX 0600,0500,0400,0300,0500,0700,0800,0900,0900,0900,0800,0400,0100,0100,0100
YY1ET0 HEX 0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100
SPRET0 HEX 010F,0114,6118,211C,080F,6813,0819,110F,1319,1C0F,BE19,5115,FC15,DE17,E517
XX0ET1 HEX 0300,0300,0300,0300,0500,0500,0700,0700,0700,0700,0700,0700,0700,0500,0300 ; ECRASE IMPAIR
XX1ET1 HEX 0500,0500,0500,0500,0700,0700,0900,0900,0900,0900,0900,0900,0900,0300,0100
YY0ET1 HEX 0600,0500,0400,0300,0500,0700,0800,0900,0900,0900,0800,0400,0100,0100,0100
YY1ET1 HEX 0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100,0100
SPRET1 HEX 2001,2006,800A,400E,2501,8505,250B,2E01,0E08,3701,1708,570E,EE0E,CE10,D310

**************************  SE NOIE  ***************************

EVOLNO LDA PASTAB,X ; SE NOIE BLEU/ROUGE/VERT
 AND #$00FF
 CMP #$00FF ; 1er PAS
 BEQ EVOLNO2
 CMP #$000F
 BEQ EVOLNO1
 LDA PASTAB,X  ; PEUT ON BOUGER LATERALEMENT ?
 AND #$FF00
 XBA
 CMP #$0005
 BPL EVOLNO00
 INC PASTAB,X
 RTS
EVOLNO00 LDA PASTAB,X ;
 AND #$00FF
 ASL
 TAY
 LDA PASTAB,X ; MET A JOUR LA DISTANCE BORDURE
 XBA
 SEC
 SBC EVOLNOTAB,Y
 XBA
 STA PASTAB,X
 PHY
 LDA ETATAB,X
 AND #$8000 ; GAUCHE/DROITE
 BNE EVOLNO0
 LDY X0TAB,X ; GAUCHE
 LDA YTAB,X
 JSR LOOKDECOR
 BNE EVOLNO3 ; PAROIE ??
 PLY
 LDA XTAB,X
 SEC
 SBC EVOLNOTAB,Y
 STA XTAB,X
 INC PASTAB,X
 RTS
EVOLNO0 LDY X1TAB,X ; DROITE
 LDA YTAB,X
 JSR LOOKDECOR
 BNE EVOLNO3
 PLY
 LDA XTAB,X
 CLC
 ADC EVOLNOTAB,Y
 STA XTAB,X
 INC PASTAB,X ; ON CONTINUE
 RTS
EVOLNO3 PLY  ; PAROIES A GAUCHE OU A DROITE : PAS BOUGE
 INC PASTAB,X
 RTS
EVOLNO1 DEC NBJEU ; FINI...
 STZ ETATAB,X
 LDA #$0001
 STA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 RTS
EVOLNO2 LDA PASTAB,X
 AND #$FF00
 STA PASTAB,X
 RTS

EVOLNOTAB HEX 0100,0100,0000,0000,0100,0200,0200,0200,0100,0200,0100,0000,0000,0100,0100

XX0NO0 HEX 0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400 ; NOIE PAIR
XX1NO0 HEX 0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400
YY0NO0 HEX 0600,0500,0400,0200,0100,0200,0300,0300,0200,0100,0100,0200,0200,0100,0100,0100
YY1NO0 HEX 0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200
SPRNO0 HEX 7256,B25C,5262,5267,7756,9759,575D,B761,1766,D769,7C56,9C59,5C5D,1C61,3C64,5C67
XX0NO1 HEX 0300,0500,0500,0500,0300,0500,0500,0500,0500,0500,0300,0300,0300,0300,0500,0500 ; NOIE IMPAIR
XX1NO1 HEX 0500,0300,0300,0300,0500,0300,0300,0300,0300,0300,0500,0500,0500,0500,0300,0300
YY0NO1 HEX 0600,0500,0400,0200,0100,0200,0300,0300,0200,0100,0100,0200,0200,0100,0100,0100
YY1NO1 HEX 0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200,0200
SPRNO1 HEX 8156,C15C,6162,6167,8656,A659,665D,C661,2666,E669,8B56,AB59,6B5D,2B61,4B64,6B67

****************  DESTRUCTION  *************************

EVOLDE LDA PASTAB,X
 AND #$00FF
 CMP #$00FF
 BEQ EVOLDE3 ; 1er PAS
 CMP #$000C ; AVANT DERNIER
 BEQ EVOLDE1
 CMP #$000D ; DERNIER
 BEQ EVOLDE2
 INC PASTAB,X
 RTS
EVOLDE1 LDA YTAB,X  ; Y=Y-5
 SEC
 SBC #$00005
 STA YTAB,X
 INC PASTAB,X
 RTS
EVOLDE2 STZ ETATAB,X ; FIN
 DEC NBJEU
 LDA #$0001
 STA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 RTS
EVOLDE3 STZ PASTAB,X
 RTS

XX0DE0 HEX 0200,0400,0600,0600,0600,0600,0600,0600,0400,0400,0400,0600,0600,0400 ; DESTRUCTION PAIR
XX1DE0 HEX 0200,0400,0600,0600,0600,0600,0600,0600,0400,0400,0400,0600,0600,0800
YY0DE0 HEX 0500,0400,0400,0300,0300,0400,0400,0400,0500,0500,0700,0800,0700,0200
YY1DE0 HEX 0500,0500,0500,0500,0500,0400,0400,0500,0500,0500,0500,0500,0500,0300
SPRDE0 HEX 1054,1354,1854,7F53,8653,6D55,7455,7B55,E254,E74F,EC4F,114E,184E,D856
XX0DE1 HEX 0300,0500,0700,0700,0700,0700,0700,0700,0500,0500,0500,0700,0700,0500 ; DESTRUCTION IMPAIR
XX1DE1 HEX 0100,0300,0500,0500,0500,0500,0500,0500,0300,0300,0300,0500,0500,0700
YY0DE1 HEX 0500,0400,0400,0300,0300,0400,0400,0400,0500,0500,0700,0800,0700,0200
YY1DE1 HEX 0500,0500,0500,0500,0500,0400,0400,0500,0500,0500,0500,0500,0500,0300
SPRDE1 HEX 1054,1354,1854,7F53,8653,6D55,7455,7B55,E254,E74F,EC4F,114E,184E,D856

***********************  PENDAISON  **************************

EVOLPE LDA PASTAB,X ; LA POTENCE
 CMP #$0023
 BEQ EVOLPE1
 INC PASTAB,X ; ON CONTINUE...
 RTS
EVOLPE1 DEC NBJEU ; FINI...
 STZ ETATAB,X
 STZ POTENCEFLAG
 LDA #$0001
 STA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 RTS

POTENCEFLAG HEX 0000 ; 0:LIBRE, 1:BUSY
POTENCELEM HEX 0000 ; NUMERO DU LEMMING CONCERNE

XX0PE0 HEX 0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400 ; PENDAISON PAIRE
 HEX 0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400,0400
XX1PE0 HEX 0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00
 HEX 0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00,0C00
YY0PE0 HEX 1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00
 HEX 1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00,1E00
YY1PE0 HEX 0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700
 HEX 0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700,0700
SPRPE0 HEX A080,A880,B080,B880,C080,C880,D080,D880,E080,E880,F080,F880,0081,0881,1081,1881,2081,2881
 HEX 3081,3881,E09A,E89A,F09A,F89A,009B,089B,109B,189B,209B,289B,309B,389B,409B,489B,509B,589B

***********************  ECRASEMENT  **************************

EVOLEC LDA PASTAB,X ; LA POTENCE
 CMP #$000E
 BEQ EVOLEC1
 INC PASTAB,X ; ON CONTINUE...
 RTS
EVOLEC1 DEC NBJEU ; FINI...
 STZ ETATAB,X
 LDY #$0000 ; ON CHERCHE LE PIEGE
EVOLEC2 LDA ECRASEFLAG,Y
 BEQ EVOLEC3 ; OCCUPE ?
 TXA
 CMP ECRASELEM,Y
 BEQ EVOLEC4
EVOLEC3 INY
 INY
 CPY #$0008
 BNE EVOLEC2
 LDA #$0003
 JSR BORD6
 BRK 00 ; PROBLEME...
EVOLEC4 LDA #$0000
 STA ECRASEFLAG,Y
 LDA #$0001
 STA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 RTS

ECRASEFLAG HEX 0000,0000,0000,0000 ; 0:LIBRE, 1:BUSY
ECRASELEM HEX 0000,0000,0000,0000 ; NUMERO DU LEMMING

XX0EC0 HEX 1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000 ; ECRASEMENT PAIRE
XX1EC0 HEX 1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000,1000
YY0EC0 HEX 0A00,0A00,0A00,0A00,0A00,0A00,0A00,0A00,0A00,0A00,0A00,0A00,0A00,0A00,0A00
YY1EC0 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
SPREC0 HEX C188,D288,E388,F488,0589,1689,2789,3889,4989,A19E,B29E,C39E,D49E,E59E,F69E

***********************  GUILLOTINE  **************************

EVOLGU LDA PASTAB,X ; COUPE TETE
 CMP #$000E
 BEQ EVOLGU1
 INC PASTAB,X ; ON CONTINUE...
 RTS
EVOLGU1 DEC NBJEU ; FINI...
 STZ ETATAB,X
 LDY #$0000 ; ON CHERCHE LE PIEGE
EVOLGU2 LDA GUILLOFLAG,Y
 BEQ EVOLGU3 ; OCCUPE ?
 TXA
 CMP GUILLOLEM,Y
 BEQ EVOLGU4
EVOLGU3 INY
 INY
 CPY #$0008
 BNE EVOLGU2
 LDA #$0003
 JSR BORD6
 BRK 00 ; PROBLEME...
EVOLGU4 LDA #$0000
 STA GUILLOFLAG,Y
 LDA #$0001
 STA AFFICHOUTFLAG ; NB DE LEMMINGS EN JEU
 RTS

GUILLOFLAG HEX 0000,0000,0000,0000 ; 0:LIBRE, 1:BUSY
GUILLOLEM HEX 0000,0000,0000,0000 ; NUMERO DU LEMMING

XX0GU0 HEX 0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800 ; ECRASEMENT PAIRE
XX1GU0 HEX 0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800,0800
YY0GU0 HEX 0B00,0B00,0B00,0B00,0B00,0B00,0B00,0B00,0B00,0B00,0B00,0B00,0B00,0B00,0B00
YY1GU0 HEX 0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500,0500
SPRGU0 HEX 0781,1081,1981,2281,2B81,3481,A78B,B08B,B98B,C28B,CB8B,D48B,4796,5096,5996

********************  ROUTINES DE RECENTRAGE X/Y  *****************************

XRECENTRVAL LDA XTAB,X  ; RECUPERE LA VALEUR DE RECENTRAGE X
 PHA
 JSR XRECENTR
 LDY XTAB,X
 PLA
 STA XTAB,X ; RESTAURE X
 TYA
 RTS

XRECENTR LDA ETATAB,X ; RECENTRE X
 AND #$00FF
 CMP #$0006 ; MONTE PAROIE
 BEQ XRECENTR1
 CMP #$0007 ; REDRESSE PAROIE
 BEQ XRECENTR2
 CMP #$000A ; CREUSE HORI
 BEQ XRECENTR3
 CMP #$000B ; CREUSE DIAG
 BNE XRECENTR0
 JMP XRECENTR4
XRECENTR0 RTS
**
XRECENTR1 LDA ETATAB,X ; MONTE PAROIE
 AND #$8000
 BNE XRECENTR10
 LDA #$6918 ; GAUCHE CLC/ADC
 BRA XRECENTR11
XRECENTR10 LDA #$E938 ; DROITE SEC/SBC
XRECENTR11 STA XRECENTR12
 LDA XTAB,X
XRECENTR12 CLC
 ADC #$0003
 STA XTAB,X
 RTS
**
XRECENTR2 LDA PASTAB,X ; REDRESSE PAROIE
 AND #$00FF
 ASL
 TAY
 LDA XRECENTR2TAB,Y
 STA XRECENTR22+2
 LDA ETATAB,X
 AND #$8000
 BNE XRECENTR20
 LDA #$6918 ; GAUCHE CLC/ADC
 BRA XRECENTR21
XRECENTR20 LDA #$E938 ; DROITE SEC/SBC
XRECENTR21 STA XRECENTR22
 LDA XTAB,X
XRECENTR22 CLC
 ADC #$A0A0
 STA XTAB,X
 RTS
XRECENTR2TAB HEX 0300,0200,0200,0100,0100,0000,0000,0000
**
XRECENTR3 LDA PASTAB,X ; CREUSE HORI
 AND #$00FF
 ASL
 TAY
 LDA XRECENTR3TAB,Y
 STA XRECENTR32+2
 LDA ETATAB,X
 AND #$8000
 BNE XRECENTR30
 LDA #$E938 ; GAUCHE SEC/SBC
 BRA XRECENTR31
XRECENTR30 LDA #$6918 ; DROITE CLC/ADC
XRECENTR31 STA XRECENTR32
 LDA XTAB,X
XRECENTR32 CLC
 ADC #$A0A0
 STA XTAB,X
 RTS
XRECENTR3TAB HEX 0100,0200,0300,0300,0300,0300,0300,0300,0300,0300,0400,0100,0100,0200,0200
 HEX 0400,0400,0400,0400,0400,0400,0500,0500,0400
**
XRECENTR4 LDA PASTAB,X ; CREUSE DIAG
 AND #$00FF
 ASL
 TAY
 LDA XRECENTR4TAB,Y
 STA XRECENTR42+2
 LDA ETATAB,X
 AND #$8000
 BEQ XRECENTR40
 LDA #$E938 ; DROITE SEC/SBC
 BRA XRECENTR41
XRECENTR40 LDA #$6918 ; GAUCHE CLC/ADC
XRECENTR41 STA XRECENTR42
 LDA XTAB,X
XRECENTR42 CLC
 ADC #$A0A0
 STA XTAB,X
 RTS
XRECENTR4TAB HEX 0000,0000,0000,0000,0000,0300,0200,0200,0200,0200,0200,0200,0200
 HEX 0100,0100,0000,0000,0000,0000

YRECENTRVAL LDA YTAB,X ; RECUPERE LA VALEUR DE RECENTRAGE Y
 PHA
 JSR YRECENTR
 LDY YTAB,X
 PLA
 STA YTAB,X ; RESTAURE Y
 TYA
 RTS

YRECENTR LDA ETATAB,X ; RECENTRE Y
 AND #$00FF
 CMP #$0007 ; REDRESSE PAROIE
 BEQ YRECENTR1
 CMP #$000C ; CREUSE BAS
 BEQ YRECENTR2
 CMP #$000D ; CONSTRUIT
 BEQ YRECENTR3
 RTS
**
YRECENTR1 LDA PASTAB,X ; REDRESSE PAROIE
 AND #$00FF
 ASL
 TAY
 LDA YRECENTR1TAB,Y
 AND #$00FF
 STA YRECENTR1VAL ; VALEUR NON SIGNEE
 LDA YRECENTR1TAB,Y
 ASL
 BCS YRECENTR12
YRECENTR11 LDA YTAB,X ; +
 CLC
 ADC YRECENTR1VAL
 STA YTAB,X
 RTS
YRECENTR12 LDA YTAB,X ; -
 SEC
 SBC YRECENTR1VAL
 STA YTAB,X
 RTS
YRECENTR1VAL HEX 0000
YRECENTR1TAB HEX 0180,0300,0100,0000,0000,0180,0180,0000
**
YRECENTR2 LDA YTAB,X ; CREUSE BAS
 DEC
 DEC
 STA YTAB,X
 RTS
**
YRECENTR3 LDA PASTAB,X ; CONSTRUIT
 AND #$00FF
 CMP #$000D
 BEQ YRECENTR31
 CMP #$000E
 BEQ YRECENTR31
 RTS
YRECENTR31 INC YTAB,X
 RTS

**************  DECIDE DU SON A JOUER POUR CE PAS  *******************

PUTSOUND LDA ETATAB,X ; DECIDE QUEL SON JOUER
 AND #$00FF
 CMP #$0009 ; EXPLOSE
 BEQ PUTSOUND1
 CMP #$000D ; CONSTRUIT
 BEQ PUTSOUND2
 CMP #$000F
 BPL PUTSOUND3
 RTS  ; RIEN A JOUER
****
PUTSOUND1 LDA PASTAB,X ; EXPLOSE
 AND #$00FF
 CMP #$0001
 BEQ PUTSOUND10
 CMP #$0009
 BEQ PUTSOUND11
 RTS
PUTSOUND10 LDA #$000B ; INIT
 JMP PUTSOUNDPRIORI
PUTSOUND11 LDA #$0007 ; FIN
 JMP PUTSOUNDPRIORI
****
PUTSOUND2 LDA PASTAB,X ; CONSTRUIT
 AND #$00FF
 CMP #$000A
 BNE PUTSOUND20
 LDA PASTAB,X
 XBA
 AND #$00FF ; NB DE BRIQUES
 CMP #$0003
 BPL PUTSOUND20
 LDA #$0004
 STA WHICHSOUND
PUTSOUND20 RTS
****
PUTSOUND3 SEC  ; ECRASE/NOIE/DESTRUC/PENDAISON...
 SBC #$000F
 ASL
 TAY
 LDA PASTAB,X
 AND #$00FF
 CMP TABSOUNDPAS,Y ; NUMERO DU PAS CONCERNE PAR LE SON
 BNE PUTSOUND30
 LDA TABSOUNDNUM,Y ; NUMERO DU SON
 JMP PUTSOUNDPRIORI
PUTSOUND30 RTS
****
PUTSOUNDPRIORI LDY WHICHSOUND  ; SON PRIORITAIRE ?
 CPY #$0004
 BEQ PUTSOUND30
 STA WHICHSOUND
 RTS

YIPPEEFLAG HEX 0000 ; 1 : DEJA FAIT
WHICHSOUND HEX 0000 ; 0:AUCUN

TABSOUNDPAS HEX 0300,0000,0000,0000,0100,0100,0200 ; NUMERO PAS / ETAT
TABSOUNDNUM HEX 0F00,0100,0C00,0800,0200,0D00,0500 ; NUMERO DU SON / ETAT

PLAYPUTSOUND LDA WHICHSOUND
 BEQ PLAYPUTSOUND2
 LDA SHIFTFLAG
 BNE PLAYPUTSOUND1 ; ON NE JOUE PAS...
 LDA WHICHSOUND
 CMP #$000F ; YIPPEEE
 BNE PLAYPUTSOUND3
 LDA YIPPEEFLAG
 BNE PLAYPUTSOUND1
 INC YIPPEEFLAG
 LDA #$000F
PLAYPUTSOUND3 JSR PLAYSOUND ; ON JOUE
PLAYPUTSOUND1 STZ WHICHSOUND
PLAYPUTSOUND2 RTS

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