*************************************
**********   LEMMINGS GS   **********
*************************************

 LST OFF
 ORG $0000

*--- Macros pour le scroll

 use 4/Misc.Macs
 use 4/Util.Macs
*---
 DS 512 ; LE CODE COMMENCE EN 200

 PHK
 PLB
 BCC VERIFOK
 INC VERIFLAG1
VERIFOK LDA\ $0007 ; VITESSE
 AND #$00FF
 CMP #$0007 ; 9Mhz ET +
 BPL VITESSE1
 CMP #$0004 ; MOYEN
 BPL VITESSE2
 LDA #$0040 ; LENT
 BRA VITESSE3
VITESSE1 LDA #$0060 ; 9Mhz
 BRA VITESSE3
VITESSE2 LDA #$0050 ; MOYEN
VITESSE3 STA ANIMATIONJEU4+1
 LDA #$0000
 STA POSX
 STA POSY
 STA A1 ; INIT SOURIS
 STA AP
 JSR SAUV ; SAUVEGARDE DECOR
 JSR DESS

 JSR INITBANC ; MET LES NUMEROS DE BANC
 JSR DECRYPT ; DECODE LES MOTS DE PASSE
 JSR VERIFCHECK ; VERIFICATION DU CHECKSUM

 LDA #$0001
 JMP PICT ; IMAGE MENU

*****************************************************************************
****************************  MOUSE/EVENT MANAGER  **************************
*****************************************************************************

SOURIS LDA BOUT ; ANCIEN BOUT=NOUVEAU BOUT
 STA BOUT1

SOURIS0 JSR SLECT ; LECTURE SOURIS
 CPY #$FFFF
 BNE SOURIS1

 LDA ECRAN
 CMP #$0005 ; JEU
 bne SECR

SOURISJEU JSR ANIMATIONJEU ; ON ANIM
 LDA NBJEU ; NB DE LEM EN JEU
 BNE SOURISJEU1
 LDA NBINDOOR ; NB DE LEMM EN RESERVE
 BNE SOURISJEU1
 STZ FINTIME ; PLUS DE LEMMINGS EN JEU, ON ARRETE
 LDA #$0004
 JMP PICT1
SOURISJEU1 LDA TIMEMIN  ; TEMPS ECOULE ?
 BNE SOURISJEU2
 LDA TIMESEC
 BNE SOURISJEU2
 LDA #$0001 ; TEMPS ECOULE, ON ARRETE
 STA FINTIME
 LDA #$0004
 JMP PICT1
SOURISJEU2 BRA SECR

SOURIS1 LDA A1 ; A1 POSITION ACTUELLE
 STA AP ; AP ANCIENNE POSITION
 LDA POSX
 LSR
 STA SOURIS2+1
 LDA POSY
 ASL
 TAX
 LDA TABLE,X
 CLC
SOURIS2 ADC #$0000 ; CALCUL DE A1 (160*POSY+POSX)
 STA A1
 JSR TRACE ; ON DESSINE LE POINTEUR
*****
SECR JSR KEYBOARD ; TOUCHE ?
 LDA ECRAN
 DEC
 ASL
 TAX
 LDA ECRTAB,X
 TAY  ; ADRESSE TABLEAU DES BOUTONS
 DEC
 DEC
 TAX
SECR0 LDA\ $0000,X ; NB DE BUMPER DANS ECRAN
 ASL
 STA SECR8+1

 LDX #$0000
 LDA POSX
SECR1 CMP\ $0000,Y ; X0   ECR1, ECR2, ECR3 ...
 BMI SECR4
 INY
 INY
SECR11 CMP\ $0000,Y ; X1
 BPL SECR5
 INY
 INY
 LDA POSY
SECR12 CMP\ $0000,Y ; Y0
 BMI SECR6
 INY
 INY
SECR13 CMP\ $0000,Y ; Y1
 BPL SECR7
 STX SECR2+1 ; ON EST SUR UN BUMPER
 LDA ECRAN
 DEC
 ASL
 TAX
 LDA ECRDESA,X
 STA SECR20+1 ; ADRESSE DE L'ADRESSE EXECUTION
SECR2 LDX #$0000 ; NUMERO DU BUMPER TRAVERSE (*2)
SECR20 LDA $FFFF,X
 STA SECR3+1
SECR3 JMP $A0A0 ;

SECR4 INY
 INY
SECR5 INY
 INY
SECR6 INY
 INY  ; BOUTON SUIVANT
SECR7 INY
 INY
 LDA POSX
 INX
 INX
SECR8 CPX #$0000 ; NB DE BOUTON
 BMI SECR1
 JSR BORD5 ; FORCE LA BORDURE NOIRE
 JMP BUMPDEF ; AUCUN BOUTON DETECTE : TRAITEMENT PAR DEFAUT

*******************************************************************************
***********************  TRAITEMENT DES BOUTONS  ******************************
*******************************************************************************

KEYBOARD LDA ECRAN
 CMP #$0005 ; ECRAN JEU
 BEQ KEYBOARD1
KEYBOARD0 LDAL $00BFFF
 BPL KEYBOAR0
 STAL $00C010
 AND #$FF00
 CMP #$D100 ; Q = Quit
 BEQ KEYBOAR01
 CMP #$F100 ; q
 BEQ KEYBOAR01
 CMP #$9800 ; CTRL-X
 BEQ KEYBOAR02
KEYBOAR0 RTS
KEYBOAR02 PLA  ; RECUPERE JSR
 LDA #$0002
 STA EASTERFLAG ; NO MORE LEMMINGS
 LDA #$0006
 JMP PICT2
KEYBOAR01 LDAL $00C025 ; TOUCHE POMME ?
 AND #$0080
 BEQ KEYBOAR0
 PLA  ; RECUPERE LE JSR
 lda ECRAN
 cmp #1
 bne noMAIN

 jsr stopSCROLL

noMAIN JSR STOPMUSIC ; VIRE LA MUSIC AU CAS OU...
 RTL  ; ON QUITTE LE JEU

*** PATCH TOINET

KEYBOARD1 lda\ $0000 ; BOUCLE LA MUSIC
 beq KEYBOARD11
 jsr PLAYMUSIC
 stz\ $0000
KEYBOARD11 LDAL $00BFFF
 BPL KEYBOAR1
 STAL $00C010 ; BIT $C010
 AND #$FF00
 CMP #$9B00 ; ESC
 BEQ KEYBOARD2
 CMP #$8800 ; <-
 BEQ KEYBOARD3
 CMP #$9500 ; ->
 BEQ KEYBOARD4
 CMP #$D100 ; Q
 BEQ KEYBOAR01
 CMP #$F100 ; q
 BEQ KEYBOAR01
 CMP #$CD00 ; M = Music
 BEQ KEYBOARD5
 CMP #$ED00 ; m
 BEQ KEYBOARD5
 CMP #$D300 ; S = Sound
 BEQ KEYBOARD6
 CMP #$F300 ; s
 BEQ KEYBOARD6
KEYBOAR1 RTS

KEYBOARD2 PLA  ; RECUPERE L'ADRESSE DE RETOUR DU JSR
 LDA #$0001
 STA FINTIME ; EQUIVALENT AU TIME UP
 LDA #$0004
 JMP PICT1
KEYBOARD3 PLA ; <-
 LDA DECORSLIDE
 BEQ KEYBOARD40
 DEC
 BRA KEYBOARD40
KEYBOARD4 PLA ; ->
 LDA DECORSLIDE
 CMP #$0050
 BPL KEYBOARD40
 INC
KEYBOARD40 PHA ; SCROLLING DECOR
 JSR DESS1
 PLA
 JSR CREEDECOR
 JMP SOURIS1

KEYBOARD5 LDA MUSICONOFF ; MUSIC ON/OFF
 EOR #$FFFF
 STA MUSICONOFF
 LDA MUSICONOFF
 BNE KEYBOARD50
 JSR PLAYMUSIC ; MUSIC ON
 RTS
KEYBOARD50 JSR STOPMUSIC ; MUSIC OFF
 RTS
MUSICONOFF HEX 0000

KEYBOARD6 LDA SOUNDONOFF ; SOUNDS ON/OFF
 EOR #$FFFF
 STA SOUNDONOFF
 RTS
SOUNDONOFF HEX 0000

BORD5 LDAL $00C034 ; ICI TRAITEMENT PAR DEFAUT
 AND #$FFF0 ; BORDURE NOIRE
 STAL $00C034
BORD55 RTS

BORD6 STA BORD7+1
 LDAL $00C034
 AND #$FFF0
BORD7 ORA #$0001 ; COULEUR
 STAL $00C034
 RTS

BORD8 LDAL $00C034 ; CHANGE LA COULEUR BORDURE
 INC
 BIT #$000F
 BEQ BORD9
 STAL $00C034
 RTS
BORD9 SEC #$0010 ; F->0
 STAL $00C034
 RTS
****************  MAIN

ECR0100 LDX SECR2+1 ; MAIN : PLAY
 LDA #ECR0101
 STA BUMPER5+1
 JMP BUMPER
ECR0101 NOP
 LDA FLGDIF ; DIFFICULTE ?
 BEQ ECR0102
 CMP #$0001
 BEQ ECR0104
 CMP #$0002
 BEQ ECR0105
 LDA #$005A ; NIVEAU 91, MAYHEM
 BRA ECR0103
ECR0105 LDA #$003C ; NIVEAU 61, TAXING
 BRA ECR0103
ECR0104 LDA #$001E ; NIVEAU 31, TRICKY
 BRA ECR0103
ECR0102 LDA #$0000 ; NIVEAU 1, FUN
ECR0103 STA NUMEROLEVEL
 ASL
 TAX
 LDA CODELISTDIX,X
 STA NUMEROLVL
 LDA #$0009 ; GLUB
 JSR PLAYSOUND
 JSR LOADLITTLE ; CHARGE L'IMAGE LITTLE SI BESOIN
 JSR INITABLE ; CHARGE TOUTES LES TABLES DU NIVEAU
 LDA #$0003
 JMP PICT2

ECR0110 LDX SECR2+1 ; MAIN : NEW
 LDA #ECR0111
 STA BUMPER5+1
 JMP BUMPER
ECR0111 NOP
 LDA #$0002 ; ECRAN MOT DE PASSE
 JMP PICT2

ECR0120 LDX SECR2+1 ; MAIN : MUSIQUE
 LDA #ECR0121
 STA BUMPER5+1
 JMP BUMPER
ECR0121 LDA NEVERMUSIC
 BNE ECR0124
 LDA MUSICFLAG
 BEQ ECR0122
 STZ MUSICFLAG
 BRA ECR0123
ECR0122 INC MUSICFLAG
ECR0123 JSR DESS1 ; VIRE LE POINTEUR SOURIS
 JSR AFFICHZIC ; AFFICHE MUSIQUE
 JSR SAUV ; REMET LE POINTEUR SOURIS
 LDA #$0004
 JSR PLAYSOUND
ECR0124 JMP SOURIS1
NEVERMUSIC HEX 0000 ; 0:OK, 1:JAMAIS DE MUSIC

ECR0130 LDX SECR2+1 ; MAIN : SONS
 LDA #ECR0131
 STA BUMPER5+1
 JMP BUMPER
ECR0131 LDA NEVERSOUND
 BNE ECR0134
 LDA FLGSON
 BEQ ECR0132
 STZ FLGSON
 BRA ECR0133
ECR0132 INC FLGSON
ECR0133 JSR DESS1 ; VIRE LE POINTEUR SOURIS
 JSR AFFICHSON ; AFFICHE LE SON
 JSR SAUV ; REMET LE POINTEUR SOURIS
 LDA #$0004
 JSR PLAYSOUND
ECR0134 JMP SOURIS1
FLGSON HEX 0000 ; 0:OK, 1:X
NEVERSOUND HEX 0000 ; 0:OK, 1:JAMAIS DE SONS

ECR0140 LDX SECR2+1 ; MAIN : DIFF UP
 LDA #ECR0141
 STA BUMPER5+1
 JMP BUMPER
ECR0141 LDA FLGDIF
* JMP SOURIS1 ; *** DEMO ***
* NOP
* NOP
* NOP
 CMP #$0003
 BEQ ECR0142
 INC
 STA FLGDIF
 JSR DESS1 ; VIRE LE POINTEUR SOURIS
 JSR AFFICHDIF ; AFFICHE DIFFICULTE
 JSR SAUV ; REMET LE POINTEUR SOURIS
 LDA #$0004
 JSR PLAYSOUND ; SON
ECR0142 JMP SOURIS1

ECR0150 LDX SECR2+1 ; MAIN : DIFF DOWN
 LDA #ECR0151
 STA BUMPER5+1
 JMP BUMPER
ECR0151 LDA FLGDIF
* JMP SOURIS1 ; *** DEMO ***
* NOP
* NOP
* NOP
 BEQ ECR0152
 DEC
 STA FLGDIF
 JSR DESS1 ; VIRE LE POINTEUR SOURIS
 JSR AFFICHDIF ; AFFICHE DIFFICULTE
 JSR SAUV ; REMET LE POINTEUR SOURIS
 LDA #$0004
 JSR PLAYSOUND ; SON
ECR0152 JMP SOURIS1

FLGDIF HEX 0000 ; 0:FUN, 1:TRICKY, 2:TAXING, 3:MAYHEM

ECR0160 LDX SECR2+1 ; MAIN : EASTER EGG X LOGO
 LDA #ECR0161
 STA BUMPER5+1
 JMP BUMPER
ECR0161 LDA #$0003
 STA EASTERFLAG
 LDA #$0006
 JMP PICT2

ECR0170 LDX SECR2+1 ; MAIN : EASTER EGG LEM PHOTO
 LDA #ECR0171
 STA BUMPER5+1
 JMP BUMPER
ECR0171 LDA #$0005
 STA EASTERFLAG
 LDA #$0006
 JMP PICT2

ECR0180 LDX SECR2+1 ; MAIN : EASTER EGG LEM BRAS
 LDA #ECR0181
 STA BUMPER5+1
 JMP BUMPER
ECR0181 LDA #$0006
 STA EASTERFLAG
 LDA #$0006
 JMP PICT2

ECR0190 LDX SECR2+1 ; MAIN : EASTER EGG LEM FLY
 LDA #ECR0191
 STA BUMPER5+1
 JMP BUMPER
ECR0191 LDA #$0007
 STA EASTERFLAG
 LDA #$0006
 JMP PICT2

ECR01A0 LDX SECR2+1 ; MAIN : EASTER EGG LEM FAUTEUIL
 LDA #ECR01A1
 STA BUMPER5+1
 JMP BUMPER
ECR01A1 LDA #$0008
 STA EASTERFLAG
 LDA #$0006
 JMP PICT2

ECR01B0 LDX SECR2+1 ; MAIN : EASTER EGG TINIES
 LDA #ECR01B1
 STA BUMPER5+1
 JMP BUMPER
ECR01B1 LDA #$0004
 STA EASTERFLAG
 LDA #$0006
 JMP PICT2

****************  JEU

ECR0500 LDX SECR2+1 ; JEU : -
 LDA #ECR0501
 STA BUMPER5+1
 JMP BUMPER
ECR0501 LDAL $00C025 ; POMME ?
 AND #$0080
 BNE ECR0503
 LDA ICONEVALEUR+2 ; -1
 CMP DEBITVALEUR
 BEQ ECR0502
 DEC
 STA ICONEVALEUR+2
 JSR DESS1
 LDA ICONEVALEUR+2
 LDX #$0120 ; AFFICHAGE NOUVELLE VALEUR
 LDY #$8EAA
 JSR AFFICHJC
 JSR SAUV
 JSR TRACE6
 LDA #$000E
 JSR PLAYSOUND
ECR0502 JMP SOURIS1
ECR0503 LDA ICONEVALEUR+2  ; -10
 CMP DEBITVALEUR
 BEQ ECR0506 ; ON SORT
 CMP DEBITMIN
 BMI ECR0504
 SEC
 SBC #$000A
 BRA ECR0505
ECR0504 LDA DEBITVALEUR
ECR0505 STA ICONEVALEUR+2
 JSR DESS1
 LDA ICONEVALEUR+2
 LDX #$0120 ; AFFICHAGE NOUVELLE VALEUR
 LDY #$8EAA
 JSR AFFICHJC
 JSR SAUV
 JSR TRACE6
 LDA #$000E
 JSR PLAYSOUND
ECR0506 JMP SOURIS1

DEBITVALEUR HEX 0000 ; VALEUR INITIALE
DEBITMIN HEX 0000 ; VALEUR INITIALE +10

ECR0510 LDX SECR2+1 ; JEU : +
 LDA #ECR0511
 STA BUMPER5+1
 JMP BUMPER
ECR0511 LDAL $00C025 ; POMME
 AND #$0080
 BNE ECR0513
 LDA ICONEVALEUR+2 ; +1
 CMP #$0063 ; 99
 BEQ ECR0512
 INC
 STA ICONEVALEUR+2
 JSR DESS1
 LDA ICONEVALEUR+2
 LDX #$0120 ; AFFICHAGE NOUVELLE VALEUR
 LDY #$8EAA
 JSR AFFICHJC
 JSR SAUV
 JSR TRACE6
 LDA #$000E
 JSR PLAYSOUND
ECR0512 JMP SOURIS1
ECR0513 LDA ICONEVALEUR+2 ; +10
 CMP #$0063
 BEQ ECR0516 ; ON SORT
 CMP #$0059
 BPL ECR0514
 CLC
 ADC #$000A
 BRA ECR0515
ECR0514 LDA #$0063
ECR0515 STA ICONEVALEUR+2
 JSR DESS1
 LDA ICONEVALEUR+2
 LDX #$0120 ; AFFICHAGE NOUVELLE VALEUR
 LDY #$8EAA
 JSR AFFICHJC
 JSR SAUV
 JSR TRACE6
 LDA #$000E
 JSR PLAYSOUND
ECR0516 JMP SOURIS1

ECR0520 LDX SECR2+1 ; JEU : ICONES
 LDA #ECR0521
 STA BUMPER5+1
 JMP BUMPER
ECR0521 NOP
 LDA POSX ; QUEL ICONE ?
 SEC
 SBC #$001B ; 33 / 21
 TAX
 LDA ICONESZONE,X
 AND #$00FF
 CMP #$00FF
 BEQ ECR0522
 PHA
 LDA #$000E ; SON
 JSR PLAYSOUND
 JSR DESS1
 JSR CLEANICONE ; EFFACE LE PRECEDANT
 PLA
 JSR AFFICHICONE
 JSR SAUV
ECR0522 JMP SOURIS1

CURRENTICN HEX 0000 ; ICONE COURANT

ECR0530 LDX SECR2+1 ; JEU : STOP
 LDA #ECR0531
 STA BUMPER5+1
 JMP BUMPER
ECR0531 LDA #$000E
 JSR PLAYSOUND
 LDAL $00C025 ; POMME ?
 AND #$0080
 BEQ ECR0532
 LDA KEYSTOP
 EOR #$FFFF ; PAS A PAS 0000/FFFF
 STA KEYSTOP ; ON INVERSE
 STZ EVOLFLAG
 JMP SOURIS1
ECR0532 LDA EVOLFLAG ; ON BLOQUE L'EVOLUTION
 EOR #$FFFF
 STA EVOLFLAG
 STZ KEYSTOP
 JMP SOURIS1
EVOLFLAG HEX 0000 ; 0: NORMAL, FFFF : BLOQUE

ECR0540 LDX SECR2+1 ; JEU : ATOMIC
 LDA #ECR0541
 STA BUMPER5+1
 JMP BUMPER
ECR0541 LDAL $00C025 ; POMME ?
 AND #$0080
 BEQ ECR0542
 LDA NUKEFLAG ; DEJA DEMANDE ?
 BNE ECR0542
 LDA #$000E
 JSR PLAYSOUND
 STZ NBINDOOR ; ON FAIT EXPLOSER TOUS LES LEM EN JEU
 LDX #$0000
ECR0543 LDA ETATAB,X
 AND #$00FF
 BEQ ECR0544 ; PAS EN JEU
 CMP #$0009 ; EXPLOSION
 BEQ ECR0544
 CMP #$000F ; SORT, NOIE, ECRASE...
 BPL ECR0544
 LDA COMPTAB,X
 BNE ECR0544
 LDA #$0050 ; 80 PAS
 STA COMPTAB,X
 INC NBCOMPT
 LDA ETATAB,X
 AND #$F0FF
 ORA #$0A00
 STA ETATAB,X
ECR0544 INX
 INX
 CPX #$00C8
 BNE ECR0543
 LDA #$0001
 STA NUKEFLAG ; ON ATOMISE :-)
ECR0542 JMP SOURIS1
NUKEFLAG HEX 0000

ECR0550 LDX SECR2+1 ; JEU : PETIT LEVEL
 LDA #ECR0551
 STA BUMPER5+1
 JMP BUMPER
ECR0551 NOP
 JSR DESS1
 LDA POSX
 SEC
 SBC #$00C8 ; +6-206
 CMP #$0008
 BMI ECR0552 ; MIN
 CMP #$0059
 BPL ECR0553 ; MAX
 SEC
 SBC #$0008
 BRA ECR0554
ECR0553 LDA #$0050 ; MAX
 BRA ECR0554
ECR0552 LDA #$0000 ; MIN
ECR0554 JSR CREEDECOR
 JMP SOURIS1

ICONESZONE HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,FF
 HEX 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,FF
 HEX 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,FF
 HEX 03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,FF
 HEX 04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,FF
 HEX 05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,FF
 HEX 06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,FF
 HEX 07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,FF

ECR0560 LDA DECORSLIDE ; SCROLLING <-
 BEQ ECR0561
 DEC
 PHA ; SCROLLING DECOR
 JSR DESS1
 PLA
 JSR CREEDECOR
ECR0561 JMP SOURIS

ECR0570 LDA DECORSLIDE ; SCROLLING ->
 CMP #$0050
 BPL ECR0571
 INC
 PHA ; SCROLLING DECOR
 JSR DESS1
 PLA
 JSR CREEDECOR
ECR0571 JMP SOURIS

ECR0580 LDX SECR2+1 ; JEU : ZONE DE JEU
 LDA #ECR0581
 STA BUMPER5+1
 JMP BUMPER
ECR0581 NOP
 LDA POINTEURTYPE
 CMP #$0002 ; CADRE
 BNE ECR0582
 LDA CURRENTICN
 ASL
 TAX
 JSR (ECR05TAB1,X)
ECR0582 JMP SOURIS1

ICONEVALEUR HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000

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

ECR05TAB1 DA ECR05CLIM,ECR05FLOA,ECR05BOMB,ECR05BLOC
 DA ECR05BUIL,ECR05BASH,ECR05MINE,ECR05DIGG

ECR05CLIM LDA ICONEVALEUR+4 ; MONTE LA PAROIE
 BEQ ECR05CLIM1
 LDX CADREWHICH
 LDA ETATAB,X
 AND #$2000
 BNE ECR05CLIM1 ; MONTE DEJA
 LDA ETATAB,X
 ORA #$2000
 STA ETATAB,X
 LDA #$000E
 JSR PLAYSOUND
 DEC ICONEVALEUR+4 ; NOUVELLE VALEUR
 LDX #$0120
 LDY #$8EB2
 LDA ICONEVALEUR+4
 JSR AFFICHJC
ECR05CLIM1 RTS
**
ECR05FLOA LDA ICONEVALEUR+6 ; PARACHUTE
 BEQ ECR05FLOA1
 LDX CADREWHICH
 LDA ETATAB,X
 AND #$4000
 BNE ECR05FLOA1 ; DEJA PARA
 LDA ETATAB,X
 ORA #$4000
 STA ETATAB,X
 LDA #$000E
 JSR PLAYSOUND
 DEC ICONEVALEUR+6 ; NOUVELLE VALEUR
 LDX #$0120
 LDY #$8EBA
 LDA ICONEVALEUR+6
 JSR AFFICHJC
ECR05FLOA1 RTS
**
ECR05BOMB LDA ICONEVALEUR+8 ; EXPLOSION
 BEQ ECR05BOMB1
 LDX CADREWHICH
 LDA ETATAB,X
 AND #$00FF
 CMP #$0009 ; EXPLOSE
 BEQ ECR05BOMB1
 CMP #$000F ; SORT,ECRASE,NOIE...
 BPL ECR05BOMB1
 LDA COMPTAB,X
 BNE ECR05BOMB1 ; DEJA COMPTE A REBOURS
ECR05BOMB2 LDA #$0050 ; 80
 STA COMPTAB,X
 INC NBCOMPT
 LDA ETATAB,X ; COMPTE A REBOURS
 AND #$F0FF
 ORA #$0A00
 STA ETATAB,X
 LDA #$000E
 JSR PLAYSOUND
 DEC ICONEVALEUR+8 ; NOUVELLE VALEUR
 LDX #$0120
 LDY #$8EC2
 LDA ICONEVALEUR+8
 JSR AFFICHJC
ECR05BOMB1 RTS
**
ECR05BLOC LDA ICONEVALEUR+10 ; BLOQUEUR
 BEQ ECR05BOMB1
 LDX CADREWHICH
 LDA ETATAB,X
 AND #$00FF
 CMP #$0001 ; MARCHE
 BEQ ECR05BLOC3
 CMP #$000A ; EXPLOSE<...<SORT
 BMI ECR05BLOC1
 CMP #$000F
 BPL ECR05BLOC1
 BRA ECR05BLOC2
ECR05BLOC3 LDA XTAB,X ; ON EVITE DE GASPILLER SI VIDE EN DESSOUS
 TAY
 LDA Y1TAB,X
 JSR LOOKDECOR
 BNE ECR05BLOC2
 LDA Y1TAB,X ; VIDE EN DESSOUS
 INC
 JSR LOOKDECOR ; 2 LIGNES DE VIDE ?
 BEQ ECR05BLOC1
 INC YTAB,X
 INC Y1TAB,X ; PATCH : SERT AU 1er TEST DANS BLOC
ECR05BLOC2 JSR XRECENTR ; C'EST BON, ON Y VA
 JSR YRECENTR
 LDA ETATAB,X
 AND #$FF00
 ORA #$0008 ; BLOQUE
 STA ETATAB,X
 STZ PASTAB,X
 LDA NBLOCKERS ; REMPLIT LA TABLE
 ASL
 TAY
 TXA
 STA BLOCKERTAB,Y
 INC NBLOCKERS
 LDA #$000E
 JSR PLAYSOUND
 DEC ICONEVALEUR+10 ; NOUVELLE VALEUR
 LDX #$0120
 LDY #$8ECA
 LDA ICONEVALEUR+10
 JSR AFFICHJC
ECR05BLOC1 RTS
**
ECR05BUIL LDA ICONEVALEUR+12 ; CONSTRUCTEUR
 BEQ ECR05BUIL1
 LDX CADREWHICH
 LDA ETATAB,X
 AND #$00FF
 CMP #$0001 ; MARCHE
 BEQ ECR05BUIL2
 CMP #$000D ; CONSTRUIT DEJA
 BEQ ECR05BUIL1
 CMP #$000A ; EXPLOSE<...<SORT
 BMI ECR05BUIL1
 CMP #$000F
 BPL ECR05BUIL1
ECR05BUIL2 JSR XRECENTR ; RECENTRAGE X/Y
 JSR YRECENTR
 JSR METPAROIE ; TESTE LA PROXIMITE D'UNE PAROIE
 BEQ ECR05BUIL3
 STZ PASTAB,X
 LDA ETATAB,X ; ON MARCHE, BUILDER ANNULE
 AND #$FF00
 ORA #$0001
 STA ETATAB,X
 RTS
ECR05BUIL3 LDA #$0B00 ; OK, ON Y VA, 12 BRIQUES
 STA PASTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$000D ; CONSTRUCTION
 STA ETATAB,X
ECR05BUIL4 LDA #$000E
 JSR PLAYSOUND
 DEC ICONEVALEUR+12 ; NOUVELLE VALEUR
 LDX #$0120
 LDY #$8ED2
 LDA ICONEVALEUR+12
 JSR AFFICHJC
ECR05BUIL1 RTS
**
ECR05BASH LDA ICONEVALEUR+14 ; CREUSE -> HORIZONTALEMENT
 BEQ ECR05BUIL1
 LDX CADREWHICH
 LDA ETATAB,X
 AND #$00FF
 CMP #$0001 ; MARCHE
 BEQ ECR05BASH0
 CMP #$000A ; CREUSE DEJA
 BEQ ECR05BASH1
 CMP #$000A
 BMI ECR05BASH1 ; EXPLOSE<...<SORT
 CMP #$000F
 BPL ECR05BASH1
ECR05BASH0 JSR XRECENTR ; RECENTRAGE X/Y
 JSR YRECENTR
 PHX  ; ZONE DURE ?
 LDA YTAB,X
 SEC
 SBC #$0004
 TAY
 LDA ETATAB,X
 AND #$8000
 BNE ECR05BASH4
 LDA XTAB,X ; GAUCHE
 SEC
 SBC #$0008
 TAX
 LDA #$0000 ; GAUCHE
 JSR LOOKHORIZONE
 BEQ ECR05BASH2
 PLX
 LDA ETATAB,X ; DURE => MARCHE
 AND #$FF00
 ORA #$0001
 BRA ECR05BASH3
ECR05BASH4 LDA XTAB,X ; DROITE
 TAX
 LDA #$0001 ; DROITE
 JSR LOOKHORIZONE
 BEQ ECR05BASH2
 PLX
 LDA ETATAB,X ; DURE => MARCHE
 AND #$FF00
 ORA #$0001
 BRA ECR05BASH3
ECR05BASH2 PLX ; ON CREUSE...
 LDA ETATAB,X
 AND #$FF00
 ORA #$000A ; CREUSE HORI
ECR05BASH3 STA ETATAB,X
 STZ PASTAB,X
 LDA #$000E
 JSR PLAYSOUND
 DEC ICONEVALEUR+14
 LDX #$0120
 LDY #$8EDA
 LDA ICONEVALEUR+14
 JSR AFFICHJC
ECR05BASH1 RTS
**
ECR05MINE LDA ICONEVALEUR+16 ; CREUSE DIAGONALE
 BEQ ECR05MINE1
 LDX CADREWHICH
 LDA ETATAB,X
 AND #$00FF
 CMP #$0001 ; MARCHE
 BEQ ECR05MINE2
 CMP #$000B ; CREUSE DEJA
 BEQ ECR05MINE1
 CMP #$000A
 BMI ECR05MINE1 ; EXPLOSE<...<SORT
 CMP #$000F
 BPL ECR05MINE1
ECR05MINE2 JSR XRECENTR ; RECENTRAGE X/Y
 JSR YRECENTR
 PHX  ; OK, ON TESTE LES ZONES
 LDA YTAB,X
 SEC
 SBC #$0008
 TAY
 LDA ETATAB,X
 AND #$8000
 BNE ECR05MINE3
 LDA XTAB,X  ; GAUCHE
 SEC
 SBC #$0008
 TAX
 LDA #$0000
 BRA ECR05MINE4
ECR05MINE3 LDA XTAB,X ; DROITE
 TAX
 LDA #$0001
ECR05MINE4 JSR LOOKDIAGZONE
 BNE ECR05MINE6
ECR05MINE5 PLX ; C'EST BON, ON Y VA
 LDA ETATAB,X
 AND #$FF00
 ORA #$000B ; CREUSE DIAGONALE
ECR05MINE7 STA ETATAB,X
 STZ PASTAB,X
 LDA #$000E
 JSR PLAYSOUND
 DEC ICONEVALEUR+16 ; NOUVELLE VALEUR
 LDX #$0120
 LDY #$8EE2
 LDA ICONEVALEUR+16
 JSR AFFICHJC
ECR05MINE1 RTS
ECR05MINE6 PLX  ; DUR => ON MARCHE
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 BRA ECR05MINE7
**
ECR05DIGG LDA ICONEVALEUR+18 ; CREUSE BAS
 BEQ ECR05MINE1
 LDX CADREWHICH
 LDA ETATAB,X
 AND #$00FF
 CMP #$0001 ; MARCHE
 BEQ ECR05DIGG2
 CMP #$000C ; CREUSE DEJA
 BEQ ECR05MINE1
 CMP #$000A
 BMI ECR05MINE1 ; EXPLOSE<...<SORT
 CMP #$000F
 BPL ECR05MINE1
ECR05DIGG2 JSR XRECENTR ; RECENTRAGE X/Y
 JSR YRECENTR
 PHX ; C'EST BON, ON PEUT ESSAYER
 LDA YTAB,X
 INC
 INC
 TAY
 LDA XTAB,X
 SEC
 SBC #$0004
 TAX
 JSR LOOKBASZONE ; ZONE DURE ?
 BEQ ECR05DIGG3
 PLX  ; DUR => MARCHE
 LDA ETATAB,X
 AND #$FF00
 ORA #$0001
 BRA ECR05DIGG4
ECR05DIGG3 PLX
 INC YTAB,X
 INC YTAB,X
 LDA ETATAB,X
 AND #$FF00
 ORA #$000C ; CREUSE VERS LE BAS
ECR05DIGG4 STA ETATAB,X
 STZ PASTAB,X
 LDA #$000E
 JSR PLAYSOUND
 DEC ICONEVALEUR+18 ; NOUVELLE VALEUR
 LDX #$0120
 LDY #$8EEA
 LDA ICONEVALEUR+18
 JSR AFFICHJC
ECR05DIGG1 RTS

***************************************************************************
******************************  DATA  *************************************
***************************************************************************

************  BUMPER MANAGER  ************  PAVE

BUMPER LDA FLAGTAB,X ; PREMIERE PLANCHE SPRITE
 BEQ BUMPER2
 LDA BOUT
 BEQ BUMPER1
BUMPER6 JMP SOURIS
BUMPER1 STZ FLAGTAB,X ; RELEVE LE BUMPER ET EFFECTUE LE TRAITEMENT
 STZ BMPFLG
BUMPER5 JMP $FFFF ; TRAITEMENT A EFFECTUER
BUMPER2 STX BUMPER4+1 ; SAUVEGARDE TEMPORAIRE DE X
 LDA BMPFLG
 BEQ BUMPER3
 LDX LAST ; FORCE LE REMONTEE DE L'ANCIEN
 STZ FLAGTAB,X
 STZ BMPFLG
 STX SECR2+1
BUMPER3 LDA BOUT
 BEQ BUMPER6 ; JMP SOURIS
BUMPER4 LDX #$FFFF ; RECUPERE LA VALEUR DE X PERTURBEE PAR LA REMONTE FORCEE
 STX LAST ; ENFONCE LE BUMPER SUR LEQUEL ON SE TROUVE
 LDA #$0001
 STA BMPFLG
 STA FLAGTAB,X
 STX SECR2+1
 JMP SOURIS1

******** TRAITEMENT PAR DEFAUT *********

BUMPDEF LDA BMPFLG
 BEQ BUMPDEF1
 LDX LAST ; FORCE LE REMONTEE DE L'ANCIEN
 STZ FLAGTAB,X
 STZ BMPFLG
 STX SECR2+1
 JMP SOURIS1
BUMPDEF1 JMP SOURIS

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

 HEX 0C00 ; MAIN     NB DE BOUTONS DANS ECRAN1
ECR01TAB HEX 0800,3C00,8700,9D00 ; PLAY   TABLEAU DES BOUTONS POUR ECRAN1
 HEX 4800,7C00,8700,9D00 ; NEW     X0,X1 Y0,Y1
 HEX 8700,BB00,8700,9D00 ; MUSIQUE
 HEX C500,F900,8700,9D00 ; SONS
 HEX 2001,3801,8700,9A00 ; DIFF UP
 HEX 2001,3801,9A00,9D00 ; DIFF DOWN
 HEX 4700,4B00,4300,4700 ; EA : X
 HEX 6100,6600,3F00,4500 ; EA : LEM PHOTO
 HEX 7500,7900,3E00,4500 ; EA : LEM BRAS
 HEX B100,B600,4400,4C00 ; EA : LEM FLY
 HEX C500,C800,4200,4B00 ; EA : LEM FAUTEUIL
 HEX 0C01,1101,5A00,5E00 ; EA : TINIES

 HEX 0900 ; JEU
ECR05TAB HEX 0300,3001,0000,9900 ; ZONE DE JEU
 HEX 0000,0A00,AA00,C100 ; -
 HEX 0B00,1A00,AA00,C100 ; +
 HEX 1B00,9A00,AA00,C100 ; ICONES
 HEX 9B00,AA00,AA00,C100 ; STOP
 HEX AB00,BA00,AA00,C100 ; ATOMIC
 HEX C800,2C01,AC00,BF00 ; PETIT LEVEL
 HEX 0000,0200,0000,9900 ; SCROLLING DECOR GAUCHE
 HEX 3101,3301,0000,9900 ; SCROLLING DECOR DROITE

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

ECRTAB DA ECR01TAB,0000,0000,0000,ECR05TAB ; ADRESSES DES TABLEAUX

ECRDESA DA ECRDES1,0000,0000,0000,ECRDES5 ; ADRESSE POUR LES DESTINATIONS

****

ECRDES1 DA ECR0100,ECR0110,ECR0120,ECR0130,ECR0140 ; MAIN
 DA ECR0150,ECR0160,ECR0170,ECR0180,ECR0190
 DA ECR01A0,ECR01B0

ECRDES5 DA ECR0580,ECR0500,ECR0510,ECR0520,ECR0530 ; JEU
 DA ECR0540,ECR0550,ECR0560,ECR0570

*********************  SOUS ROUTINES SOURIS  **************************

DEC HEX 0000000000000000000000000000  ; DECOR SOUS LE POINTEUR
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000  ;
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000  ;
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000  ;
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000  ;
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000  ;
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000  ;
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000
 HEX 0000000000000000000000000000

PTPAI HEX 0006660000000000000000000000
 HEX 0666666660000000000000000000  ; POINTEUR POSITION PAIRE
 HEX 6666666666660000000000000000
 HEX 6666666666666600000000000000
 HEX 6666666666666660000000000000  ;
 HEX 7666666666666666000000000000
 HEX 7666666666666666600000000000
 HEX 7766666666666666600000000000
 HEX 0776666666666666600000000000  ;
 HEX 0777666666666666660000000000
 HEX 0076766666666666660000000000
 HEX 0006676666666666665000000000
 HEX 0007667666666666654400000000  ;
 HEX 0007666666666666654440000000
 HEX 0007766666666666544444000000
 HEX 0000777666666665444444400000
 HEX 0000777776666554444444450000  ;
 HEX 0000077777775544444444440000
 HEX 0000000777775544444444445000
 HEX 0000000007777554444444445000
 HEX 0000000000007555444444445000  ;
 HEX 0000000000007755544444457000
 HEX 0000000000000755555444577000
 HEX 0000000000000775555555777000
 HEX 0000000000000077555557770000  ;
 HEX 0000000000000077777777700000
 HEX 0000000000000007777777000000
 HEX 0000000000000000777770000000

PTPAIMA HEX FFF000FFFFFFFFFFFFFFFFFFFFFF
 HEX F00000000FFFFFFFFFFFFFFFFFFF  ; MASQUE POSITION PAIRE
 HEX 000000000000FFFFFFFFFFFFFFFF
 HEX 00000000000000FFFFFFFFFFFFFF
 HEX 000000000000000FFFFFFFFFFFFF  ;
 HEX 0000000000000000FFFFFFFFFFFF
 HEX 00000000000000000FFFFFFFFFFF
 HEX 00000000000000000FFFFFFFFFFF
 HEX F0000000000000000FFFFFFFFFFF  ;
 HEX F00000000000000000FFFFFFFFFF
 HEX FF0000000000000000FFFFFFFFFF
 HEX FFF0000000000000000FFFFFFFFF
 HEX FFF00000000000000000FFFFFFFF  ;
 HEX FFF000000000000000000FFFFFFF
 HEX FFF0000000000000000000FFFFFF
 HEX FFFF0000000000000000000FFFFF
 HEX FFFF00000000000000000000FFFF  ;
 HEX FFFFF0000000000000000000FFFF
 HEX FFFFFFF000000000000000000FFF
 HEX FFFFFFFFF0000000000000000FFF
 HEX FFFFFFFFFFFF0000000000000FFF  ;
 HEX FFFFFFFFFFFF0000000000000FFF
 HEX FFFFFFFFFFFFF000000000000FFF
 HEX FFFFFFFFFFFFF000000000000FFF
 HEX FFFFFFFFFFFFFF0000000000FFFF  ;
 HEX FFFFFFFFFFFFFF000000000FFFFF
 HEX FFFFFFFFFFFFFFF0000000FFFFFF
 HEX FFFFFFFFFFFFFFFF00000FFFFFFF


PTIMP HEX 0000666000000000000000000000
 HEX 0066666666000000000000000000  ; POINTEUR POSITION IMPAIRE
 HEX 0666666666666000000000000000
 HEX 0666666666666660000000000000
 HEX 0666666666666666000000000000  ;
 HEX 0766666666666666600000000000
 HEX 0766666666666666660000000000
 HEX 0776666666666666660000000000
 HEX 0077666666666666660000000000  ;
 HEX 0077766666666666666000000000
 HEX 0007676666666666666000000000
 HEX 0000667666666666666500000000
 HEX 0000766766666666665440000000  ;
 HEX 0000766666666666665444000000
 HEX 0000776666666666654444400000
 HEX 0000077766666666544444440000
 HEX 0000077777666655444444445000  ;
 HEX 0000007777777554444444444000
 HEX 0000000077777554444444444500
 HEX 0000000000777755444444444500
 HEX 0000000000000755544444444500  ;
 HEX 0000000000000775554444445700
 HEX 0000000000000075555544457700
 HEX 0000000000000077555555577700
 HEX 0000000000000007755555777000  ;
 HEX 0000000000000007777777770000
 HEX 0000000000000000777777700000
 HEX 0000000000000000077777000000

PTIMPMA HEX FFFF000FFFFFFFFFFFFFFFFFFFFF
 HEX FF00000000FFFFFFFFFFFFFFFFFF  ; MASQUE POSITION IMPAIRE
 HEX F000000000000FFFFFFFFFFFFFFF
 HEX F00000000000000FFFFFFFFFFFFF
 HEX F000000000000000FFFFFFFFFFFF  ;
 HEX F0000000000000000FFFFFFFFFFF
 HEX F00000000000000000FFFFFFFFFF
 HEX F00000000000000000FFFFFFFFFF
 HEX FF0000000000000000FFFFFFFFFF  ;
 HEX FF00000000000000000FFFFFFFFF
 HEX FFF0000000000000000FFFFFFFFF
 HEX FFFF0000000000000000FFFFFFFF
 HEX FFFF00000000000000000FFFFFFF  ;
 HEX FFFF000000000000000000FFFFFF
 HEX FFFF0000000000000000000FFFFF
 HEX FFFFF0000000000000000000FFFF
 HEX FFFFF00000000000000000000FFF  ;
 HEX FFFFFF0000000000000000000FFF
 HEX FFFFFFFF000000000000000000FF
 HEX FFFFFFFFFF0000000000000000FF
 HEX FFFFFFFFFFFFF0000000000000FF  ;
 HEX FFFFFFFFFFFFF0000000000000FF
 HEX FFFFFFFFFFFFFF000000000000FF
 HEX FFFFFFFFFFFFFF000000000000FF
 HEX FFFFFFFFFFFFFFF0000000000FFF  ;
 HEX FFFFFFFFFFFFFFF000000000FFFF
 HEX FFFFFFFFFFFFFFFF0000000FFFFF
 HEX FFFFFFFFFFFFFFFFF00000FFFFFF

PTPAI1 HEX 0000003200000000
 HEX 0000000000000000
 HEX 0000003200000000
 HEX 0000000000000000
 HEX 0000003200000000
 HEX 0000000000000000
 HEX 2020201103030300
 HEX 3030301102020200
 HEX 0000000000000000
 HEX 0000002300000000
 HEX 0000000000000000
 HEX 0000002300000000
 HEX 0000000000000000
 HEX 0000002300000000

PTPAIMA1 HEX FFFFFF00FFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFF00FFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFF00FFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX 0F0F0F00F0F0F0FF
 HEX 0F0F0F00F0F0F0FF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFF00FFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFF00FFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFF00FFFFFFFF

PTIMP1 HEX 0000000320000000
 HEX 0000000000000000
 HEX 0000000320000000
 HEX 0000000000000000
 HEX 0000000320000000
 HEX 0000000000000000
 HEX 0202020110303030
 HEX 0303030110202020
 HEX 0000000000000000
 HEX 0000000230000000
 HEX 0000000000000000
 HEX 0000000230000000
 HEX 0000000000000000
 HEX 0000000230000000

PTIMPMA1 HEX FFFFFFF00FFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFF00FFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFF00FFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX F0F0F0F00F0F0F0F
 HEX F0F0F0F00F0F0F0F
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFF00FFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFF00FFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFF00FFFFFFF

PTPAI2 HEX 2233001100332200
 HEX 2000000000000200
 HEX 3000000000000300
 HEX 3000000000000300
 HEX 0000000000000000
 HEX 0000000000000000
 HEX 1000000000000100
 HEX 1000000000000100
 HEX 0000000000000000
 HEX 0000000000000000
 HEX 3000000000000300
 HEX 3000000000000300
 HEX 2000000000000200
 HEX 2233001100332200

PTPAIMA2 HEX 0000FF00FF0000FF
 HEX 0FFFFFFFFFFFF0FF
 HEX 0FFFFFFFFFFFF0FF
 HEX 0FFFFFFFFFFFF0FF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX 0FFFFFFFFFFFF0FF
 HEX 0FFFFFFFFFFFF0FF
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX 0FFFFFFFFFFFF0FF
 HEX 0FFFFFFFFFFFF0FF
 HEX 0FFFFFFFFFFFF0FF
 HEX 0000FF00FF0000FF

PTIMP2 HEX 0223300110033220
 HEX 0200000000000020
 HEX 0300000000000030
 HEX 0300000000000030
 HEX 0000000000000000
 HEX 0000000000000000
 HEX 0100000000000010
 HEX 0100000000000010
 HEX 0000000000000000
 HEX 0000000000000000
 HEX 0300000000000030
 HEX 0300000000000030
 HEX 0200000000000020
 HEX 0223300110033220

PTIMPMA2 HEX F0000FF00FF0000F
 HEX F0FFFFFFFFFFFF0F
 HEX F0FFFFFFFFFFFF0F
 HEX F0FFFFFFFFFFFF0F
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX F0FFFFFFFFFFFF0F
 HEX F0FFFFFFFFFFFF0F
 HEX FFFFFFFFFFFFFFFF
 HEX FFFFFFFFFFFFFFFF
 HEX F0FFFFFFFFFFFF0F
 HEX F0FFFFFFFFFFFF0F
 HEX F0FFFFFFFFFFFF0F
 HEX F0000FF00FF0000F

POSX HEX 0000 ; 0-294
POSY HEX 0000 ; 0-156
A1 HEX 0000 ; POSITION ACTUELLE
AP HEX 0000 ; ANCIENNE POSITION
ECRAN HEX 0100 ; ECRAN 1,2,3...
OLDECR HEX 0000 ; ECRAN PRECEDENT
GO HEX 0000 ; CONTIENT LE NUMERO DU BOUTON ENFONCE (A RELACHER)
LAST HEX 0000 ; DERNIER BUMPER ENFONCE
BMPFLG HEX 0000 ; A 1 SI UN BUMPER EST DEJA ENFONCE

BOUT HEX 0000 ; BOUTON
BOUT1 HEX 0000 ;
DELX HEX 000000
DELY HEX 000000 ; DONNEES SOURIS
NEX HEX 0000
NEY HEX 0000

FLAGTAB HEX 0000000000000000000000000000000000000000 ; FLAGS : 1 SI BUMPER ENFONCE
 HEX 0000000000000000000000000000000000000000 ; NB DE BUMPER/BOUTON DANS 1 ECRAN
 HEX 0000000000000000000000000000000000000000
 HEX 0000000000000000000000000000000000000000
 HEX 0000000000000000000000000000000000000000

TABLE HEX 0000A0004001E00180022003C00360040005A0054006E00680072008C0086009000AA00A400BE00B
 HEX 800C200DC00D600E000FA00F4010E01080112012C01260130014A0144015E01580162017C0176018
 HEX 0019A019401AE01A801B201CC01C601D001EA01E401FE01F80202021C02160220023A0234024E024
 HEX 80252026C02660270028A0284029E029802A202BC02B602C002DA02D402EE02E802F2030C0306031
 HEX 0032A0324033E03380342035C03560360037A0374038E0388039203AC03A603B003CA03C403DE03D
 HEX 803E203FC03F60400041A0414042E04280432044C04460450046A0464047E04780482049C049604A
 HEX 004BA04B404CE04C804D204EC04E604F0050A0504051E05180522053C05360540055A0554056E056
 HEX 80572058C0586059005AA05A405BE05B805C205DC05D605E005FA05F4060E06080612062C0626063
 HEX 0064A0644065E06580662067C06760680069A069406AE06A806B206CC06C606D006EA06E406FE06F
 HEX 80702071C07160720073A0734074E07480752076C07660770078A0784079E079807A207BC07B607C

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

SEXIT LDY #$FFFF
 RTS

SLECT LDAL $00C026 ; $C027   LECTURE SOURIS
 BPL SEXIT
 AND #$0200
 BEQ SLECT1
 LDAL $00C024
 BRA SLECT
SLECT1 LDA #$0000 ; BOUT,NEX,NEY A 0 PAR DEFAUT
 STA BOUT
 STA NEX
 STA NEY
 LDAL $00C023 ; $C024 : DELTA X
 BIT #$4000 ; SIGNE ?
 BNE SLECT3
 AND #$3F00 ; POSITIF
 STA DELX
 BRA SLECT4
SLECT3 AND #$3F00 ; NEGATIF
 STA SLECT33+1
 INC NEX
 LDA #$4000 ; 64
 SEC
SLECT33 SBC #$0000
 STA DELX
SLECT4 LDAL $00C023 ; $C024 : DELTA Y
 BMI SLECT44 ; NO BOUT : LECTURE SUR Y DE BOUTON 1
 INC BOUT ; BOUT=1
SLECT44 BIT #$4000 ; SIGNE ?
 BNE SLECT5
 AND #$3F00 ; POSITIF
 STA DELY
 BRA SLECT6
SLECT5 AND #$3F00 ; NEGATIF
 STA SLECT55+1
 INC NEY
 LDA #$4000 ; 64
 SEC
SLECT55 SBC #$0000
 STA DELY

SLECT6 LDA NEX ; CALCUL DE POSX
 BNE SLECT8

 LDA POSX ; DELX > 0
 CLC
 ADC DELX+1
 CMP SMAX ; 295
 BMI SLECT7
 LDA SMAX ; 295
 DEC
SLECT7 STA POSX
 BRA SLECT10

SLECT8 LDA POSX ; DELX < 0
 SEC
 SBC DELX+1
 CMP SMIN
 BPL SLECT9
 LDA SMIN
SLECT9 STA POSX

SLECT10 LDA NEY ; CALCUL DE POSY
 BNE SLECT12

 LDA POSY ; DELY > 0
 CLC
 ADC DELY+1
 CMP SMAX+2 ; 157
 BMI SLECT11
 LDA SMAX+2 ; 157
 DEC
SLECT11 STA POSY
 BRA SLECT14

SLECT12 LDA POSY ; DELY < 0
 SEC
 SBC DELY+1
 CMP SMIN+2
 BPL SLECT13
 LDA SMIN+2
SLECT13 STA POSY

SLECT14 LDY #$0000 ;
 RTS

SMIN HEX 0000,0000 ; X0,Y0
SMAX HEX 2701,9D00 ; X1,Y1

SBOUT LDAL $00C026 ; ON ATTEND UN CLICK DE SOURIS ($C027)
 BPL SBOUT ; ET LE RELACHEMENT
 AND #$0200
 BEQ SBOUT1
 LDAL $00C024
 BRA SBOUT
SBOUT1 LDAL $00C023 ; DONNEES SOURIS PRETE   $C024 : DELTA X
 LDAL $00C023 ;                        $C024 : DELTA Y
 BMI SBOUT ; LECTURE SUR Y DE BOUTON 1, BIT 7=0 <=> ENFONCE
SBOUT2 LDAL $00C026
 BPL SBOUT2
 AND #$0200
 BEQ SBOUT3
 LDAL $00C024
 BRA SBOUT2
SBOUT3 LDAL $00C023 ; DONNEES SOURIS PRETE   $C024 : DELTA X
 LDAL $00C023 ;                        $C024 : DELTA Y
 BPL SBOUT2 ; LECTURE SUR Y DE BOUTON 1, BIT 7=0 <=> ENFONCE
 RTS

SCLEANBOUT LDAL $00C026 ; ATTEND UN CLICK AVEC NETTOYAGE
 BPL SCLEANBOUT1
 LDAL $00C024
SCLEANBOUT1 JSR SBOUT ; WAIT BOUTON
 RTS

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

DESS1 LDA A1
 BRA DESS2
DESS LDA AP ; DESSINE LE DECOR (LIE A AP), ANCIENNE POSITION
DESS2 CLC
 ADC #$2000
 STA DESS4+1

 LDY #$0000
 LDX SLARGE ; LARGEUR 7
DESS3 LDA DEC,Y
DESS4 STAL $012000,X ; PROUT
 INY
 INY
 DEX
 DEX
 BPL DESS3
 CPY SNBCASE ; NB CASES (392)
 BPL DESS5
 LDX SLARGE ; LARGEUR 7
 LDA DESS4+1
 CLC
 ADC #$00A0
 STA DESS4+1
 BRA DESS3
DESS5 RTS

SAUV LDA A1 ; SAUVEGARDE LE DECOR (LIE A A1), NOUVELLE POSITION
 CLC
 ADC #$2000
 STA SAUV1+1
 LDY #$0000
 LDX SLARGE ; LARGEUR 7
SAUV1 LDAL $012000,X ; PROUT
 STA DEC,Y
 INY
 INY
 DEX
 DEX
 BPL SAUV1
 CPY SNBCASE ; NB CASES (392)
 BPL SAUV2
 LDX SLARGE ; LARGEUR 7
 LDA SAUV1+1
 CLC
 ADC #$00A0
 STA SAUV1+1
 BRA SAUV1
SAUV2 RTS
SLARGE HEX 0C00

TRACE JSR DESS ; OK
 JSR SAUV
TRACE6 LDA A1 ; DESSINE LE POINTEUR POSITION PAIRE
 CLC
 ADC #$2000
 STA TRACE1+1
 STA TRACE4+1
 LDA POSX
 LSR
 BCC TRACEP
POINT1 LDX #PTIMP ; POSITION IMPAIRE
POINT2 LDY #PTIMPMA
 BRA TRACE0
TRACEP LDX #PTPAI ; POSITION PAIRE
POINT3 LDY #PTPAIMA
TRACE0 STX TRACE3+1 ; MOTIF
 STY TRACE2+1 ; MASQUE
 LDY #$0000
 LDX #$0000
TRACE1 LDAL $012000,X ; PROUT
TRACE2 AND $A0A0,Y ; ET AVEC LE MASQUE
TRACE3 ORA $A0A0,Y ; OU AVEC LE MOTIF
TRACE4 STAL $012000,X ; PROUT
 INY
 INY
 INX
 INX
POINT4 CPX #$000E ; LARGEUR 7
 BNE TRACE1
 CPY SNBCASE ; NB CASES (392)
 BEQ TRACE5
 LDX #$0000
 LDA TRACE1+1
 CLC
 ADC #$00A0
 STA TRACE1+1
 STA TRACE4+1
 BRA TRACE1
TRACE5 RTS

SNBCASE HEX 8801

********************  TRAITEMENT ET AFFICHAGE ECRANS  *********************

PICT2 LDX ECRAN  ; ECRAN SUIVANT (SANS CURSEUR)
 STX OLDECR
 STA ECRAN
 BRA PICT21

PICT1 LDX ECRAN ; PASSAGE ECRAN SANS CHANGEMENT DE FOND
 STX OLDECR
 STA ECRAN
 JSR SAUV
 BRA PICT21

PICT PHA
 JSR SAUV
 JSR DESS ; ENLEVE LE POINTEUR
 PLA
 LDX ECRAN
 STX OLDECR
 STA ECRAN

PICT21 JSR CLNFLG ; LES FLAGS DE BUMPER A ZERO
 STZ BMPFLG ; LES FLAGS A ZERO
 LDA #$0000
 JSR BORD6 ; BORDURE NOIRE
 LDA ECRAN ; AFFICHAGES LIE A CHAQUE ECRAN
 DEC
 ASL
 TAX
 LDA ECRANTAB,X
 STA PICT20+1
PICT20 JMP $FFFF ; ON VA SUR LA ROUTINE CORRESPONDANTE

ECRANTAB DA ECRMAI1,ECRPASSE,ECRDEBUT,ECRFIN,ECRJEU ; NOM DES ECRANS POUR INIT D'AFFICHAGE
 DA ECREASTER

CLNFLG LDX #$0062 ; ON MET TOUS LES FLAG DE BUMPER A 0
 LDA #$0000
CLNFLG1 STA FLAGTAB,X
 DEX
 DEX
 BPL CLNFLG1
 RTS

***********  TRAITEMENT INITIAL A L'AFFICHAGE D'UN ECRAN

ECRMAI1 LDA CURRENTLAVE ; CREATION DE L'ECRAN MAIN
 CMP #$0001
 BEQ ECRMAI0
 LDA #$0001 ; ON CHARGE LAVE1 POUR LES EASTER EGG
 JSR LOADLAVE0
ECRMAI0 LDA FIRSTIME
 BEQ ECRMAI10
 JSR FADEUP ; FADEUP SI ON ARRIVE DU BOOT
 BRA ECRMAI11
ECRMAI10 JSR FADEOUT
ECRMAI11 LDX #$7FFE
ECRMAI2 LDAL $040000,X ; AFFICHAGE IMAGE MAIN
INIT0501 STAL $050000,X
 DEX
 DEX
 BPL ECRMAI2
 LDA BANC05 ; PATCH AFFZONE POUR ECRIRE EN 05/
 STA AFFZONE3+2
 JSR AFFICHZIC ; MUSIQUE
 JSR AFFICHSON ; SON
 JSR AFFICHDIF ; DIFFICULTE
 LDA #$0100
 STA AFFZONE3+2
 LDA FIRSTIME ; AFFICHE L'IMAGE
 BEQ ECRMAI20
 JSR FADEDOWN ; FADEDOWN SI ON ARRIVE DU BOOT
 BRA ECRMAI21
ECRMAI20 JSR FADEIN
ECRMAI21 STZ FLGTOURN ; TOURNEUR
 STZ TOURNPAS
 STZ PARTIELET ; MESSAGE
 STZ INDEXLET
 STZ TIMESTOP ; TEMPS DE PAUSE
 STZ FIRSTIME ; FADEIN/OUT DESORMAIS
 STZ COMPTEUREYES ; COMPTEUR ENTRE DEUX CLIGNEMENTS
 STZ CURRENTEYES ; NUMERO DES YEUX (0:AUCUN)
 STZ LASTEYES ; ANCIEN EYES
 STZ PASEYES ; NUMERO DE PAS
 LDA #$0000 ; SOURIS : CURSEUR + LIMITES
 JSR POINTEUR
 LDA POSY ; SI SOURIS TROP BASSE...
 CMP #$009C
 BMI ECRMAI3
 LDA #$009C
 STA POSY
ECRMAI3 LDA POSX ; SI SOURIS TROP DROITE...
 CMP #$0127
 BMI ECRMAI4
 LDA #$0127
 STA POSX
ECRMAI4 JSR SAUV
 jsr startSCROLL
 JMP SOURIS1
FIRSTIME HEX 0100 ; FADE UP SI 1ere FOIS
******
ECREASTER JSR FADEOUT ; EASTER EGGS
 jsr stopSCROLL
 LDX #$7FFE
 LDA #$0000
ECREASTER1 STAL $050000,X ; PAGE/SCB/PALETTE A ZERO
 DEX
 DEX
 BPL ECREASTER1
 STZ FLAGMASQ ; MESSAGE VIDE, FOND NOIR
 LDA EASTERFLAG
 ASL
 TAX
 JMP (EASTERTAB,X)
EASTERTAB DA ECREASTER00,ECREASTER10,ECREASTER20,ECREASTER30,ECREASTER40
 DA ECREASTER50,ECREASTER50,ECREASTER50,ECREASTER50
******
ECRPASSE JSR FADEOUT ; CREATION ECRAN MOT DE PASSE
 jsr stopSCROLL
 JSR MAPPAGE
 LDX #$00FE
 LDA #$0000
ECRPASSE1 STAL $057D00,X ; SCB A ZERO
 DEX
 DEX
 BPL ECRPASSE1
 LDX #$001E
ECRPASSE2 LDA PALETTEV,X ; PALETTE VERTE
INIT0502 STAL $057E00,X
 DEX
 DEX
 BPL ECRPASSE2
 STZ FLAGMASQ ; MESSAGE VIDE, FOND NOIR
 LDA #MESVIDE
 LDX BANC05
 LDY #$3C38
 JSR AFFICHMES
 INC FLAGMASQ ; MESSAGE "ENTER THE ACCESS CODE"
 LDA #MESACCE
 LDX BANC05
 LDY #$1E20
 JSR AFFICHMES
 JSR FADEIN ; AFFICHAGE PAGE
 LDX #$0008
 LDA #$ADAD ; "--"
ECRPASSE3 STA CODEMESSAGE,X ; INIT
 DEX
 DEX
 BPL ECRPASSE3
 JMP CODESAISIE

MESVIDE ASC "----------",00
MESACCE ASC "Enter the access code",00
MESINCO ASC "Incorrect Code",00
MESCORR ASC "Code for level",00
MESRAFU ASC "Rating -  Fun",00
MESRATR ASC "Rating - Tricky",00
MESRATA ASC "Rating - Taxing",00
MESRAMA ASC "Rating - Mayhem",00
*************

ECRDEBUT JSR FADEOUT ; ECRAN DE PRESENTATION DU NIVEAU
 jsr stopSCROLL
 JSR MAPPAGE
 LDX #$1DFE
 LDA #$0000
ECRDEBUT0 STAL $050000,X ; NETTOYAGE DE LA ZONE NIVEAU
 DEX
 DEX
 BPL ECRDEBUT0
 LDX #$00FE
ECRDEBUT1 LDA DEBUTSCB,X  ; PLACE LES SCB
INIT0503 STAL $057D00,X
 DEX
 DEX
 BPL ECRDEBUT1
 LDX #$009E
ECRDEBUT2 LDA PALETTER,X ; PALETTES MESSAGE
INIT0504 STAL $057E20,X
 DEX
 DEX
 BPL ECRDEBUT2
 LDA #$0001
 STA FLAGMASQ ; MASQ MESSAGES
 LDA #MESLEVEL ; LEVEL
 LDX BANC05
 LDY #$2800
 JSR AFFICHMES
 LDA LEVELINFOS+0 ; NUMERO LEVEL
 LDX BANC05
 LDY #$2818
 JSR AFFICHCHIMASQ
 LDA #MESNUMBE ; NUMBER OF LEMMINGS
 LDX BANC05
 LDY #$3C28
 JSR AFFICHMES
 LDA LEVELINFOS+2 ; NB LEMMINGS
 LDX BANC05
 LDY #$3C74
 JSR AFFICHCHIMASQ
 LDA LEVELINFOS+4 ; % TO BE SAVED
 LDX BANC05
 LDY #$4628
 JSR AFFICHCHIMASQ
 LDA LEVELINFOS+4
 CMP #$0064
 BPL ECRDEBUT33
 CMP #$000A
 BPL ECRDEBUT32
 LDY #$462C  ; 1 CHIFFRE
 BRA ECRDEBUT3
ECRDEBUT32 LDY #$4630 ; 2 CHIFFRES
 BRA ECRDEBUT3
ECRDEBUT33 LDY #$4634 ; 3 CHIFFRES
ECRDEBUT3 LDA #MESSAVED ; % TO BE SAVED
 LDX BANC05
 JSR AFFICHMES
 LDA #MESRELEA ; RELEASED RATE
 LDX BANC05
 LDY #$5028
 JSR AFFICHMES
 LDA LEVELINFOS+6 ; NB DE LEM
 LDX BANC05
 LDY #$505C
 JSR AFFICHCHIMASQ
 LDA #MESTIME ; TIMES
 LDX BANC05
 LDY #$5A28
 JSR AFFICHMES
 LDA LEVELINFOS+8 ; TEMPS
 LDX BANC05
 LDY #$5A3C
 JSR AFFICHCHIMASQ
 LDA LEVELINFOS+8 ; TEMPS
 CMP #$000A
 BMI ECRDEBUT4
 LDY #$5A48 ; TIME:2 CHIFFRE2
 BRA ECRDEBUT5
ECRDEBUT4 LDY #$5A44 ; TIME:1 CHIFFRE
ECRDEBUT5 LDX BANC05
 LDA #MESMINUT ; MINUTES
 JSR AFFICHMES
 LDA #MESRATIN ; RATING
 LDX BANC05
 LDY #$6428
 JSR AFFICHMES
 LDA NUMEROLEVEL ; FUN/TRICKY/TAXING/MAYHEM
 CMP #$001E ; 31
 BMI ECRDEBUT7
 CMP #$003C ; 61
 BMI ECRDEBUT8
 CMP #$005A ; 91
 BMI ECRDEBUT80
 LDA #MESMAYHEM ; MAYEM
 BRA ECRDEBUT9
ECRDEBUT80 LDA #MESTAXING ; TAXING
 BRA ECRDEBUT9
ECRDEBUT8 LDA #MESTRICKY ; TRICKY
 BRA ECRDEBUT9
ECRDEBUT7 LDA #MESFUN ; FUN
ECRDEBUT9 LDX BANC05 ; AFFICHE DIFFICULTE
 LDY #$6448
 JSR AFFICHMES

 LDA NUMEROLEVEL ; PALETTE NIVEAU
 CMP #$005B
 BNE ECRDEBUT60
 LDA #XFILEPALETTE ; PATCH LEVEL 92
 STA ECRDEBUT6+1
 BRA ECRDEBUT61
ECRDEBUT60 ASL
 TAY
 LDA LEVELPALETTE,Y
 STA ECRDEBUT6+1
ECRDEBUT61 LDX #$001E
ECRDEBUT6 LDA $A0A0,X
INIT0505 STAL $057E00,X
 DEX
 DEX
 BPL ECRDEBUT6

 LDA LEVELTEXTS+2 ; IMAGE PETIT NIVEAU, HAUTEUR
 TAY
 LDA LEVELTEXTS+4 ; @ SPRITE
 STA AFFLVL2+1
 LDA LEVELTEXTS+6 ; @ ECRAN
 STA AFFLVL3+1
 LDA LEVELTEXTS+0 ; LONGUEUR*4
 JSR AFFLVL ; AFFICHAGE IMAGE PETIT NIVEAU

 LDA LEVELTEXTS+8 ; @ TITRE
 STA ECRDEBUT10+1
 LDA #LEVELTEXTS+10 ; AFFICHAGE DU TITRE
 LDX BANC05
ECRDEBUT10 LDY #$A0A0
 JSR AFFICHMES

 JSR FADEIN ; AFFICHAGE IMAGE
 JSR LOADLVL ; CHARGE LES IMAGES DU NIVEAU SI BESOIN
 JSR LOADLAVE ; CHARGE L'IMAGE DE LAVE SI BESOIN
 JSR LOADPIEGES ; CHARGES LES SPRITES PIEGES SI BESOIN

 LDA NUMEROLEVEL
 JSR LOADMUSIC ; CHARGE LA MUSIC
 LDA #MESPRESS ; AFFICHE MESSAGE 'PRESS MOUSE...'
 LDX #$0100
 LDY #$9314
 JSR AFFICHMES
 JSR LINEARISE ; REMET LE DECOR
 LDAL $00C025
 AND #$0040
 BEQ ECRDEBUT11
 LDA REDLINESFLAG
 EOR #$FFFF
 STA REDLINESFLAG
ECRDEBUT11 JSR SCLEANBOUT ; NETTOYAGE BOUTON + CLICK
 LDA #$0005 ; ECRAN JEU
 JMP PICT2

XFILEPALETTE HEX 0000,1000,2000,3000,4000,5000,6000,7000,8000,9000,A000,B000,FF0F,0000,0000,0000

DEBUTSCB HEX 000000000000000000,000000000000000000,00000000000000000000,0000000000000000000000,00000000000000000001
 HEX 010101010101010101,010101010101010101,01010101010101010101,0101010101010101010101,01010101010102020202
 HEX 020202020202020202,020202020303030303,03030303030303030303,0304040404040404040404,04040404040404050505
 HEX 050505050505050505,050505050101010101,01010101010101010101,0101010101010101010101,01010101010101010101
 HEX 010101010100000000,000000000000000000,00000000000000000000,0000000000000000000000,00000000000000000000,0000000000000000000000

NUMEROLVL HEX 0000 ; NUMERO -1*10 (INDICE)
NUMEROLEVEL HEX 0000 ; NUMERO NIVEAU (0-x)

LEVELPALETTE DA PALETTELVL1,PALETTELVL2,PALETTELVL2,PALETTELVL4,PALETTELVL5
 DA PALETTELVL6,PALETTELVL4,PALETTELVL2,PALETTELVL4,PALETTELVL2
 DA PALETTELVL4,PALETTELVL2,PALETTELVL6,PALETTELVL2,PALETTELVL2
 DA PALETTELVL6,PALETTELVL4,PALETTELVL6,PALETTELVL4,PALETTELVL4
 DA PALETTELVL1,PALETTELVLV,PALETTELVL6,PALETTELVL4,PALETTELVL5
 DA PALETTELVL2,PALETTELVL4,PALETTELVL6,PALETTELVL2,PALETTELVL6
 DA PALETTELVL1,PALETTELVL6,PALETTELVL1,PALETTELVL1,PALETTELVL5 ; 31
 DA PALETTELVL6,PALETTELVL2,PALETTELVL6,PALETTELVL1,PALETTELVL6
 DA PALETTELVL4,PALETTELVL4,PALETTELVL2,PALETTELVLR,PALETTELVL1
 DA PALETTELVL5,PALETTELVL6,PALETTELVL2,PALETTELVL4,PALETTELVL6
 DA PALETTELVL6,PALETTELVL2,PALETTELVL2,PALETTELVL4,PALETTELVL2
 DA PALETTELVL4,PALETTELVL1,PALETTELVL1,PALETTELVL4,PALETTELVL2
 DA PALETTELVL2,PALETTELVL1,PALETTELVL6,PALETTELVL2,PALETTELVL6 ; 61
 DA PALETTELVL4,PALETTELVL1,PALETTELVL5,PALETTELVL2,PALETTELVL6
 DA PALETTELVL2,PALETTELVL6,PALETTELVL1,PALETTELVL1,PALETTELVLM
 DA PALETTELVL6,PALETTELVL6,PALETTELVL4,PALETTELVL6,PALETTELVL5
 DA PALETTELVL6,PALETTELVL4,PALETTELVL6,PALETTELVL6,PALETTELVL4
 DA PALETTELVL6,PALETTELVL2,PALETTELVL5,PALETTELVL1,PALETTELVL6
 DA PALETTELVL5,PALETTELVL4 ; 91

LEVELINFOS HEX 0100,0A00,0A00,3200,0500 ; NUMERO,NB LEM,%,RATE,TIME

LEVELTEXTS HEX 1000,2800,A100,C102,3C28 ; LARGEUR*4,HAUTEUR,@ SPRITE,@ ECRAN,@ TITRE
 ASC "Just dig!",00  ; MESSAGE (50 CARACTERES)
 DS 40

MESLEVEL ASC "Level",00
MESNUMBE ASC "Number of Lemmings",00
MESSAVED ASC "% To Be Saved",00
MESRELEA ASC "Release Rate",00
MESTIME ASC "Time",00
MESMINUT ASC "Minutes",00
MESRATIN ASC "Rating",00
MESPRESS ASC "Press mouse button to continue",00
MESFUN ASC "Fun",00
MESTAXING ASC "Taxing",00
MESTRICKY ASC "Tricky",00
MESMAYHEM ASC "Mayhem",00
******************

ECRFIN JSR FADEOUT ; ECRAN DE FIN DE NIVEAU
 STAL $00C010
 JSR STOPMUSIC ; STOP LA ZIC
 LDA LEVELINFOS+4 ; % TO BE SAVED
 STA FINNEEDED ; % NECESSAIRE
 LDA NBIN
 STA FINRESCUED ; % SAUVE
 JSR MAPPAGE
 STZ FINSUCCES ; ECHEC PAR DEFAUT
 LDA FINRESCUED
 CMP FINNEEDED
 BMI ECRFIN0
 LDA #$0001  ; SUCCES
 STA FINSUCCES
ECRFIN0 LDX #$00FE
ECRFIN1 LDA FINSCB,X  ; PLACE LES SCB
INIT0506 STAL $057D00,X
 DEX
 DEX
 BPL ECRFIN1
 LDX #$00BE
ECRFIN2 LDA PALETTER,X ; PALETTES MESSAGE
INIT0507 STAL $057E00,X
 DEX
 DEX
 BPL ECRFIN2
 LDA #$0001
 STA FLAGMASQ ; MASQ MESSAGES
 LDA NUMEROLEVEL ; NIVEAU 92 GAGNE ?
 CMP #$005B
* CMP #$0009 ; *** DEMO ***
 BNE ECRFIN30
 LDA FINSUCCES
 BEQ ECRFIN30 ; RATE...
 JMP ECRFINGAGNE
**
ECRFIN30 LDA FINTIME ; AFFICHAGE DES DIFFERENTS TEXTES
 BEQ ECRFIN3
 LDA #MESTIMEUP ; TIME IS UP
 LDX BANC05
 LDY #$0030
 JSR AFFICHMES
 BRA ECRFIN4
ECRFIN3 LDA #MESALL ; ALL LEMMINGS ACCOUNTED
 LDX BANC05
 LDY #$0018
 JSR AFFICHMES
**
ECRFIN4 LDA #MESNEED ; YOU NEEDED
 LDX BANC05
 LDY #$1430
 JSR AFFICHMES
 LDA FINNEEDED ; VALEUR
 LDX BANC05
 LDY #$1460
 JSR AFFICHCHIMASQ
 LDA FINNEEDED  ; %
 CMP #$0064
 BPL ECRFIN6
 CMP #$000A
 BPL ECRFIN5
 LDA #MESPOURCENT ; 1%
 LDX BANC05
 LDY #$1464
 JSR AFFICHMES
 BRA ECRFIN7
ECRFIN5 LDA #MESPOURCENT ; 10%
 LDX BANC05
 LDY #$1468
 JSR AFFICHMES
 BRA ECRFIN7
ECRFIN6 LDA #MESPOURCENT ; 100%
 LDX BANC05
 LDY #$146C
 JSR AFFICHMES
**
ECRFIN7 LDA #MESRESC ; YOU RESCUED
 LDX BANC05
 LDY #$1E30
 JSR AFFICHMES
 LDA FINRESCUED ; VALEUR
 LDX BANC05
 LDY #$1E60
 JSR AFFICHCHIMASQ
 LDA FINRESCUED ; %
 CMP #$0064
 BPL ECRFIN9
 CMP #$000A
 BPL ECRFIN8
 LDA #MESPOURCENT ; 1%
 LDX BANC05
 LDY #$1E64
 JSR AFFICHMES
 BRA ECRFIN10
ECRFIN8 LDA #MESPOURCENT ; 10%
 LDX BANC05
 LDY #$1E68
 JSR AFFICHMES
 BRA ECRFIN10
ECRFIN9 LDA #MESPOURCENT ; 100%
 LDX BANC05
 LDY #$1E6C
 JSR AFFICHMES
**
ECRFIN10 LDA FINSUCCES ; SUCCES ?
 BNE ECRFIN11
 JMP ECRFIN16
ECRFIN11 LDA #MESACCES ; YOUR ACCESS CODE
 LDX BANC05
 LDY #$5018
 JSR AFFICHMES
 LDA #MESIS ; IS
 LDX BANC05
 LDY #$5A34
 JSR AFFICHMES
 LDA NUMEROLEVEL ; VALEUR ASCII CODE
 ASL
 TAX
 LDA CODELISTDIX,X
 CLC
 ADC #$0008
 TAX
 LDY #$0008
ECRFIN12 LDA CODELIST,X
 STA FINCODE,Y
 DEX
 DEX
 DEY
 DEY
 BPL ECRFIN12
 LDA #FINCODE ; AFFICHAGE CODE
 LDX BANC05
 LDY #$5A40
 JSR AFFICHMES
**
 LDA #MESPRES0 ; PRESS MOUSE
 LDX BANC05
 LDY #$7314
 JSR AFFICHMES
**
 LDA FINRESCUED ; MESSAGES DE SUCCES
 CMP #$0064
 BEQ ECRFIN130 ; SUPERB
 CMP FINNEEDED
 BEQ ECRFIN15 ; SPOT
 LDA FINNEEDED
 CLC
 ADC #$0014
 DEC
 CMP FINRESCUED
 BPL ECRFIN14 ; NO PROBLEM
 BRA ECRFIN13 ; STORM
ECRFIN130 LDA #MESSUP ; Super! You rescued...
 LDX BANC05
 LDY #$3204
 JSR AFFICHMES
 LDA #MESSUP2
 LDX BANC05
 LDY #$3C04
 JSR AFFICHMES
 BRA ECRFINFIN1
ECRFIN15 LDA #MESSPOT ; SPOT ON. You can't get...
 LDX BANC05
 LDY #$320C
 JSR AFFICHMES
 LDA #MESSPOT2
 LDX BANC05
 LDY #$3C0C
 JSR AFFICHMES
 BRA ECRFINFIN1
ECRFIN13 LDA #MESYOU ; You totally stormed...
 LDX BANC05
 LDY #$3210
 JSR AFFICHMES
 LDA #MESYOU2
 LDX BANC05
 LDY #$3C04
 JSR AFFICHMES
 BRA ECRFINFIN1
ECRFIN14 LDA #MESTHAT ; That level seemed...
 LDX BANC05
 LDY #$3204
 JSR AFFICHMES
 LDA #MESTHAT2
 LDX BANC05
 LDY #$3C04
 JSR AFFICHMES
**
ECRFINFIN1 JSR FADEIN ; AFFICHAGE IMAGE
 JSR SCLEANBOUT ; NETTOYAGE BOUTON SOURIS + CLICK
 LDA NUMEROLEVEL
 INC
 STA NUMEROLEVEL ; INDICE DU NIVEAU
 ASL
 TAX
 LDA CODELISTDIX,X
 STA NUMEROLVL
 JSR LOADLITTLE ; CHARGE L'IMAGE DES PETITS NIVEAUX
 JSR INITABLE ; CHARGE TOUTES LES TABLES DU NIVEAU
 LDA #$0003 ; PROCHAIN NIVEAU
 JMP PICT2
**
ECRFIN16 LDA FINRESCUED ; MESSAGE D'ECHEC
 BEQ ECRFIN164 ; ROCK
 LDA FINNEEDED
 LSR
 CMP FINRESCUED
 BPL ECRFIN163 ; RETHINK
 LDA FINNEEDED
 SEC
 SBC #$0005
 CMP FINRESCUED
 BPL ECRFIN162 ; PRACT
ECRFIN161 LDA #MESEXTRA ; FEW % EXTRA
 LDX BANC05
 LDY #$320C
 JSR AFFICHMES
 LDA #MESEXTRA2 ; SUITE
 LDX BANC05
 LDY #$3C08
 JSR AFFICHMES
 BRA ECRFIN165
ECRFIN162 LDA #MESPRACT ; A LITTLE MORE PRACTICE
 LDX BANC05
 LDY #$3208
 JSR AFFICHMES
 LDA #MESPRACT2 ; SUITE
 LDX BANC05
 LDY #$3C1C
 JSR AFFICHMES
 BRA ECRFIN165
ECRFIN163 LDA #MESTHINK ; RETHINK YOUR STRATEDY
 LDX BANC05
 LDY #$3208
 JSR AFFICHMES
 LDA #MESTHINK2 ; SUITE
 LDX BANC05
 LDY #$3C1C
 JSR AFFICHMES
 BRA ECRFIN165
ECRFIN164 LDA #MESROCK ; ROCK BOTTOM
 LDX BANC05
 LDY #$320C
 JSR AFFICHMES
 LDA #MESROCK2 ; SUITE
 LDX BANC05
 LDY #$3C18
 JSR AFFICHMES
**
ECRFIN165 LDA #MESPRES1 ; PRESS MOUSE BUTTON
 LDX BANC05
 LDY #$6414
 JSR AFFICHMES
 LDA #MESHIT ; HIT ESC KEY
 LDX BANC05
 LDY #$6E28
 JSR AFFICHMES
**
ECRFINFIN JSR FADEIN ; AFFICHAGE IMAGE
 STZ BOUT
 LDAL $00C026 ; ATTEND UN CLICK AVEC NETTOYAGE
 BPL ECRFINFINKBD
 LDAL $00C024
ECRFINFINKBD LDAL $00BFFF ; ATTENTE DE ESC OU D'UN CLICK
 AND #$FF00
 BMI ECRFINFINKBD1
 JSR SLECT ; CLICK ?
 CPY #$FFFF
 BEQ ECRFINFINKBD ; PAS PRETE
 LDA BOUT
 BNE ECRFINSOU ; CLICK OK
 BRA ECRFINFINKBD
ECRFINFINKBD1 STAL $00C010 ; ESC ?
 CMP #$9B00
 BNE ECRFINFINKBD
 LDA #$0001 ; ESC : RETOUR A L'ECRAN MAIN
 JMP PICT2
ECRFINSOU LDA #$0003 ; CLICK : ON RECOMMENCE LE NIVEAU
 JMP PICT2

ECRFINGAGNE NOP  ; FIN DU JEU : GAGNE
 LDA #MESCONG ; CONGRATULATIONS
 LDX BANC05
 LDY #$142A
 JSR AFFICHMES
 LDA #MESCOMPL ; YOU HAVE COMPLETED
 LDX BANC05
 LDY #$320F
 JSR AFFICHMES
 LDA #MESCOMPL2 ; OF THE IIGS VERSION
 LDX BANC05
 LDY #$3C06
 JSR AFFICHMES
 LDA #MESMASTER ; YOU BECAME A MASTER
 LDX BANC05
 LDY #$5014
 JSR AFFICHMES
 LDA #MESMASTER2 ; NOW YOU HAVE TIME
 LDX BANC05
 LDY #$5A06
 JSR AFFICHMES
 LDA #MESPRES2 ; PRESS MOUSE FOR MENU
 LDX BANC05
 LDY #$727B
 JSR AFFICHMES
 JSR FADEIN
 JSR SCLEANBOUT ; NETTOYAGE BOUTON + CLICK
 LDA #$0001 ; RETOUR ECRAN MAIN
 JMP PICT2

FINNEEDED HEX 0000 ; 0-100%
FINRESCUED HEX 0000 ; 0-100%

FINTIME HEX 0100 ; 1:TIME UP
FINSUCCES HEX 0000 ; 0-1

FINCODE HEX 00,00,00,00,00,00,00,00,00,00,00

FINSCB HEX 04040404040404040404,04040404040404040404,04040404040404040404,0404
 HEX 05050505050505050505,05050505050505050505,05050505050505050505,05050505050505050505,0505050505050505
 DS 48
 HEX 03030303030303030303,03030303030303030303,03030303030303030303,0303
 HEX 01010101010101010101,01010101010101010101,01010101010101010101,01010101010101010101
 DS 50

MESALL ASC "All lemmings accounted for.",00
MESTIMEUP ASC "Your Time is up !",00
MESNEED ASC "You needed",00
MESCONG ASC "CONGRATULATIONS !!!",00
MESRESC ASC "You rescued",00
MESACCES ASC "Your access code for Level",00
MESIS ASC "is",00
MESCOMPL ASC "You have completed the last level",00
*MESCOMPL ASC "   You have completed the demo   ",00  ; *** DEMO ***
MESCOMPL2 ASC "of the Apple IIgs version of Lemmings",00
MESMASTER ASC "You became a Master Player !!!",00
*MESMASTER ASC "82 other wonderful levels are",00     ; *** DEMO ***
MESMASTER2 ASC "Now you have time to hunt Easter Eggs",00
*MESMASTER2 ASC "waiting for you in the final version!",00  ; *** DEMO ***
MESPRES2 ASC "Press mouse button for Menu",00
MESROCK ASC "ROCK BOTTOM! I hope for your sake",00
MESROCK2 ASC "that you nuked that level",00
MESTHINK ASC "Better rethink your strategy before",00
MESTHINK2 ASC "you try this level again!",00
MESPRACT ASC "A little more practice on this level",00
MESPRACT2 ASC "is definitely recommended.",00
MESEXTRA ASC "You got pretty close that time.",00
MESEXTRA2 ASC "Now try again for that few % extra.",00
MESSPOT ASC "SPOT ON. You can't get much closer",00
MESSPOT2 ASC "than that. Let's try the next....",00
MESTHAT ASC "That level seemed no problem to you on",00
MESTHAT2 ASC "that attempt. On to the next....",00
MESYOU ASC "You totally stormed that level!",00
MESYOU2 ASC "Let's see if you can storm the next...",00
MESSUP ASC "Superb! You rescued every lemming on",00
MESSUP2 ASC "that level. Can you do it again....?",00
MESPRES0 ASC "Press mouse button to continue",00
MESPRES1 ASC "Press mouse button to try again",00
MESHIT ASC "Hit ESC key for menu",00
MESPOURCENT ASC "%",00
******************

ECRJEU JSR FADEOUT ; ECRAN DE JEU
 STAL $00C010
 LDX #$7FFE
 LDA #$0000
ECRJEU0 STAL $050000,X ; NETTOYAGE POINTS
 DEX
 DEX
 BPL ECRJEU0
 LDX #$00FE
ECRJEU1 LDA JEUSCB,X ; PLACE LES SCB
INIT0508 STAL $057D00,X
 DEX
 DEX
 BPL ECRJEU1
 LDX #$001E
ECRJEU2 LDA PALETTEVM,X ; PALETTE MESSAGE
INIT0509 STAL $057E20,X
 LDA PALETTEJEU,X ; PALETTE ICONES
INIT0510 STAL $057E40,X
 DEX
 DEX
 BPL ECRJEU2
 LDA NUMEROLEVEL ; PALETTE NIVEAU
 ASL
 TAY
 LDA LEVELPALETTE,Y
 STA ECRJEU3+1
 LDX #$001E
ECRJEU3 LDA $A0A0,X
INIT0511 STAL $057E00,X
 DEX
 DEX
 BPL ECRJEU3
 LDX #$0EFE ; BANDEAU D'ICONE
ECRJEU4 LDAL $05EE00,X
INIT0512 STAL $056E00,X
 DEX
 DEX
 BPL ECRJEU4

 JSR CREELVLBAS ; PETIT NIVEAU BAS

 STZ FLAGMASQ ; MESSAGES SUR NOIR
 LDA #JEUMSG1 ; NOMS DANS LA BANDE TEXTE
 LDX BANC05
 LDY #$6438
 JSR AFFICHMES ; OUT 0
 LDA #JEUMSG2
 LDX BANC05
 LDY #$645C
 JSR AFFICHMES ; IN 00%
 LDA #JEUMSG4
 LDX BANC05
 LDY #$6478
 JSR AFFICHMES ; TIME

 STZ TIMESEC
 LDX BANC05
 LDA LEVELINFOS+8 ; MINUTES
 STA TIMEMIN ; INITIALISATION
 CMP #$000A
 BMI ECRJEU50
 LDY #$648C
 BRA ECRJEU51
ECRJEU50 LDY #$6490
ECRJEU51 LDA TIMEMIN
 JSR AFFICHCHIBRUT

 LDX #$0012 ; ON REMPLIT LA TABLE DES ICONES
ECRJEU5 LDA JEUVALEUR,X
 STA ICONEVALEUR,X
 DEX
 DEX
 BPL ECRJEU5
 LDA ICONEVALEUR ; TRANSFORMATION %
 AND #$00FF
 STA SUCCESS1 ; AVANT LA VIRGULE
 LDA ICONEVALEUR
 XBA
 AND #$00FF
 STA SUCCESS2 ; APRES LA VIRGULE
 LDA ICONEVALEUR+2 ; RETABLIT LA VALEUR
 STA ICONEVALEUR
 LDX #$0000 ; ON AFFICHE LES VALEURS ICONES
ECRJEU6 LDA ICONEVALEUR,X
 BEQ ECRJEU7 ; 00: ON AFFICHE RIEN
 PHX
 LDX BANC05
ECRJEU8 LDY #$6EA2
 JSR AFFICHJC
 PLX
ECRJEU7 LDA ECRJEU8+1
 CLC
 ADC #$0008
 STA ECRJEU8+1
 INX
 INX
 CPX #$0014
 BNE ECRJEU6
 LDA #$6EA2
 STA ECRJEU8+1

 LDA #$0001 ; SOURIS : CURSEUR + LIMITES
 JSR POINTEUR

 LDA JEUSLIDE
 STA DECORSLIDE
 JSR INITLEVEL ; INITS VALEURS...

 JSR AFFICHSLIDE0 ; AFFICHAGE ECRAN SLIDE
 LDX #$18FE ; COPIE LA ZONE ICONE
IN0000 LDAL $056400,X
 STAL $018400,X
 DEX
 DEX
 BPL IN0000
 LDX #$00FE ; COPIE LES SCB
IN000 LDAL $057D00,X
 STAL $019D00,X
 DEX
 DEX
 BPL IN000

 LDA VERIFLAG1 ; VERIF LEMMINGS
 BEQ FUCK107
FUCK108 STZ EASTERFLAG ; FUCK... :-)
 LDA #$0006
 JMP PICT2
FUCK107 LDA VERIFLAG2  ; VERIF LEMMING
 BNE FUCK108

 JSR CREEDECOR1 ; CREATION DECOR
 JSR PLAYMUSIC ; JOUE LA ZIC
 JSR FADEIN1 ; FADEIN
 LDA #$0000
 STA CURRENTICN ; ICONE COURANT
 JSR AFFICHICONE
 JMP SOURIS1

JEUSLIDE HEX 2700 ; POSITION INITIALE SLIDE

JEULEVEL HEX 0800,1400,A169,B86F ; LARGEUR*4, HAUTEUR, @ SPRITE, @ ECRAN : PETIT LEVEL

JEUVALEUR HEX 0A00,3200,0000,0000,0000,0000,0000,0000,0000,0A00 ; %,VALEUR ICONES

JEUSCB DS 160
 HEX 01010101010101010101,01010101010102020202,02020202020202020202,02020202020202020202
 DS 66

JEUMSG1 ASC "OUT 0",00
JEUMSG2 ASC "IN 00%",00
JEUMSG4 ASC "TIME   -00",00

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

INITLEVEL NOP ; INIT A EFFECTUER A CHAQUE DEBUT DE NIVEAU
 STZ ANIMPORTE ; LA PORTE EST INITIALEMENT FERMEE
 LDX #$002A
 LDA #$0000
INITLEVEL1 STA HORLOGETAB-4,X
 DEX
 DEX
 BPL INITLEVEL1 ; REMET LES PAS D'ANIMATION
 LDA ICONEVALEUR+2 ; CHIFFRE EN BAS
 LSR
 STA INITLEVEL01+1 ; CONVERSION RATE -> INTERVALE
 LDA #$0035
 SEC
INITLEVEL01 SBC #$A0A0
 STA INTRODUCTION3+1
 LDA ICONEVALEUR+2
 STA DEBITVALEUR
 CLC
 ADC #$000A
 STA DEBITMIN
 STZ SUCCESS3 ; RETENUE POUR LES %
 LDA LEVELINFOS+2 ; NB DE LEMMINGS
 STA NBINDOOR
 STZ INTROPATCH ; LEVEL MULTIPORTES
 STZ NBCOMPT ; NB DE BOMBER AVEC CHIFFRE
 STZ TEMPO
 STZ NBJEU ; AUCUN EN JEU
 STZ NBIN ; AUCUN ENTRE
 STZ INTROPAS ; COMPTEUR DE PAS A 0
 STZ KEYSTOP ; FULL ANIMATION MODE
 STZ EVOLFLAG ; EVOLUTION NON BLOQUEE
 STZ NUKEFLAG ; DEMANDE D'ATOMISER
 STZ NBLOCKERS ; NB DE BLOCKERS
 STZ POTENCEFLAG ; POTENCE LIBRE :-)
 STZ ECRASEFLAG
 STZ ECRASEFLAG+2
 STZ ECRASEFLAG+4
 STZ ECRASEFLAG+6 ; ECRASEMENT LIBRE
 STZ GUILLOFLAG
 STZ GUILLOFLAG+2
 STZ GUILLOFLAG+4
 STZ GUILLOFLAG+6 ; GUILLOTINE LIBRE :-)
 STZ AFFICHINFLAG
 STZ AFFICHOUTFLAG ; AFFICHAGE NB LEM JEU / % LEM SAUVE
 STZ WHICHSOUND ; SON A JOUER A CE PAS
 STZ SHIFTFLAG ; TOUCHE SHIFT RELACHE
 STZ YIPPEEFLAG ; YIPPEE DEJA FAIT
 STZ SOUNDONOFF ; SONS OK
 STZ MUSICONOFF ; MUSIC OK
 LDA #$0000
 LDX #$00C6
INITLEVEL2 STA ETATAB,X ; NETTOY LA TABLE ETATAB
 STA COMPTAB,X ; TABLE DES COMPTEUR EXPLOSION
 STA BLOCKERTAB,X ; TABLE DES BLOCKERS
 DEX
 DEX
 BPL INITLEVEL2
initlevel3 RTS

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

CREEDECOR CMP DECORSLIDE ; PAS BOUGE ?
 BEQ initlevel3
 STA DECORSLIDE
CREEDECOR1 INC SCROLLFLAG
 JSR AFFICHSLIDE ; AFFICHAGE ECRAN SLIDE
 JSR AFFICHDECOR ; CREATION DECOR
 JSR AFFICHCHISL ; VALEUR SLIDE
 JSR SHADOWINGOFF

 phb
 phd

 ldal $e0c068
 ora #%00000000_00110000
 stal $e0c068

creeBANC pea $0505
 plb
 plb

 ldx #0

 lda #$2000
creeLOOP tcd

]copy = 0

 lup 128
 lda\ ]copy,x
 sta ]copy
]copy = ]copy+2
 --^

 txa
 ora #$0100
 tax

 tdc
 ora #$0100
 tcd

]copy = 0

 lup 128
 lda\ ]copy,x
 sta ]copy
]copy = ]copy+2
 --^

 txa
 clc
 adc #$0100
 tax

 tdc
 clc
 adc #$0100
 cmp #$8400
 beq creeEND
 brl creeLOOP

creeEND ldal $e0c068
 and #$ffcf
 stal $e0c068
 pld
 plb

 LDA EVOLFLAG ; EVOLUTION BLOQUE ?
 BEQ CREEDECOR20
 JMP ANIMATIONJEU3 ; ON AFFICHE
* RTS
CREEDECOR20 STZ TEMPO
 JSR ANIMATIONJEU3 ; AFFICHAGE DE TOUT
 JMP ANIMATIONJEU4
CREEDECOR2 RTS

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

DECORSLIDE HEX 0000

AFFICHCHISL RTS ; VALEUR SLIDE

VERIFCHECK STZ VERIFCHECK3+1 ; LONGUEUR A VERIFIER
 LDY #$0000
VERIFCHECK2 LDA VERIFTAB,Y
 BEQ VERIFCHECK6 ; FIN DE TABLE
 SEC
 SBC VERIFTAB+2,Y
 LSR
 ASL
 STA VERIFCHECK5+1 ; LONGUEUR
 LDA VERIFTAB+2,Y
 STA VERIFCHECK4+1 ; ADRESSE DE DEBUT DE ZONE
 LDX #$0000
VERIFCHECK3 LDA #$A0A0 ; VALEUR INITIALE
VERIFCHECK4 EOR $A0A0,X ; ZONE A TESTER
 INX
 INX
VERIFCHECK5 CPX #$A0A0 ; LONGUEUR DE TEST
 BNE VERIFCHECK4
 STA VERIFCHECK3+1
 INY
 INY
 INY
 INY
 BRA VERIFCHECK2 ; ZONE SUIVANTE
VERIFCHECK6 LDA VERIFCHECK3+1
* STAL $000308
 CMP #$5639
* CMP #$2AE4 ; VALEUR THEORIQUE DU CHECKSUM
* CMP #$4189 ; *** DEMO ***
 BEQ VERIFCHECK7
 INC VERIFLAG2  ; PROBLEME
VERIFCHECK7 RTS

VERIFTAB DA ECRDEBUT,MESVIDE,ECRFIN,MESLEVEL,ECRJEU,MESALL
 DA INITLEVEL,JEUMSG1,LEMEMPTY,FUCKTEXT
 DA ALPHABET,MESSAGE
 HEX 0000

VERIFLAG1 HEX 0000 ; VERIF CODE LEMMINGS
VERIFLAG2 HEX 0000 ; VERIF CODE LEMMING
***************

AFFICHDECOR phb

 lda DECORSLIDE
 asl
 tax
 lda SEIZETAB,x
 lsr
 tay
 sty AFFICHDECOR1+1

*--- Recopie du banc 0A

creeBK0A pea $0a0a
 plb
 plb

 ldx #0

loop0A = *

]source = 0
]destination = $0a0000

 lup 80
 lda\ ]source,y
 stal ]destination,x
]source = ]source+2
]destination = ]destination+2
 --^

 tya
 clc
 adc #800
 tay

 txa
 clc
 adc #160 ; 1 ligne plus bas
 tax
 cpx #160*80
 bcs creeBK0B
 brl loop0A

*--- Recopie du banc 0B

creeBK0B pea $0b0b
 plb
 plb

AFFICHDECOR1 ldy #-1

loop0B = *

]source = 0
]destination = $0b0000

 lup 80
 lda\ ]source,y
 stal ]destination,x
]source = ]source+2
]destination = ]destination+2
 --^

 tya
 clc
 adc #800
 tay

 txa
 clc
 adc #160 ; 1 ligne plus bas
 tax
 cpx #160*160
 bcs AFFICHDECOR2
 brl loop0B

*--- Fin de la recopie de la zone

AFFICHDECOR2 plb

 JSR CLEANLINEANI ; REFRESH LINE
 STZ AFTERSCROLL
 JSR CREEFIXE ; CREATION DE LA TABLE D'OBJETS FIXES
 JSR AFFICHFIXE ; AFFICHAGE OBJETS FIXES
 JSR CREEANIM ; CREATION DES OBJETS ANIMES
 JSR CREEDECANIM ; CREATION DES DECORS ANIMES
 RTS

DECORTAB HEX 0000,2003,4006,6009,800C,A00F,C012,E015,0019,201C
 HEX 401F,6022,8025,A028,C02B,E02E,0032,2035,4038,603B
 HEX 803E,A041,C044,E047,004B,204E,4051,6054,8057,A05A
 HEX C05D,E060,0064,2067,406A,606D,8070,A073,C076,E079
 HEX 007D,2080,4083,6086,8089,A08C,C08F,E092,0096,2099
 HEX 409C,609F,80A2,A0A5,C0A8,E0AB,00AF,20B2,40B5,60B8
 HEX 80BB,A0BE,C0C1,E0C4,00C8,20CB,40CE,60D1,80D4,A0D7
 HEX C0DA,E0DD,00E1,20E4,40E7,60EA,80ED,A0F0,C0F3,E0F6

SEIZETAB HEX 0000,1000,2000,3000,4000,5000,6000,7000,8000,9000,A000,B000,C000,D000,E000,F000
 HEX 0001,1001,2001,3001,4001,5001,6001,7001,8001,9001,A001,B001,C001,D001,E001,F001
 HEX 0002,1002,2002,3002,4002,5002,6002,7002,8002,9002,A002,B002,C002,D002,E002,F002
 HEX 0003,1003,2003,3003,4003,5003,6003,7003,8003,9003,A003,B003,C003,D003,E003,F003
 HEX 0004,1004,2004,3004,4004,5004,6004,7004,8004,9004,A004,B004,C004,D004,E004,F004
 HEX 0005,1005,2005,3005,4005,5005,6005,7005,8005,9005,A005,B005,C005,D005,E005,F005

********************  AFFICHE LE TEMPS  **************************

AFFICHTIME LDA TIMESEC
 BEQ AFFICHTIME1
 DEC
 STA TIMESEC
 BRA AFFICHTIME2 ; AFFICHAGE SEC
 RTS
AFFICHTIME1 LDA TIMEMIN
 BEQ AFFICHTIMEFIN
 CMP #$000A ; PASSAGE 10->9, ON ENLEVE LE 1
 BNE AFFICHTIME10
 LDA #$848C
 LDX #$008A
 JSR AFFICHLETBRUT
 LDA TIMEMIN
AFFICHTIME10 DEC
 STA TIMEMIN
 CMP #$000A
 BPL AFFICHTIME20
 LDY #$8490 ; AFFICHAGE EN RETRAIT SI > 9
 BRA AFFICHTIME21
AFFICHTIME20 LDY #$848C
AFFICHTIME21 LDX #$0120 ; AFFICHAGE MIN EN 01/2000
 LDA TIMEMIN
 JSR AFFICHCHIBRUT
 LDA #$003B ; 59 SEC
 STA TIMESEC
 LDX #$0120
 LDY #$8498
 JSR AFFICHCHIBRUT
 RTS
AFFICHTIME2 LDA TIMESEC ; AFFICHAGE SEC EN 01/2000
 CMP #$000A
 BMI AFFICHTIME3
 LDX #$0120
 LDY #$8498
 JSR AFFICHCHIBRUT
 RTS
AFFICHTIME3 LDA #$0000 ; 0x, IL FAUT FORCER L'AFFICHAGE DU 0
 LDX #$0120
 LDY #$8498
 JSR AFFICHCHIBRUT
 LDA TIMESEC ; SEC
 LDX #$0120
 LDY #$849C
 JSR AFFICHCHIBRUT
AFFICHTIMEFIN RTS

TIMEMIN HEX 0000 ; MINUTES
TIMESEC HEX 0000 ; SECONDES

**************  HORLOGE GERANT LES DIFFERENTS PAS  ***********

HORLOGE LDA EVOLFLAG ; ON CALCULE LES PAS SUIVANTS
 BNE HORLOGE4
 LDX #$0000
 LDY #$0002
HORLOGE1 STY HORLOGE2+1
 LDA HORLOGETAB,X
 INC
HORLOGE2 CMP #$A0A0 ; 1,2,3...
 BNE HORLOGE3
 LDA #$0000 ; INIT
HORLOGE3 STA HORLOGETAB,X
 INY
 INX
 INX
 CPX #$0028 ;
 BNE HORLOGE1
 LDA HORLOGETAB-4 ; SON D'OUVERTURE
 BNE HORLOGE5
 LDA HORLOGETAB-2
 CMP #$0001
 BEQ HORLOGE6
 CMP #$0022
 BNE HORLOGE5
 LDA #$000A ; 1er LEMMING QUI SORT
 JSR PLAYSOUND
 LDA #$0001
 STA ANIMPORTE ; ON FORCE L'OUVERTURE
 BRA HORLOGE5
HORLOGE6 LDA #$0006 ; OUVERTURE PORTE
 JSR PLAYSOUND
HORLOGE5 INC HORLOGETAB-2 ; TEMPS
 LDA HORLOGETAB-2
 BNE HORLOGE4
 INC HORLOGETAB-4
HORLOGE4 RTS

 HEX 0000,0000 ; 0->xx TEMPS ECOULE
HORLOGETAB HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000
 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000

**************  ROUTINE PRINCIPALE DE GESTION DES EVENEMENTS  *************

ANIMATIONJEU LDA EVOLFLAG ; EVOLUTION BLOQUE ?
 BNE ANIMATIONJEU00
 LDA TEMPO
 BEQ ANIMATIONJEU1
 DEC TEMPO
ANIMATIONJEU00 LDA POINTEURTYPE
 PHA
 JSR CADRE ; CROIX/CADRE ?
 PLA
 CMP POINTEURTYPE ; ANCIEN CURSEUR
 BNE ANIMATIONJEU0
 RTS
ANIMATIONJEU0 JSR DESS1
 JSR NOMETAT ; AFFICHAGE NOM DU LEMMING
 JSR SAUV ; REAFFICHE LE CURSEUR CAR CHANGEMENT
 JSR TRACE6
 RTS
**
ANIMATIONJEU1 JSR ANIMATIONJEU2 ; AFFICHAGE LEMMINGS,DECOR...
ANIMATIONJEU4 LDA #$0060 ; xx APPELS = 1 pas
 STA TEMPO
 RTS
TEMPO HEX 0000 ; TEMPS QUI S'ECOULE
**
ANIMATIONJEU2 JSR SHADOWINGOFF ; SHADOWING OFF
 JSR DESS1 ; EFFACE LE CURSEUR
ANIMATIONJEU3 JSR CLEANLEM ; NETTOYAGE LEMMINGS
 JSR CLEANSCRCPT ; NETTOYAGE NUMERO AU DESSUS DES LEM
 JSR AFFICHANIM ; AFFICH OBJETS ANIMES
 JSR AFFICHDECANIM ; AFFICH DECORS ANIMES
 JSR CONTACTZONE ; TESTE SI LES LEMMINGS SONT DANS UNE ZONE
 JSR CONTACTBLOC ; TESTE SI LES LEMMINGS SONT EN CONTACT AVEC LES BLOCKERS
 LDA EVOLFLAG
 BNE ANIMATIONJEU30
 JSR EVOLUTION ; OLD(X,Y,ETAT,PAS) -> NEW(X,Y,ETAT,PAS)
   ; EFFECTUE LES CREUSEMENTS, RE-AFFICHE LES OBJ FIXES
 JSR INTRODUCTION ; RAJOUTE DES LEMMINGS EN JEU
ANIMATIONJEU30 JSR CLEANLINECOPY ; REFRESH LINE
 JSR CREENTOUR ; CREATION DES TABLES X0,X1,Y0,Y1
 JSR CREEAFFLEM ; CREATION DES TABLES LAR*4,HAUTEUR,@SPR,@ECRAN
 JSR AFFICHLEM ; AFFICHAGE DES LEMMINGS
 JSR AFFICHCOMPT ; NUMERO AU DESSUS DES LEMMINGS
 JSR PLAYPUTSOUND ; JOUE UN SON SI BESOIN
 JSR COPYSCREEN ; SHADOWING ON + RECOPIE DE LA ZONE
 JSR CLEANSMALL ; NETTOYAGE PETIT LEMMINGS EN BAS
 JSR AFFICHSMALL ; AFFICHAGE PETITS LEMMINGS EN BAS
 JSR CADRE ; CHOISI ENTRE LA CROIX ET LE CADRE
 JSR HORLOGE ; COMPTABILISE LES PAS EFFECTUES
 JSR ANIMATIONTIME ; AFFICHAGE DE L'HEURE
 JSR AFFICHOUT ; AFFICHAGE NB DE LEM EN JEU
 JSR AFFICHIN ; % DES LEM SAUVE
 JSR NOMETAT
 JSR SAUV ; REMET LE CURSEUR
 JSR TRACE6
 LDA KEYSTOP
 BNE ANIMATIONSTOP
 RTS
**
ANIMATIONSTOP LDAL $00BFFF ; ANIMATION PAS A PAS
 BPL ANIMATIONSTOP
 STAL $00C010
 AND #$FF00
 CMP #$9B00 ; ESC
 BNE ANIMATIONSTOP1
 STZ KEYSTOP ; FULL ANIMATION MODE
ANIMATIONSTOP1 RTS

KEYSTOP HEX 0000
**
ANIMATIONTIME LDA EVOLFLAG
 BNE ANIMATIONTIME2
 LDA HORLOGETAB+28 ; 1 sec = 16 pas
 BEQ ANIMATIONTIME1
 RTS
ANIMATIONTIME1 JSR AFFICHTIME ; DECREMENTE/AFFICHAGE HEURE
ANIMATIONTIME2 RTS
**
SHADOWINGOFF LDA SCROLLFLAG ; MODIFICATION SHADOWING
 BNE SHADOWINGOFF1
 LDAL $00C025
 AND #$0002
 BEQ SHADOWINGOFF1
 INC SHIFTFLAG
 RTS
SHADOWINGOFF1 LDAL $00C035
 ORA #$0008
 STAL $00C035
 STZ SHIFTFLAG
 RTS
COPYSCREEN LDA SCROLLFLAG ; SHADOW ON / RECOPIE ECRAN
 BNE COPYSCREEN3
 LDA SHIFTFLAG
 BNE COPYSCREEN2
COPYSCREEN3 LDAL $00C035
 AND #$FFF7
 STAL $00C035

 jsr copySCREEN
 LDA REDLINESFLAG
 BEQ COPYSCREEN2
 JSR SHOWLINES ; REFRESH

COPYSCREEN2 STZ SHIFTFLAG
 STZ SCROLLFLAG
 RTS
SHIFTFLAG HEX 0000 ; 1 SI SHIFT ENFONCE
SCROLLFLAG HEX 0000 ; 1 SI SCROLLING

COPYSCREEN1 DS 4

*************  METHODE INTELLIGENTE DE RAFFRAICHISSEMENT  *************

REFRESHLINETAB DS 160*2 ; TABLE DEF
REFRESHLINESAU DS 160*2 ; TABLE SAUV DEF
REFRESHLINEANI DS 160*2 ; TABLE FIXE POUR LE SCROLL

CLEANLINEANI LDX #$013E ; NETTOYAGE TABLE ANIM + TAB FULL 1
 LDA #$0001 ; QUAND ON SCROLL
CLEANLINEANI1 STZ REFRESHLINEANI,X
 STA REFRESHLINETAB,X
 DEX
 DEX
 BPL CLEANLINEANI1
 RTS

CLEANLINECOPY LDA AFTERSCROLL ; RECOPIE LA TABLE ANIM SUR TABLE DEF
 BEQ CLEANLINECOPY2
 LDX #$013E
CLEANLINECOPY1 LDA REFRESHLINETAB,X ; TABLE DEF -> TABLE SAUV
 STA REFRESHLINESAU,X
 LDA REFRESHLINEANI,X ; TABLE ANIM -> TABLE DEF
 STA REFRESHLINETAB,X
 DEX
 DEX
 BPL CLEANLINECOPY1
 RTS
CLEANLINECOPY2 INC AFTERSCROLL ; LA PREMIERE FOIS ON RECOPIE TOUT
 RTS
AFTERSCROLL HEX 0000

FILLINETAB INC REFRESHLINETAB,X ; REMPLI LA TABLE TAB
 INX
 INX
 DEY
 BNE FILLINETAB
 RTS

FILLINEANI INC REFRESHLINEANI,X ; REMPLI LA TABLE ANIM
 INX
 INX
 DEY
 BNE FILLINEANI
 RTS

COUNTLINETAB STZ LINETABNUMBER ; DETERMINE LE NB DE LIGNE A RAFRAICHIR
 LDX #$013E
COUNTLINETAB1 LDA REFRESHLINETAB,X ; TAB
 ORA REFRESHLINESAU,X ; SAUV
 BEQ COUNTLINETAB2
 INC LINETABNUMBER
COUNTLINETAB2 DEX
 DEX
 BPL COUNTLINETAB1
 RTS
LINETABNUMBER HEX 0000 ; NB DE LIGNES A RAFRAICHIR

SHOWLINES LDY #$013E ; TRAIT ROUGE EN FACE DE LA LIGNE
SHOWLINES1 LDA REFRESHLINETAB,Y ; TAB
 ORA REFRESHLINESAU,Y ; SAUV
 BEQ SHOWLINES2
 LDX TABLE,Y
 LDA #$5555 ; ROUGE : A RAFRAICHIR
 STAL $E12000,X
 BRA SHOWLINES3
SHOWLINES2 LDX TABLE,Y ; NOIRE : ON NE RAFRAICHIT PAS
 LDA #$0000
 STAL $E12000,X
SHOWLINES3 DEY
 DEY
 BPL SHOWLINES1
 JSR COUNTLINETAB ; AFFICHAGE NB LIGNES
 LDA LINETABNUMBER
 LDX #$0120
 LDY #$8EA2
 JSR AFFICHJC
 RTS
REDLINESFLAG HEX 0000

************
copySCREEN phd

 ldal $e0c068
 sta saveC068
 ora #%00000000_00110000
 stal $e0c068

 ldx #320-2

]lp lda REFRESHLINETAB,x ; TAB
 ORA REFRESHLINESAU,X ; SAUV
 BEQ copySCREEN1

 lda TABLE,x
 clc
 adc #$2000
 jsr copyLINE

copySCREEN1 dex
 dex
 bpl ]lp

*--- Sortie de la routine

 lda saveC068
 stal $e0c068

 pld
 rts
*---
copyLINE tcd

 lda #0
]copy = $00
 lup 80
 tsb ]copy
]copy = ]copy+2
 --^

 rts
*---
saveC068 ds 2 ; Sauvegarde E0/C068

************
 PUT LEMM.INIT
 PUT LEMM.AFFICH
 PUT LEMM.CREE
 PUT LEMM.CODE
 PUT LEMM.LEM
 PUT LEMM.DECOR
 PUT LEMM.MVM
