
************  CREE TABLE OBJETS FIXES

CREEFIXE LDA DECORSLIDE ; 0->96
 ASL
 ASL
 ASL
 ASL  ; *16
 STA XGAUCH
 CLC
 ADC #$0140 ; 320
 STA XDROIT

 LDA XGAUCH  ; VALEUR AVEC DECALAGE POUR LES LEMMINGS
 CLC
 ADC #$0040 ; 64
 STA XGAUCHLEM
 CLC
 ADC #$0140
 STA XDROITLEM

 STZ FIXEOBJ-2 ; INIT:ZERO OBJ A AFFICHER

 LDX #$0000
 LDA FIXETAB ; NB D'OBJETS
 BEQ CREEFIXE20 ; 0, ON SORT...
 DEC
 STA CREEFIXENXT+1

CREEFIXE1 LDA FIXETAB+2,X ; X0
 CMP XDROIT
 BPL CREEFIXE2 ; EN DEHORS
 LDA XGAUCH
 CMP FIXETAB+4,X ; X1
 BPL CREEFIXE2 ; EN DEHORS
 BRA CREEFIXE3
CREEFIXE2 JMP CREEFIXENXT
CREEFIXE20 RTS  ; 0 OBJET
***
CREEFIXE3 INC FIXEOBJ-2 ; L'OBJET EST DANS L'ECRAN
 LDA FIXETAB+8,X
 AND #$FF00 ; PORTE ?
 BEQ CREEFIXE8

 LDA HORLOGETAB-2 ; ADRESSE SPRITE PORTE
 CMP #$0007
 BPL CREEFIXE5 ; PORTE OUVERTE
 ASL  ; PORTE EN COURS D'OUVERTURE
 STA CREEFIXE7+1
 BRA CREEFIXE6
CREEFIXE5 LDA #$000C ; PORTE OUVERTE
 STA CREEFIXE7+1
 LDA #$0001
 STA ANIMPORTE
CREEFIXE6 PHX

 LDA FIXETAB+8,X ; NUMERO DE PORTE
 AND #$FF00
 XBA
 DEC
 ASL
 TAX
 LDA QQTAB,X ; * SIZEOF(OBJ ANIM)=44
 STA CREEFIXE9+1
 LDA DZTAB,X ; * SIZEOF(OBJ FIXE)=12
 STA CREEFIXE10+1

CREEFIXE7 LDA #$A0A0 ; ON RECUPERE L'ADRESSE DANS LA TABLE D'OBJET ANIMES
 CLC
CREEFIXE9 ADC #$A0A0 ; NUMERO DE LA PORTE * SIZEOF(OBJ ANIMES)
 TAX
CREEFIXE10 LDY #$A0A0 ; NUMERO DE LA PORTE
 LDA ANIMTAB+14,X ; @ SPRITE TABLE OBJ ANIMES
 STA FIXETAB+12,Y ; @ SPRITE TABLE OBJ FIXES
 PLX
*****
CREEFIXE8 LDA FIXETAB+10,X
 STA FIXETMP+2 ; HAUTEUR
 LDA FIXETAB+2,X ; X0
 CMP XGAUCH
 BMI CREEFIXEC1 ; CAS 1
 LDA FIXETAB+4,X
 CMP XDROIT
 BPL CREEFIXEC2 ; CAS 2
***
 LDA FIXETAB+6,X ; LE SPRITE EST TOTALEMENT DANS L'ECRAN
 ASL
 TAY  ; Y
 LDA FIXETAB+2,X
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC TABLE,Y
 STA FIXETMP+6 ; @ ECRAN
 LDA FIXETAB+12,X
 STA FIXETMP+4 ; @ SPRITE
 LDA FIXETAB+8,X
 AND #$00FF ; MASQUE POUR LE FLAG NUMERO PORTE
 STA FIXETMP ; LARGEUR*4
 BRA CREEFIXEDMP
***
CREEFIXEC1 LDA FIXETAB+6,X ; CAS 1, COLLE A LA BORDURE GAUCHE
 ASL
 TAY
 LDA TABLE,Y
 STA FIXETMP+6 ; @ ECRAN
 LDA XGAUCH
 SEC
 SBC FIXETAB+2,X ; X0
 LSR
 STA CREEFIXEC12+1 ; NB DE POINTS QUE L'ON PERD
 LSR  ; NB DE *4 QUE L'ON PERD
 STA CREEFIXEC11+1
 LDA FIXETAB+8,X ; LARGEUR *4 ORIGINALE
 AND #$00FF ; MASQUE POUR LE FLAG NUMERO PORTE
 SEC
CREEFIXEC11 SBC #$A0A0
 STA FIXETMP ; LARGEUR*4
CREEFIXEC12 LDA #$A0A0
 CLC
 ADC FIXETAB+12,X ; @ SPRITE ORIGINALE
 STA FIXETMP+4 ; @ SPRITE
 BRA CREEFIXEDMP
***
CREEFIXEC2 LDA FIXETAB+12,X ; CAS 2, COLLE A LA BORDURE DROITE
 STA FIXETMP+4 ; @ SPRITE
 LDA FIXETAB+6,X ; Y
 ASL
 TAY
 LDA FIXETAB+2,X ; X0
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC TABLE,Y
 STA FIXETMP+6 ; @ ECRAN
 LDA FIXETAB+4,X ; X1
 SEC
 SBC XDROIT
 LSR
 LSR  ; NB DE *4 NON AFFICHE
 STA CREEFIXEC21+1
 LDA FIXETAB+8,X ; NB DE *4 ORIGINAL
 AND #$00FF ; MASQUE POUR LE FLAG DE NUMERO PORTE
 SEC
CREEFIXEC21 SBC #$A0A0
 STA FIXETMP ; LARGEUR *4
***
CREEFIXEDMP PHX  ; DUMP DES VALEURS
 LDA FIXEOBJ-2
 DEC
 ASL
 ASL
 ASL  ; *8
 TAX
 LDY #$0000
CREEFIXEDMP1 LDA FIXETMP,Y
 STA FIXEOBJ,X ; RECOPIE
 INX
 INX
 INY
 INY
 CPY #$0008
 BNE CREEFIXEDMP1
 PLX
***
CREEFIXENXT LDA #$A0A0 ; FIN ?
 BNE CREEFIXENXT1 ; NB D'OBJET RESTANT
 RTS

CREEFIXENXT1 DEC CREEFIXENXT+1 ; OBJET SUIVANT
 TXA
 CLC
 ADC #$000C
 TAX
 JMP CREEFIXE1

XGAUCH HEX 0000 ; LIMITES GAUCHES DROITE DE L'ECRAN
XDROIT HEX 0000
XGAUCHLEM HEX 0000 ; LIMTES +64 POUR EVITER LES CONFLITS BORDURES
XDROITLEM HEX 0000
FIXETMP HEX 0000,0000,0000,0000 ; LARGEUR*4,HAUTEUR,@ SPRITE, @ ECRAN

FIXETAB HEX 0200 ; NB D'OBJETS
 HEX C402,F002,2400,0B01,1900,3A02 ; PORTE 1
 HEX 5803,7C03,7100,0900,1400,8143 ; X0,X1,Y,LARGEUR*4,HAUTEUR,@ SPRITE
 DS 5*12 ; 7 OBJ FIXES MAX

************  AFFICHE OBJETS FIXES

AFFICHFIXE LDA BANC07 ; EXPLOITE LA TABLE POUR AFFICHER
 STA AFFLVL2+2
 LDA FIXEOBJ-2
 BEQ AFFICHFIXE01 ; RIEN A AFFICHER...
 LDA #$0000
AFFICHFIXE1 CMP FIXEOBJ-2
 BMI AFFICHFIXE2
AFFICHFIXE01 LDA BANC06 ; RETABLISSEMENT
 STA AFFLVL2+2
 RTS

AFFICHFIXE2 PHA
 ASL
 ASL
 ASL  ; *8
 TAX  ; AFFICHE 1 OBJET FIXE
 LDA FIXEOBJ+4,X ; @ SPRITE
 STA AFFICHSOUSFIX7+1
 LDA FIXEOBJ+6,X ; @ ECRAN
 STA AFFICHSOUSFIX9+1
 STA AFFICHSOUSFIXA+1 ; ECRAN 01/2000
 STA AFFICHSOUSFIX6+1
 STA AFFICHSOUSFIX8+1
 LDA FIXEOBJ+2,X ; HAUTEUR
 TAY
 LDA FIXEOBJ+0,X ; LARGEUR *4
 JSR AFFICHSOUSFIX ; AFFICHAGE SOUS LE DECOR
 PLA
 INC
 BRA AFFICHFIXE1

FIXECRANFLG HEX 0000 ; 0 RIEN, SINON: ON AFFICHE LES FIXES EN 01/2000 AUSSI

 HEX 0000 ; NB D'OBJETS A AFFICHER
FIXEOBJ HEX 0000,0000,0000,0000 ; LARGEUR*4, HAUTEUR, @ SPRITE, @ ECRAN
 DS 6*8 ; 7 OBJ FIXES MAX

************  CREE TABLE OBJETS ANIMES

CREEANIM STZ ANIMOBJ-2 ; INIT:ZERO OBJ A AFFICHER

 LDX #$0000
 LDA ANIMTAB ; NB D'OBJETS A TRAITER
 BNE CREEANIM0
 RTS  ; RIEN A TRAITER
CREEANIM0 DEC
 STA CREEANIMNXT+1

CREEANIM1 LDA ANIMTAB+4,X ; X0
 CMP XDROIT
 BPL CREEANIM2 ; EN DEHORS
 LDA XGAUCH
 CMP ANIMTAB+6,X ; X1
 BPL CREEANIM2 ; EN DEHORS
 BRA CREEANIM3
CREEANIM2 JMP CREEANIMNXT
***

CREEANIM3 LDA #$0001 ; ANIMFLAG
 STA ANIMTMP+42
 LDA ANIMTAB+10,X ; PORTE ?
 AND #$FF00
 BEQ CREEANIM31

 LDA ANIMPORTE ; OUVERTE ?
 BNE CREEANIM2 ; ON N'AFFICHE PAS...
 LDA ANIMTAB+10,X
 ORA #$00FF
 STA ANIMTMP+42 ; ANIMFLAG : 0xFF, x=1,2,3,4

CREEANIM31 INC ANIMOBJ-2 ; UN OBJET DE PLUS
 LDA ANIMTAB+12,X
 STA ANIMTMP+4 ; HAUTEUR
 LDA ANIMTAB+8,X
 ASL
 STA CREEANIMDMP2+1 ; Y0*2 (REFRESH)
 LDA ANIMTAB+4,X ; X0
 CMP XGAUCH
 BMI CREEANIMC1 ; CAS 1
 LDA ANIMTAB+6,X ; X1
 CMP XDROIT
 BMI CREEANIMC0
 JMP CREEANIMC2 ; CAS 2
***
CREEANIMC0 LDA ANIMTAB+8,X ; LE SPRITE EST TOTALEMENT DANS L'ECRAN
 ASL
 TAY  ; Y
 LDA ANIMTAB+4,X ; X0
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC TABLE,Y
 STA ANIMTMP+6 ; @ ECRAN
 LDA ANIMTAB+10,X
 AND #$00FF ; MASQUE POUR LE FLAG NUMERO PORTE
 STA ANIMTMP+2 ; LARGEUR*4
 LDA ANIMTAB+2,X
 STA ANIMTMP ; NB PAS
 AND #$00FF ; MASQUE DE PROTECTION POUR LE FLAG
 ASL
 STA CREEANIM5+1
 PHX
 LDY #$0000
CREEANIM4 LDA ANIMTAB+14,X
 STA ANIMTMP+10,Y ; @ SPRITES...
 INX
 INX
 INY
 INY
CREEANIM5 CPY #$A0A0 ;
 BNE CREEANIM4
 PLX
 JMP CREEANIMDMP
***
CREEANIMC1 LDA ANIMTAB+8,X  ; CAS 1, COLLE A LA BORDURE GAUCHE
 ASL
 TAY
 LDA TABLE,Y
 STA ANIMTMP+6 ; @ ECRAN
 LDA XGAUCH
 SEC
 SBC ANIMTAB+4,X ; X0
 LSR
 STA CREEANIMC12+1 ; NB DE POINTS QUE L'ON PERD
 LSR  ; NB DE *4 QUE L'ON PERD
 STA CREEANIMC11+1
 LDA ANIMTAB+10,X ; LARGEUR *4 ORIGINALE
 AND #$00FF ; MASQUE POUR LE FLAG NUMERO PORTE
 SEC
CREEANIMC11 SBC #$A0A0
 STA ANIMTMP+2 ; LARGEUR*4
 LDA ANIMTAB+2,X
 STA ANIMTMP ; NB DE PAS
 AND #$00FF ; MASQUE DE PROTECTION POUR LE FLAG
 ASL
 STA CREEANIMC13+1
 PHX
 LDY #$0000
CREEANIMC12 LDA #$A0A0
 CLC
 ADC ANIMTAB+14,X ; @ SPRITE ORIGINALE
 STA ANIMTMP+10,Y ; @ SPRITE
 INX
 INX
 INY
 INY
CREEANIMC13 CPY #$A0A0 ; NB DE PAS
 BNE CREEANIMC12
 PLX
 BRA CREEANIMDMP
***
CREEANIMC2 LDA ANIMTAB+2,X ; CAS 2, COLLE A LA BORDURE DROITE
 STA ANIMTMP ; NB DE PAS
 AND #$00FF ; MASQUE POUR LE FLAG
 ASL
 STA CREEANIMC21+1
 PHX
 LDY #$0000
CREEANIMC20 LDA ANIMTAB+14,X
 STA ANIMTMP+10,Y ; @ SPRITE
 INX
 INX
 INY
 INY
CREEANIMC21 CPY #$A0A0 ;
 BNE CREEANIMC20
 PLX
 LDA ANIMTAB+8,X ; Y
 ASL
 TAY
 LDA ANIMTAB+4,X ; X0
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC TABLE,Y
 STA ANIMTMP+6 ; @ ECRAN
 LDA ANIMTAB+6,X ; X1
 SEC
 SBC XDROIT
 LSR
 LSR  ; NB DE *4 NON AFFICHE
 STA CREEANIMC22+1
 LDA ANIMTAB+10,X ; NB DE *4 ORIGINAL
 AND #$00FF ; MASQUE POUR LE FLAG NUMERO PORTE
 SEC
CREEANIMC22 SBC #$A0A0
 STA ANIMTMP+2 ; LARGEUR *4
***
CREEANIMDMP PHX  ; DUMP DES VALEURS
 LDA ANIMOBJ-2
 DEC
 ASL
 TAX
 LDA QQTAB,X ; *44
 TAX
 LDY #$0000
CREEANIMDMP1 LDA ANIMTMP,Y
 STA ANIMOBJ,X ; RECOPIE
 INX
 INX
 INY
 INY
 CPY #$002C ; TAILLE D'UN OBJ
 BNE CREEANIMDMP1
CREEANIMDMP2 LDX #$A0A0 ; Y0*2, RENSEIGNE LA TABLE REFRESH
 LDY ANIMTMP+4 ; HAUTEUR
 JSR FILLINEANI
 PLX
***
CREEANIMNXT LDA #$A0A0 ; FIN ?
 BNE CREEANIMNXT2 ; NB D'OBJET RESTANT
CREEANIMNXT1 RTS

CREEANIMNXT2 DEC CREEANIMNXT+1 ; OBJET SUIVANT
 TXA
 CLC
 ADC #$002C ; TAILLE D'UN OBJ (44)
 TAX
 JMP CREEANIM1

ANIMTMP HEX 0000 ; NB DE PAS
 HEX 0000,0000,0000,0000 ; LARGEUR*4,HAUTEUR,@ ECRAN,PAS COURANT
 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 ; @ SPRITES
 HEX 0000 ; FLAG AFFICH ?

ANIMTAB HEX 0200 ; NB D'OBJETS LEVEL 0
 HEX 0700 ; PORTE 1 QUI S'OUVRE
 HEX C402,F002,2400,0B01,1900
 HEX 3A02,BA13,3A25,BA36,3A48,BA59,3A6B,0000,0000,0000,0000,0000,0000,0000,0000,0000 ; @ SPRITE
 HEX 0501 ; NB DE PAS FLAME (SOUS DECOR)
 HEX 5803,7C03,6C00,0900,0500 ; X0,X1,Y,LARGEUR*4,HAUTEUR
 HEX 8107,410B,010F,C112,8116,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 ; @ SPRITES...
 HEX 0802 ; FLECHE 1 (TRANSPARENT)
 HEX 7802,A802,3800,0C00,2800
 HEX 1A2D,1B2D,1C2D,1D2D,162D,172D,182D,192D,0000,0000,0000,0000,0000,0000,0000,0000
 DS 27*44 ; 30 OBJ ANIMES MAX

DZTAB HEX 0000,0C00,1800,2400,3000,3C00,4800,5400,6000,6C00,7800
 HEX 8400,9000,9C00,A800,B400,C000,CC00,D800,E400,F000,FC00
 HEX 0801,1401,2001,2C01,3801,4401,5001,5C01,6801,7401,8001

************  AFFICHE OBJETS ANIMES

AFFICHANIM LDA BANC07 ; EXPLOITE LA TABLE POUR AFFICHER
 STA AFFLVL2+2
 LDA #$0120
 STA AFFLVL3+2
 LDA ANIMOBJ-2 ; RIEN A AFFICHER
 BEQ AFFICHANIM01

 LDA #$0000
AFFICHANIM1 CMP ANIMOBJ-2 ; NB D'OBJET A ANIMER
 BMI AFFICHANIM2
AFFICHANIM01 LDA BANC06 ; RETABLISSEMENT
 STA AFFLVL2+2
 LDA BANC05
 STA AFFLVL3+2
 RTS

AFFICHANIM2 PHA
 ASL
 TAX
 LDA QQTAB,X ; *44 = TAILLE INFO OBJET
 TAX
AFFICHANIM20 LDA ANIMOBJ+42,X ; FLAG AFFICH ?
 BNE AFFICHANIM21
 PLA  ; ON NE L'AFFICHE PAS, NXT OBJ
 INC
 BRA AFFICHANIM1

AFFICHANIM21 LDA ANIMOBJ,X ; NB DE PAS
 AND #$00FF
 DEC
 DEC
 ASL
 TAY
 LDA HORLOGETAB,Y ; PAS COURANT (HORLOGE)
 ASL
 STA AFFICHANIM3+1
 TXA
 CLC
AFFICHANIM3 ADC #$A0A0
 TAY
 LDA ANIMOBJ+10,Y ; @ SPRITE COURANT
 STA AFFLVL2+1
 LDA ANIMOBJ+6,X ; @ ECRAN
 CLC
 ADC #$2000
 STA AFFLVL3+1
 LDA ANIMOBJ+4,X ; HAUTEUR
 TAY
 LDA ANIMOBJ,X ; TYPE : 0 SUR LE DECOR, 1 SOUS , 2 FLECHE TRANSPARENT
 AND #$FF00
 CMP #$0100 ; SPRITE SOUS LE DECOR
 BEQ AFFICHANIM31
 CMP #$0200 ; SPRITE TRANSPARENT SUIVANT LE DECOR
 BEQ AFFICHANIM32
AFFICHANIM30 LDA ANIMOBJ+2,X ; LE SPRITE EST AFFICHE SUR LE DECOR, LARGEUR *4
 PHX
 JSR AFFLVL
 BRA AFFICHANIM33
AFFICHANIM31 LDA ANIMOBJ+2,X ; LE SPRITE EST AFFICHE SOUS LE DECOR, LARGEUR*4
 PHX
 JSR AFFICHSOUS
 BRA AFFICHANIM33
AFFICHANIM32 LDA ANIMOBJ+2,X ; FLECHE TRANSPARENTE, LARGEUR *4
 PHX
 JSR AFFICHTRANS
AFFICHANIM33 PLX
 LDA ANIMOBJ+42,X ; FLAG ANIM
 AND #$00FF
 CMP #$00FF
 BEQ AFFICHANIM4 ; LA PORTE ?
 PLA
 INC
 JMP AFFICHANIM1
AFFICHANIM4 LDA AFFICHANIM3+1 ; LA PORTE...
 CMP #$000C ; PAS 6
 BNE AFFICHANIM5
 LDA #$0001 ; PORTE OUVERTE
 STA ANIMPORTE
 STZ ANIMOBJ+42,X ; ON N'ANIME PLUS...
 LDA BANC05 ; ON AFFICHE LE SPRITE OUVERT EN 05/0000 AUSSI
 STA AFFLVL3+2
 TXA
 CLC
 ADC #$000C
 TAY
 LDA ANIMOBJ+10,Y ; @ SPRITE COURANT
 STA AFFLVL2+1
 LDA ANIMOBJ+6,X ; @ ECRAN
 STA AFFLVL3+1
 LDA ANIMOBJ+4,X ; HAUTEUR
 TAY
 PHX
 JSR AFFLVL1
 PLX
 LDA #$0120
 STA AFFLVL3+2
AFFICHANIM5 PLA  ;
 INC
 JMP AFFICHANIM1

ANIMPORTE HEX 0000 ; PORTE OUVERTE : 1

 HEX 0000 ; NB D'OBJET A ANIMER
ANIMOBJ HEX 0000 ; NB PAS D'ANIMATION
 HEX 0000,0000,0000,0000 ; LARGEUR*4,HAUTEUR,@ ECRAN,PAS COURANT
 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 ; @ SPRITE
 HEX 0000 ; FLAG D'ANIMATION
 DS 19*44 ; 20 OBJ ANIMES MAX

QQTAB HEX 0000,2C00,5800,8400,B000,DC00,0801,3401,6001,8C01 ; 44 TAB
 HEX B801,E401,1002,3C02,6802,9402,C002,EC02,1803,4403
 HEX 7003

************* CREE LA TABLE DES DECORS ANIMES

CREEDECANIM STZ ANIMDEC-2 ; CREATION DES TABLES POUR LES DECORS
 LDX #$0000
 LDA ANIMDECTAB ; NB DE DECOR A TRAITER
 BNE CREEDECANIM0
 RTS  ; AUCUN, ON SORT.
CREEDECANIM0 DEC
 STA CREEDECANIMNXT+1

CREEDECANIM1 LDA ANIMDECTAB+4,X ; X0
 CMP XDROIT
 BPL CREEDECANIM2 ; EN DEHORS
 LDA XGAUCH
 CMP ANIMDECTAB+6,X ; X1
 BPL CREEDECANIM2 ; EN DEHORS
 BRA CREEDECANIM3
CREEDECANIM2 JMP CREEDECANIMNXT
***
CREEDECANIM3 INC ANIMDEC-2 ; UN OBJET DE PLUS
 LDA ANIMDECTAB+12,X
 STA ANIMDECTMP+4 ; HAUTEUR
 LDA ANIMDECTAB+8,X
 ASL
 STA CREEDECANIMDM4+1 ; Y0*2, (REFRESH LINE)
 LDA ANIMDECTAB+4,X ; X0
 CMP XGAUCH
 BMI CREEDECANIMC1 ; CAS 1
 LDA ANIMDECTAB+6,X ; X1
 CMP XDROIT
 BMI CREEDECANIMC0
 JMP CREEDECANIMC2 ; CAS 2
***
CREEDECANIMC0 LDA ANIMDECTAB+8,X ; LE SPRITE EST TOTALEMENT DANS L'ECRAN
 STA ANIMDECTMP+30
 ASL
 TAY  ; Y
 LDA ANIMDECTAB+4,X ; X0
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC TABLE,Y
 STA ANIMDECTMP+6 ; @ ECRAN
 LDA ANIMDECTAB+10,X
 STA ANIMDECTMP+2 ; LARGEUR*4
 LDA ANIMDECTAB+2,X
 AND #$00FF
 STA ANIMDECTMP ; NB PAS
 ASL
 STA CREEDECANIM5+1
 PHX
 LDY #$0000
CREEDECANIM4 LDA ANIMDECTAB+14,X
 STA ANIMDECTMP+10,Y ; @ SPRITES...
 INX
 INX
 INY
 INY
CREEDECANIM5 CPY #$A0A0 ;
 BNE CREEDECANIM4
 PLX
 JMP CREEDECANIMDMP
***
CREEDECANIMC1 LDA ANIMDECTAB+8,X ; CAS 1, COLLE A LA BORDURE GAUCHE
 STA ANIMDECTMP+30
 ASL
 TAY  ; Y
 LDA TABLE,Y
 STA ANIMDECTMP+6 ; @ ECRAN (X0=0)
 LDA XGAUCH
 SEC
 SBC ANIMDECTAB+4,X ; X0
 LSR
 STA CREEDECANIMC12+1 ; NB DE POINTS QUE L'ON PERD
 LSR  ; NB DE *4 QUE L'ON PERD
 STA CREEDECANIMC11+1
 LDA ANIMDECTAB+10,X ; LARGEUR *4 ORIGINALE
 SEC
CREEDECANIMC11 SBC #$A0A0
 STA ANIMDECTMP+2 ; LARGEUR*4
 LDA ANIMDECTAB+2,X
 AND #$00FF
 STA ANIMDECTMP ; NB DE PAS
 ASL
 STA CREEDECANIMC13+1
 PHX
 LDY #$0000
CREEDECANIMC12 LDA #$A0A0
 CLC
 ADC ANIMDECTAB+14,X ; @ SPRITE ORIGINALE
 STA ANIMDECTMP+10,Y ; @ SPRITE
 INX
 INX
 INY
 INY
CREEDECANIMC13 CPY #$A0A0 ; NB DE PAS
 BNE CREEDECANIMC12
 PLX
 BRA CREEDECANIMDMP
***
CREEDECANIMC2 LDA ANIMDECTAB+2,X ; CAS 2, COLLE A LA BORDURE DROITE
 AND #$00FF
 STA ANIMDECTMP ; NB DE PAS
 ASL
 STA CREEDECANIMC21+1
 PHX
 LDY #$0000
CREEDECANIMC20 LDA ANIMDECTAB+14,X
 STA ANIMDECTMP+10,Y ; @ SPRITE
 INX
 INX
 INY
 INY
CREEDECANIMC21 CPY #$A0A0 ;
 BNE CREEDECANIMC20
 PLX
 LDA ANIMDECTAB+8,X ; Y
 STA ANIMDECTMP+30
 ASL
 TAY
 LDA ANIMDECTAB+4,X ; X0
 SEC
 SBC XGAUCH
 LSR
 CLC
 ADC TABLE,Y
 STA ANIMDECTMP+6 ; @ ECRAN
 LDA ANIMDECTAB+6,X ; X1
 SEC
 SBC XDROIT
 LSR
 LSR  ; NB DE *4 NON AFFICHE
 STA CREEDECANIMC22+1
 LDA ANIMDECTAB+10,X ; NB DE *4 ORIGINAL
 SEC
CREEDECANIMC22 SBC #$A0A0
 STA ANIMDECTMP+2 ; LARGEUR *4
***
CREEDECANIMDMP PHX  ; CREATION DES SPRITES (DECOR+LAVE)
 LDA ANIMDECTAB+2,X
 ORA ANIMDECTMP ; FLAG DESSUS:1/DESSOUS:0
 STA ANIMDECTMP
* JSR CREELAVE ; CREATION SPRITES LAVE/DECOR
 LDA ANIMDEC-2 ; DUMP DES VALEURS
 DEC
 ASL
 ASL
 ASL
 ASL
 ASL  ; *32 (TAILLE D'UN OBJET)
 TAX
 LDY #$0000
CREEDECANIMDM3 LDA ANIMDECTMP,Y
 STA ANIMDEC,X ; RECOPIE
 INX
 INX
 INY
 INY
 CPY #$0020 ; TAILLE D'UN OBJ
 BNE CREEDECANIMDM3
CREEDECANIMDM4 LDX #$A0A0 ; Y0*2, REFRESH LINES
 LDY ANIMDECTMP+4 ; HAUTEUR
 JSR FILLINEANI
 PLX
***
CREEDECANIMNXT LDA #$A0A0 ; FIN ?
 BNE CREEDECANIMNXT2 ; NB D'OBJET RESTANT
 LDX #$0010 ; TABLE DE CREATION DES DECORS
CREEDECANIMNXT1 STZ ANIMDECDONE,X
 DEX
 DEX
 BPL CREEDECANIMNXT1
 RTS
CREEDECANIMNXT2 DEC CREEDECANIMNXT+1 ; OBJET SUIVANT
 TXA
 CLC
 ADC #$0020 ; TAILLE D'UN OBJET
 TAX
 JMP CREEDECANIM1
********

ANIMDECTMP HEX 0000 ; NB DE PAS/FLAG DESSUS DESSOUS
 HEX 0000,0000,0000,0000 ; LARGEUR*4,HAUTEUR,@ ECRAN,PAS COURANT
 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 ; @ SPRITES
 HEX 0000 ; FLAG AFFICH / Y

ANIMDECTAB HEX 0400 ; NB DE DECOR A ANIMER
 HEX 0801 ; NB DE PAS/FLAG DESSUS/DESSOUS
 HEX 1002,5002,8800,1000,1800 ; X0,X1,Y,LARGEUR*4,HAUTEUR
 HEX A180,4190,E19F,81AF,21BF,C1CE,61DE,01EE,0000,0000 ; @ SPRITES...
 DS 29*32 ; 30 ZONES DE LAVES MAX

************* AFFICHAGE DES DECORS ANIMES

AFFICHDECANIM LDA BANC06 ; EXPLOITE LA TABLE POUR AFFICHER
 STA AFFLVL2+2
 LDA #$0120
 STA AFFLVL3+2

 LDA #$0000
AFFICHDECANIM1 CMP ANIMDEC-2 ; NB D'OBJET A ANIMER
 BMI AFFICHDECANIM2
 LDA BANC06 ; RETABLISSEMENT
 STA AFFLVL2+2
 LDA BANC05
 STA AFFLVL3+2
 LDY CREELAVE6+1
 LDA #$0001
 STA ANIMDECDONE+2,Y ; FLAG DISANT QUE CE PAS EST OK
 RTS

AFFICHDECANIM2 PHA
 ASL
 ASL
 ASL
 ASL
 ASL  ; *32 = TAILLE INFO OBJET
 TAX
 LDA ANIMDEC+30,X ; FLAG AFFICH ?
 BNE AFFICHDECANIM3
 PLA  ; ON NE L'AFFICHE PAS, NXT OBJ
 INC
 BRA AFFICHDECANIM1

AFFICHDECANIM3 LDA ANIMDECDONE ; TOUT OK ?
 BNE AFFICHDECANIM5
 LDA ANIMDEC,X ; NB DE PAS
 AND #$00FF
 DEC
 DEC
 ASL
 TAY
 LDA HORLOGETAB,Y ; PAS COURANT (HORLOGE)
 ASL
 TAY
 LDA ANIMDECDONE+2,Y
 BNE AFFICHDECANIM5
 LDA ANIMDEC,X ; FLAG DESSUS/DESSOUS
 XBA
 AND #$00FF
 PHX
 JSR CREELAVE ; ON CREE LE BOUT DE LAVE EN QUESTION
 PLX
AFFICHDECANIM5 LDA ANIMDEC,X ; NB DE PAS
 AND #$00FF
 DEC
 DEC
 ASL
 TAY
 LDA HORLOGETAB,Y ; PAS COURANT (HORLOGE)
 ASL
 STA AFFICHDECANIM4+1
 TXA
 CLC
AFFICHDECANIM4 ADC #$A0A0
 TAY
 LDA ANIMDEC+10,Y ; @ SPRITE COURANT
 STA AFFLVL2+1
 LDA ANIMDEC+6,X ; @ ECRAN
 CLC
 ADC #$2000
 STA AFFLVL3+1
 LDA ANIMDEC+4,X ; HAUTEUR
 TAY
 LDA ANIMDEC+2,X ; LARGEUR *4
 JSR AFFLVL
 PLA
 INC
 JMP AFFICHDECANIM1

 HEX 0000 ; NB D'OBJET A ANIMER
ANIMDEC HEX 0000 ; 1 NB DE PAS D'ANIMATION
 HEX 0000,0000,0000,0000 ; LARGEUR*4,HAUTEUR,@ ECRAN,PAS COURANT
 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 ; @ SPRITES...
 HEX 0000 ; FLAG D'ANIMATION /Y
 DS 9*32 ; 10 LAVES MAX A L'ECRAN

ANIMDECDONE HEX 0000 ; 1 SI TOUS LES PAS OK
 HEX 0000,0000,0000,0000,0000,0000,0000,0000 ; 1 SI PAS DEJA FAIT

************  AFFICHAGE DES DECORS FIXES EN DESSOUS DU DECOR

AFFICHSOUSFIX ASL  ; AFFICHAGE SPRITES SOUS LE DECOR
 DEC
 STA AFFICHSOUSFIX5+1 ; LARGEUR
 STY AFFICHSOUSFIX10+1 ; NB DE LIGNES
 LDA FIXECRANFLG ; ON AFFICHE AUSSI EN 01/2000 ?
 BEQ AFFICHSOUSFIX4
 LDA AFFICHSOUSFIXA+1
 CLC
 ADC #$2000
 LDY #$0120
 STY AFFICHSOUSFIXA+2
 STA AFFICHSOUSFIXA+1
AFFICHSOUSFIX4 LDA #$0000
 LDY #$0000
 SEP #$20  ; A:8 BIT, X/Y:16 BIT
AFFICHSOUSFIX5 LDX #$0000 ; 1 LIGNE
AFFICHSOUSFIX6 LDAL $050000,X ; DECOR ECRAN
 TAY
AFFICHSOUSFIX7 LDAL $070000,X ; SPRITE
 AND MASKTABLE,Y
AFFICHSOUSFIX8 ORAL $050000,X ; DECOR ECRAN
AFFICHSOUSFIX9 STAL $050000,X ; ADRESSE ECRAN
AFFICHSOUSFIXA STAL $050000,X ;
 DEX
 BPL AFFICHSOUSFIX6
 REP #$20 ; 16 BIT, LIGNE SUIVANTE
 LDA AFFICHSOUSFIX6+1 ; ADRESSE ECRAN
 CLC
 ADC #$00A0
 STA AFFICHSOUSFIX6+1
 STA AFFICHSOUSFIX8+1
 STA AFFICHSOUSFIX9+1
 LDA AFFICHSOUSFIXA+1 ; ECRAN 01/2000
 CLC
 ADC #$00A0
 STA AFFICHSOUSFIXA+1
 LDA AFFICHSOUSFIX7+1 ; ADRESSE SPRITE
 CLC
 ADC #$00A0
 STA AFFICHSOUSFIX7+1
 DEC AFFICHSOUSFIX10+1 ; NB DE LIGNES
AFFICHSOUSFIX10 LDA #$A0A0
 BNE AFFICHSOUSFIX4
 RTS

************  AFFICHAGE DES SPRITES EN DESSOUS DU DECOR

AFFICHSOUS ASL  ; AFFICHAGE SPRITES SOUS LE DECOR
 DEC
 STA AFFICHSOUS5+1 ; LARGEUR
 STY AFFICHSOUS10+1 ; NB DE LIGNES

 LDA AFFLVL2+1 ; ADRESSE SPRITE
 STA AFFICHSOUS7+1
 LDA AFFLVL3+1
 STA AFFICHSOUS9+1 ; ADRESSE ECRAN GS
 SEC
 SBC #$2000
 STA AFFICHSOUS6+1 ; ADRESSE ECRAN VIERGE
 STA AFFICHSOUS8+1

AFFICHSOUS4 LDA #$0000
 LDY #$0000
 SEP #$20 ; A:8 BIT, X/Y:16 BIT
AFFICHSOUS5 LDX #$0000 ; 1 LIGNE
AFFICHSOUS6 LDAL $050000,X ; DECOR ECRAN
 TAY
AFFICHSOUS7 LDAL $070000,X ; SPRITE
 AND MASKTABLE,Y
AFFICHSOUS8 ORAL $050000,X ; DECOR ECRAN
AFFICHSOUS9 STAL $012000,X ; ADRESSE ECRAN
 DEX
 BPL AFFICHSOUS6
 REP #$20 ; 16 BIT, LIGNE SUIVANTE
 LDA AFFICHSOUS6+1 ; ADRESSE ECRAN
 CLC
 ADC #$00A0
 STA AFFICHSOUS6+1
 STA AFFICHSOUS8+1
 CLC
 ADC #$2000
 STA AFFICHSOUS9+1
 LDA AFFICHSOUS7+1 ; ADRESSE SPRITE
 CLC
 ADC #$00A0
 STA AFFICHSOUS7+1
 DEC AFFICHSOUS10+1 ; NB DE LIGNES
AFFICHSOUS10 LDA #$A0A0
 BNE AFFICHSOUS4
 RTS

************  AFFICHAGE DES SPRITES TRANSPARENTS

AFFICHTRANS ASL ; RECOPIE UN SPRITE VERS DE 07 VERS 01/2000
 DEC
 STA AFFICHTRANS5+1 ; LARGEUR
 STY AFFICHTRANS10+1 ; NB DE LIGNES
 LDA AFFLVL2+1 ; ADRESSE SPRITE
 STA AFFICHTRANS6+1
 STA AFFICHTRANS2+1
 LDA AFFLVL3+1
 STA AFFICHTRANS9+1 ; ADRESSE ECRAN GS
 SEC
 SBC #$2000
 STA AFFICHTRANS7+1 ; ADRESSE ECRAN VIERGE
 STA AFFICHTRANS1+1
AFFICHTRANS4 LDA #$0000 ; AVANT TRANSFERT 16->8
 LDY #$0000
 SEP #$20 ; A:8 BIT, X/Y:16 BIT
AFFICHTRANS5 LDX #$0000 ; LARGEUR
AFFICHTRANS1 LDAL $050000,X ; ECRAN
 TAY
 LDA MASKTABLE2,Y
AFFICHTRANS2 ANDL $070000,X ; FLECHE
 STA AFFICHTRANS8+1
AFFICHTRANS6 LDAL $070000,X ; FLECHE
 TAY
AFFICHTRANS7 LDAL $050000,X ; ECRAN
 AND MASKTABLE,Y
AFFICHTRANS8 ORA #$A0 ; FLECHE
AFFICHTRANS9 STAL $012000,X ; ECRAN
 DEX
 BPL AFFICHTRANS1
 REP #$20 ; 16 BIT, LIGNE SUIVANTE
 LDA AFFICHTRANS6+1 ; ADRESSE SPRITE
 CLC
 ADC #$00A0
 STA AFFICHTRANS6+1
 STA AFFICHTRANS2+1
 LDA AFFICHTRANS7+1 ; ADRESSE ECRAN
 CLC
 ADC #$00A0
 STA AFFICHTRANS7+1
 STA AFFICHTRANS1+1
 CLC
 ADC #$2000
 STA AFFICHTRANS9+1
 DEC AFFICHTRANS10+1 ; NB DE LIGNES
AFFICHTRANS10 LDA #$A0A0
 BNE AFFICHTRANS4
 RTS

************  CREATION DES SPRITES DE DECOR/LAVE ANIMES

CREELAVE PHX
 STY CREELAVE6+1 ; NUMERO DE PAS *2

 LDA ANIMDEC+30,X ; RECOPIE DES SPRITES LAVE...
 ASL
 TAY  ; Y
 LDA ANIMDEC+6,X ; @ ECRAN
 SEC
 SBC TABLE,Y
 ORA #$8000 ; +$8000
 STA CREELAVE7+1 ; COOR X LAVE ECRAN

 LDA ANIMDEC+4,X
 STA CREELAVE8+1 ; NB DE LIGNES

 LDA ANIMDEC+2,X
 DEC
 ASL
 STA CREELAVE9+1 ; LARGEUR

 TXA
 CLC
CREELAVE6 ADC #$A0A0 ; NUMERO PAS*2
 TAY
 LDA ANIMDEC+10,Y
 STA CREELAVE10+1 ; ADRESSE LAVE ORIGINE

 LDX CREELAVE6+1 ; NUMERO PAS *2
 LDA DEBUTLIGNE,X
 CLC
CREELAVE7 ADC #$A0A0 ; X LAVE ECRAN
 STA CREELAVE11+1
 STA ANIMDEC+10,Y ; ADRESSE LAVE ECRAN

CREELAVE8 LDY #$A0A0 ; NB DE LIGNES
CREELAVE9 LDX #$A0A0 ; NB DE *4
CREELAVE10 LDAL $07A0A0,X
CREELAVE11 STAL $06A0A0,X
 DEX
 DEX
 BPL CREELAVE10
 LDA CREELAVE10+1 ; LIGNE SUIVANTE
 CLC
 ADC #$00A0
 STA CREELAVE10+1
 LDA CREELAVE11+1
 CLC
 ADC #$00A0
 STA CREELAVE11+1
 DEY
 BNE CREELAVE9

 PLX
 LDA ANIMDEC,X ; FLAG DESSUS/DESSOUS
 AND #$FF00
 BEQ CREELAVESOUS
 JMP CREELAVESUR
**
CREELAVESOUS LDA ANIMDEC+2,X ; LA LAVE EST SOUS LE DECOR
 ASL
 DEC
 STA CREELAVESOUS5+1 ; LARGEUR

 LDA ANIMDEC+6,X
 STA CREELAVESOUS6+1
 STA CREELAVESOUS8+1 ; ADRESSE ECRAN

 TXA
 CLC
 ADC CREELAVE6+1 ; NUMERO PAS*2
 TAY
 LDA ANIMDEC+10,Y
 STA CREELAVESOUS7+1
 STA CREELAVESOUS9+1 ; ADRESSE LAVE FINAL

 LDA ANIMDEC+4,X
 STA CREELAVESOUS10+1 ; NB DE LIGNES

CREELAVESOUS4 LDA #$0000 ; TRAITE 1 SPRITE
 LDY #$0000
 SEP #$20 ; A:8 BIT, X/Y:16 BIT
CREELAVESOUS5 LDX #$0000 ; 1 LIGNE
CREELAVESOUS6 LDAL $050000,X ; DECOR ECRAN
 TAY
CREELAVESOUS7 LDAL $068000,X
 AND MASKTABLE,Y
CREELAVESOUS8 ORAL $050000,X
CREELAVESOUS9 STAL $068000,X
 DEX
 BPL CREELAVESOUS6
 REP #$20 ; 16 BIT, LIGNE SUIVANTE
 LDA CREELAVESOUS6+1
 CLC
 ADC #$00A0
 STA CREELAVESOUS6+1
 STA CREELAVESOUS8+1
 LDA CREELAVESOUS7+1
 CLC
 ADC #$00A0
 STA CREELAVESOUS7+1
 STA CREELAVESOUS9+1
 DEC CREELAVESOUS10+1 ; NB DE LIGNES
CREELAVESOUS10 LDA #$A0A0
 BNE CREELAVESOUS4
 RTS
***
CREELAVESUR LDA ANIMDEC+2,X ; LA LAVE EST SUR LE DECOR
 ASL
 DEC
 STA CREELAVESUR5+1 ; LARGEUR

 LDA ANIMDEC+6,X
 STA CREELAVESUR7+1 ; ADRESSE ECRAN

 TXA
 CLC
 ADC CREELAVE6+1 ; NUMERO PAS*2
 TAY
 LDA ANIMDEC+10,Y
 STA CREELAVESUR6+1
 STA CREELAVESUR8+1
 STA CREELAVESUR9+1 ; ADRESSE LAVE FINAL

 LDA ANIMDEC+4,X
 STA CREELAVESUR10+1 ; NB DE LIGNES

CREELAVESUR4 LDA #$0000 ; TRAITE 1 SPRITE
 LDY #$0000
 SEP #$20 ; A:8 BIT, X/Y:16 BIT
CREELAVESUR5 LDX #$0000 ; 1 LIGNE
CREELAVESUR6 LDAL $068000,X ; DECOR ECRAN
 TAY
CREELAVESUR7 LDAL $050000,X
 AND MASKTABLE,Y
CREELAVESUR8 ORAL $068000,X
CREELAVESUR9 STAL $068000,X
 DEX
 BPL CREELAVESUR6
 REP #$20 ; 16 BIT, LIGNE SUIVANTE
 LDA CREELAVESUR6+1
 CLC
 ADC #$00A0
 STA CREELAVESUR6+1
 STA CREELAVESUR8+1
 STA CREELAVESUR9+1
 LDA CREELAVESUR7+1
 CLC
 ADC #$00A0
 STA CREELAVESUR7+1
 DEC CREELAVESUR10+1 ; NB DE LIGNES
CREELAVESUR10 LDA #$A0A0
 BNE CREELAVESUR4
 RTS

DEBUTLIGNE HEX A000,4010,E01F,802F,203F,C04E,605E,006E

MASKTABLE HEX FF,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0,F0
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00
 HEX 0F,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00

MASKTABLE2 HEX 00,0F,0F,0F,0F,0F,0F,0F,0F,0F,0F,0F,0F,0F,0F,0F
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF
 HEX F0,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF,FF

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