From 548200a90a3811e8f9ec03428ded3fb30c9d8246 Mon Sep 17 00:00:00 2001 From: Antoine Vignau <34219772+antoinevignau@users.noreply.github.com> Date: Sat, 29 Oct 2022 21:22:33 +0200 Subject: [PATCH] Adding The Tines & TCK Antoine's The Tinies & Oliver's TCK source code --- .DS_Store | Bin 10244 -> 10244 bytes thetinies/TCK.About.s | 106 + thetinies/TCK.Docu.s | 612 ++++++ thetinies/TCK.Main.s | 3118 ++++++++++++++++++++++++++ thetinies/TCK.Play.s | 2393 ++++++++++++++++++++ thetinies/TCK.s | 1426 ++++++++++++ thetinies/TINIES.CODES.S | 67 + thetinies/Tinies.Main2.s | 1939 ++++++++++++++++ thetinies/Tinies.s | 4497 ++++++++++++++++++++++++++++++++++++++ 9 files changed, 14158 insertions(+) create mode 100644 thetinies/TCK.About.s create mode 100644 thetinies/TCK.Docu.s create mode 100644 thetinies/TCK.Main.s create mode 100644 thetinies/TCK.Play.s create mode 100644 thetinies/TCK.s create mode 100644 thetinies/TINIES.CODES.S create mode 100644 thetinies/Tinies.Main2.s create mode 100644 thetinies/Tinies.s diff --git a/.DS_Store b/.DS_Store index 448de3a231e7ea3e77a0465c7b2b75f069b0b9f2..a2b992c8ba06f5ef35d727f8680c0b8d1d497c2f 100644 GIT binary patch delta 479 zcmZn(XbG6$&*-r+U^hRb$7UV@O~!f-h9rg@hJ1!(hHQpJh7^X>oOHwBju=UMAH8A=#3 z7*c^`CPN+&r!o|yxR`aOCQvgLRcLO0^0sRa$jw+)qPQAGr3tFlDDGyx0CG1L12;bt XTh6|jUEvqYW>1kdOyO9RP{R)Ze^hR1 delta 52 zcmZn(XbG6$&uF(XU^hRb-DVyEO~%b{1rM-p&X<_MzOkW-aWlKZFP6#uqLQ00iQZ-e I3iC4p0P|ZCtpET3 diff --git a/thetinies/TCK.About.s b/thetinies/TCK.About.s new file mode 100644 index 0000000..a16a1f5 --- /dev/null +++ b/thetinies/TCK.About.s @@ -0,0 +1,106 @@ +*--------------------------------------* +* * +* Tinies Contruction Kit: About Menu * +* * +* (c) 10/1994 by Brutal Deluxe * +* * +*--------------------------------------* + +aboutMENU lda ptrABOUT + clc + adc #$7d00 + sta Debut + sta Third + lda ptrABOUT+2 + sta Debut+2 + sta Third+2 + + ldy #$2fe +]lp lda [Debut],y + tyx + stal $019d00,x + dey + dey + bpl ]lp + + ldx #0 + txa +]lp stal $019d00,x + inx + inx + cpx #$100 + bne ]lp + +*--- + + lda ptrABOUT + clc + adc #$7c60 + sta Debut + lda ptrABOUT+2 + sta Debut+2 + + lda #$0001 + sta Arrivee+2 + + stz abNBLINE + +aboutMENU1 lda #199 + sec + sbc abNBLINE + sta abLASTLINE + + stz abCURRLINE + +aboutMENU2 lda abCURRLINE + asl + tax + lda Ligne,x + clc + adc #$2000 + sta Arrivee + + ldy #160-2 +]lp lda [Debut],y + sta [Arrivee],y + dey + dey + bpl ]lp + + sep #$20 ; Et les palettes + ldy abLASTLINE + lda [Third],y + ldx abCURRLINE + stal $019d00,x + rep #$20 + + lda abCURRLINE + cmp abLASTLINE + beq aboutMENU3 + inc abCURRLINE + bra aboutMENU2 + +aboutMENU3 lda Debut + sec + sbc #160 + sta Debut + cmp #$2000 + bcc aboutMENU4 + + jsr nextVBL + jsr nextVBL + jsr nextVBL + + lda abNBLINE + cmp #199 + beq aboutMENU4 + inc abNBLINE + bra aboutMENU1 + +aboutMENU4 rts + +*-------------------------------------- About Datas + +abNBLINE ds 2 +abCURRLINE ds 2 +abLASTLINE ds 2 diff --git a/thetinies/TCK.Docu.s b/thetinies/TCK.Docu.s new file mode 100644 index 0000000..c488312 --- /dev/null +++ b/thetinies/TCK.Docu.s @@ -0,0 +1,612 @@ + +************* DOCUMENTATION ***************** + +AFTA HEX 00AA0A000AAA0A000A00A0000A00AA000A000A00 ; A +AFTB HEX 0AAA0A000AAA0A000AAAA0000A00A0000A00A000 ; B +AFTC HEX 00AA0A000A000A0000AAA0000A0000000A00A000 ; C +AFTD HEX 0AAA0A000A000A000AAAA0000A000A000A00A000 ; D +AFTE HEX 0AAA0A000AAA0A000AAAAA00000000000000AA00 ; E +AFTF HEX 0AAA0A000AAA0A000A00AA000000000000000000 ; F +AFTG HEX 00AA0A000A000A0000AAA0000000AA000A00A000 ; G +AFTH HEX 0A000A000AAA0A000A000A000A00AA000A000A00 ; H +AFTI HEX 0AAA000A000A000A0AAAAA00000000000000AA00 ; I +AFTJ HEX 000A000000000A0000AAAA00A000A000A0000000 ; J +AFTK HEX 0A000A000AAA0A000A000A00A0000000A0000A00 ; K +AFTL HEX 0A000A000A000A000AAA0000000000000000AA00 ; L +AFTM HEX 0A000AA00A0A0A000A000A00AA000A000A000A00 ; M +AFTN HEX 0A000AA00A0A0A000A000A000A000A00AA000A00 ; N +AFTO HEX 00AA0A000A000A0000AAA0000A000A000A00A000 ; O +AFTP HEX 0AAA0A000AAA0A000A00A0000A00A00000000000 ; P +AFTQ HEX 00AA0A000A000A0000AAA0000A000A00A0000A00 ; Q +AFTR HEX 0AAA0A000AAA0A000A00A0000A00A000A0000A00 ; R +AFTS HEX 00AA0A0000AA00000AAAAA000000A0000A00A000 ; S +AFTT HEX 0AAA000A000A000A000AAA000000000000000000 ; T +AFTU HEX 0A000A000A000A0000AA0A000A000A000A00A000 ; U +AFTV HEX 0A000A0000A000A0000A0A000A00A000A0000000 ; V +AFTW HEX 0A000A000A0A0AA00A000A000A000A00AA000A00 ; W +AFTX HEX 0A0000A0000A00A00A000A00A0000000A0000A00 ; X +AFTY HEX 0A000A0000A0000A000A0A000A00A00000000000 ; Y +AFTZ HEX 0AAA0000000A00A00AAAAA00A00000000000AA00 ; Z +AFT0 HEX 00AA0A000A000A0000AAA0000A000A000A00A000 ; 0 +AFT1 HEX 000A00AA000A000A0AAA0000000000000000AA00 ; 1 +AFT2 HEX 0AAA000000AA0A000AAAA0000A00A0000000AA00 ; 2 +AFT3 HEX 0AAA0000000A00000AAAA0000A00A0000A00A000 ; 3 +AFT4 HEX 0A000A000A000AAA00000000A000A000AA00A000 ; 4 +AFT5 HEX 0AAA0A000AAA00000AAAAA000000A0000A00A000 ; 5 +AFT6 HEX 00AA0A000AAA0A0000AAAA000000A0000A00A000 ; 6 +AFT7 HEX 0AAA0000000A00A000A0AA00A000000000000000 ; 7 +AFT8 HEX 00AA0A0000AA0A0000AAA0000A00A0000A00A000 ; 8 +AFT9 HEX 00AA0A0000AA00000AAAA0000A00AA000A00A000 ; 9 +AFTPL HEX 000A000A0AAA000A000A00000000AA0000000000 ; + +AFTMOI HEX 000000000AAA0000000000000000AA0000000000 ; - +AFTET HEX 0A0A00AA0AAA00AA0A0A0A00A000AA00A0000A00 ; * +AFTSL HEX 00000000000A00A00A000A00A000000000000000 ; / +AFTEG HEX 00000AAA00000AAA00000000AA000000AA000000 ; = +AFTSO HEX 00000000000000000AAA0000000000000000AA00 ; _ +AFTPE HEX 000A000A000A0000000A00000000000000000000 ; ! +AFTPI HEX 00AA0A00000A0000000AA0000A00A00000000000 ; ? +AFTSU HEX 00A0000A0000000A00A000000000A00000000000 ; > +AFTIN HEX 0000000A00A0000A0000A000000000000000A000 ; < +AFTPO HEX 000A00A000A000A0000A00000000000000000000 ; ( +AFTPF HEX 000A000000000000000A0000A000A000A0000000 ; ) +AFTDP HEX 0000000A0000000A000000000000000000000000 ; : +AFTPT HEX 0000000000000000000A00000000000000000000 ; . +AFTVI HEX 0000000000000000000A000000000000A0000000 ; , +AFTRO HEX 00AA00A000AA00000000A000A000A00000000000 ; o +AFTGU HEX 00A000A0000000000000A000A000000000000000 ; " +AFTAP HEX 000A000A00000000000000000000000000000000 ; ' +AFTPV HEX 0000000000000000000A0000A0000000A0000000 ; ; +AFTDI HEX 00A00AAA00A00AAA00A0A000AA00A000AA00A000 ; # +AFTDO HEX 00AA0A0A00AA000A0AAAAA000000A0000A00A000 ; $ +AFTAC HEX 000A00A00A00000000000000A0000A0000000000 ; ^ +AFTPC HEX 0AA00AA0000A00A00A000A00A0000000AA00AA00 ; % +AFTSP HEX 0000000000000000000000000000000000000000 ; SPACE +AFTRD HEX 00AA0AAA0AAA0AAA00AAA000AA00AA00AA00A000 ; o +AFTBA HEX 0AA0A0000A0000A0AA00AA00A0A0AA00A000A000 ; SP +AFTFD HEX 000A000A0AAA000A000A0000A000AA00A0000000 ; -> +AFTFG HEX 000A00AA0AAA00AA000A00000000AA0000000000 ; <- +AFTNS HEX 0AAA0AAA0AAA0AAA0AAAAA00AA00AA00AA00AA00 ; NO SE + +AFT00 HEX 000A,00A0,00A0,00A0,000A,AA00,00A0,00A0,00A0,AA00 ; 0 +AFT11 HEX 0000,000A,0000,0000,00AA,A000,A000,A000,A000,AAA0 ; 1 +AFT22 HEX 00AA,0000,000A,00A0,00AA,AA00,00A0,AA00,0000,AAA0 ; 2 +AFT33 HEX 00AA,0000,0000,0000,00AA,AA00,00A0,AA00,00A0,AA00 ; 3 +AFT44 HEX 00A0,00A0,00A0,00AA,0000,0000,0A00,0A00,AAA0,0A00 ; 4 +AFT55 HEX 00AA,00A0,00AA,0000,00AA,AAA0,0000,AA00,00A0,AA00 ; 5 +AFT66 HEX 000A,00A0,00AA,00A0,000A,AAA0,0000,AA00,00A0,AA00 ; 6 +AFT77 HEX 00AA,0000,0000,000A,000A,AAA0,0A00,A000,0000,0000 ; 7 +AFT88 HEX 000A,00A0,000A,00A0,000A,AA00,00A0,AA00,00A0,AA00 ; 8 +AFT99 HEX 000A,00A0,000A,0000,00AA,AA00,00A0,AAA0,00A0,AA00 ; 9 + +AFTADR DA AFTA,AFTB,AFTC,AFTD,AFTE,AFTF,AFTG,AFTH,AFTI,AFTJ,AFTK,AFTL,AFTM,AFTN ; 0-13 + DA AFTO,AFTP,AFTQ,AFTR,AFTS,AFTT,AFTU,AFTV,AFTW,AFTX,AFTY,AFTZ ; 14-25 + DA AFT0,AFT1,AFT2,AFT3,AFT4,AFT5,AFT6,AFT7,AFT8,AFT9 ; 26-36 + DA AFTPL,AFTMOI,AFTET,AFTSL,AFTEG ; 37-41 + DA AFTSO,AFTPE,AFTPI,AFTSU,AFTIN,AFTPO,AFTPF,AFTDP,AFTPT,AFTVI,AFTRO ; 42-52 + DA AFTGU,AFTAP,AFTPV,AFTDI,AFTDO,AFTAC,AFTPC,AFTSP ; 53-60 + DA AFTA,AFTB,AFTC,AFTD,AFTE,AFTF,AFTG,AFTH,AFTI,AFTJ,AFTK,AFTL,AFTM,AFTN ; 61-74 + DA AFTO,AFTP,AFTQ,AFTR,AFTS,AFTT,AFTU,AFTV,AFTW,AFTX,AFTY,AFTZ ; 75-86 + DA AFTRD ; 87 + DA AFT00,AFT11,AFT22,AFT33,AFT44,AFT55,AFT66,AFT77,AFT88,AFT99 ; 88-98 + +AFTTBL HEX C1C2C3C4C5C6C7C8C9CACBCCCDCECFD0D1D2D3D4D5D6D7D8D9DA ; A-Z + HEX B0,B1,B2,B3,B4,B5,B6,B7,B8,B9 ; 0-9 + HEX AB,AD,AA,AF,BD,DF,A1,BF,BE,BC,A8,A9,BA,AE,AC ; +-*/=_!?><():., + HEX DB,A2,A7,BB,A3,A4,DE,A5,A0 ; o"';#$^%SPC + HEX E1E2E3E4E5E6E7E8E9EAEBECEDEEEFF0F1F2F3F4F5F6F7F8F9FA ; a-z + +**************************** AFFICHAGE TEXT ********************************** + +******** AFFICHE PAGE ************ + +AFTPAG JSR AFTNE ; NETTOY + LDA #$0000 +AFTPAG1 JSR AFTLIG ; AFFICHE 27 LIGNES + INC + CMP #$001B ; 27 + BNE AFTPAG1 + RTS + +******** AFFICHE LIGNE ************ + +AFTLIG PHA ; RECOIT DANS A LE NUMERO DE LA LIGNE + ASL + TAX + LDA AFTTADLI,X + STA AFTAE ; OFFSET ADRESSE ECRAN DEBUT LIGNE + LDA AFTTABM,X + STA AFTLIG0+1 ; OFFSET DU CARACTERE DANS SA PAGE + + LDA AFTIND + ASL + TAX + LDA AFTTADPT,X ; OFFSET DE LA PAGE DANS LE TEXTE + CLC +AFTLIG0 ADC #$AAAA + TAY ; OFFSET DU CARACTERE DANS LE TEXTE +AFTLIG1 LDA TEXTEFRD,Y + AND #$00FF + CMP #$008D + BEQ AFTLIG5 ; FIN DE LIGNE DETECTE + STA AFTLIG3+1 + + LDX #$0000 +AFTLIG2 LDA AFTTBL,X + AND #$00FF +AFTLIG3 CMP #$AAAA + BEQ AFTLIG4 ; CARACTERE TROUVE + INX + CPX #$0062 + BNE AFTLIG2 + LDX #$0056 ; PAS TROUVE : ON MET UN BLANC +AFTLIG4 JSR AFTCAR ; AFFICHE CARACTERE + LDA AFTAE ; ADRESSE ECRAN CARACTERE SUIVANT + CLC + ADC #$0003 + STA AFTAE + INY + BRA AFTLIG1 +AFTLIG5 PLA + RTS + +******** AFFICHE CARACTERE ******** + +AFTCAR PHY ; RECOIT DANS X L'INDICE DU CARACTERE + TXA + ASL + TAX + LDA AFTADR,X + STA AFTCAR2+1 + CLC + ADC #$000A + STA AFTCAR4+1 + LDX AFTAE ; 1 ere COLONNE + LDY #$0000 ; +AFTCAR2 LDA $AAAA,Y + STAL $012000,X ; PROUT + TXA + CLC + ADC #$00A0 + TAX ; LIGNE SUIVANTE + INY + INY + CPY #$000A + BNE AFTCAR2 + LDX AFTAE ; 2 eme COLONNE + INX + INX + LDY #$0000 +AFTCAR4 LDA $AAAA,Y + STAL $012000,X ; PROUT + TXA + CLC + ADC #$00A0 + TAX ; LIGNE SUIVANTE + INY + INY + CPY #$000A + BNE AFTCAR4 + PLY + RTS + +********** NETTOYAGE DE LA PAGE + +AFTNE RTS + +*************** TABLES, VARIABLES ET FLAGS ****************** + +AFTAE HEX 0000 ; ADRESSE ECRAN ECRITURE +AFTIND HEX 0000 ; INDEX PAGES + +AFTTADPT HEX 0000,6105,C20A,2310,8415,E51A,4620,A725 ; OFFSET DU 1er CARACTERE DES DEBUTS DE PAGE + HEX 2002,4004,6006,8008,A00A,C00C,E00E,0011,2013 ; OFFSET DU 1er CARACTERE DES DEBUTS DE PAGE + HEX 4015,6017,8019,A01B,C01D,E01F,0022,2024,4026,6028 + +AFTTADLI HEX 0405,C408,840C,4410,0414,C417,841B,441F,0423,C426,842A,442E ; ADRESSE ECRAN DEBUT DE LIGNE + HEX 0432,C435,8439,443D,0441,C444,8448,444C,0450,C453,8457,445B + HEX 045F,C462,8466,446A,046E,C471,8475 + +AFTTABM HEX 0000 ; OFFSET DES DEBUTS DE LIGNE DANS UNE PAGE + HEX 3300,6600,9900,CC00,FF00 + HEX 3201,6501,9801,CB01,FE01 + HEX 3102,6402,9702,CA02,FD02 + HEX 3003,6303,9603,C903,FC03 + HEX 2F04,6204,9504,C804,FB04 + HEX 2E05,6105,9405,C705,FA05 + HEX 2D06,6006,9306,C606,F906 + +****************.. TEXTE ......................***************** + +TEXTEFRD ASC " ",8D + ASC " ",8D + ASC " Tinies Construction Kit ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC " TCK vous permet de concevoir de nouveaux",8D + ASC "tableaux pour Tinies GS. ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC "Chaque tableau est un damier de 13*8 compose de",8D + ASC "deux niveaux : ",8D + ASC " ",8D + ASC " ",8D + ASC " - le sol (murs, sols). ",8D + ASC " ",8D + ASC " ",8D + ASC " - les objets (fleche, sleeper, teleporteur",8D + ASC " interrupteur, porte, puncher, bombe,",8D + ASC " joker, montre, coeur, Tinies...). ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC "Nous vous conseillons de commencer par construire",8D + ASC "le sol et ensuite d'y placer les objets. ",8D + ASC " ",8D + + ASC " ",8D + ASC "Description du logiciel : ",8D + ASC "----------------------- ",8D + ASC " ",8D + ASC " ",8D + ASC " Sur la droite de l'ecran se trouve la barre de",8D + ASC "commande : ",8D + ASC " ",8D + ASC " ",8D + ASC " - Cliquez sur 'TIME' pour modifier le temps",8D + ASC " imparti pour le tableau. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Cliquez sur 'LEVEL' pour selectionner le",8D + ASC " niveau a editer. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Cliquez sur 'PLAY' pour tester le niveau",8D + ASC " courant. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Cliquez sur 'SELECT' ou sur le motif pour",8D + ASC " selectionner un sol ou un objet. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Cliquez sur '^/v' pour basculer le mode",8D + ASC " sol/objet. ",8D + + ASC " ",8D + ASC " - Cliquez sur 'MENU' pour acceder aux options",8D + ASC " ",8D + ASC " - LOAD FILE : charge le fichier de",8D + ASC " description des tableaux. ",8D + ASC " ",8D + ASC " - SAVE FILE : sauvegarde le fichier de",8D + ASC " description des tableaux. ",8D + ASC " ",8D + ASC " - CUT : copie le tableau dans le",8D + ASC " presse-papiers. ",8D + ASC " ",8D + ASC " - PASTE : remplace le tableau par le",8D + ASC " contenu du presse-papiers.",8D + ASC " ",8D + ASC " - ABOUT : ecran d'information. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Cliquez sur 'DOCU' pour lire la documentation",8D + ASC " ",8D + ASC " ",8D + ASC " - Cliquez sur 'QUIT' pour quitter le logiciel. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Cliquez sur '<' ou '>' pour deplacer la barre",8D + ASC " de commande. ",8D + ASC " ",8D + + ASC " ",8D + ASC " ",8D + ASC " - Cliquez dans la zone quadrillee pour y mettre",8D + ASC " un sol ou un objet. ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC "Commandes clavier : ",8D + ASC "------------------ ",8D + ASC " ",8D + ASC " ",8D + ASC " - Appuyer sur la barre d'espace est equivalent ",8D + ASC " a cliquer sur select. Tres utile lorsqu'on",8D + ASC " construit un tableau : pas besoin d'aller",8D + ASC " sans cesse cliquer dans la barre de commande",8D + ASC " ",8D + ASC " ",8D + ASC " - Appuyez sur pomme ouverte et cliquez dans la",8D + ASC " zone quadrillee pour enlever un sol ou un",8D + ASC " objet (seule maniere d'effacer un objet). ",8D + ASC " ",8D + ASC " ",8D + ASC " - Les fleches <- et -> correspondent aux",8D + ASC " boutons < et > pour deplacer la barre de",8D + ASC " commande. ",8D + ASC " ",8D + ASC " ",8D + + ASC "Remarques : ",8D + ASC "---------- ",8D + ASC " ",8D + ASC " - En mode sol (^/v pour changer de mode), vous",8D + ASC " ne verrez dans la zone quadrillee que les",8D + ASC " elements constituant le sol (sol et mur).",8D + ASC " En mode objet vous verrez a la fois les",8D + ASC " objets et les sols. Vous ne pouvez pas poser",8D + ASC " d'objet sur les murs ou sur du vide. Vous ne",8D + ASC " pouvez pas superposer des objets. Si vous",8D + ASC " choisissez certains objets (sleeper, Tinies,",8D + ASC " teleporteur...) vous aurez a specifier la",8D + ASC " couleur. Si en mode SOL, vous placez un sol",8D + ASC " ou un mur sur un objet celui ci est detruit.",8D + ASC " ",8D + ASC " ",8D + ASC " - Il n'y a pas de limitation au nombre d'objet",8D + ASC " que vous pouvez placer. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Si vous testez le tableau, les touches de",8D + ASC " deplacement sont 8, 4, 6, 2 et 0 pour",8D + ASC " selectionner. S'il y a plus de Tinies que de",8D + ASC " sleepers de la meme couleur, le programme",8D + ASC " vous le signalera. Pour revenir a l'edition",8D + ASC " du tableau quand vous etes en train de jouer",8D + ASC " appuyez sur ESC. ",8D + + ASC " ",8D + ASC " ",8D + ASC " - Le fait de changer de tableau n'altere pas",8D + ASC " les modifications que vous venez de faire au",8D + ASC " tableau precedent. L'option SAVE sauvegarde",8D + ASC " la description de tous les tableaux. ",8D + ASC " ",8D + ASC " ",8D + ASC " - L'option CUT/PASTE permet de faire du copier",8D + ASC " coller entre les differents decors. Cette",8D + ASC " option s'applique a l'integralite du tableau",8D + ASC " ",8D + ASC " ",8D + ASC " - Le fichier contenant la description des",8D + ASC " tableaux s'appelle TINIES.TAB2, si vous",8D + ASC " voulez editer les tableaux originaux de",8D + ASC " TINIES, renommez le fichier TINIES.TAB",8D + ASC " present sur la diskette de Tinies en",8D + ASC " TINIES.TAB2 ",8D + ASC " ",8D + ASC " --------------------- ",8D + ASC " ",8D + ASC " SI VOUS AVEZ CREE DES NOUVEAUX TABLEAUX",8D + ASC "INTERESSANTS, N'HESITEZ PAS A NOUS LES ENVOYER.",8D + ASC "QUAND NOUS EN AURONS SUFFISAMMENT, NOUS EDITERONS",8D + ASC "DES DISQUETTES DE TABLEAUX. ",8D + ASC " ",8D + + ASC " ",8D + ASC " MERCI A ALAIN MOREL POUR LES 21 PREMIERS NIVEAUX.",8D + ASC " ",8D + ASC " ",8D + ASC " TOUTES NOS ANCIENNES PRODUCTIONS : ",8D + ASC " ",8D + ASC " ",8D + ASC " BILLE ART, THE TINIES, OPALE DEMO, COGITO, ",8D + ASC " SYSTEME 6.01 VF, PICVIEWER, CONVERT2DG, ",8D + ASC " TINIES CONSTRUCTION KIT, BLOCKADE ",8D + ASC " ",8D + ASC " ",8D + ASC " SONT DISPONIBLES AUPRES DU GS CLUB. ",8D + ASC " ",8D + ASC " ",8D + ASC " VOUS POUVEZ NOUS CONTACTER : ",8D + ASC " ",8D + ASC " ",8D + ASC " BRUTAL DELUXE SOFTWARE ",8D + ASC " 11 RUE EMILE FOURCAND ",8D + ASC " 33000 BORDEAUX ",8D + ASC " FRANCE ",8D + ASC " ",8D + ASC " 3615 RTEL, BAL : BRUTAL DELUXE ",8D + ASC " ",8D + ASC " INTERNET : ZARDINI&IXL.U-BORDEAUX.FR ",8D + ASC " ",8D + dfb 00 + +TEXTEUSD ASC " ",8D + ASC " ",8D + ASC " Tinies Construction Kit ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC "TCK allows you to create new levels for Tinies GS.",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC "Each level is composed of a 13*8 map made of",8D + ASC "two levels: ",8D + ASC " ",8D + ASC " ",8D + ASC " - the background (walls, grounds). ",8D + ASC " ",8D + ASC " ",8D + ASC " - the objects (arrow, sleeper, teleporter",8D + ASC " switch, door, puncher, bomb, joker,",8D + ASC " watch, life, Tinies...). ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC "We advise you to create the background first and",8D + ASC "then to put the objects. ",8D + ASC " ",8D + + ASC " ",8D + ASC "Game description : ",8D + ASC "---------------- ",8D + ASC " ",8D + ASC " ",8D + ASC "On the right side of the screen is the command",8D + ASC "bar: ",8D + ASC " ",8D + ASC " ",8D + ASC " - Click on 'TIME' to change the time which is",8D + ASC " preset for each level. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Click on 'LEVEL' to select a new level to",8D + ASC " edit. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Click on 'PLAY' to test the current level. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Click on 'SELECT' or on the pattern to select",8D + ASC " a background or an object. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Click on '^/v' to exchange the background/",8D + ASC " object mode. ",8D + ASC " ",8D + + ASC " ",8D + ASC " - Click on 'MENU' to access the options: ",8D + ASC " ",8D + ASC " - LOAD FILE : loads the file containing",8D + ASC " the levels data. ",8D + ASC " ",8D + ASC " - SAVE FILE : saves the file containing",8D + ASC " the levels data. ",8D + ASC " ",8D + ASC " - CUT : copy the level into the",8D + ASC " clipboard. ",8D + ASC " ",8D + ASC " - PASTE : replace the level with the",8D + ASC " content of the clipboard. ",8D + ASC " ",8D + ASC " - ABOUT : informative screen. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Click on 'DOCU' to read the documentation. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Click on 'QUIT' to quit the editor. ",8D + ASC " ",8D + ASC " ",8D + ASC " - Click on '<' or '>' to move the command bar. ",8D + ASC " ",8D + ASC " ",8D + + ASC " ",8D + ASC " ",8D + ASC " - Click on the cross-ruled area to put a",8D + ASC " background or an object. ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC "Keyboard commands : ",8D + ASC "----------------- ",8D + ASC " ",8D + ASC " ",8D + ASC " - Pressing SPACEBAR is the same as clicking",8D + ASC " on SELECT. It is useful when building a",8D + ASC " level: no need to click on the command bar. ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC " - Pressing OpenApple and clicking on the",8D + ASC " cross-ruled area puts a background or an",8D + ASC " object away (only way to replace a pattern).",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC " - The arrows <- and -> are equivalent to the",8D + ASC " '<' and '>' buttons of the command bar. ",8D + ASC " ",8D + ASC " ",8D + + ASC "Things To Say : ",8D + ASC "------------- ",8D + ASC " ",8D + ASC " - In the background mode (^/v to change), you",8D + ASC " will only see the background patterns on the",8D + ASC " cross-ruled area (background and wall). ",8D + ASC " In the object mode, you will see the",8D + ASC " backgrounds and the objects. You cannot put",8D + ASC " an object onto walls or anything. You cannot",8D + ASC " put an object onto another one. ",8D + ASC " If you choose some objects (sleeper, Tinies,",8D + ASC " teleporter...) you will have to specify its",8D + ASC " color. If you put a background or a wall on",8D + ASC " an object in the background mode, it will be",8D + ASC " replaced by the background or the wall. ",8D + ASC " ",8D + ASC " ",8D + ASC " - There are no limitations of the number of",8D + ASC " patterns you can put on the level. ",8D + ASC " ",8D + ASC " ",8D + ASC " - If you test a level, the keys for moving the",8D + ASC " cursor are 8, 4, 6, 2 and 0 to select.",8D + ASC " If there are more Tinies than sleepers of",8D + ASC " the same color, the program will tell it.",8D + ASC " To return editing the level, press ESC. ",8D + ASC " ",8D + + ASC " ",8D + ASC " ",8D + ASC " - Choosing a level does not modify the changes",8D + ASC " of the previous level. The SAVE option",8D + ASC " saves the data of all the levels. ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC " - The CUT/PASTE option allows to cut/paste",8D + ASC " between the different backgrounds. This",8D + ASC " option works for the whole level. ",8D + ASC " ",8D + ASC " ",8D + ASC " ",8D + ASC " - The file containing the levels data is",8D + ASC " TINIES.TAB2, if you want to edit the",8D + ASC " original levels of TINIES, rename the file",8D + ASC " TINIES.TAB of the disk Tinies as TINIES.TAB2",8D + ASC " ",8D + ASC " ",8D + ASC " --------------------- ",8D + ASC " ",8D + ASC " ",8D + ASC " IF YOU HAVE CREATED NEW INTERESTING LEVELS,",8D + ASC "CONTACT US AND WHEN WE HAVE ENOUGH, WE WILL MAKE",8D + ASC "DISKS OF LEVELS. ",8D + ASC " ",8D + + ASC " ",8D + ASC " THANKS TO ALAIN MOREL FOR THE FIRST 21 LEVELS. ",8D + ASC " ",8D + ASC " ",8D + ASC " ALL OF OUR PREVIOUS PRODUCTIONS : ",8D + ASC " ",8D + ASC " ",8D + ASC " BILLE ART, THE TINIES, OPALE DEMO, ",8D + ASC " COGITO, PICVIEWER, CONVERT2DG, ",8D + ASC " TINIES CONSTRUCTION KIT, BLOCKADE ",8D + ASC " ",8D + ASC " ARE AVAILABLE ON FTP.CCO.CALTECH.EDU FTP SITE. ",8D + ASC "IF YOU ARE A SHAREWARE SOLUTION II SUBSCRIBER, YOU",8D + ASC "CAN ASK JOE KOHN FOR THESE SOFTWARES. ",8D + ASC " ",8D + ASC " ",8D + ASC " YOU CAN CONTACT US : ",8D + ASC " ",8D + ASC " ",8D + ASC " BRUTAL DELUXE SOFTWARE ",8D + ASC " 11 RUE EMILE FOURCAND ",8D + ASC " 33000 BORDEAUX ",8D + ASC " FRANCE ",8D + ASC " ",8D + ASC " ",8D + ASC " INTERNET : ZARDINI&IXL.U-BORDEAUX.FR ",8D + ASC " ",8D + dfb 00 diff --git a/thetinies/TCK.Main.s b/thetinies/TCK.Main.s new file mode 100644 index 0000000..e2fb676 --- /dev/null +++ b/thetinies/TCK.Main.s @@ -0,0 +1,3118 @@ +* +* TCK: Olivier +* + + LDX #$7FFE ; NETTOY ECRAN + LDA #$0000 +LP1 STAL $012000,X + DEX + DEX + BPL LP1 + +ADR LDA ptrTCK1+1 ; MISE A JOUR DES ADRESSES + AND #$FF00 + STA ADR1+1 + STA ADR2+1 + LDA SPMSKTAB2+1 + AND #$00FF +ADR1 ORA #$FF00 + STA SPMSKTAB2+1 + LDA SPMSKTAB2+4 + AND #$00FF +ADR2 ORA #$FF00 + STA SPMSKTAB2+4 + LDA ptrNIV+1 + AND #$FF00 + STA ADR3+1 + LDA ptrTCK2+1 + AND #$FF00 + STA ADR4+1 + LDY #$0000 ; ADRESSE DES SPRITES SANS MASQUE + LDX #$0003 +ADR0 LDA SPMSKTAB2+11,Y + AND #$00FF +ADR3 ORA #$FF00 + STA SPMSKTAB2+11,Y + LDA SPMSKTAB2+14,Y + AND #$00FF +ADR4 ORA #$FF00 + STA SPMSKTAB2+14,Y + TYA + CLC + ADC #$000A + TAY + DEX + BPL ADR0 + LDA ptrTCK2+1 ; ADRESSE SPRITE2 : TCK2 + STA AFFSPR4+2 + STZ AFFSPR4+1 + STA AFFZONE2+2 + STA COPYBL00+1 + STA COPYBL2+1 + STA COPYBL3+1 + STA COPYBLN+1 + LDA ptrNIV+1 ; ADRESSE NIVEAU : NIV02 + STA COPYBL0+1 + STA COPYBL1+1 + STA COPYBL4+1 + STA COPYBLN0+1 + STA COPYBL8+1 + LDA ptrTAB+1 ; ADRESSE TABLE DE DESCRIPTION + STA COPYLVL1+2 + STA COPYDES2+2 + + LDA fgLANG + BNE LANGUE2 + + LDX #$0086 +LANGUE1 LDA ERRMESU,X ; MESSAGE ERREUR EN ANGLAIS + STA ERRMES1,X + DEX + DEX + BPL LANGUE1 + + LDA #TEXTEUSD ; DOCUMENTATION EN ANGLAIS + STA AFTLIG1+1 + +LANGUE2 LDA #$0000 + STA POSX + STA POSY + STA A1 ; INIT SOURIS + STA AP + JSR SAUV ; SAUVEGARDE DECOR + JSR DESS + + JSR MAKESPR ; CREATION PLANCHE SPRITE2 AVEC PALETTE ET ZONE ROSE + + LDA #$0000 + JSR COPYLVL ; COPIE DE LA TABLE DE DESCRIPTION DU NIVEAU A + JSR CONVLVL ; CONVERTI LES VALEURS + + LDA LEVEL ; GESTION DU TEMPS + STA level + JSR doTIME + LDA minutes + STA TIMEMIN + LDA secondes + STA TIMESEC + + LDA #$0002 + JMP PICT ; IMAGE PRINCIPALE (MENU DROITE) + +***************************************************************************** +**************************** MOUSE MANAGER ******************************** +***************************************************************************** + +SOURIS LDA BOUT ; ANCIEN BOUT=NOUVEAU BOUT + STA BOUT1 + +SOURIS0 JSR SLECT ; LECTURE SOURIS + CPY #$FFFF + BEQ SECR ; DONNEES NON DISPONIBLES + +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 LDAL $00BFFF + BPL KEYBOAR1 + STAL $00C010 ; BIT $C010 + TAX ; SAUVEGARDE + LDA ECRAN + CMP #$0003 + BPL KEYBOAR4 + TXA ; RECUP + AND #$FF00 + CMP #$A000 ; BARRE ESPACE + BNE KEYBOAR5 + PLA ; RECUPERE L'ADRESSE DE RETOUR DU JSR + JSR DESS1 + LDA MAISELE + BEQ KEYBOAR2 + LDA #$0006 + JMP PICT1 +KEYBOAR2 LDA #$0005 + JMP PICT1 +KEYBOAR5 CMP #$9500 ; FLECHE -> ET <- + BEQ KEYBOAR6 + CMP #$8800 ; <- + BNE KEYBOAR1 + PLA ; RECUPERE L'ADRESSE DU JSR + JSR DESS1 + JMP ECR0181 ; <- +KEYBOAR6 PLA + JSR DESS1 + JMP ECR0191 ; -> +KEYBOAR1 RTS +KEYBOAR4 CMP #$0005 ; 5,6 -> OK + BEQ KEYBOAR3 + CMP #$0006 + BEQ KEYBOAR3 + RTS +KEYBOAR3 TXA ; LA BARRE D'ESPACE FAIT DISPARAITRE LE MENU + AND #$FF00 + CMP #$A000 ; BARRE ESPACE ? + BNE KEYBOAR1 + PLA ; RECUP LE JSR + JSR DESS1 + LDA DROITE ; REVIENT AU MAIN + JMP PICT1 + +BORD5 LDAL $00C034 ; ICI TRAITEMENT PAR DEFAUT + AND #$FFF0 ; BORDURE NOIRE + STAL $00C034 +BORD55 RTS + +BORD6 LDAL $00C034 + AND #$FFF0 + ORA #$0001 ; ROUGE + STAL $00C034 + RTS + +**************** MAIN + +ECR0100 LDX SECR2+1 ; MAIN : TIME + LDA #ECR0101 + STA BUMPER5+1 + JMP BUMPER +ECR0101 NOP + LDA #$0003 + JMP PICT1 + +ECR0110 LDX SECR2+1 ; MAIN : LEVEL + LDA #ECR0111 + STA BUMPER5+1 + JMP BUMPER +ECR0111 NOP + LDA LEVEL + STA OLDLEVEL ; SAUVEGARDE LE LEVEL COURANT + LDA #$0004 + JMP PICT1 + +ECR0120 LDX SECR2+1 ; MAIN : PLAY + LDA #ECR0121 + STA BUMPER5+1 + JMP BUMPER +ECR0121 NOP + JSR VERIFOK + BCC ECR0122 + LDA #$000B ; ATTENTION PROBLEME + JMP PICT1 +ECR0122 LDA TIMEMIN ; ROUTINE DE PLAY + STA minutes + LDA TIMESEC + STA secondes + JSR putTIME ; BOGUE + LDA LEVEL + STA level + JSR putTIME + JSR CONVBUF ; MISE A JOUR DE LA DESCRIPTION DU NIVEAU + LDA LEVEL ; PLACE L'ANCIEN NIVEAU DANS LE TABLEAU + JSR COPYDES + LDX #$00CE +ECR0123 LDA LEVELBUF,X + STA plateau5,X + DEX + DEX + BPL ECR0123 + JMP tiniesPLAY + +ECR0130 LDX SECR2+1 ; MAIN : SELECT + LDA #ECR0131 + STA BUMPER5+1 + JMP BUMPER +ECR0131 NOP + LDA MAISELE + BEQ ECR0132 + LDA #$0006 + JMP PICT1 +ECR0132 LDA #$0005 + JMP PICT1 + +MAISELE HEX 0000 ; 0:GROUND,1:ITEM + +ECR0140 LDX SECR2+1 ; MAIN : v/^ + LDA #ECR0141 + STA BUMPER5+1 + JMP BUMPER +ECR0141 NOP + LDA MAISELE + BEQ ECR0142 + STZ MAISELE + LDA GRZONE + JSR SEBLCKG ; GROUND + LDA DROITE + JMP PICT1 +ECR0142 LDA #$0001 + STA MAISELE + LDA ITZONE + JSR SEBLCKI ; ITEM + LDA DROITE + JMP PICT1 + +ECR0150 LDX SECR2+1 ; MAIN : MENU + LDA #ECR0151 + STA BUMPER5+1 + JMP BUMPER +ECR0151 NOP + LDA #$0008 + JMP PICT1 + +ECR0160 LDX SECR2+1 ; MAIN : DOCU + LDA #ECR0161 + STA BUMPER5+1 + JMP BUMPER +ECR0161 NOP + JSR fadeOUT ; FADE ET AFFICHAGE DE L'ECRAN DOCUMENTATION + LDA ptrDOC+1 + LDY #$0000 + JSR fadeIN + LDA #$0009 + JMP PICT1 + +ECR0170 LDX SECR2+1 ; MAIN : QUIT + LDA #ECR0171 + STA BUMPER5+1 + JMP BUMPER +ECR0171 NOP + LDA #$000A + JMP PICT1 + +ECR0180 LDX SECR2+1 ; MAIN : < + LDA #ECR0181 + STA BUMPER5+1 + JMP BUMPER +ECR0181 NOP + LDA DROITE + CMP #$0001 + BEQ ECR0182 + JSR CLNDROIT ; NETTOY + LDA #$0001 + STA DROITE + JMP PICT1 +ECR0182 JMP SOURIS1 + +ECR0190 LDX SECR2+1 ; MAIN : > + LDA #ECR0191 + STA BUMPER5+1 + JMP BUMPER +ECR0191 NOP + LDA DROITE + CMP #$0002 + BEQ ECR0192 + JSR CLNGAUCH ; NETTOY + LDA #$0002 + STA DROITE + JMP PICT1 +ECR0192 JMP SOURIS1 + +ECR01A0 LDX SECR2+1 ; SURFACE QUADRILLEE GAUCHE + LDA #ECR01A1 + STA BUMPER5+1 + JMP BUMPER +ECR01A1 NOP + LDA POSX + SEC + SBC #$0004 ; 4 + TAX + LDA ZONESCR,X + AND #$00FF + DEC + STA SCRZONE + LDA POSY + SEC + SBC #$0004 ; 4 + TAX + LDA ZONESCR,X + AND #$00FF + DEC + ASL + TAX + LDA MULTREIZ,X ; *13 + CLC + ADC SCRZONE + STA SCRZONE ; OFFSET + JSR PLACEBUF ; PLACE LE CODE DANS GROUBUF OU DANS ITEMBUF + LDA SCRZONE + JSR SEBLCKS ; AFFICHAGE DU SPRITE DANS LA GRILLE +ECR01A2 JSR WAITVBL ; REDESSINE LA GRILLE + JSR GRILHM + JSR GRILVM + JSR GRILHG + JSR GRILVG + JSR EFFDROIT ; BANDE NOIRE + JSR SAUV + JMP SOURIS1 + +ECR01B0 LDX SECR2+1 ; SURFACE QUADRILLEE DROITE + LDA #ECR01B1 + STA BUMPER5+1 + JMP BUMPER +ECR01B1 NOP + LDA POSX + SEC + SBC #$0034 ; 52 + TAX + LDA ZONESCR,X + AND #$00FF + INC ; ++ + STA SCRZONE + LDA POSY + SEC + SBC #$0004 ; 4 + TAX + LDA ZONESCR,X + AND #$00FF + DEC + ASL + TAX + LDA MULTREIZ,X ; *13 + CLC + ADC SCRZONE + STA SCRZONE + JSR PLACEBUF ; PLACE LE CODE DE L'OBJET DANS GROUBUF OU ITEMBUF + LDA SCRZONE + JSR SEBLCKS ; AFFICHAGE DU SPRITE DANS LA GRILLE +ECR01B2 JSR WAITVBL ; GRILLE + JSR GRILHM + JSR GRILVM + JSR GRILHD + JSR GRILVD + JSR EFFGAUCH ; BANDE NOIRE + JSR SAUV + JMP SOURIS1 + +SCRZONE HEX 0000 +DROITE HEX 0200 +MULTREIZ HEX 0000,0D00,1A00,2700,3400,4100,4E00,5B00,6800 + +PLACEBUF LDAL $00C025 ; PLACE LE CODE DE L'OBJET DANS GROUBUF OU ITEMBUF + AND #$0080 + BEQ PLACEBU3 ; BIT 7=1 TOUCHE POMME ENFONCE +************* ENLEVE + LDA SCRZONE ; ON ENLEVE L'OBJET DES BUFFERS + ASL + TAX + LDA MAISELE + BNE PLACEBU4 +************* ENLEVE GROUND + LDA GRZONE + PHA + LDA #$0031 ; GROUND + STA GROUBUF,X + STA ITEMBUF,X + STA GRZONE + LDA SCRZONE + JSR SEBLCKS ; AFFICHE DU NOIR + PLA + STA GRZONE + PLA + LDA DROITE + CMP #$0001 + BNE PLACEBU5 + JMP ECR01B2 ; +PLACEBU5 JMP ECR01A2 +************* ENLEVE ITEM +PLACEBU4 LDA ITEMBUF,X ; ENLEVE L'ITEM + BEQ PLACEBU6 + CMP #$0031 + BEQ PLACEBU6 ; ON VERIFIE QU'IL Y AIT BIEN UN OBJET A ENLEVER + LDA #$0031 + STA ITEMBUF,X + LDA ITZONE + PHA + LDA GROUBUF,X + STA ITZONE + LDA SCRZONE ; DESSINE LE SOL DESSUS + JSR SEBLCKS ; AFFICHE + PLA + STA ITZONE + PLA ; RECUPERE L'ADRESSE DU RTS + LDA DROITE + CMP #$0001 + BEQ PLACEBU7 + JMP ECR01A2 ; REDESSINE LA GRILLE +PLACEBU7 JMP ECR01B2 +PLACEBU6 JMP SOURIS1 +************* PLACE +PLACEBU3 LDA SCRZONE ; ET VERIFIE AU PASSAGE + ASL + TAX + LDA MAISELE + BEQ PLACEBU1 +************* PLACE ITEM + LDA GROUBUF,X ; ITEM + CMP #$0007 + BEQ PLACEBU2 + CMP #$0004 + BMI PLACEBU2 + PLA ; INTERDICTION DE POSER UN OBJET SUR UN MUR + JMP SOURIS1 +PLACEBU2 LDA ITZONE + STA ITEMBUF,X + RTS +************* PLACE GROUND +PLACEBU1 LDA GRZONE ; GROUND + STA GROUBUF,X + LDA #$0031 + STA ITEMBUF,X ; ON ENLEVE L'OBJET + RTS + +************* TIME + +ECR0300 LDX SECR2+1 ; TIME : << + LDA #ECR0301 + STA BUMPER5+1 + JMP BUMPER +ECR0301 NOP + LDA TIMEMIN ; MINUTE -- + BEQ ECR0302 + DEC + STA TIMEMIN + JSR AFFTIMM ; AFFICHAGE TIME +ECR0302 JMP SOURIS1 + +ECR0310 LDX SECR2+1 ; TIME : >> + LDA #ECR0311 + STA BUMPER5+1 + JMP BUMPER +ECR0311 NOP ; MINUTE ++ + LDA TIMEMIN + CMP #$003B ; 59 + BEQ ECR0312 + INC + STA TIMEMIN + JSR AFFTIMM ; AFFICHAGE TIME +ECR0312 JMP SOURIS1 + +ECR0320 LDX SECR2+1 ; TIME : < + LDA #ECR0321 + STA BUMPER5+1 + JMP BUMPER +ECR0321 NOP ; SECONDE -- + LDA TIMESEC + BEQ ECR0322 + DEC + STA TIMESEC + JSR AFFTIMM ; AFFICHAGE TIME +ECR0322 JMP SOURIS1 + +ECR0330 LDX SECR2+1 ; TIME : > + LDA #ECR0331 + STA BUMPER5+1 + JMP BUMPER +ECR0331 NOP ; SECONDE ++ + LDA TIMESEC + CMP #$003B ; 59 + BEQ ECR0332 + INC + STA TIMESEC + JSR AFFTIMM ; AFFICHAGE TIME +ECR0332 JMP SOURIS1 + +ECR0340 LDX SECR2+1 ; TIME : OK + LDA #ECR0341 + STA BUMPER5+1 + JMP BUMPER +ECR0341 NOP + JSR CLNTIME ; NETTOY + LDA DROITE + JMP PICT1 + +TIMEMIN HEX 0000 +TIMESEC HEX 0000 +TIMEMIND HEX 0000 +TIMEMINU HEX 0000 +TIMESECD HEX 0000 +TIMESECU HEX 0000 + +AFFTIMG LDA #TIMECO1 + STA AFFTIM2+1 + BRA AFFTIM +AFFTIMM LDA #TIMECO2 + STA AFFTIM2+1 + BRA AFFTIM +AFFTIMD LDA #TIMECO3 + STA AFFTIM2+1 + +AFFTIM LDA TIMEMIN ; MINUTE + ASL + TAX + LDA HEXDEC,X + XBA + AND #$00FF + STA TIMEMINU + LDA HEXDEC,X + AND #$00FF + STA TIMEMIND + LDA TIMESEC ; SECONDE + ASL + TAX + LDA HEXDEC,X + XBA + AND #$00FF + STA TIMESECU + LDA HEXDEC,X + AND #$00FF + STA TIMESECD + LDY #$0000 +AFFTIM1 LDA TIMEMIND,Y ; AFFICHAGE + CLC + ADC #$001A + TAX +AFFTIM2 LDA TIMECO1,Y + STA AFTAE + JSR AFTCAR ; AFFICHE MIN DIZAINE + INY + INY + CPY #$0008 + BNE AFFTIM1 + RTS + +MAJTIME LDA OLDLEVEL ; MISE A JOUR DU TEMPS + STA level + LDA TIMEMIN ; SAUVEGARDE DE L'ANCIEN + STA minutes + LDA TIMESEC + STA secondes + JSR putTIME + LDA LEVEL ; CHARGE LE NOUVEAU + STA level + JSR doTIME + LDA minutes + STA TIMEMIN + LDA secondes + STA TIMESEC + RTS + +TIMECO1 HEX 0405,0805,0D05,1105 ; COORDONNEES GAUCHE +TIMECO2 HEX C82A,CC2A,D12A,D52A ; COORDONNEES CENTRE +TIMECO3 HEX 8C05,9005,9505,9905 ; COORDONNEES DROITE + +*********** LEVEL + +ECR0400 LDX SECR2+1 ; LEVEL : << + LDA #ECR0401 + STA BUMPER5+1 + JMP BUMPER +ECR0401 NOP + LDA LEVEL ; LEVEL -=10 + BEQ ECR0403 + CMP #$000A + BMI ECR0402 + SEC + SBC #$000A + STA LEVEL + JSR AFFLEVL2 + JMP SOURIS1 +ECR0402 STZ LEVEL + JSR AFFLEVL2 +ECR0403 JMP SOURIS1 + +ECR0410 LDX SECR2+1 ; LEVEL : < + LDA #ECR0411 + STA BUMPER5+1 + JMP BUMPER +ECR0411 NOP + LDA LEVEL ; LEVEL -- + BEQ ECR0412 + DEC + STA LEVEL + JSR AFFLEVL2 ; AFFICHAGE LEVEL +ECR0412 JMP SOURIS1 + +ECR0420 LDX SECR2+1 ; LEVEL : > + LDA #ECR0421 + STA BUMPER5+1 + JMP BUMPER +ECR0421 NOP + LDA LEVEL ; LEVEL ++ + CMP #$0064 ; 100 + BEQ ECR0422 + INC + STA LEVEL + JSR AFFLEVL2 ; AFFICHAGE +ECR0422 JMP SOURIS1 + +ECR0430 LDX SECR2+1 ; LEVEL : >> + LDA #ECR0431 + STA BUMPER5+1 + JMP BUMPER +ECR0431 NOP + LDA LEVEL ; LEVEL +=10 + CMP #$0064 ; 100 + BEQ ECR0433 + CMP #$005A ; 90 + BPL ECR0432 + CLC + ADC #$000A + STA LEVEL + JSR AFFLEVL2 ; AFFICHAGE LEVEL + JMP SOURIS1 +ECR0432 LDA #$0064 ; 100 + STA LEVEL + JSR AFFLEVL2 +ECR0433 JMP SOURIS1 + +ECR0440 LDX SECR2+1 ; LEVEL : OK + LDA #ECR0441 + STA BUMPER5+1 + JMP BUMPER +ECR0441 NOP + JSR MAJLEVEL ; MISE A JOUR DU NIVEAU (SAUV/LOAD) + JSR MAJTIME ; MISE A JOUR DU TEMPS (SAUV/LOAD) + JSR MAJPICT ; VERIFIE QUE L'ON AIT PAS BESOIN DE CHANGER LE DECOR + JSR CLNLEVE ; NETTOY + LDA DROITE + JMP PICT1 + +LEVEL HEX 0000 ; NIVEAU 0-109 +LEVELC HEX 0000 +LEVELD HEX 0000 +LEVELU HEX 0000 +OLDLEVEL HEX 0000 ; NUMERO DU LEVEL EN ENTREE + +AFFLEVL1 LDA #LEVELCO1 + STA AFFLEVL7+1 + BRA AFFLEVL4 +AFFLEVL2 LDA #LEVELCO2 + STA AFFLEVL7+1 + BRA AFFLEVL4 +AFFLEVL3 LDA #LEVELCO3 + STA AFFLEVL7+1 +AFFLEVL4 LDA LEVEL +* INC + CMP #$0064 ; 100 + BMI AFFLEVL5 + LDX #$0001 + STX LEVELC + SEC + SBC #$0064 +AFFLEVL5 ASL + TAX + LDA HEXDEC,X + XBA + AND #$00FF + STA LEVELU + LDA HEXDEC,X + AND #$00FF + STA LEVELD + LDY #$0000 +AFFLEVL6 LDA LEVELC,Y + CLC + ADC #$0057 + TAX +AFFLEVL7 LDA LEVELCO1,Y + STA AFTAE + JSR AFTCAR ; AFFICHE + INY + INY + CPY #$0006 + BNE AFFLEVL6 + STZ LEVELC + RTS + +MAJLEVEL JSR CONVBUF ; MISE A JOUR DE LA DESCRIPTION DU NIVEAU + LDA OLDLEVEL ; PLACE L'ANCIEN NIVEAU DANS LE TABLEAU + JSR COPYDES + LDA LEVEL + JSR COPYLVL ; COPIE DE LA TABLE DE DESCRIPTION DU NIVEAU A + JSR CONVLVL ; CONVERTI LES VALEURS + RTS + +MAJPICT LDA LEVEL ; DOIT ON CHANGER LE DECOR + ASL + TAX + LDA HEXDEC,X + AND #$00FF + STA MAJPICLE + LDA OLDLEVEL + ASL + TAX + LDA HEXDEC,X + AND #$00FF + CMP MAJPICLE + BNE MAJPICT2 + RTS +MAJPICT2 LDA LEVEL ; CHARGE LE FICHIER NIVlevel + STA level + JSR loadNIV + JSR MAKESPR ; CREATION DE LA PLANCHE SPRITE AVEC PALETTE ET ZONE ROSE + RTS + +MAJPICLE HEX 0000 + +LEVELCO1 HEX 4615,4A15,4E15 ; AFFICHAGE GAUCHE +LEVELCO2 HEX CA2A,CE2A,D22A ; AFFICHAGE MILIEU +LEVELCO3 HEX CE15,D215,D615 ; AFFICHAGE DROITE + +************** SELECT GROUND + +ECR0500 LDX SECR2+1 ; GROUND : SURFACE + LDA #ECR0501 + STA BUMPER5+1 + JMP BUMPER +ECR0501 NOP + LDA POSX + SEC + SBC #$006A ; 106 + TAX + LDA ZONEGRH,X + AND #$00FF + BEQ ECR0502 ; RIEN + DEC + TAY ; SAUVEGARDE + LDA POSY + SEC + SBC #$0015 ; 21 + TAX + LDA ZONEGRV,X + AND #$00FF + BEQ ECR0502 ; RIEN + STY GRZONE + DEC + ASL + ASL ; *4 + CLC + ADC GRZONE + STA GRZONE + JSR SEBLCKG ; AFFICHAGE BLOCK DANS LE MENU +ECR0502 JSR CLNGROU ; NETTOY + LDA DROITE + STA ECRAN + JSR SAUV + JMP SOURIS1 + +GRZONE HEX 0000 + +*************** SELECT ITEM + +ECR0600 LDX SECR2+1 ; ITEM + LDA #ECR0601 + STA BUMPER5+1 + JMP BUMPER +ECR0601 NOP + LDA POSX + SEC + SBC #$005C ; 92 + TAX + LDA ZONEGRH,X + AND #$00FF + BEQ ECR0602 ; RIEN + DEC + TAY ; SAUVEGARDE + LDA POSY + SEC + SBC #$0028 ; 40 + TAX + LDA ZONEGRV,X + AND #$00FF + BEQ ECR0602 ; RIEN + STY ITZONE + DEC + ASL + TAX + LDA MULCINQ,X ; *5 + CLC + ADC ITZONE + ASL + TAX + LDA ITCVTAB,X + STA ITZONE + CMP #$0032 ; TINIES + BEQ ECR0603 + CMP #$001D ; BOMBE + BEQ ECR0603 + CMP #$0015 ; SLEEPER + BEQ ECR0603 + CMP #$0019 ; TELEPORTEUR + BEQ ECR0603 + CMP #$0021 ; PORTE + BEQ ECR0603 + CMP #$0025 ; INTERRUPTEUR + BEQ ECR0603 + JSR SEBLCKI ; AFFICHAGE BLOCK DANS LE MENU +ECR0602 JSR CLNITEM ; NETTOY + LDA DROITE + STA ECRAN + JSR SAUV + JMP SOURIS1 +ECR0603 JSR CLNITEM ; NETTOY + LDA #$0007 ; COULEUR NECESSAIRE + JMP PICT1 + +ITZONE HEX 3300 ; TINIES BLEU +MULCINQ HEX 0000,0500,0A00,0F00,1400,1900,1E00 + +ITCVTAB HEX 3200,1D00,2E00,2F00,3000 + HEX 2900,2A00,2B00,2C00,1400 + HEX 1500,1900,2100,2500,2D00 + +**************** SELECT COLOR + +ECR0700 LDX SECR2+1 ; COLOR + LDA #ECR0701 + STA BUMPER5+1 + JMP BUMPER +ECR0701 NOP + LDA POSX + SEC + SBC #$006A ; 106 + TAX + LDA ZONEGRH,X + AND #$00FF + BEQ ECR0702 ; RIEN + DEC + ASL + TAX + LDA COLOCVT,X ; TABLE DE CONVERSION COULEUR-INDICE + CLC + ADC ITZONE + STA ITZONE + JSR CLNCOLO ; NETTOY + JSR SEBLCKI ; AFFICHAGE DU BLOC DANS LE MENU + LDA DROITE + JMP PICT1 +ECR0702 JMP SOURIS1 + +COLOCVT HEX 0100,0000,0300,0200 + +**************** MENU + +ECR0800 LDX SECR2+1 ; MENU : LOAD + LDA #ECR0801 + STA BUMPER5+1 + JMP BUMPER0 +ECR0801 NOP + lda #pTAB + ldx ptrTAB+1 + JSR loadFILE + LDA LEVEL + JSR COPYLVL ; COPIE DE LA TABLE DE DESCRIPTION DU NIVEAU A + JSR CONVLVL ; CONVERTI LES VALEURS + lda LEVEL ; MISE A JOUR DU TEMPS + sta OLDLEVEL + sta level + jsr doTIME ; + + lda minutes ; + + sta TIMEMIN ; + + lda secondes ; + + sta TIMESEC ; + +* LDA TIMEMIN +* STA minutes +* LDA TIMESEC +* STA secondes +* JSR putTIME + JMP SOURIS1 + +ECR0810 LDX SECR2+1 ; MENU : SAVE + LDA #ECR0811 + STA BUMPER5+1 + JMP BUMPER0 +ECR0811 NOP + JSR CONVBUF ; MISE A JOUR DE LA DESCRIPTION DU NIVEAU + LDA LEVEL ; PLACE L'ANCIEN NIVEAU DANS LE TABLEAU + JSR COPYDES + lda LEVEL ; CHARGE LE NOUVEAU TIME + sta OLDLEVEL + sta level + lda TIMEMIN ; + + sta minutes ; + + lda TIMESEC ; + + sta secondes ; + + jsr putTIME ; + +* jsr doTIME +* LDA minutes +* STA TIMEMIN +* LDA secondes +* STA TIMESEC + JSR saveFILE + JMP SOURIS1 + +ECR0820 LDX SECR2+1 ; MENU : CUT + LDA #ECR0821 + STA BUMPER5+1 + JMP BUMPER0 +ECR0821 NOP + JSR CONVBUF ; CONV GROU+ITE -> LEVEL + JSR CUT ; COPY LEVEL -> CLIPBOARD + LDA #$0001 + STA CLIPFLAG + JMP SOURIS1 + +ECR0830 LDX SECR2+1 ; MENU : PASTE + LDA #ECR0831 + STA BUMPER5+1 + JMP BUMPER0 +ECR0831 NOP + LDA CLIPFLAG + BEQ ECR0832 + JSR PASTE ; COPY CLIPBOARD -> LEVEL + JSR CONVLVL ; CONV LEVEL -> GROU+ITE +ECR0832 JMP SOURIS1 + +CLIPFLAG HEX 0000 ; 0:VIDE, 1:PLEIN + +ECR0840 LDX SECR2+1 ; MENU : ABOUT + LDA #ECR0841 + STA BUMPER5+1 + JMP BUMPER0 +ECR0841 NOP + JSR CLNMENU + JMP ABOUT + +ECR0850 LDX SECR2+1 ; MENU : OK + LDA #ECR0851 + STA BUMPER5+1 + JMP BUMPER0 +ECR0851 NOP + JSR CLNMENU ; NETTOY + LDA DROITE + JMP PICT1 + +*************** DOC + +ECR0900 LDX SECR2+1 ; < + LDA #ECR0901 + STA BUMPER5+1 + JMP BUMPER0 +ECR0901 NOP + LDA AFTIND + BEQ ECR0902 + DEC + STA AFTIND + JSR AFTPAG ; AFICHAGE PAGE PRECEDENTE +ECR0902 JMP SOURIS1 + +ECR0910 LDX SECR2+1 ; > + LDA #ECR0911 + STA BUMPER5+1 + JMP BUMPER0 +ECR0911 NOP + LDA AFTIND +ECR0912 CMP #$0006 ; NB DE PAGES MAXI + BEQ ECR0913 + INC + STA AFTIND + JSR AFTPAG ; AFFICHAGE PAGE SUIVANTE +ECR0913 JMP SOURIS1 + +ECR0920 LDX SECR2+1 ; o + LDA #ECR0921 + STA BUMPER5+1 + JMP BUMPER0 +ECR0921 NOP + LDA AFTIND ; SAUT A LA 1ere PAGE + BEQ ECR0922 + STZ AFTIND + JSR AFTPAG +ECR0922 JMP SOURIS1 + +ECR0930 LDX SECR2+1 ; OK + LDA #ECR0931 + STA BUMPER5+1 + JMP BUMPER0 +ECR0931 NOP + STZ AFTIND + JMP LP4 ; FADE OUT ET RETOUR A L'ECRAN PRINCIPAL + +DOCADR HEX 0000 ; ADRESSE DU TEXTE DOCU (FRANCAIS/ANGLAIS) + +************* QUIT + +ECR1000 LDX SECR2+1 ; QUIT : QUIT + LDA #ECR1001 + STA BUMPER5+1 + JMP BUMPER0 +ECR1001 NOP + JSR CLNQUIT + JMP initOFF ; GOOD BYE + +ECR1010 LDX SECR2+1 ; QUIT : OK + LDA #ECR1011 + STA BUMPER5+1 + JMP BUMPER0 +ECR1011 NOP + JSR CLNQUIT ; NETTOY + LDA DROITE + JMP PICT1 + +************ WARNING + +ECR1100 LDX SECR2+1 ; WARNING : OK + LDA #ECR1101 + STA BUMPER5+1 + JMP BUMPER +ECR1101 NOP + JSR CLNWARN ; NETTOY + LDA DROITE + JMP PICT + +************ ECRAN ABOUT *********** + +ABOUT JSR fadeOUT ; AFFICHE L'ECRAN ABOUT +* LDA ptrABOUT+1 +* LDY #$0000 +* JSR fadeIN + jsr aboutMENU + + JSR SBOUT ; ATTEND UN CLICK DE SOURIS + +LP4 JSR fadeOUT + LDA ptrNIV+1 + AND #$FF00 + ORA #$007E + STA LP3+2 + LDX #$001F ; PALETTE IMAGE +LP3 LDAL $047E00,X + STAL $019E00,X + DEX + DEX + BPL LP3 + LDA DROITE + JMP PICT ; REVIENS A L'IMAGE + +************* VERIFICATION DU CONTENU DU NIVEAU ************* + +VERIFOK LDX #$0010 + LDA #$0000 +VERIFO1 STA TINIEV,X ; REMISE A ZERO + DEX + DEX + BPL VERIFO1 + LDY #$019E ; ON COMPTE CHAQUE OCCURENCE DES TINIES & SLEEPER +VERIFO2 LDA GROUBUF,Y + LDX #$0000 + CMP #$0032 ; TINIE VERT + BEQ VERIFO3 + LDX #$0002 + CMP #$0033 ; TINIE BLEU + BEQ VERIFO3 + LDX #$0004 + CMP #$0034 ; TINIE ROUGE + BEQ VERIFO3 + LDX #$0006 + CMP #$0035 ; TINIE JAUNE + BEQ VERIFO3 + LDX #$0008 + CMP #$0015 ; SLEEPER VERT + BEQ VERIFO3 + LDX #$000A + CMP #$0016 ; SLEEPER BLEU + BEQ VERIFO3 + LDX #$000C + CMP #$0017 ; SLEEPER ROUGE + BEQ VERIFO3 + LDX #$000E + CMP #$0018 ; SLEEPER JAUNE + BEQ VERIFO3 + LDX #$0010 +VERIFO3 INC TINIEV,X + DEY + DEY + BPL VERIFO2 + LDA SLEEPV ; ON VERIFIE + CMP TINIEV + BMI VERIFO4 + LDA SLEEPB + CMP TINIEB + BMI VERIFO5 + LDA SLEEPR + CMP TINIER + BMI VERIFO6 + LDA SLEEPJ + CMP TINIEJ + BMI VERIFO7 + LDA TINIEV + ORA TINIEB + ORA TINIER + ORA TINIEJ + BEQ VERIFO8 + CLC + RTS ; OK PAS DE PROBLEME +VERIFO4 LDA #$0001 ; PAS ASSEZ DE SLEEPER VERT + STA ERRORFL + SEC + RTS +VERIFO5 LDA #$0002 ; PAS ASSEZ DE SLEEPER BLEU + STA ERRORFL + SEC + RTS +VERIFO6 LDA #$0003 ; PAS ASSEZ DE SLEEPER ROUGE + STA ERRORFL + SEC + RTS +VERIFO7 LDA #$0004 ; PAS ASSEZ DE SLEEPER JAUNE + STA ERRORFL + SEC + RTS +VERIFO8 LDA #$0005 ; PAS DE TINIES !! + STA ERRORFL + SEC + RTS + +TINIEV HEX 0000 ; NOMBRE DE TINIES +TINIEB HEX 0000 +TINIER HEX 0000 +TINIEJ HEX 0000 + +SLEEPV HEX 0000 ; NOMBRE DE SLEEPER +SLEEPB HEX 0000 +SLEEPR HEX 0000 +SLEEPJ HEX 0000 +ERRORFL HEX 0000 + +ERRTINIE LDA #ERRMES1 ; PAS DE TINIES + LDX #$2A18 + JSR ERRAFF + LDA #ERRMES2 + LDX #$2DD8 + JSR ERRAFF + LDA #ERRMES3 + LDX #$3198 + JSR ERRAFF + LDA #TEXTEFRD + STA AFTLIG1+1 + RTS + +ERRSLVR LDA #ERRMES5 + LDX #$3198 + JSR ERRAFF + JMP ERRSLEEP +ERRSLBL LDA #ERRMES7 + LDX #$3198 + JSR ERRAFF + JMP ERRSLEEP +ERRSLRG LDA #ERRMES6 + LDX #$3198 + JSR ERRAFF + JMP ERRSLEEP +ERRSLJN LDA #ERRMES8 + LDX #$3198 + JSR ERRAFF + JMP ERRSLEEP + +ERRSLEEP LDA #ERRMES1 ; PROBLEME DE SLEEPER + LDX #$2A18 + JSR ERRAFF + LDA #ERRMES4 + LDX #$2DD8 + JSR ERRAFF + LDA #TEXTEFRD + STA AFTLIG1+1 + RTS + +ERRAFF STX AFTAE + STA AFTLIG1+1 + LDY #$0000 + JSR AFTLIG1 + RTS + +ERRMES1 ASC " IMPOSSIBLE ! ",8D +ERRMES2 ASC "IL N'Y A PAS DE ",8D +ERRMES3 ASC " TINIES EN JEU. ",8D +ERRMES4 ASC "IL MANQUE DES ",8D +ERRMES5 ASC " SLEEPER VERTS.",8D +ERRMES6 ASC " SLEEPER ROUGES.",8D +ERRMES7 ASC " SLEEPER BLEUS.",8D +ERRMES8 ASC " SLEEPER JAUNES.",8D + +ERRMESU ASC " IMPOSSIBLE ! ",8D + ASC "THERE IS NOT ANY",8D + ASC "TINIES ON GAME. ",8D + ASC "THERE IS A LACK ",8D + ASC "OF GREEN SLEEPER",8D + ASC "OF RED SLEEPER. ",8D + ASC "OF BLUE SLEEPER.",8D + ASC "OF YELOW SLEEPER",8D + +************* GESTION DU CONTENU DES NIVEAUX + +COPYLVL ASL ; COPY DU Aeme NIVEAU DANS LEVELBUF + TAX + LDA MULDCH,X ; *208 + TAX + LDY #$0000 +COPYLVL1 LDAL $058000,X + STA LEVELBUF,Y + INX + INX + INY + INY + CPY #$00D0 + BNE COPYLVL1 + RTS + +COPYDES ASL ; COPY DE LEVELBUF A LA PLACE DU Aeme NIVEAU + TAX + LDA MULDCH,X ; *208 + TAX + LDY #$0000 +COPYDES1 LDA LEVELBUF,Y +COPYDES2 STAL $058000,X + INX + INX + INY + INY + CPY #$00D0 + BNE COPYDES1 + RTS + +CONVLVL LDX #$0000 ; CONVERSION LEVELBUF -> GROUBUF,ITEBUF + LDY #$0000 +CONVLVL1 LDA LEVELBUF,Y ; GROUND + AND #$00FF + STA GROUBUF,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA GROUBUF1,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA GROUBUF2,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA GROUBUF3,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA GROUBUF4,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA GROUBUF5,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA GROUBUF6,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA GROUBUF7,X + INY + INX + INX + CPX #$001A ; 13*2 + BNE CONVLVL1 + LDX #$0000 +CONVLVL2 LDA LEVELBUF,Y ; ITEM + AND #$00FF + STA ITEMBUF,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA ITEMBUF1,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA ITEMBUF2,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA ITEMBUF3,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA ITEMBUF4,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA ITEMBUF5,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA ITEMBUF6,X + INY + LDA LEVELBUF,Y + AND #$00FF + STA ITEMBUF7,X + INY + INX + INX + CPX #$001A ; 13*2 + BNE CONVLVL2 + LDX #$00CE ; CONVERSION DE LA PARTIE GROUND +CONVLVL3 LDA GROUBUF,X + CMP #$00FF + BNE CONVLVL7 + LDA #$0031 ; VIDE + BRA CONVLVL5 +CONVLVL7 ASL + TAY + LDA CONVLBG,Y +CONVLVL5 STA GROUBUF,X + DEX + DEX + BPL CONVLVL3 + LDX #$00CE ; CONVERSION DE LA PARTIE ITEM +CONVLVL4 LDA ITEMBUF,X + CMP #$00FF + BNE CONVLVL8 + LDA #$0031 ; VIDE + BRA CONVLVL6 +CONVLVL8 ASL + TAY + LDA CONVLBI,Y +CONVLVL6 STA ITEMBUF,X + DEX + DEX + BPL CONVLVL4 + RTS + +CONVBUF LDY #$0000 ; CONVERSION BUFF -> LEVEL + LDX #$0000 +CONVBUF1 LDA GROUBUF,X ; GROUND + AND #$00FF + STA LEVELBUF,Y + INY + LDA GROUBUF1,X + AND #$00FF + STA LEVELBUF,Y + INY + LDA GROUBUF2,X + STA LEVELBUF,Y + INY + LDA GROUBUF3,X + STA LEVELBUF,Y + INY + LDA GROUBUF4,X + STA LEVELBUF,Y + INY + LDA GROUBUF5,X + STA LEVELBUF,Y + INY + LDA GROUBUF6,X + STA LEVELBUF,Y + INY + LDA GROUBUF7,X + STA LEVELBUF,Y + INY + INX + INX + CPX #$001A ; 13*2 + BNE CONVBUF1 + LDX #$0000 +CONVBUF2 LDA ITEMBUF,X ; GROUND + AND #$00FF + STA LEVELBUF,Y + INY + LDA ITEMBUF1,X + AND #$00FF + STA LEVELBUF,Y + INY + LDA ITEMBUF2,X + STA LEVELBUF,Y + INY + LDA ITEMBUF3,X + STA LEVELBUF,Y + INY + LDA ITEMBUF4,X + STA LEVELBUF,Y + INY + LDA ITEMBUF5,X + STA LEVELBUF,Y + INY + LDA ITEMBUF6,X + STA LEVELBUF,Y + INY + LDA ITEMBUF7,X + STA LEVELBUF,Y + INY + INX + INX + CPX #$001A ; 13*2 + BNE CONVBUF2 + LDX #$0000 ; CONVERSION CODE BUF -> CODE LVL +CONVBUF3 LDA LEVELBUF,X + AND #$00FF + ASL + TAY + LDA CONVBULV,Y + STA CONVBUF4+1 + LDA LEVELBUF,X + AND #$FF00 +CONVBUF4 ORA #$00FF + STA LEVELBUF,X + INX + CPX #$00D0 ; 13*8 *2 + BNE CONVBUF3 + RTS + +CUT LDX #$00CE ; COPY LEVEL -> CLIPBOARD +CUT1 LDA LEVELBUF,X + STA CLIPBBUF,X + DEX + DEX + BPL CUT1 + RTS + +PASTE LDX #$00CE ; COPY CLIPBOARD -> LEVEL +PASTE1 LDA CLIPBBUF,X + STA LEVELBUF,X + DEX + DEX + BPL PASTE1 + RTS + +CONVLBG HEX 0000,0100,0200,0300,0700,0D00,3600,0600,0400,1300,0B00 + HEX 0F00,0500,0800,1200,0A00,1000,1100,0900,0E00,0C00 + +CONVLBI HEX 3200,3300,3400,3500,1500,1600,1700,1800,1900,1A00,1B00,1C00,1D00 + HEX 1E00,1F00,2000,2100,2200,2300,2400,2500,2600,2700 + HEX 2800,2900,2A00,2B00,2C00,2D00,2E00,2F00,3000,1400 + +CONVBULV HEX 0000,0100,0200,0300,0800,0C00,0700,0400,0D00,1200 + HEX 0F00,0A00,1400,0500,1300,0B00,1000,1100,0E00,0900 + HEX 2000,0400,0500,0600,0700,0800,0900,0A00,0B00,0C00 + HEX 0D00,0E00,0F00,1000,1100,1200,1300,1400,1500,1600 + HEX 1700,1800,1900,1A00,1B00,1C00,1D00,1E00,1F00,FF00 + HEX 0000,0100,0200,0300,0600 + +MULDCH HEX 0000,D000,A001,7002,4003,1004,E004,B005,8006,5007,2008,F008,C009,900A,600B,300C + HEX 000D,D00D,A00E,700F,4010,1011,E011,B012,8013,5014,2015,F015,C016,9017,6018,3019 + HEX 001A,D01A,A01B,701C,401D,101E,E01E,B01F,8020,5021,2022,F022,C023,9024,6025,3026 + HEX 0027,D027,A028,7029,402A,102B,E02B,B02C,802D,502E,202F,F02F,C030,9031,6032,3033 + HEX 0034,D034,A035,7036,4037,1038,E038,B039,803A,503B,203C,F03C,C03D,903E,603F,3040 + HEX 0041,D041,A042,7043,4044,1045,E045,B046,8047,5048,2049,F049,C04A,904B,604C,304D + HEX 004E,D04E,A04F,7050,4051,1052,E052,B053,8054,5055,2056,F056,C057,9058,6059,305A + +GROUBUF HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +GROUBUF1 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +GROUBUF2 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +GROUBUF3 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +GROUBUF4 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +GROUBUF5 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +GROUBUF6 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +GROUBUF7 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 + +ITEMBUF HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +ITEMBUF1 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +ITEMBUF2 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +ITEMBUF3 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +ITEMBUF4 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +ITEMBUF5 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +ITEMBUF6 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 +ITEMBUF7 HEX 0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000,0000 + +LEVELBUF HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0000 + +CLIPBBUF HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + HEX 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,0000 + +*************************************************************************** +****************************** DATA ************************************* +*************************************************************************** + +************ BUMPER MANAGER ************ PAVE + +BUMPER LDA #$0000 ; PREMIERE PLANCHE SPRITE + BRA BUMPER7 +BUMPER0 LDA #$0001 ; DEUXIEME PLANCHE SPRITE +BUMPER7 STA PLANCHE + LDA FLAGTAB,X + BEQ BUMPER2 + LDA BOUT + BEQ BUMPER1 +BUMPER6 JMP SOURIS +BUMPER1 STZ FLAGTAB,X ; RELEVE LE BUMPER ET EFFECTUE LE TRAITEMENT + STZ BMPFLG + JSR DESS1 + JSR AFFSPRR + JSR SAUV +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 + JSR DESS1 + JSR AFFSPRR + JSR SAUV +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 + JSR DESS1 + JSR AFFSPRE + JSR SAUV + JMP SOURIS1 + +************* SURFACE MANAGER ************* ZONE D'ECRAN + +SURFACE LDA BMPFLG ; X CONTIENT LE NUMERO DU BOUTON + BEQ SURFACE1 + LDX LAST ; ON FORCE SA RELEVE + STZ BMPFLG + STZ FLAGTAB,X + STX SECR2+1 + JSR DESS1 + JSR AFFSPRR + JSR SAUV + JMP SOURIS1 +SURFACE1 LDA BOUT + BEQ SURFACE2 +SURFACE5 JMP $FFFF ; TRAITEMENT A EFFECTUER +SURFACE2 JMP SOURIS + +******** TRAITEMENT PAR DEFAUT ********* + +BUMPDEF LDA BMPFLG + BEQ BUMPDEF1 + LDX LAST ; FORCE LE REMONTEE DE L'ANCIEN + STZ FLAGTAB,X + STZ BMPFLG + STX SECR2+1 + JSR DESS1 + JSR AFFSPRR + JSR SAUV + JMP SOURIS1 +BUMPDEF1 JMP SOURIS + +********************************************** + +ZONESCR HEX 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01 + HEX 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02 + HEX 03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03 + HEX 04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04 + HEX 05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05 + HEX 06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06,06 + HEX 07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07,07 + HEX 08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08,08 + HEX 09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09,09 + HEX 0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A,0A + HEX 0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B,0B + HEX 0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C,0C + HEX 0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D,0D + +ZONEGRH HEX 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,00,00,00,00 + HEX 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,00,00,00,00 + HEX 03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,00,00,00,00 + HEX 04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,00,00,00,00 + HEX 05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,00,00,00,00 + +ZONEGRV HEX 01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,01,00,00,00 + HEX 02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,02,00,00,00 + HEX 03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,03,00,00,00 + HEX 04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,04,00,00,00 + HEX 05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,05,00,00,00 + + HEX 0B00 ; MAIN GAUCHE NB DE BOUTONS DANS ECRAN1 +ECR01TAB HEX 0600,2A00,0600,1700 ; TIME TABLEAU DES BOUTONS POUR ECRAN1 + HEX 0700,2800,2000,3100 ; LEVEL X0,X1 Y0,Y1 + HEX 0800,2800,3A00,4500 ; PLAY + HEX 0400,2C00,4E00,7200 ; SELECT + HEX 0800,2800,7600,8100 ; v/^ + HEX 0800,2800,8A00,9500 ; MENU + HEX 0800,2800,9A00,A500 ; DOCU + HEX 0800,2800,AA00,B500 ; QUIT + HEX 0800,1400,B900,C400 ; < + HEX 1C00,2800,B900,C400 ; > + HEX 3400,3B01,0400,C300 ; ZONE QUADRILLEE + +ECR01DAT HEX 0700,0500,452B,7345,6045 ; TIME LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE RELEVE, @ SPRITE ENFONCE + HEX 0900,0500,833B,3349,2049 ; LEVEL + HEX 0900,0B00,4444,F34C,E04C ; PLAY + HEX 0B00,0500,2264,7754,6054 ; SELECT + HEX 0900,0B00,C469,3358,2058 ; v/^ + HEX 0900,0B00,4476,B35F,A05F ; MENU + HEX 0900,0B00,4480,3367,2067 ; DOCU + HEX 0900,0B00,448A,B36E,A06E ; QUIT + HEX 0400,0B00,A493,3276,2076 ; < + HEX 0400,0B00,AE93,3B76,2976 ; > + HEX 0100,0100,009F,009F,009F ; SPRITE INVISIBLE + + HEX 0B00 ; MAIN DROITE +ECR02TAB HEX 1601,3A01,0600,1700 ; TIME + HEX 1701,3801,2000,3100 ; LEVEL + HEX 1801,3801,3A00,4500 ; PLAY + HEX 1401,3C01,4E00,7200 ; SELECT + HEX 1801,3801,7600,8100 ; v/^ + HEX 1801,3801,8A00,9500 ; MENU + HEX 1801,3801,9A00,A500 ; DOCU + HEX 1801,3801,AA00,B500 ; QUIT + HEX 1801,2401,B900,C400 ; < + HEX 2C01,3801,B900,C400 ; > + HEX 0400,0B01,0400,C300 ; ZONE QUDRILLEE + +ECR02DAT HEX 0700,0500,CD2B,7345,6045 ; TIME LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE RELEVE, @ SPRITE ENFONCE + HEX 0900,0500,0B3C,3349,2049 ; LEVEL + HEX 0900,0B00,CC44,F34C,E04C ; PLAY + HEX 0B00,0500,AA64,7754,6054 ; SELECT + HEX 0900,0B00,4C6A,3358,2058 ; v/^ + HEX 0900,0B00,CC76,B35F,A05F ; MENU + HEX 0900,0B00,CC80,3367,2067 ; DOCU + HEX 0900,0B00,CC8A,B36E,A06E ; QUIT + HEX 0400,0B00,2C94,3276,2076 ; < + HEX 0400,0B00,3694,3B76,2976 ; > + HEX 0100,0100,009F,009F,009F + + HEX 0500 ; TIME +ECR03TAB HEX 8600,9100,5000,5900 ; << + HEX 9400,9F00,5000,5900 ; >> + HEX A200,AD00,5000,5900 ; < + HEX B000,BB00,5000,5900 ; > + HEX 9000,B100,5E00,6900 ; OK + +ECR03DAT HEX 0300,0900,4352,4658,4D58 ; << + HEX 0300,0900,4A52,865E,8D5E ; >> + HEX 0300,0900,5152,C664,CD64 ; < + HEX 0300,0900,5852,066B,0D6B ; > + HEX 0900,0B00,085B,8645,4476 ; OK + + HEX 0500 ; LEVEL +ECR04TAB HEX 8600,9100,5000,5900 ; << + HEX 9400,9F00,5000,5900 ; < + HEX A200,AD00,5000,5900 ; > + HEX B000,BB00,5000,5900 ; >> + HEX 9000,B100,5E00,6900 ; OK + +ECR04DAT HEX 0300,0900,4352,4658,4D58 ; << + HEX 0300,0900,4A52,C664,CD64 ; < + HEX 0300,0900,5152,066B,0D6B ; > + HEX 0300,0900,5852,865E,8D5E ; >> + HEX 0900,0B00,085B,8645,4476 ; OK + + HEX 0100 ; SELECT GROUND +ECR05TAB HEX 6A00,D500,1500,9900 ; GROUNDS + +ECR05DAT HEX 0100,0100,009F,009F,009F + + HEX 0100 ; SELECT ITEM +ECR06TAB HEX 5C00,E400,2800,7600 ; ITEMS + +ECR06DAT HEX 0100,0100,009F,009F,009F + + HEX 0100 ; SELECT COLOR +ECR07TAB HEX 6A00,D500,3C00,4F00 ; COLORS + +ECR07DAT HEX 0100,0100,009F,009F,009F + + HEX 0600 ; MENU +ECR08TAB HEX 5E00,A200,4800,5300 ; LOAD + HEX 5E00,A200,5600,6100 ; SAVE + HEX B800,E400,4100,4C00 ; CUT + HEX B800,E400,4F00,5A00 ; PASTE + HEX B800,E400,5D00,6800 ; ABOUT + HEX 9000,B100,6B00,7600 ; OK + +ECR08DAT HEX 1100,0B00,2F4D,0D42,8D49 ; LOAD + HEX 1100,0B00,EF55,0D51,8D58 ; SAVE + HEX 0B00,0B00,FC48,6076,7776 ; CUT + HEX 0B00,0B00,BC51,8E76,A576 ; PASTE + HEX 0B00,0B00,7C5A,0D6F,246F ; ABOUT + HEX 0900,0B00,2863,ED31,0D3A ; OK + + HEX 0400 ; DOCU +ECR09TAB HEX 6C00,7700,B600,BF00 ; <- + HEX 9000,9B00,B600,BF00 ; -> + HEX 8100,8600,B800,BD00 ; o + HEX 1201,2F01,B700,BE00 ; EXIT + +ECR09DAT HEX 0300,0900,F691,7052,304C ; <- + HEX 0300,0900,0892,7752,374C ; -> + HEX 0200,0500,4093,3A01,9A05 ; o + HEX 0800,0700,E892,3042,3047 ; EXIT + + HEX 0200 ; QUIT +ECR10TAB HEX 7E00,C300,4300,4E00 ; QUIT + HEX 9000,B100,5300,5E00 ; OK + +ECR10DAT HEX 1200,0B00,1F4A,0D60,8D67 ; QUIT + HEX 0900,0B00,2854,ED31,0D3A ; OK + + HEX 0100 ; WARNING +ECR11TAB HEX 9000,B000,5A00,6500 ; OK + +ECR11DAT HEX 0900,0B00,8858,8645,4476 ; OK + +**************** + +ECRTAB DA ECR01TAB,ECR02TAB,ECR03TAB,ECR04TAB ; ADRESSES DES TABLEAUX + DA ECR05TAB,ECR06TAB,ECR07TAB,ECR08TAB + DA ECR09TAB,ECR10TAB,ECR11TAB + +ECRDAT DA ECR01DAT,ECR02DAT,ECR03DAT,ECR04DAT ; ADRESSE DES DONNEES BUMPERS + DA ECR05DAT,ECR06DAT,ECR07DAT,ECR08DAT + DA ECR09DAT,ECR10DAT,ECR11DAT + +ECRDESA DA ECRDES1,ECRDES2,ECRDES3,ECRDES4 ; ADRESSE POUR LES DESTINATIONS + DA ECRDES5,ECRDES6,ECRDES7,ECRDES8 + DA ECRDES9,ECRDES10,ECRDES11 + +**** + +ECRDES1 DA ECR0100,ECR0110,ECR0120,ECR0130,ECR0140 ; MAIN GAUCHE + DA ECR0150,ECR0160,ECR0170,ECR0180,ECR0190 + DA ECR01B0 + +ECRDES2 DA ECR0100,ECR0110,ECR0120,ECR0130,ECR0140 ; MAIN DROITE + DA ECR0150,ECR0160,ECR0170,ECR0180,ECR0190 + DA ECR01A0 + +ECRDES3 DA ECR0300,ECR0310,ECR0320,ECR0330,ECR0340 ; TIME + +ECRDES4 DA ECR0400,ECR0410,ECR0420,ECR0430,ECR0440 ; LEVEL + +ECRDES5 DA ECR0500 ; SELECT GROUND + +ECRDES6 DA ECR0600 ; SELECT ITEM + +ECRDES7 DA ECR0700 ; SELECT COLOR + +ECRDES8 DA ECR0800,ECR0810,ECR0820,ECR0830,ECR0840 ; MENU + DA ECR0850 + +ECRDES9 DA ECR0900,ECR0910,ECR0920,ECR0930 ; DOCU + +ECRDES10 DA ECR1000,ECR1010 ; QUIT + +ECRDES11 DA ECR1100 ; WARNING + +********************* SOUS ROUTINES SOURIS ************************** + +DEC HEX 000000000000 ; DECOR SOUS LE POINTEUR + HEX 000000000000 + HEX 000000000000 + HEX 000000000000 + HEX 000000000000 + HEX 000000000000 + +PTPAI HEX AAAAAAAA0000 + HEX 0A00000A0000 ; POINTEUR POSITION PAIRE + HEX 00A000A00000 + HEX 000A00A00000 + HEX 0000AA000000 + HEX 00000A000000 + +PTPAIMA HEX 00000000FFFF + HEX F0000000FFFF ; MASQUE POSITION PAIRE + HEX FF00000FFFFF + HEX FFF0000FFFFF + HEX FFFF00FFFFFF + HEX FFFFF0FFFFFF + +PTIMP HEX 0AAAAAAAA000 + HEX 00A00000A000 ; POINTEUR POSITION IMPAIRE + HEX 000A000A0000 + HEX 0000A00A0000 + HEX 00000AA00000 + HEX 000000A00000 + +PTIMPMA HEX F00000000FFF + HEX FF0000000FFF ; MASQUE POSITION IMPAIRE + HEX FFF00000FFFF + HEX FFFF0000FFFF + HEX FFFFF00FFFFF + HEX FFFFFF0FFFFF + +POSX HEX 0000 ; 0-312 +POSY HEX 0000 ; 0-194 +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 #$0139 ; 313 + BMI SLECT7 + LDA #$0138 ; 312 +SLECT7 STA POSX + BRA SLECT10 +SLECT8 LDA POSX ; DELX < 0 + SEC + SBC DELX+1 + BPL SLECT9 + LDA #$0000 +SLECT9 STA POSX +SLECT10 LDA NEY ; CALCUL DE POSY + BNE SLECT12 + LDA POSY ; DELY > 0 + CLC + ADC DELY+1 + CMP #$00C3 ; 195 + BMI SLECT11 + LDA #$00C2 ; 194 +SLECT11 STA POSY + BRA SLECT14 +SLECT12 LDA POSY ; DELY < 0 + SEC + SBC DELY+1 + BPL SLECT13 + LDA #$0000 +SLECT13 STA POSY +SLECT14 RTS + +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 + +********************** + +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 #$0004 ; LARGEUR 3 +DESS3 LDA DEC,Y +DESS4 STAL $E12000,X ; PROUT + INY + INY + DEX + DEX + BPL DESS3 + CPY #$0024 ; NB CASES (36) + BPL DESS5 + LDX #$0004 ; LARGEUR 3 + 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 #$0004 ; LARGEUR 3 +SAUV1 LDAL $E12000,X ; PROUT + STA DEC,Y + INY + INY + DEX + DEX + BPL SAUV1 + CPY #$0024 ; NB CASES (36) + BPL SAUV2 + LDX #$0004 ; LARGEUR 3 + LDA SAUV1+1 + CLC + ADC #$00A0 + STA SAUV1+1 + BRA SAUV1 +SAUV2 RTS + +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 + LDX #PTIMP ; POSITION IMPAIRE + LDY #PTIMPMA + BRA TRACE0 +TRACEP LDX #PTPAI ; POSITION PAIRE + LDY #PTPAIMA +TRACE0 STX TRACE3+1 ; MOTIF + STY TRACE2+1 ; MASQUE + LDY #$0000 + LDX #$0000 +TRACE1 LDAL $E12000,X ; PROUT +TRACE2 AND $A0A0,Y ; ET AVEC LE MASQUE +TRACE3 ORA $A0A0,Y ; OU AVEC LE MOTIF +TRACE4 STAL $E12000,X ; PROUT + INY + INY + INX + INX + CPX #$0006 ; LARGEUR 3 + BNE TRACE1 + CPY #$0024 ; NB CASES (36) + BEQ TRACE5 + LDX #$0000 + LDA TRACE1+1 + CLC + ADC #$00A0 + STA TRACE1+1 + STA TRACE4+1 + BRA TRACE1 +TRACE5 RTS + +************* AFFICHAGE BUMPER ************************* + +AFFSPRR INC AFFSPRF ; BUMPER RELEVE +AFFSPRE LDA PLANCHE ; BUMPER ENFONCE + BEQ AFFSPR6 + LDA #$8000 + STA AFFSPR4+1 +AFFSPR6 LDA ECRAN ; ECRAN SELECTION GROUND,ITEM,COULEUR +AFFSPR0 DEC + ASL + TAX + LDA ECRDAT,X ; ADRESSE DU TABLEAU DES DATA POUR L'ECRAN CONCERNE + STA AFFSPR1+1 + LDA SECR2+1 ; CONTIENT LE NUMERO DU BUMPER (*2) + ASL + ASL ; *5 + CLC + ADC SECR2+1 + CLC +AFFSPR1 ADC #$0000 ; ADRESSE DATA BUMPER + TAX +SECR14 LDA\ $0000,X ; LONGUEUR + DEC + ASL + STA AFFSPR3+1 + INX + INX +SECR15 LDA\ $0000,X ; HAUTEUR + DEC + STA AFFSPR2+1 + INX + INX +SECR16 LDA\ $0000,X ; @ ECRAN + STA AFFSPR5+1 + INX + INX + LDA AFFSPRF ; FLAG DE AFFSPR + BEQ SECR18 ; ON DESSINE LE SPRITE RELEVE +SECR17 LDA\ $0000,X ; @ SPRITE RELEVE + CLC + ADC AFFSPR4+1 + STA AFFSPR4+1 + BRA AFFSPR2 +SECR18 INX + INX + LDA\ $0000,X + CLC ; SPRITE ENFONCE + ADC AFFSPR4+1 + STA AFFSPR4+1 +AFFSPR2 LDY #$0000 ; HAUTEUR-1 +AFFSPR3 LDX #$0000 ; NOMBRE DE *4-2 +AFFSPR4 LDAL $042000,X ; ADRESSE SPRITE (BANC 04) +AFFSPR5 STAL $E12000,X ; ADRESSE ECRAN PROUT + DEX + DEX + BPL AFFSPR4 ; RECOPIE 1 LIGNE + LDA AFFSPR4+1 + CLC ; LIGNE SUIVANTE SPRITE + ADC #$00A0 + STA AFFSPR4+1 + LDA AFFSPR5+1 + CLC ; LIGNE SUIVANTE ECRAN + ADC #$00A0 + STA AFFSPR5+1 + DEY + BPL AFFSPR3 + STZ AFFSPRF + STZ AFFSPR4+1 ; PAR DEFAUT PLANCHE 1 + RTS +AFFSPRF HEX 0000 ; FLAG RELEVE/ENFONCE +PLANCHE HEX 0000 ; 0:PLANCHE 1, 1:PLANCHE 2 + +******************** TRAITEMENT ET AFFICHAGE ECRANS ********************* + +PICT1 LDX ECRAN ; PASSAGE ECRAN SANS CHANGEMENT DE FOND + STX OLDECR + STA ECRAN + JSR SAUV + JMP 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 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,ECRMAI2,ECRTIME,ECRLEVE,ECRGROU ; NOM DES ECRANS POUR INIT D'AFFICHAGE + DA ECRITEM,ECRCOLO,ECRMENU,ECRDOCU,ECRQUIT + DA ECRWARN + +CLNFLG LDX #$0062 ; ON MET TOUS LES FLAG DE BUMPER A 0 + LDA #$0000 +CLNFLG1 STA FLAGTAB,X + DEX + DEX + BPL CLNFLG1 + RTS + +CHANGFLG HEX 0000 ; 0 SI PAS DE CHANGEMENT D'ECRAN QUAND ON REVIENT DU CTPN + ; 1 SI CHANGEMENT PIECES/FLECHES + ; 2 SI CHANGEMENT DECOR + ; 3 SI CHANGEMENT TOTAL : PIECES/FLECHES et DECOR + +*********** TRAITEMENT INITIAL A L'AFFICHAGE D'UN ECRAN + +ECRMAI1 NOP ; CREATION DE L'ECRAN + JSR AFFGAUCH ; AFFICHAGE A GAUCHE + LDA MAISELE + BEQ ECRMAI11 + LDA ITZONE ; AFFICHAGE BLOCK ITEM DANS LE MENU + JSR SEBLCKI + JSR AFFECRG ; AFFICHE LE GROUND + JSR AFFECRI ; AFFICHE LES ITEM PAR DESSUS + BRA ECRMAI12 +ECRMAI11 LDA GRZONE + JSR SEBLCKG ; AFFICHAGE BLOCK GROUND DANS LE MENU + JSR AFFECRG ; AFFICHE LE GROUND +ECRMAI12 JSR WAITVBL ; GRILLE + JSR GRILHM + JSR GRILHD + JSR GRILVM + JSR GRILVD + JSR EFFGAUCH ; BANDE NOIRE + JSR AFFLEVL1 ; AFFICHAGE DU LEVEL + JSR AFFTIMG + JSR SAUV + JMP SOURIS1 + +ECRMAI2 NOP ; CREATION DE L'ECRAN + JSR AFFDROIT ; AFFICHAGE A DROITE + LDA MAISELE + BEQ ECRMAI21 + LDA ITZONE ; AFFICHAGE BLOCK ITEM DANS LE MENU + JSR SEBLCKI + JSR AFFECRG ; AFFICHE LE FOND + JSR AFFECRI ; AFFICHE LES ITEM + BRA ECRMAI22 +ECRMAI21 LDA GRZONE + JSR SEBLCKG ; AFFICHAGE BLOCK GROUND DANS LE MENU + JSR AFFECRG ; AFFICHE LE GROUND +ECRMAI22 JSR WAITVBL ; GRILLE + JSR GRILHM + JSR GRILHG + JSR GRILVM + JSR GRILVG + JSR EFFDROIT ; BANDE NOIRE + JSR AFFLEVL3 ; AFFICHAGE DU LEVEL + JSR AFFTIMD + JSR SAUV + JMP SOURIS1 + +ECRTIME NOP ; CREATION DE L'ECRAN + JSR AFFTIME + JSR AFFTIMM + JSR SAUV + JMP SOURIS1 + +ECRLEVE NOP ; CREATION DE L'ECRAN + JSR AFFLEVE + JSR AFFLEVL2 ; AFFICHE LE NUMERO DU NIVEAU + JSR SAUV + JMP SOURIS1 + +ECRGROU NOP ; CREATION DE L'ECRAN + JSR AFFGROU + JSR SAUV + JMP SOURIS1 + +ECRITEM NOP ; CREATION DE L'ECRAN + JSR AFFITEM + JSR SAUV + JMP SOURIS1 + +ECRCOLO NOP ; CREATION DE L'ECRAN + JSR AFFCOLO + JSR SAUV + JMP SOURIS1 + +ECRMENU NOP ; CREATION DE L'ECRAN + JSR AFFMENU + JSR SAUV + JMP SOURIS1 + +ECRDOCU NOP ; CREATION DE L'ECRAN + JSR AFTPAG + JSR SAUV + JMP SOURIS1 + +ECRQUIT NOP ; CREATION DE L'ECRAN + JSR AFFQUIT + JSR SAUV + JMP SOURIS1 + +ECRWARN NOP ; CREATION DE L'ECRAN + JSR AFFWARN + LDA ERRORFL + CMP #$0001 + BNE ECRWARN1 + JSR ERRSLVR ; SLEEPER VERT + BRA ECRWARN5 +ECRWARN1 CMP #$0002 + BNE ECRWARN2 + JSR ERRSLBL ; SLEEPER BLEU + BRA ECRWARN5 +ECRWARN2 CMP #$0003 + BNE ECRWARN3 + JSR ERRSLRG ; SLEEPER ROUGE + BRA ECRWARN5 +ECRWARN3 CMP #$0004 + BNE ECRWARN4 + JSR ERRSLJN ; SLEEPER JAUNE + BRA ECRWARN5 +ECRWARN4 JSR ERRTINIE ; PAS DE TINIES +ECRWARN5 JSR SAUV + JMP SOURIS1 + +************** ROUTINES AFFICHAGES ECRANS *************** + +AFFDROIT LDY #$00C7 ; HAUTEUR -1 + LDX #$0016 ; LARGEUR + LDA #$0088 ; @ SPRITE + STA AFFZONE2+1 + LDA #$2088 ; @ ECRAN + JSR AFFZONE ; AFFICHE A DROITE + RTS + +EFFDROIT LDX #$0086 ; NETTOY LA BANDE + LDY #$00C7 +EFFDROI2 LDA #$0000 ; ON FORCE EN NOIR + STAL $E12000,X ; PROUT + TXA + CLC + ADC #$00A0 + TAX + DEY + BPL EFFDROI2 + RTS + +CLNDROIT LDY #$00C7 ; HAUTEUR -1 + LDX #$0018 ; LARGEUR + LDA #$2086 ; @ ECRAN + JSR CLNZONE ; NETTOY A DROITE + RTS + +AFFGAUCH LDY #$00C7 ; HAUTEUR -1 + LDX #$0016 ; LARGEUR + LDA #$0088 ; @ SPRITE + STA AFFZONE2+1 + LDA #$2000 ; @ ECRAN + JSR AFFZONE ; AFFICHE A GAUCHE + RTS + +EFFGAUCH LDX #$0018 ; NETTOY LA BANDE + LDY #$00C7 +EFFGAUC2 LDAL $E12000,X ; PROUT + AND #$0F00 + STAL $E12000,X ; PROUT + TXA + CLC + ADC #$00A0 + TAX + DEY + BPL EFFGAUC2 + RTS + +CLNGAUCH LDY #$00C7 ; HAUTEUR -1 + LDX #$0018 ; LARGEUR /2 -2 + LDA #$2000 ; @ ECRAN + JSR CLNZONE ; NETTOY A GAUCHE + RTS + +WAITVBL LDAL $E1C02E + AND #$00FF + CMP #$00B0 + BNE WAITVBL + RTS + +AFFTIME LDY #$003B + LDX #$0044 + LDA #$2841 + STA AFFZONE2+1 + LDA #$41ED + JSR AFFZONE ; AFFICHE TIME + RTS + +CLNTIME LDY #$003B + LDX #$0044 + LDA #$41ED + JSR CLNZONE ; NETTOY TIME + RTS + +AFFLEVE LDY #$003B + LDX #$0044 + LDA #$0181 + STA AFFZONE2+1 + LDA #$41ED + JSR AFFZONE ; AFFICHE LEVEL + RTS + +CLNLEVE LDY #$003B + LDX #$0044 + LDA #$41ED + JSR CLNZONE ; NETTOY LEVE + RTS + +AFFGROU LDY #$009A + LDX #$003C + LDA #$80A1 + STA AFFZONE2+1 ; DEUXIEME PLANCHE + LDA #$2991 + JSR AFFZONE ; AFFICHE GROUND + RTS + +CLNGROU LDY #$009A + LDX #$003C + LDA #$2991 + JSR CLNZONE ; NETTOY GROU + RTS + +AFFITEM LDY #$0064 + LDX #$004A + LDA #$80E0 ; DEUXIEME PLANCHE + STA AFFZONE2+1 + LDA #$356A + JSR AFFZONE ; AFFICHE ITEM + RTS + +CLNITEM LDY #$0064 + LDX #$004A + LDA #$356A + JSR CLNZONE ; NETTOY ITEM + RTS + +AFFCOLO LDY #$0029 + LDX #$003C + LDA #$E221 + STA AFFZONE2+1 ; DEUXIEME PLANCHE DE SPRITE + LDA #$41F1 + JSR AFFZONE ; AFFICHE COLORS + RTS + +CLNCOLO LDY #$0029 + LDX #$003C + LDA #$41F1 + JSR CLNZONE ; NETTOY COLORS + RTS + +AFFMENU LDY #$0048 + LDX #$004E + LDA #$4EF7 + STA AFFZONE2+1 + LDA #$41E8 + JSR AFFZONE ; AFFICHE MENU + RTS + +CLNMENU LDY #$0048 + LDX #$004E + LDA #$41E8 + JSR CLNZONE ; NETTOY MENU + RTS + +CLNDOCU LDY #$0000 + LDX #$0000 + LDA #$0000 + JSR CLNZONE ; NETTOY DOCU + RTS + +AFFQUIT LDY #$0030 + LDX #$003E + LDA #$0140 + STA AFFZONE2+1 + LDA #$41F0 + JSR AFFZONE ; AFFICHE QUIT + RTS + +CLNQUIT LDY #$0030 + LDX #$003E + LDA #$41F0 + JSR CLNZONE ; NETTOY QUIT + RTS + +AFFWARN LDY #$0037 + LDX #$003E + LDA #$2080 + STA AFFZONE2+1 + LDA #$41F0 + JSR AFFZONE ; AFFICHE WARNING + RTS + +CLNWARN LDY #$0037 + LDX #$003E + LDA #$41F0 + JSR CLNZONE ; NETTOY WARNING + RTS + +****** + +AFFZONE STX AFFZONE1+1 ; RECOPIE UN SPRITE SUR L'ECRAN + STA AFFZONE3+1 +AFFZONE1 LDX #$0000 ; NOMBRE DE *4-2 +AFFZONE2 LDAL $042000,X ; ADRESSE ZONE SPRITE +AFFZONE3 STAL $E12000,X ; ADRESSE ZONE ECRAN PROUT + DEX + DEX + BPL AFFZONE2 ; RECOPIE 1 LIGNE + LDA AFFZONE2+1 + CLC ; LIGNE SUIVANTE SPRITE + ADC #$00A0 + STA AFFZONE2+1 + LDA AFFZONE3+1 + CLC ; LIGNE SUIVANTE ECRAN + ADC #$00A0 + STA AFFZONE3+1 + DEY + BPL AFFZONE1 + RTS + +CLNZONE STA CLNZONE2+1 ; EFFACE UNE ZONE + STA CLNZONE3+1 + STX CLNZONE1+1 +CLNZONE1 LDX #$0000 ; NOMBRE DE *4-2 +CLNZONE2 LDAL $012000,X ; ADRESSE ZONE +CLNZONE3 STAL $012000,X ; ADRESSE ZONE + DEX + DEX + BPL CLNZONE2 ; RECOPIE 1 LIGNE + LDA CLNZONE2+1 + CLC ; LIGNE SUIVANTE SPRITE + ADC #$00A0 + STA CLNZONE2+1 + LDA CLNZONE3+1 + CLC ; LIGNE SUIVANTE ECRAN + ADC #$00A0 + STA CLNZONE3+1 + DEY + BPL CLNZONE1 + RTS + +****** + +GRILHG LDX #$01E2 ; GRILLE HORI GAUCHE + LDY #$000B + BRA GRILH1 + +GRILHM LDX #$01FA ; GRILLE HORI MILIEU + LDY #$0035 + BRA GRILH1 + +GRILHD LDX #$0266 ; GRILLE HORI DROITE + LDY #$000B + BRA GRILH1 + +GRILH1 LDAL $012000,X ; GRILLE HORIZONTALE + AND #$F0F0 + ORA #$0909 + STAL $012000,X + LDAL $012F00,X ; L2 + AND #$F0F0 + ORA #$0909 + STAL $012F00,X + LDAL $013E00,X ; L3 + AND #$F0F0 + ORA #$0909 + STAL $013E00,X + LDAL $014D00,X ; L4 + AND #$F0F0 + ORA #$0909 + STAL $014D00,X + LDAL $015C00,X ; L5 + AND #$F0F0 + ORA #$0909 + STAL $015C00,X + LDAL $016B00,X ; L6 + AND #$F0F0 + ORA #$0909 + STAL $016B00,X + LDAL $017A00,X ; L7 + AND #$F0F0 + ORA #$0909 + STAL $017A00,X + LDAL $018900,X ; L8 + AND #$F0F0 + ORA #$0909 + STAL $018900,X + LDAL $019800,X ; L9 + AND #$F0F0 + ORA #$0909 + STAL $019800,X + INX + INX + DEY + BPL GRILH3 + RTS +GRILH3 JMP GRILH1 + +GRILVG LDX #$01E1 + LDY #$0060 + BRA GRILV1 + +GRILVD LDX #$0271 + LDY #$0060 + BRA GRILV1 + +GRILV1 LDAL $012000,X ; GRILLE VERTICALE LARGEUR 2 + AND #$FFF0 + ORA #$0009 + STAL $012000,X + LDAL $01200C,X + AND #$FFF0 + ORA #$0009 + STAL $01200C,X + TXA + CLC + ADC #$0140 ; 2 LIGNES + TAX + DEY + BPL GRILV1 + RTS + +GRILVM LDX #$01F9 + LDY #$0060 + BRA GRILV2 + +GRILV2 LDAL $012000,X ; GRILLE VERTICALE LARGEUR 10 + AND #$FFF0 + ORA #$0009 + STAL $012000,X + LDAL $01200C,X ; L2 + AND #$FFF0 + ORA #$0009 + STAL $01200C,X + LDAL $012018,X ; L3 + AND #$FFF0 + ORA #$0009 + STAL $012018,X + LDAL $012024,X ; L4 + AND #$FFF0 + ORA #$0009 + STAL $012024,X + LDAL $012030,X ; L5 + AND #$FFF0 + ORA #$0009 + STAL $012030,X + LDAL $01203C,X ; L6 + AND #$FFF0 + ORA #$0009 + STAL $01203C,X + LDAL $012048,X ; L7 + AND #$FFF0 + ORA #$0009 + STAL $012048,X + LDAL $012054,X ; L8 + AND #$FFF0 + ORA #$0009 + STAL $012054,X + LDAL $012060,X ; L9 + AND #$FFF0 + ORA #$0009 + STAL $012060,X + LDAL $01206C,X ; L10 + AND #$FFF0 + ORA #$0009 + STAL $01206C,X + TXA + CLC + ADC #$0140 ; 2 LIGNES + TAX + DEY + BPL GRILV3 + RTS +GRILV3 JMP GRILV2 + +********* + +MAKESPR LDY #$0026 ; CREATION DE L'ECRAN SPRITE2 A PARTIR DE NIVEAU +MAKESPR1 LDA GRDTAB2,Y ; GROUND + TAX + LDA GRDTAB1,Y + PHY + JSR COPYBL0 ; AFFICHE NIVEAU -> SPRITE2 + PLY + DEY + DEY + BPL MAKESPR1 + LDA #$1E00 ; COPY LE BLOC A COTE DES TINIES + LDX #$4B40 + JSR COPYBL8 + LDA #$4B00 ; COPY DE L'ANIM A LA PLACE DU BLOC + LDX #$1E00 + JSR COPYBL8 + LDY #$001A +MAKESPR2 LDA ITETAB2,Y ; ITEM + TAX + LDA ITETAB1,Y + PHY + JSR COPYBL0 ; AFFICHE NIVEAU -> SPRITE2 + PLY + DEY + DEY + BPL MAKESPR2 + LDA #$0000 ; COPY DU SOL SOUS LES TINIES + LDX #$4B00 + JSR COPYBL8 + LDA #$0000 + LDX #$4B10 + JSR COPYBL8 + LDA #$0000 + LDX #$4B20 + JSR COPYBL8 + LDA #$0000 + LDX #$4B30 + JSR COPYBL8 + LDA #$0001 ; COPY DES 4 TINIES DANS NIVEAU + JSR SPRMSK ; VERT + LDA #$0002 + JSR SPRMSK ; BLEU + LDA #$0003 + JSR SPRMSK ; ROUGE + LDA #$0004 + JSR SPRMSK ; JAUNE + LDA #$0000 ; COLLE PAR DESSUS LA ZONE ROSE + JSR SPRMSK + LDA ptrNIV+1 ; PALETTE + AND #$FF00 + ORA #$007E + STA LP2+2 + LDX #$001F ; PALETTE IMAGE +LP2 LDAL $047E00,X + STAL $019E00,X + DEX + DEX + BPL LP2 + RTS + +SEBLCKG ASL ; COPIE DANS LE BUFFER SELECT D'UN BLOC GROUND + TAY + LDA GRDTAB2,Y + LDY DROITE + CPY #$0002 + BEQ SEBLCKG1 + LDX #$5206 ; ADRESSE ECRAN E1 GAUCHE + JSR COPYBL3 + RTS +SEBLCKG1 LDX #$528E ; ADRESSE ECRAN E1 DROITE + JSR COPYBL3 + RTS + +SEBLCKI ASL ; COPIE DANS LE BUFFER SELECT D'UN BLOC ITEM + TAY + LDA GRDTAB2,Y + LDY DROITE + CPY #$0002 + BEQ SEBLCKI1 + LDX #$5206 ; ADRESSE ECRAN E1 GAUCHE + JSR COPYBL4 + RTS +SEBLCKI1 LDX #$528E ; ADRESSE ECRAN E1 DROITE + JSR COPYBL4 + RTS + +AFFECRG LDA DROITE ; AFFICHE L'ECRAN GROUND + CMP #$0001 + BEQ AFFECRGD +AFFECRGG LDA #GAUCHTAB ; AFFICHE A GAUCHE + BRA AFFECRG0 +AFFECRGD LDA #DROITTAB ; AFFICHE A DROITE +AFFECRG0 STA AFFECRG2+1 + LDY #$0000 +AFFECRG1 PHY ; NUMERO DU CADRE +AFFECRG2 LDA GAUCHTAB,Y + TAY + LDA GROUBUF,Y ; NUMERO DU SPRITE + ASL + TAX + LDA GRDTAB1,X ; ADRESSE SPRITE + PHA + LDA GRILLETA,Y ; ADRESSE ECRAN + TAX + PLA + JSR COPYBL1 ; COPY BLOCK + PLY + INY + INY + CPY #$00B0 ; 11*8 *2 + BNE AFFECRG1 + RTS + +AFFECRI LDA DROITE ; AFFICHE L'ECRAN ITEM SUR L'ECRAN GROUND + CMP #$0001 + BEQ AFFECRID +AFFECRIG LDA #GAUCHTAB ; AFFICHE A GAUCHE + BRA AFFECRI0 +AFFECRID LDA #DROITTAB ; AFFICHE A DROITE +AFFECRI0 STA AFFECRI2+1 + LDY #$0000 +AFFECRI1 PHY ; NUMERO DU CADRE +AFFECRI2 LDA GAUCHTAB,Y + TAY + LDA ITEMBUF,Y ; NUMERO DU SPRITE + CMP #$0014 ; 20 + BMI AFFECRI3 + CMP #$0031 ; 49 + BEQ AFFECRI3 + CMP #$0036 + BPL AFFECRI3 + ASL + TAX + LDA GRDTAB1,X ; ADRESSE SPRITE + PHA + LDA GRILLETA,Y ; ADRESSE ECRAN + TAX + PLA + JSR COPYBL1 ; COPY BLOCK +AFFECRI3 PLY + INY + INY + CPY #$00B0 ; 11*8 *2 + BNE AFFECRI1 + RTS + +SEBLCKS ASL ; COPIE DANS LA GRILLE LE BLOC DU BUFFER + TAY + LDA GRILLETA,Y + TAY ; Y=ADRESSE ECRAN + LDA MAISELE + BEQ SEBLCKS1 + LDA ITZONE ; ITEM OU GROUND + BRA SEBLCKS2 +SEBLCKS1 LDA GRZONE ; +SEBLCKS2 ASL + TAX + LDA GRDTAB1,X ; A=ADRESSE SPRITE + TYX + JSR COPYBL1 + RTS + +GAUCHTAB HEX 0000,0200,0400,0600,0800,0A00,0C00,0E00,1000,1200,1400 + HEX 1A00,1C00,1E00,2000,2200,2400,2600,2800,2A00,2C00,2E00 + HEX 3400,3600,3800,3A00,3C00,3E00,4000,4200,4400,4600,4800 + HEX 4E00,5000,5200,5400,5600,5800,5A00,5C00,5E00,6000,6200 + HEX 6800,6A00,6C00,6E00,7000,7200,7400,7600,7800,7A00,7C00 + HEX 8200,8400,8600,8800,8A00,8C00,8E00,9000,9200,9400,9600 + HEX 9C00,9E00,A000,A200,A400,A600,A800,AA00,AC00,AE00,B000 + HEX B600,B800,BA00,BC00,BE00,C000,C200,C400,C600,C800,CA00 + +DROITTAB HEX 0400,0600,0800,0A00,0C00,0E00,1000,1200,1400,1600,1800 + HEX 1E00,2000,2200,2400,2600,2800,2A00,2C00,2E00,3000,3200 + HEX 3800,3A00,3C00,3E00,4000,4200,4400,4600,4800,4A00,4C00 + HEX 5200,5400,5600,5800,5A00,5C00,5E00,6000,6200,6400,6600 + HEX 6C00,6E00,7000,7200,7400,7600,7800,7A00,7C00,7E00,8000 + HEX 8600,8800,8A00,8C00,8E00,9000,9200,9400,9600,9800,9A00 + HEX A000,A200,A400,A600,A800,AA00,AC00,AE00,B000,B200,B400 + HEX BA00,BC00,BE00,C000,C200,C400,C600,C800,CA00,CC00,CE00 + +GRDTAB1 HEX 0000,1000,2000,3000,7000,100F,6000,4000,200F,700F + HEX 400F,9000,900F,5000,800F,000F,500F,600F,300F,8000 + HEX 001E,101E,201E,301E,401E,501E,601E,701E,801E,901E + HEX 002D,102D,202D,302D,402D,502D,602D,702D,802D,902D + HEX 003C,103C,203C,303C,403C,503C,603C,703C,803C,903C + HEX 004B,104B,204B,304B,404B + +GRDTAB2 HEX 6504,7304,8104,8F04,4515,5315,6115,6F15,2526,3326 + HEX 4126,4F26,0537,1337,2137,2F37,E547,F347,0148,0F48 + HEX 001E,101E,201E,301E,401E,501E,601E,701E,801E,901E + HEX 002D,102D,202D,302D,402D,502D,602D,702D,802D,902D + HEX 003C,103C,203C,303C,403C,503C,603C,703C,803C,903C + HEX 004B,104B,204B,304B,404B + +ITETAB1 HEX 901E,603C,703C,803C,103C,203C,303C,403C,001E,101E,701E,602D,802D,503C +ITETAB2 HEX B204,C004,CE04,DC04,8415,9215,A015,AE15,BC15,6426,7226,8026,8E26,9C26 + +GRILLETA HEX 8222,8E22,9A22,A622,B222,BE22,CA22,D622,E222,EE22,FA22,0623,1223 + HEX 8231,8E31,9A31,A631,B231,BE31,CA31,D631,E231,EE31,FA31,0632,1232 + HEX 8240,8E40,9A40,A640,B240,BE40,CA40,D640,E240,EE40,FA40,0641,1241 + HEX 824F,8E4F,9A4F,A64F,B24F,BE4F,CA4F,D64F,E24F,EE4F,FA4F,0650,1250 + HEX 825E,8E5E,9A5E,A65E,B25E,BE5E,CA5E,D65E,E25E,EE5E,FA5E,065F,125F + HEX 826D,8E6D,9A6D,A66D,B26D,BE6D,CA6D,D66D,E26D,EE6D,FA6D,066E,126E + HEX 827C,8E7C,9A7C,A67C,B27C,BE7C,CA7C,D67C,E27C,EE7C,FA7C,067D,127D + HEX 828B,8E8B,9A8B,A68B,B28B,BE8B,CA8B,D68B,E28B,EE8B,FA8B,068C,128C + +COPYBL0 LDY #$0500 ; COPIE DE BLOC 24*24 : NIVEAU -> SPRITE2 + STY COPYBL6+2 +COPYBL00 LDY #$0480 + STY COPYBL7+2 + STA COPYBL6+1 + TXA + CLC + ADC #$8000 + STA COPYBL7+1 + JMP COPYBLM +COPYBL1 LDY #$0500 ; COPIE DE BLOC 24*24 : NIVEAU -> ECRAN 01 + STY COPYBL6+2 + LDY #$0120 + STY COPYBL7+2 + STA COPYBL6+1 + STX COPYBL7+1 + JMP COPYBLM +COPYBL4 LDY #$0500 ; COPIE DE BLOC 24*24 : NIVEAU -> ECRAN E1 + STY COPYBL6+2 + LDY #$E120 ; PROUT + STY COPYBL7+2 + STA COPYBL6+1 + STX COPYBL7+1 + JMP COPYBLM +COPYBL2 LDY #$0480 ; COPIE DE BLOC 24*24 : SPRITE2 -> ECRAN 01 + STY COPYBL6+2 + LDY #$0120 + STY COPYBL7+2 + CLC + ADC #$8000 + STA COPYBL6+1 + STX COPYBL7+1 + JMP COPYBLM +COPYBL3 LDY #$0480 ; COPIE DE BLOC 24*24 : SPRITE2 -> ECRAN E1 + STY COPYBL6+2 + LDY #$E120 ; PROUT + STY COPYBL7+2 + CLC + ADC #$8000 + STA COPYBL6+1 + STX COPYBL7+1 + JMP COPYBLM +COPYBLN LDY #$0480 ; COPIE DE BLOC 24*24 : SPRITE2 -> NIVEAU + STY COPYBL6+2 +COPYBLN0 LDY #$0500 + STY COPYBL7+2 + STA COPYBL6+1 + STX COPYBL7+1 + JMP COPYBLM +COPYBL8 LDY #$0500 ; COPIE DE BLOC 24*24 : NIVEAU -> NIVEAU + STY COPYBL6+2 + STY COPYBL7+2 + STA COPYBL6+1 + STX COPYBL7+1 +COPYBLM LDY #$0017 ; HAUTEUR-1 +COPYBL5 LDX #$000A ; NOMBRE DE *4-2 +COPYBL6 LDAL $05A0A0,X ; ADRESSE NIVEAU +COPYBL7 STAL $048000,X ; ADRESSE SPRITE2 + DEX + DEX + BPL COPYBL6 ; RECOPIE 1 LIGNE + LDA COPYBL6+1 + CLC ; LIGNE SUIVANTE SPRITE + ADC #$00A0 + STA COPYBL6+1 + LDA COPYBL7+1 + CLC ; LIGNE SUIVANTE ECRAN + ADC #$00A0 + STA COPYBL7+1 + DEY + BPL COPYBL5 + RTS + +****************** AFFICHAGE SPRITE SANS MASQUE ********************** + +SPRMSK ASL ; ROUTINE AFFICHAGE SPRITE SANS MASQUE + TAX + LDA MULDIX,X ; *10 + TAX + LDA SPMSKTAB2,X ; ADRESSE BASSE DESTINATION + STA SPRMSK2+1 + STA SPRMSK5+1 + STA SPRMSK7+1 + INX + LDA SPMSKTAB2,X ; ADRESSE HAUTE DESTINATION + STA SPRMSK2+2 + STA SPRMSK5+2 + STA SPRMSK7+2 + INX + INX + LDA SPMSKTAB2,X ; ADRESSE BASSE SOURCE + STA SPRMSK1+1 + STA SPRMSK3+1 + STA SPRMSK4+1 + STA SPRMSK6+1 + INX + LDA SPMSKTAB2,X ; ADRESSE HAUTE SOURCE + STA SPRMSK1+2 + STA SPRMSK3+2 + STA SPRMSK4+2 + STA SPRMSK6+2 + INX + INX + LDA SPMSKTAB2,X ; LONGUEUR + ASL + STA SPRMSK8+1 + INX + INX + LDA SPMSKTAB2,X ; HAUTEUR + STA SPRMSK9+1 + + LDY #$0000 +SPRMSK00 PHY + LDX #$0000 +SPRMSK0 PHX +SPRMSK1 LDAL $AAAAAA,X ; 4 POINTS + AND #$00FF + TAY +SPRMSK2 LDAL $E12000,X ; ECRAN PROUT + AND SPMSKTAB3,Y +SPRMSK3 ORAL $AAAAAA,X ; SPRITE + STA SPMSKTAB1 + INX +SPRMSK4 LDAL $AAAAAA,X ; SPRITE + AND #$00FF + TAY +SPRMSK5 LDAL $E12000,X ; ECRAN PROUT + AND SPMSKTAB3,Y +SPRMSK6 ORAL $AAAAAA,X ; SPRITE + STA SPMSKTAB1+1 + DEX + LDA SPMSKTAB1 +SPRMSK7 STAL $E12000,X ; ECRAN PROUT + PLX + INX + INX +SPRMSK8 CPX #$AAAA + BNE SPRMSK0 + LDA SPRMSK2+1 ; ECRAN LIGNE SUIVANTE + CLC + ADC #$00A0 + STA SPRMSK2+1 + STA SPRMSK5+1 + STA SPRMSK7+1 + LDA SPRMSK1+1 ; SPRITE LIGNE SUIVANTE + CLC + ADC #$00A0 + STA SPRMSK1+1 + STA SPRMSK3+1 + STA SPRMSK4+1 + STA SPRMSK6+1 + PLY + INY +SPRMSK9 CPY #$AAAA + BNE SPRMSK00 + RTS + +SPMSKTAB1 HEX 000000 + +SPMSKTAB2 HEX 8A9B04,A0C004,1600,5500 ; ADR DESTI,ADR SOURCE,LONG/4,HAUTEUR + HEX 004B04,6D9104,0600,1800 + HEX 104B04,A48404,0600,1800 + HEX 204B04,2D8104,0600,1800 + HEX 304B04,ADA104,0600,1800 + +SPMSKTAB3 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 + +MULDIX HEX 0000,0A00,1400,1E00,2800,3200,3C00,4600,5000,5A00,6400 + +********************************************************************* + +HEXDEC HEX 0000,0001,0002,0003,0004,0005,0006,0007,0008,0009 + HEX 0100,0101,0102,0103,0104,0105,0106,0107,0108,0109 + HEX 0200,0201,0202,0203,0204,0205,0206,0207,0208,0209 + HEX 0300,0301,0302,0303,0304,0305,0306,0307,0308,0309 + HEX 0400,0401,0402,0403,0404,0405,0406,0407,0408,0409 + HEX 0500,0501,0502,0503,0504,0505,0506,0507,0508,0509 + HEX 0600,0601,0602,0603,0604,0605,0606,0607,0608,0609 + HEX 0700,0701,0702,0703,0704,0705,0706,0707,0708,0709 + HEX 0800,0801,0802,0803,0804,0805,0806,0807,0808,0809 + HEX 0900,0901,0902,0903,0904,0905,0906,0907,0908,0909 + HEX 0A00,0A01,0A02,0A03,0A04,0A05,0A06,0A07,0A08,0A09 + +KBD LDAL $00BFFF ; LECTURE DU CLAVIER + BPL KBD + STAL $00C010 + RTS diff --git a/thetinies/TCK.Play.s b/thetinies/TCK.Play.s new file mode 100644 index 0000000..2d55212 --- /dev/null +++ b/thetinies/TCK.Play.s @@ -0,0 +1,2393 @@ +*--------------------------------------* +* * +* Tinies Contruction Kit: Test level * +* * +* (c) 01/1995 by Brutal Deluxe * +* * +*--------------------------------------* + +scrMINU = $9818 +scrSECO = $9824 +scrLEVEL = $9844 +scrLIFE = $9868 +scrJOKER = $988c + +*-------------------------------------- + +tiniesPLAY lda #-1 + sta fgCURS + + sei + stz fgBUG + + PushLong #intTIME + _SetHeartBeat + PushLong #intANIM + _SetHeartBeat + + cli + + stz life + stz joker + + stz curX + stz curY + + stz fgLOST + stz arrTINYcur + stz doMAIN2+1 + stz intANIM4+1 + + lda ptrBACK+1 + sta intANIM17+2 + sta hideCURS1+2 + sta hideCURS3+2 + sta hideCURS4+2 + sta esprit8+2 + clc + adc #$000e + sta hideCURS2+2 + + jsr decodeALL + + lda anNUMBER + bne tiniesPLAY1 + jmp lostLEVEL1 + +tiniesPLAY1 lda ptrBACK+1 + ldy #0 + jsr fadeIN + + jsr affALL + + lda #1 + sta fgBUG + +*-------------------------------------- Gere le curseur + +gereCURS lda fgLOST + bne gereCURS0 + + ldx curX + ldy curY + jsr showCURS ; Show curseur + jsr gereKEY ; gere les touches + bcs gereCURS ; aucun deplacement + cmp #-1 ; 'esc' hit + bne gereCURS1 +gereCURS0 jmp lostLEVEL + +gereCURS1 pha ; Efface le curseur + ldx curX + ldy curY + jsr hideCURS + + pla + bne gereCURS2 + + ldx curX + ldy curY + jsr calcWHAT + lda plateau3,x + cmp #4 + bcs gereCURS + stz fgCURS + brl doTINIES ; On gere les Tinies + +gereCURS2 cmp #1 ; Left + bne gereCURS4 + + lda curX + beq gereCURS3 + dec + sta curX +gereCURS3 brl gereCURS + +gereCURS4 cmp #2 ; Right + bne gereCURS6 + + lda curX + cmp #12 + beq gereCURS5 + inc + sta curX +gereCURS5 brl gereCURS + +gereCURS6 cmp #3 ; Up + bne gereCURS8 + + lda curY + beq gereCURS7 + dec + sta curY +gereCURS7 brl gereCURS + +gereCURS8 cmp #4 ; Down + bne gereCURS9 + + lda curY + cmp #7 + beq gereCURS9 + inc + sta curY +gereCURS9 brl gereCURS + +*-------------------------------------- Gere les Tinies + +doTINIES sta espCOL ; couleur du Tiny + + ldx curX + ldy curY + jsr calcWHAT + stx curXY + + lda curX + sta oldX + lda curY + sta oldY + lda curXY + sta oldXY + + ldx anNUMBER ; Met le Tiny inactif +]lp lda anOBJET,x + cmp espCOL + bne doTINIES1 + lda anCOORD,x + cmp curXY + beq doTINIES2 +doTINIES1 dex + dex + bpl ]lp + ldx anNUMBER +doTINIES2 stx myNUMBER ; Sauve X pour plus tard + stz anANIM,x + stz anACTIF,x + + stz compteur2 ; Affiche le Tiny qui attend de bouger + lda #anBougDr + ldx curXY + ldy ptrBOUGE+1 + jsr esprit + +*-------------------------------------- + +doMAIN lda fgLOST + beq doMAIN1 + jmp lostLEVEL + +doMAIN1 lda arrTINYcur ; etait-ce un tiny en cours? + beq doMAIN2 + + ldx arrNUMBER + lda oldXY + sta anCOORD,x + lda #-1 + sta anACTIF,x + + lda arrCOL + sta espCOL + lda arrXY + sta curXY + sta oldXY + lda arrX + sta curX + sta oldX + lda arrY + sta curY + sta oldY + stz arrTINYcur + +doMAIN2 ldx #0 ; est-ce que l'on a un tiny sur fleche? + lda plateau4,x + inx + inx + stx doMAIN2+1 + cpx #208 + bne doMAIN3 + stz doMAIN2+1 + brl doMAIN6 + +doMAIN3 cmp #-1 + beq doMAIN2 + + ldy espCOL + sty arrCOL + sta espCOL + + dex + dex + lda #-1 + sta plateau4,x + + lda curXY + sta arrXY + lda curX + sta arrX + lda curY + sta arrY + + stx curXY + + lda tblXY,x + pha + and #$ff00 + xba + sta curX + pla + and #$00ff + sta curY + + lda #-1 + sta arrTINYcur + + txy + ldx anNUMBER ; Met le Tiny inactif +]lp lda anOBJET,x + cmp espCOL + bne doMAIN4 + lda anCOORD,x + cmp curXY + beq doMAIN5 +doMAIN4 dex + dex + bpl ]lp + ldx anNUMBER +doMAIN5 stx arrNUMBER ; Sauve X pour plus tard + stz anACTIF,x + + lda plateau2,y + sec + sbc #24 + asl + tax + lda spyDIR2,x + bra doMAIN9 + +*--- + +doMAIN6 jsr gereKEY + bcc doMAIN7 + brl doMAIN +doMAIN7 cmp #-1 + bne doMAIN8 + jmp lostLEVEL + +doMAIN8 cmp #0 ; Deselectionne + bne doMAIN9 + + lda #-1 + sta fgCURS + brl itsEND + +doMAIN9 sta tinyDIR + stz tinyMOVE ; a pas bouge + stz tinyROULE ; roule pas + +doMAIN10 ldal $e0bfff + bpl doMAIN12 + xba + and #$ff + cmp #$9b + bne doMAIN12 + jmp lostLEVEL + +doMAIN12 lda fgLOST + beq doMAIN13 + jmp lostLEVEL + +doMAIN13 lda curX + sta oldX + lda curY + sta oldY + lda curXY + sta oldXY + + ldx curXY ; Sommes-nous sur une fleche ? + lda plateau2,x ; empeche le joueur de partir + cmp #24 ; de la fleche + bcc doMAIN14 + cmp #28 + bcs doMAIN14 + sec + sbc #24 + asl + tax + lda spyDIR2,x + sta tinyDIR + +doMAIN14 jsr calcDIR ; regarde la nouvelle position + cmp #-1 + bne doMOVE + + jsr doBOOM ; boom... + brl doMAIN + +*-------------------------------------- + +doMOVE ldx curX ; Regarde ce qu'il y a sur la nouvelle + ldy curY ; position + jsr calcWHAT + stx curXY + + lda plateau1,x ; is there a sol + cmp #5 + bcc doMOVE2 + +doMOVE1 lda oldX + sta curX + lda oldY + sta curY + lda oldXY + sta curXY + + jsr doBOOM + brl doMAIN + +*--- + +doMOVE2 lda plateau3,x ; is there a tiny + cmp #-1 + beq doMOVE3 + + ldx oldXY ; Is Tiny on Arrow ? + lda plateau2,x + cmp #24 + bcc doMOVE1 + cmp #28 + bcs doMOVE1 + + lda espCOL + sta plateau4,x + + lda oldX + sta curX + lda oldY + sta curY + lda oldXY + sta curXY + brl doMAIN + +doMOVE3 lda plateau2,x ; animation + sta tinyDEC + cmp #-1 + bne move1 + brl moveSHOW + +*--- + +move1 cmp #4 ; tiny + bcs move2 + jsr doBOOM + brl doMAIN + +move2 cmp #8 ; sleeper + bcs move3 + jsr doSLEEP + brl moveSHOW + +move3 cmp #12 ; teleporteur + bcs move5 + jsr doTELE + bcc move4 + brl moveSHOW2 +move4 brl moveSHOW3 + +move5 cmp #16 ; bombe + bcs move6 + jsr doBOMB + brl moveSHOW2 + +move6 cmp #20 ; porte + bcs move8 + jsr doDOOR + bcc move7 + brl doMOVE1 +move7 brl moveSHOW + +move8 cmp #24 ; interrupteur + bcs move9 + jsr doINTE + brl moveSHOW + +move9 cmp #28 ; fleche + bcs move10 + jsr doFLEC + brl moveSHOW2 + +move10 cmp #28 ; bumper + bne move11 + jsr doBUMP + brl moveSHOW + +move11 cmp #29 ; bonus temps + bne move12 + jsr doTIM + brl moveSHOW + +move12 cmp #30 ; life + bne move13 + jsr doLIF + brl moveSHOW + +move13 cmp #31 ; joker + bne move14 + jsr doJOK + brl moveSHOW + +move14 cmp #32 ; animation fixe + bne moveSHOW + jsr doBOOM + brl doMAIN + +*--- + +moveSHOW jsr doSHOW + +moveSHOW2 ldx oldXY + lda #-1 + sta plateau3,x +moveSHOW3 ldx curXY + lda espCOL + sta plateau3,x + + lda #1 + sta tinyMOVE + brl doMAIN10 + +*-------------------------------------- Teste la fin de niveau + +itsEND ldx anNUMBER ; Regarde si sous le Tiny +]lp lda anCOORD,x ; on n'aurait pas un sleeper + cmp oldXY + bne itsEND1 + lda anOBJET,x + sec + sbc espCOL + cmp #4 + beq itsEND3 +itsEND1 dex + dex + bpl ]lp + +itsEND2 ldx myNUMBER ; No sleeper under + lda #-1 + sta anACTIF,x + lda oldXY + sta anCOORD,x + brl gereCURS + +itsEND3 lda anACTIF2,x ; Sleeper was active ? + beq itsEND2 + + ldx myNUMBER ; Tiny now sleeps + lda #$2222 + sta anACTIF,x + lda oldXY + sta anCOORD,x + + ldx anNUMBER + dex ; Regarde, s'ils dorment tous + dex +]lp lda anOBJET,x + cmp #4 + bcs itsEND4 + lda anACTIF,x + cmp #$2222 + bne itsEND5 +itsEND4 dex + dex + bpl ]lp + jmp lostLEVEL +itsEND5 brl gereCURS + +*--- + +lostLEVEL lda #2 + jsr nowWAIT + +lostLEVEL1 sei + stz fgBUG + + PushLong #intANIM + _DelHeartBeat + PushLong #intTIME + _DelHeartBeat + + cli + + jmp LP4 + +*-------------------------------------- Affiche le Tiny + +doSHOW stz compteur2 + lda tinyDIR + dec + asl + clc + adc tinyROULE + tax + lda chseBOUG,x + ldy ptrBACK+1 + jsr moveIT + + ldx anNUMBER ; Regarde si sous le Tiny (pos. precedente) +]lp lda anCOORD,x ; on n'aurait pas un sleeper + cmp oldXY + bne doSHOW1 + lda anOBJET,x + cmp #4 + bcc doSHOW1 + cmp #8 + bcc doSHOW2 +doSHOW1 dex + dex + bpl ]lp + rts +doSHOW2 lda anACTIF2,x + sta anACTIF,x + stz anANIM,x + rts + +*--- Boom + +doBOOM lda tinyROULE + bne doBOOM1 + lda tinyMOVE + beq doBOOM1 + rts + +doBOOM1 lda #99 + sta compteur2 + lda tinyDIR + dec + asl + tax + lda chseBOOM,x + ldx curXY + ldy ptrTINY1+1 + jsr esprit + rts + +*--- Sleep + +doSLEEP ldx anNUMBER ; Regarde si sous le Tiny +]lp lda anCOORD,x ; on n'aurait pas un sleeper + cmp curXY + bne doSLEEP1 + lda anOBJET,x + cmp #4 + bcc doSLEEP1 + cmp #8 + bcc doSLEEP2 +doSLEEP1 dex + dex + bpl ]lp + rts +doSLEEP2 lda anACTIF,x + sta anACTIF2,x + stz anACTIF,x + stz anANIM,x + rts + +*--- Tele + +doTELE jsr doSHOW + + lda tinyDEC + sec + sbc espCOL + cmp #8 + beq doTELE1 + + sec + rts + +doTELE1 ldx oldXY + lda #-1 + sta plateau3,x + + ldx #206 +]lp lda plateau2,x + cmp tinyDEC + bne doTELE2 + cpx curXY + bne doTELE3 +doTELE2 dex + dex + bpl ]lp + rts + +doTELE3 lda plateau3,x + cmp #-1 + beq doTELE4 + rts + +doTELE4 lda curXY + sta oldXY + stx curXY + + lda #99 + sta compteur2 + + lda tinyDIR + dec + asl + tax + lda chseTELE,x + ldx oldXY + ldy ptrGADGET2+1 + jsr esprit + + ldx curXY + stx oldXY + lda tblXY,x + pha + and #$ff00 + xba + sta curX + sta oldX + pla + and #$00ff + sta curY + sta oldY + + lda tinyDIR + dec + asl + tax + lda chseTELE2,x + ldx curXY + ldy ptrGADGET2+1 + jsr esprit + + jsr doSHOW + + lda #8 + sta tinyROULE + clc + rts + +*--- Bomb + +doBOMB jsr doSHOW + + lda tinyDEC + sec + sbc espCOL + cmp #12 + beq doBOMB1 + + rts + +doBOMB1 lda #99 + sta compteur2 + + lda #anEXPL1 + ldx curXY + ldy ptrTINY1+1 + jsr esprit + + ldx curXY + lda plateau1,x + jsr sprite + + lda #anEXPL2 + ldx curXY + ldy ptrTINY1+1 + jsr esprit + + lda joker + bne doBOMB2 + jmp lostLEVEL + +doBOMB2 dec joker + + jsr affALL + + lda #anJOKER + ldx curXY + ldy ptrGADGET3+1 + jsr esprit + + stz tinyROULE + + ldx curXY + lda #-1 + sta plateau2,x + rts + +*--- Door + +doDOOR lda tinyDEC + sec + sbc espCOL + cmp #16 + beq doDOOR1 + + sec + rts + +doDOOR1 lda #99 + sta compteur2 + + lda #anDOOR + ldx curXY + ldy ptrGADGET3+1 + jsr esprit + + lda espCOL + asl + tax + lda anOPEN,x + clc + adc ptrGADGET3 + ldx curXY + jsr sprite10 + + ldx curXY + lda #-1 + sta plateau2,x + clc + rts + +*--- Inte + +doINTE lda tinyDEC + sec + sbc espCOL + cmp #20 + beq doINTE1 + rts + +doINTE1 ldx anNUMBER +]lp lda anOBJET,x + sec + sbc espCOL + cmp #4 + bne doINTE2 + lda #-1 + sta anACTIF,x + sta anACTIF2,x + stz anANIM,x +doINTE2 dex + dex + bpl ]lp + + lda espCOL + asl + tax + lda anINTE,x + clc + adc ptrGADGET3 + ldx curXY + jsr sprite10 + + rts + +*--- Arrow + +doFLEC jsr doSHOW + +doFLEC1 ldx curXY + lda plateau2,x + sec + sbc #24 + + asl + tax + lda spyDIR2,x + sta tinyDIR + + rts + +*--- Bump + +doBUMP lda #99 + sta compteur2 + + stz esprit4+1 + + lda tinyDIR + dec + asl + tax + lda chseBUMP,x + ldx curXY + ldy ptrTINY1+1 + jsr esprit + + lda tinyDIR + dec + asl + tax + lda chseBOOM,x + ldx oldXY + ldy ptrTINY1+1 + jsr esprit + + lda #10 + sta esprit4+1 + lda #1 + sta tinyMOVE + lda #8 + sta tinyROULE + + lda tinyDIR ; change la direction du Tiny + dec + asl + tax + lda spyDIR,x + sta tinyDIR + + lda oldX + sta curX + lda oldY + sta curY + lda oldXY + sta curXY + + rts + +*--- Time, Life and Joker + +doTIM inc minutes + bra doCLR + +doLIF inc life + bra doCLR + +doJOK inc joker + +doCLR ldx curXY + lda plateau1,x + jsr sprite + + ldx curXY + lda #-1 + sta plateau2,x + + jsr affALL + + rts + +*-------------------------------------- Deplacement + +calcDIR lda tinyDIR ; left + cmp #1 + bne calcDIR2 + lda curX + bne calcDIR1 + lda #-1 + rts +calcDIR1 dec curX + rts + +calcDIR2 cmp #2 ; right + bne calcDIR4 + lda curX + cmp #12 + bne calcDIR3 + lda #-1 + rts +calcDIR3 inc curX + rts + +calcDIR4 cmp #3 ; up + bne calcDIR6 + lda curY + bne calcDIR5 + lda #-1 + rts +calcDIR5 dec curY + rts + +calcDIR6 lda curY ; down + cmp #7 + bne calcDIR7 + lda #-1 + rts +calcDIR7 inc curY + rts + +*--- + +calcWHAT txa ; calcule adresse plateau + asl + asl + asl + asl + pha + tya + asl + clc + adc 1,s + tax + pla + rts + +*-------------------------------------- Clavier + +gereKEY ldal $e0bfff ; lit le clavier + bpl gereKEY7 + stal $e0c010 + xba + and #$00ff + cmp #$009b + bne gereKEY1 + lda #-1 + clc + rts +gereKEY1 cmp keyPREF ; Select ?? + bne gereKEY3 + lda #0 + clc + rts +gereKEY3 cmp keyPREF+2 ; left ?? + bne gereKEY4 + lda #1 + clc + rts +gereKEY4 cmp keyPREF+4 ; right ?? + bne gereKEY5 + lda #2 + clc + rts +gereKEY5 cmp keyPREF+6 ; up ?? + bne gereKEY6 + lda #3 + clc + rts +gereKEY6 cmp keyPREF+8 ; down ?? + bne gereKEY7 + lda #4 + clc + rts +gereKEY7 sec + rts + +*-------------------------------------- Decodage + +decodeALL jsr clrECRAN + + ldx #0 + lda #-1 +]lp sta plateau2,x + sta plateau3,x + sta plateau4,x + inx + inx + cpx #208 + bne ]lp + + lda #plateau5 + sta Debut + lda #^plateau5 + sta Debut+2 + + ldy #0 + tyx +decodeALL1 phx + phy + lda [Debut],y + and #$00ff + sta plateau1,x + cmp #$00ff + beq decodeALL2 + + jsr sprite + +decodeALL2 ply + iny + plx + inx + inx + cpx #208 + bne decodeALL1 + + lda Debut + clc + adc #104 + sta Debut + + ldy #0 + tyx +decodeALL3 phx + phy + lda [Debut],y + and #$00ff + cmp #$00ff + beq decodeALL5 + cmp #0004 + bcs decodeALL4 + sta plateau3,x + lda #-1 + sta plateau2,x + bra decodeALL5 +decodeALL4 sta plateau2,x + cmp #32 + bne decodeALL40 + pha + lda #-1 + sta plateau1,x + pla + +decodeALL40 clc + adc #21 + jsr sprite + +decodeALL5 ply + iny + plx + inx + inx + cpx #208 + bne decodeALL3 + +*--- + + ldx #208-2 ; Animation + lda #$5555 +]lp sta anOBJET,x + sta anACTIF,x + sta anCOORD,x + sta anANIM,x + sta anACTIF2,x + dex + dex + bpl ]lp + + ldy #0 + tyx +]lp lda [Debut],y + and #$00ff + cmp #$00ff + beq decodeALL7 + cmp #32 + beq decodeALL6 + cmp #8 + bcs decodeALL7 + +decodeALL6 sta anOBJET,x + stz anANIM,x + lda #-1 + sta anACTIF,x + sta anACTIF2,x + tya + asl + sta anCOORD,x + inx + inx + +decodeALL7 iny + cpy #104 + bne ]lp + + stx anNUMBER + + ldy #0 +decodeALL8 lda [Debut],y + and #$00ff + cmp #0020 + bcc decodeALL10 + cmp #0024 + bcs decodeALL10 + + sec + sbc #0016 + ldx anNUMBER +]lp cmp anOBJET,x + bne decodeALL9 + stz anACTIF,x + stz anACTIF2,x +decodeALL9 dex + dex + bpl ]lp + +decodeALL10 iny + cpy #104 + bne decodeALL8 + + rts + +*-------------------------------------- Routines graphiques + +showCURS txa + asl + tax + lda scrX,x + pha + tya + asl + tay + lda scrY,y + clc + adc 1,s + tax ; en X, adresse ecran + pla + + lda fgCURS + cmp #-1 + beq showCURS1 + rts + +showCURS1 lda cursL + stal $012002,x + stal $012e62,x + lda cursL+2 + stal $012004,x + stal $012e64,x + lda cursL+4 + stal $012006,x + stal $012e66,x + lda cursL+6 + stal $012008,x + stal $012e68,x + lda cursL+8 + stal $01200a,x + stal $012e6a,x + lda cursL+10 + stal $01200c,x + stal $012e6c,x + + ldy #0 +]lp sep #$20 + ldal $0120a2,x + and cursMSK1,y + ora cursCOL1,y + stal $0120a2,x + ldal $0120ad,x + and cursMSK2,y + ora cursCOL2,y + stal $0120ad,x + rep #$20 + txa + clc + adc #$a0 + tax + iny + cpy #22 + bne ]lp + rts + +*--- + +hideCURS txa + asl + tax + lda scrX,x + pha + tya + asl + tay + lda scrY,y + clc + adc 1,s + tax ; en X, adresse ecran + pla + phx + + ldy #$0a +hideCURS1 ldal $110002,x + stal $012002,x +hideCURS2 ldal $110e62,x + stal $012e62,x + inx + inx + dey + dey + bpl hideCURS1 + + plx + ldy #0 +]lp sep #$20 +hideCURS3 ldal $1100a2,x + stal $0120a2,x +hideCURS4 ldal $1100ad,x + stal $0120ad,x + rep #$20 + txa + clc + adc #$a0 + tax + iny + cpy #22 + bne ]lp + rts + +*--- Effacement de l'ecran + +clrECRAN lda ptrBACK + sta Arrivee + lda ptrBACK+2 + sta Arrivee+2 + + ldy #0 + tya +]lp sta [Arrivee],y + iny + iny + cpy #$7e00 + bne ]lp + + lda ptrNIV ; Met la palette + sta Debut + lda ptrNIV+2 + sta Debut+2 + + ldy #$7e00 +]lp lda [Debut],y + sta [Arrivee],y + iny + iny + bpl ]lp + rts + +*--- Routine col/col + +moveIT sta moveIT2+1 + + sty moveIT6+2 ; page 2 + + lda ptrBOUGE+1 + sta moveIT5+2 + + ldx oldXY + cpx curXY + bne moveIT1 + rts + +moveIT1 lda scrCASE,x + clc + adc #$2 + sta espECR + clc + adc #$2000 + sta espSCR + +moveIT2 lda $ffff ; Lit adresse sprite source + clc + adc ptrBOUGE + sta moveIT5+1 + + inc moveIT2+1 + inc moveIT2+1 + + lda tinyDIR ; En fonction de la direction + dec + asl ; calcule les bonnes coordonnees + tax + lda tinyHOW,x + sta moveIT12+1 + lda tinyCALC,x + pha + clc + adc espECR + sta espECR + clc + adc ptrBACK + sta moveIT6+1 + + pla + clc + adc espSCR + sta espSCR + sta moveIT8+1 + + lda espCOL ; couleur du Tinie + asl + tax + lda anDRAW,x + sta moveIT7+1 + + ldx #2 +]lp wai + dex +PATCH bpl ]lp + + lda #23 + sta compteur3 +moveIT3 sep #$20 +moveIT4 ldx #0 +moveIT5 ldal $110000,x ; data + tay +moveIT6 ldal $e12000,x + and tblMASK,y ; MASK +moveIT7 ora tblGRE,y ; pour couleur +moveIT8 stal $012000,x + inx +moveIT9 cpx #12 + bne moveIT5 + + rep #$20 + lda moveIT4+1 + clc + adc #160 + sta moveIT4+1 + clc + adc #12 + sta moveIT9+1 + dec compteur3 + lda compteur3 + bpl moveIT3 + + stz moveIT4+1 + lda #12 + sta moveIT9+1 + + lda tinyDIR ; Maintenant efface + dec + pha + asl + tax + lda tinyCALC2,x + clc + adc espECR + tax + pla + cmp #2 + bcs moveIT10 + jsr clrLR + bra moveIT11 +moveIT10 jsr clrUD + +moveIT11 inc compteur2 + lda compteur2 +moveIT12 cmp #8 + beq moveIT13 + brl moveIT2 +moveIT13 rts + +*--- Efface les colonnes + +clrLR txa + clc + adc ptrBACK + sta Second + lda ptrBACK+2 + sta Second+2 + + txa + clc + adc #$2000 + sta Third + lda #$0001 + sta Third+2 + + ldy #0 +]lp lda [Second],y + sta [Third],y + iny + lda [Second],y + sta [Third],y + dey + tya + clc + adc #160 + tay + cpy #24*160 + bne ]lp + rts + +*--- Efface les lignes + +clrUD txa + clc + adc ptrBACK + sta Second + lda ptrBACK+2 + sta Second+2 + + txa + clc + adc #$2000 + sta Third + lda #$0001 + sta Third+2 + + ldx #3 + brl sprite2 + +*--- Best routine pour afficher un sprite + +esprit pha + lda scrCASE,x + sta espECR + pla +esprit1 sta esprit2+1 ; Adresse table d'animation + sty espADR+1 + sty esprit7+2 + +esprit2 lda $ffff ; adresse source de la table d'animation + cmp #-1 + bne esprit3 + rts + +esprit3 clc + adc espADR + sta esprit7+1 + +esprit4 ldx #9 +]lp wai + dex + bpl ]lp + + stz esprit6+1 + lda #12 + sta esprit11+1 + + lda espECR ; prend adresse ecran + clc + adc #2 + adc ptrBACK + sta esprit8+1 + + lda espECR + clc + adc #$2002 + sta esprit10+1 + + lda espCOL ; couleur du Tiny + asl + tax + lda anDRAW,x + sta esprit9+1 + + lda esprit2+1 ; next one + inc + inc + sta esprit2+1 + + lda #23 + sta compteur3 + +esprit5 sep #$20 +esprit6 ldx #0 +esprit7 ldal $110000,x ; data + tay +esprit8 ldal $e12000,x + and tblMASK,y ; MASK +esprit9 ora tblGRE,y ; pour couleur +esprit10 stal $012000,x + inx +esprit11 cpx #12 + bne esprit7 + + rep #$20 + lda esprit6+1 + clc + adc #160 + sta esprit6+1 + clc + adc #12 + sta esprit11+1 + dec compteur3 + lda compteur3 + bpl esprit5 + + dec compteur2 + lda compteur2 + bmi esprit12 + brl esprit2 +esprit12 rts + +*--- Routine pour afficher un sprite + +sprite10 sta Second + lda ptrGADGET3+2 + sta Second+2 + + bra sprite1 + +*--- Routine pour afficher un sprite + +sprite asl + tay + + lda scrNIV,y + tay + clc + adc ptrNIV + sta Second + lda ptrNIV+2 + sta Second+2 + +sprite1 lda scrCASE,x + clc + adc #$0002 + clc + adc ptrBACK + sta Third + lda ptrBACK+2 + sta Third+2 + + ldx #23 +sprite2 ldy #0 +]lp lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + + tya + clc + adc #160-10 + tay + + dex + bpl ]lp + rts + +*-------------------------------------- Affichage d'un texte + +printIT sta printIT1+1 + stx Arrivee+2 + sty Arrivee + +printIT1 lda $ffff + and #$00ff + bne printIT2 + rts +printIT2 pha + inc printIT1+1 + + ldy #99 +]lp lda tblFNT8,y + and #$00ff + cmp 1,s + beq printIT3 + dey + bpl ]lp + iny + +printIT3 pla + tya + asl + tay + lda adrFNT8,y + clc + adc ptrFONTE + sta Debut + lda ptrFONTE+2 + sta Debut+2 + + ldx #0007 + ldy #0000 +]lp lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + + tya + clc + adc #160-2 + tay + + dex + bpl ]lp + + lda Arrivee + clc + adc #4 + sta Arrivee + brl printIT1 + +*-------------------------------------- Affichage des donnees + +putTIM ldx minutes + lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strMINU + pla + and #$000f + ora #$00b0 + ora strMINU + xba + sta strMINU + + ldx secondes + lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strSECO + pla + and #$000f + ora #$00b0 + ora strSECO + xba + sta strSECO + rts + +*--- + +putLVL ldx level + cpx #100 + bne putLVL1 + + lda #"()" + bne putLVL2 + +putLVL1 lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strLEVEL + pla + and #$000f + ora #$00b0 + ora strLEVEL + xba +putLVL2 sta strLEVEL + rts + +*--- + +putLIFE ldx life + cpx #99 + bcc putLIFE1 + ldx #99 +putLIFE1 lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strLIFE + pla + and #$000f + ora #$00b0 + ora strLIFE + xba + sta strLIFE + rts + +*--- + +putJOKER ldx joker + cpx #99 + bcc putJOKER1 + ldx #99 +putJOKER1 lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strJOKER + pla + and #$000f + ora #$00b0 + ora strJOKER + xba + sta strJOKER + rts + +*-------------------------------------- Affichage de la barre + +affALL jsr putTIM + jsr putLVL + jsr putLIFE + jsr putJOKER + + lda ptrFONTE + clc + adc #$18 + tay + ldx ptrFONTE+2 + lda #strMINU + jsr printIT + + lda ptrFONTE + clc + adc #$24 + tay + ldx ptrFONTE+2 + lda #strSECO + jsr printIT + + lda ptrFONTE + clc + adc #$44 + tay + ldx ptrFONTE+2 + lda #strLEVEL + jsr printIT + + lda ptrFONTE + clc + adc #$68 + tay + ldx ptrFONTE+2 + lda #strLIFE + jsr printIT + + lda ptrFONTE + clc + adc #$8c + tay + ldx ptrFONTE+2 + lda #strJOKER + jsr printIT + + stz fgPRINT + lda ptrFONTE ; Affiche depuis fonte + ldy #$0198 + jsr putBAR + + rts + +*--- + +putBAR ldx ptrFONTE+1 + stx putBAR1+2 + + sta putBAR1+1 + sty putBAR2+2 + + ldx #$04f4 +putBAR1 ldal $012000,x +putBAR2 stal $012000,x + dex + dex + bpl putBAR1 + rts + +*-------------------------------------- Interruption temps + +intTIME ds 4 + dw 60 + dw $a55a + + phb + phk + plb + clc + xce + rep #$30 + + lda #60 + sta intTIME+4 + + lda fgBUG + beq intTIME5 + + lda fgLOST + bne intTIME5 + +intTIME1 lda secondes + beq intTIME2 + dec + sta secondes + bra intTIME4 +intTIME2 lda #59 + sta secondes + lda minutes + beq intTIME3 + dec + sta minutes + bra intTIME4 + +intTIME3 lda #1 + sta fgLOST + stz secondes + stz minutes + +intTIME4 jsr putTIM + + lda #strMINU + ldy #scrMINU + ldx #$0001 + jsr printIT + + lda #strSECO + ldy #scrSECO + ldx #$0001 + jsr printIT + +intTIME5 sep #$30 + plb + clc + rtl + + mx %00 + +*-------------------------------------- Interruption animation + +intANIM ds 4 + dw 1 + dw $a55a + + phb + phk + plb + clc + xce + rep #$30 + + lda #1 + sta intANIM+4 + + lda fgBUG + bne intANIM4 + brl intANIM21 + +intANIM4 lda #0 ; Numero de l'objet a animer + cmp anNUMBER + bne intANIM5 + stz intANIM4+1 + bra intANIM4 + +intANIM5 tax + inc + inc + sta intANIM4+1 + + stz intANIM8+1 + lda anACTIF,x ; Regarde s'il est actif + cmp #-1 + beq intANIM7 + cmp #$2222 + beq intANIM6 + brl intANIM21 + +intANIM6 lda #$8000 ; sleep + sta intANIM8+1 + +intANIM7 stz intANIM16+1 + lda anOBJET,x ; Recupere l'adresse source +intANIM8 ldy #$8000 + bpl intANIM9 + clc + adc #36 +intANIM9 asl ; de l'image + tay + lda anCORRES,y + asl + asl + tay + lda ptrTCK1+1,y + sta intANIM16+2 + + lda anCOORD,x ; On a la coordonnee ecran + tay + lda scrCASE,y ; Adresse ecran source + clc + adc #$0002 + pha + clc + adc ptrBACK + sta intANIM17+1 + pla + clc + adc #$2000 ; et ecran destination + sta intANIM19+1 + +intANIM10 lda anOBJET,x ; Numero de l'objet + ldy intANIM8+1 + bpl intANIM11 + clc + adc #36 +intANIM11 asl + tay + lda anDRAW,y ; table de correspondance + sta intANIM18+1 + lda anTYPE,y ; Recherche la table des adresses + clc + adc anANIM,x + tay + hex b90000 ; en A, adresse ecran source + cmp #-1 + bne intANIM12 + + stz anANIM,x + brl intANIM10 + +intANIM12 clc + adc intANIM16+1 + sta intANIM16+1 + + inc anANIM,x + inc anANIM,x + + lda anOBJET,x ; Regarde si tiny sur sleeper + cmp #4 + bcc intANIM13 + cmp #8 + bcs intANIM13 + + lda anCOORD,x + tax + lda plateau3,x + cmp #-1 + bne intANIM21 + +intANIM13 lda #23 + sta compteur + +*--- Debut routine d'affichage (lente) + +intANIM14 sep #$20 +intANIM15 ldx #0 +intANIM16 ldal $110000,x ; data + tay +intANIM17 ldal $e10000,x ; ECRAN source + and tblMASK,y ; MASK +intANIM18 ora tblGRE,y ; data +intANIM19 stal $012000,x ; $01/2000 + inx +intANIM20 cpx #12 + bne intANIM16 + + rep #$20 + lda intANIM15+1 + clc + adc #160 + sta intANIM15+1 + clc + adc #12 + sta intANIM20+1 + + dec compteur + lda compteur + bpl intANIM14 + + stz intANIM15+1 + lda #12 + sta intANIM20+1 + + lda intANIM4+1 + dec + dec + tax + lda anOBJET,x + cmp #32 + bne intANIM21 + stz anANIM,x + +intANIM21 sep #$30 + plb + clc + rtl + + mx %00 + +*-------------------------------------- Datas + +compteur ds 2 ; pour affichage tiny (intANIM) +compteur2 ds 2 ; nombre de sprites a animer +compteur3 ds 2 ; pour affichage tiny (esprit) + +fgKEY ds 2 +fgLOST ds 2 +fgPRINT ds 2 +fgTEMP ds 2 +fgCURS ds 2 +fgLEVEL ds 2 +fgBUG ds 2 +oldBUG ds 2 + +spyDIR dw 2,1,4,3 +spyDIR2 dw 2,1,3,4 + +keyPREF dw $00b0 ; select + dw $00b4 ; left + dw $00b6 ; right + dw $00b8 ; up + dw $00b2 ; down + +minutes ds 2 ; Bar info +secondes ds 2 +level ds 2 +life ds 2 +joker ds 2 + +strMINU asc " ",00 +strSECO asc " ",00 +strLEVEL asc " ",00 +strLIFE asc " ",00 +strJOKER asc " ",00 + +*--- Adresses caracteres + +adrFNT8 dw $5780,$5784,$5788,$578c,$5790,$5794,$5798,$579c + dw $57a0,$57a4,$57a8,$57ac,$57b0,$57b4,$57b8,$57bc + dw $57c0,$57c4,$57c8,$57cc,$57d0,$57d4,$57d8,$57dc + dw $57e0,$57e4,$57e8,$57ec,$57f0,$57f4,$57f8,$57fc + dw $5800,$5804,$5808,$580c,$5810,$5814,$5818,$581c + dw $5c80,$5c84,$5c88,$5c8c,$5c90,$5c94,$5c98,$5c9c + dw $5ca0,$5ca4,$5ca8,$5cac,$5cb0,$5cb4,$5cb8,$5cbc + dw $5cc0,$5cc4,$5cc8,$5ccc,$5cd0,$5cd4,$5cd8,$5cdc + dw $5ce0,$5ce4,$5ce8,$5cec,$5cf0,$5cf4,$5cf8,$5cfc + dw $5d00,$5d04,$5d08,$5d0c,$5d10,$5d14,$5d18,$5d1c + dw $6180,$6184,$6188,$618c,$6190,$6194,$6198,$619c + dw $61a0,$61a4,$61a8,$61ac,$61b0,$61b4,$61b8,$61bc + dw $61c0,$61c4,$61c8,$61cc + +tblFNT8 hex a0a1a2a3a4a5a6a7a8a9aaabacadaeaf + hex b0b1b2b3b4b5b6b7b8b9babbbcbdbebf + hex c0c1c2c3c4c5c6c7c8c9cacbcccdcecf + hex d0d1d2d3d4d5d6d7d8d9dadbdcdddedf + hex e0e1e2e3e4e5e6e7e8e9eaebecedeeef + hex f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff + hex 88958b8a + +*--- Flags pour le jeu + +tinyMOVE ds 2 ; a-t-il bouge +tinyROULE ds 2 ; faut-il qu'il roule ?? +tinyDIR ds 2 ; direction du Tiny +tinyDEC ds 2 ; le decor +espCOL ds 2 ; la couleur du Tiny + word (sauvegarde) +espADR ds 4 +espECR ds 2 +espSCR ds 2 +myNUMBER ds 2 ; numero du tiny arrete (anim table) + +tinyCALC dw $fffe,$0002,$fe20,$01e0 +tinyCALC2 dw $000c,$fffd,$0f00,$fe20 +tinyHOW dw 6,6,8,8 + +curXY ds 2 ; Curseur +curX ds 2 +curY ds 2 +oldXY ds 2 +oldX ds 2 +oldY ds 2 + +arrCOL ds 2 +arrTINYcur ds 2 +arrXY ds 2 +arrX ds 2 +arrY ds 2 +arrNUMBER ds 2 + +*--- Tables pour les animations (jusqu'a 104 animations) + +anNUMBER ds 2 +anOBJET ds 208 +anACTIF ds 208 +anCOORD ds 208 +anANIM ds 208 +anACTIF2 ds 208 + + asc 0d + asc 'Hello This Is Antoine On Line' + asc 0d + +*--- Donnees pour les plateaux + +plateau1 ds 208 +plateau2 ds 208 +plateau3 ds 208 +plateau4 ds 208 +plateau5 ds 208 + +*--- Conversion HEXA/DECI + +lvlINTRO hex 01,01,01,01,01,01,01,01,01,01 + hex 02,02,02,02,02,02,02,02,02,02 + hex 03,03,03,03,03,03,03,03,03,03 + hex 04,04,04,04,04,04,04,04,04,04 + hex 05,05,05,05,05,05,05,05,05,05 + hex 06,06,06,06,06,06,06,06,06,06 + hex 07,07,07,07,07,07,07,07,07,07 + hex 08,08,08,08,08,08,08,08,08,08 + hex 09,09,09,09,09,09,09,09,09,09 + hex 10,10,10,10,10,10,10,10,10,10,11 + +scdVAR hex 00,01,02,03,04,05,06,07,08,09 + hex 10,11,12,13,14,15,16,17,18,19 + hex 20,21,22,23,24,25,26,27,28,29 + hex 30,31,32,33,34,35,36,37,38,39 + hex 40,41,42,43,44,45,46,47,48,49 + hex 50,51,52,53,54,55,56,57,58,59 + hex 60,61,62,63,64,65,66,67,68,69 + hex 70,71,72,73,74,75,76,77,78,79 + hex 80,81,82,83,84,85,86,87,88,89 + hex 90,91,92,93,94,95,96,97,98,99 + +*--- Donnees du curseur + +cursL hex a89999b9bbbbbbbb9b99998a + +cursCOL1 hex 8990909090b090b0b0b0b0 + hex b0b0b0b090b09090909989 +cursCOL2 hex 98090909090b090b0b0b0b + hex 0b0b0b0b090b0909090998 +cursMSK1 hex 000f0f0f0f0f0f0f0f0f0f + hex 0f0f0f0f0f0f0f0f0f0000 +cursMSK2 hex 00f0f0f0f0f0f0f0f0f0f0 + hex f0f0f0f0f0f0f0f0f00000 + +*--- Adresses pour NIV + +scrNIV dw $0000,$0010,$0020,$0030,$0040 + dw $0050,$1e00,$0060,$0070,$0080 + dw $0090,$0f00,$0f10,$0f20,$0f30 + dw $0f40,$0f50 + dw $0f60,$0f70,$0f80,$0f90 + dw $5a00,$5a10,$5a20,$5a30 + dw $1e10,$1e20,$1e30,$1e40,$1e50,$1e60,$1e70,$1e80,$1e90 + dw $2d00,$2d10,$2d20,$2d30,$2d40,$2d50,$2d60,$2d70,$2d80,$2d90 + dw $3c00,$3c10,$3c20,$3c30,$3c40,$3c50,$3c60,$3c70,$3c80 + +scrCASE dw $0000,$0f00,$1e00,$2d00,$3c00,$4b00,$5a00,$6900 + dw $000c,$0f0c,$1e0c,$2d0c,$3c0c,$4b0c,$5a0c,$690c + dw $0018,$0f18,$1e18,$2d18,$3c18,$4b18,$5a18,$6918 + dw $0024,$0f24,$1e24,$2d24,$3c24,$4b24,$5a24,$6924 + dw $0030,$0f30,$1e30,$2d30,$3c30,$4b30,$5a30,$6930 + dw $003c,$0f3c,$1e3c,$2d3c,$3c3c,$4b3c,$5a3c,$693c + dw $0048,$0f48,$1e48,$2d48,$3c48,$4b48,$5a48,$6948 + dw $0054,$0f54,$1e54,$2d54,$3c54,$4b54,$5a54,$6954 + dw $0060,$0f60,$1e60,$2d60,$3c60,$4b60,$5a60,$6960 + dw $006c,$0f6c,$1e6c,$2d6c,$3c6c,$4b6c,$5a6c,$696c + dw $0078,$0f78,$1e78,$2d78,$3c78,$4b78,$5a78,$6978 + dw $0084,$0f84,$1e84,$2d84,$3c84,$4b84,$5a84,$6984 + dw $0090,$0f90,$1e90,$2d90,$3c90,$4b90,$5a90,$6990 + +scrX dw $0000,$000c,$0018,$0024,$0030,$003c,$0048 + dw $0054,$0060,$006c,$0078,$0084,$0090 + +scrY dw $0000,$0f00,$1e00,$2d00 + dw $3c00,$4b00,$5a00,$6900 + +*--- Types d'animation a faire + +anCORRES dw $D,$D,$D,$D ; staticTiny + dw $5,$5,$5,$5 ; sleeper + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw $1,$1,$1,$1 ; staticAnim + dw $6,$6,$6,$6 ; sleepTiny + +anDRAW da tblGRE,tblBLU,tblRED,tblYEL + da tblGRE,tblBLU,tblRED,tblYEL + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + da tblGRE,tblGRE,tblGRE,tblGRE + da tblGRE,tblBLU,tblRED,tblYEL + +anTYPE da anGREE,anBLUE,anREDE,anYELL + da anSLEE,anSLEE,anSLEE,anSLEE + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + da anSTAT,anSTAT,anSTAT,anSTAT + da anDORM,anDORM,anDORM,anDORM + +anGREE dw $0000,$000c,$0018,$0024,$0030,$003c,$0048,$0054,$0060,$006c,$0078,$0084 + dw $0f00,$0f0c,$0f18,$0f24,-1 + +anBLUE dw $0f30,$0f3c,$0f48,$0f54,$0f60,$0f6c,$0f78,$0f84 + dw $1e00,$1e0c,$1e18,$1e24,$1e30,-1 + +anREDE dw $1e3c,$1e48,$1e54,$1e60,$1e6c,$1e78,$1e84 + dw $2d00,$2d0c,$2d18,$2d24,$2d30,-1 + +anYELL dw $2d3c,$2d48,$2d54,$2d60,$2d6c,$2d78,$2d84 + dw $3c00,$3c0c,$3c18,$3c24,$3c30,$3c3c,$3c48,$3c54,-1 + +anSLEE dw $0000,$000c,$0018,$0024,$0030,$003c,$0048,$0054,-1 + +anSTAT dw $1e00,-1 + +anDORM dw $3c30,$3c30,$3c3c,$3c3c,$3c48,$3c48,$3c54,$3c54,-1 + +*--- Tables de correspondance pour les animations + +tblGRE hex 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f + hex 202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f + hex 404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f + hex 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f + hex 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f + hex a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf + hex c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf + hex e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff + +tblBLU hex 000502070405060708090a0b0c0d0e0f505552575455565758595a5b5c5d5e5f + hex 202522272425262728292a2b2c2d2e2f707572777475767778797a7b7c7d7e7f + hex 404542474445464748494a4b4c4d4e4f505552575455565758595a5b5c5d5e5f + hex 606562676465666768696a6b6c6d6e6f707572777475767778797a7b7c7d7e7f + hex 808582878485868788898a8b8c8d8e8f909592979495969798999a9b9c9d9e9f + hex a0a5a2a7a4a5a6a7a8a9aaabacadaeafb0b5b2b7b4b5b6b7b8b9babbbcbdbebf + hex c0c5c2c7c4c5c6c7c8c9cacbcccdcecfd0d5d2d7d4d5d6d7d8d9dadbdcdddedf + hex e0e5e2e7e4e5e6e7e8e9eaebecedeeeff0f5f2f7f4f5f6f7f8f9fafbfcfdfeff + +tblRED hex 0009020b0405060708090a0b0c0d0e0f9099929b9495969798999a9b9c9d9e9f + hex 2029222b2425262728292a2b2c2d2e2fb0b9b2bbb4b5b6b7b8b9babbbcbdbebf + hex 4049424b4445464748494a4b4c4d4e4f5059525b5455565758595a5b5c5d5e5f + hex 6069626b6465666768696a6b6c6d6e6f7079727b7475767778797a7b7c7d7e7f + hex 8089828b8485868788898a8b8c8d8e8f9099929b9495969798999a9b9c9d9e9f + hex a0a9a2aba4a5a6a7a8a9aaabacadaeafb0b9b2bbb4b5b6b7b8b9babbbcbdbebf + hex c0c9c2cbc4c5c6c7c8c9cacbcccdcecfd0d9d2dbd4d5d6d7d8d9dadbdcdddedf + hex e0e9e2ebe4e5e6e7e8e9eaebecedeeeff0f9f2fbf4f5f6f7f8f9fafbfcfdfeff + +tblYEL hex 000d020f0405060708090a0b0c0d0e0fd0ddd2dfd4d5d6d7d8d9dadbdcdddedf + hex 202d222f2425262728292a2b2c2d2e2ff0fdf2fff4f5f6f7f8f9fafbfcfdfeff + hex 404d424f4445464748494a4b4c4d4e4f505d525f5455565758595a5b5c5d5e5f + hex 606d626f6465666768696a6b6c6d6e6f707d727f7475767778797a7b7c7d7e7f + hex 808d828f8485868788898a8b8c8d8e8f909d929f9495969798999a9b9c9d9e9f + hex a0ada2afa4a5a6a7a8a9aaabacadaeafb0bdb2bfb4b5b6b7b8b9babbbcbdbebf + hex c0cdc2cfc4c5c6c7c8c9cacbcccdcecfd0ddd2dfd4d5d6d7d8d9dadbdcdddedf + hex e0ede2efe4e5e6e7e8e9eaebecedeeeff0fdf2fff4f5f6f7f8f9fafbfcfdfeff + +tblMASK hex fff0f0f0f0f0f0f0f0f0f0f0f0f0f0f00f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + +tblXY dw $0000,$0001,$0002,$0003,$0004,$0005,$0006,$0007 + dw $0100,$0101,$0102,$0103,$0104,$0105,$0106,$0107 + dw $0200,$0201,$0202,$0203,$0204,$0205,$0206,$0207 + dw $0300,$0301,$0302,$0303,$0304,$0305,$0306,$0307 + dw $0400,$0401,$0402,$0403,$0404,$0405,$0406,$0407 + dw $0500,$0501,$0502,$0503,$0504,$0505,$0506,$0507 + dw $0600,$0601,$0602,$0603,$0604,$0605,$0606,$0607 + dw $0700,$0701,$0702,$0703,$0704,$0705,$0706,$0707 + dw $0800,$0801,$0802,$0803,$0804,$0805,$0806,$0807 + dw $0900,$0901,$0902,$0903,$0904,$0905,$0906,$0907 + dw $0a00,$0a01,$0a02,$0a03,$0a04,$0a05,$0a06,$0a07 + dw $0b00,$0b01,$0b02,$0b03,$0b04,$0b05,$0b06,$0b07 + dw $0c00,$0c01,$0c02,$0c03,$0c04,$0c05,$0c06,$0c07 + +*--- Tinies bougent + +moveLEFT dw $0000,$000c,$0018,$0024 + dw $0030,$003c,$0048,$0054 + +moveRIGHT dw $0f00,$0f0c,$0f18,$0f24 + dw $0f30,$0f3c,$0f48,$0f54 + +moveUP dw $1e00,$1e0c,$1e18,$1e24 + dw $1e30,$1e3c,$1e48,$1e54 + +moveDOWN dw $2d00,$2d0c,$2d18,$2d24 + dw $2d30,$2d3c,$2d48,$2d54 + +rollLEFT dw $3c00,$3c0c,$3c18,$3c24 + dw $3c30,$3c3c,$3c48,$3c54 + +rollRIGHT dw $4b00,$4b0c,$4b18,$4b24 + dw $4b30,$4b3c,$4b48,$4b54 + +rollUP dw $5a00,$5a0c,$5a18,$5a24 + dw $5a30,$5a3c,$5a48,$5a54 + +rollDOWN dw $6900,$690c,$6918,$6924 + dw $6930,$693c,$6948,$6954 + +*--- Adresses ecran des sprites + +chseBOUG da anBougGa,anBougDr,anBougHa,anBougBa + da anRoulGa,anRoulDr,anRoulHa,anRoulBa +anBougGa dw $0f0c,$0f18,$0f24,$0f30,$0f3c,$0f48 +anBougDr dw $000c,$0018,$0024,$0030,$003c,$0048 +anBougHa dw $1e00,$1e0c,$1e18,$1e24,$1e30,$1e3c,$1e48,$1e54 +anBougBa dw $2d00,$2d0c,$2d18,$2d24,$2d30,$2d3c,$2d48,$2d54 +anRoulGa dw $4b0c,$4b18,$4b24,$4b30,$4b3c,$4b48 +anRoulDr dw $3c0c,$3c18,$3c24,$3c30,$3c3c,$3c48 +anRoulHa dw $5a00,$5a0c,$5a18,$5a24,$5a30,$5a3c,$5a48,$5a54 +anRoulBa dw $6900,$690c,$6918,$6924,$6930,$693c,$6948,$6954 + +chseBUMP da anBumpGa,anBumpDr,anBumpBa,anBumpHa +anBumpGa dw $0064,$0070,$007c,$0088,$0094 + dw $0f64,$0f70,$0f7c,$0f88,$0064,-1 +anBumpDr dw $0064,$0f94,$1e64,$1e70,$1e7c + dw $1e88,$1e94,$2d64,$0f88,$0064,-1 +anBumpHa dw $0064,$2d64,$2d70,$2d7c,$2d88 + dw $2d94,$3c64,$3c70,$3c7c,$0064,-1 +anBumpBa dw $0064,$3c7c,$3c88,$3c94,$4b64 + dw $4b70,$4b7c,$4b88,$4b94,$0064,-1 + +chseTELE da anTeleGa,anTeleDr,anTeleHa,anTeleBa +anTeleGa dw $1e30,$1e48,$1e60,$1e78 + dw $2d00,$2d18,$2d30 + dw $2d48,$693c,-1 +anTeleDr dw $0060,$0078 + dw $0f00,$0f18,$0f30 + dw $0f48,$0f60,$0f78,$693c,-1 +anTeleHa dw $3c00,$3c18,$3c30 + dw $3c48,$3c60,$3c78 + dw $4b00,$4b18,$693c,-1 +anTeleBa dw $4b60,$4b78 + dw $5a00,$5a18,$5a30 + dw $5a48,$5a60,$5a78,$693c,-1 + +chseTELE2 da anTeleGa2,anTeleDr2,anTeleHa2,anTeleBa2 +anTeleGa2 dw $2d84,$2d78,$2d6c,$2d60,$1e54,$1e48,$1e3c,$1e30,-1 +anTeleDr2 dw $1e24,$1e18,$1e0c,$1e00,$0084,$0078,$006c,$0060,-1 +anTeleHa2 dw $4b54,$4b48,$4b3c,$4b30,$3c24,$3c18,$3c0c,$3c00,-1 +anTeleBa2 dw $6924,$6918,$690c,$6900,$4b84,$4b78,$4b6c,$4b60,-1 + +anINTE dw $0000,$0f00,$1e00,$2d00 +anOPEN dw $006c,$0f6c,$1e6c,$2d6c +anDOOR dw $000c,$0018,$0024,$0030,$003c,$0048,$0054,$0060,$006c,-1 +anJOKER dw $3c00,$3c0c,$3c18,$3c24,$3c30,$3c3c + dw $3c48,$3c54,$3c60,$3c6c,$3c78,$3c84,-1 + +chseBOOM da anBoumGa,anBoumDr,anBoumHa,anBoumBa +anBoumGa dw $0f00,$0f0c,$0f18,$0f24,$0f30,$0f3c,$0f48,$0f54,-1 +anBoumDr dw $0000,$000c,$0018,$0024,$0030,$003c,$0048,$0054,-1 +anBoumHa dw $1e00,$1e0c,$1e18,$1e24,$1e30,$1e3c,$1e48,$1e54,-1 +anBoumBa dw $2d00,$2d0c,$2d18,$2d24,$2d30,$2d3c,$2d48,$2d54,-1 + +anEXPL1 dw $4b30,$4b3c,$4b48,$4b54,-1 +anEXPL2 dw $5a00,$5a0c,$5a18,$5a24,$5a30,$5a3c + dw $5a48,$5a54,$6900,$690c,$6918,$6924,-1 diff --git a/thetinies/TCK.s b/thetinies/TCK.s new file mode 100644 index 0000000..292ccf7 --- /dev/null +++ b/thetinies/TCK.s @@ -0,0 +1,1426 @@ +*--------------------------* +* * +* Tinies: Construction Kit * +* * +* Brutal Deluxe * +* * +* Version: 1.0 du 2/2/95 * +*--------------------------* + + lst off + rel + dsk TCK.l + + use 4/Locator.Macs + use 4/Mem.Macs + use 4/Misc.Macs + use 4/Util.Macs + + mx %00 + xc + xc + +*--- Parametres Page Zero + +Debut = $00 +Arrivee = $04 +Second = $08 +Third = $0c + +proDOS = $e100a8 + +*-------------------------- Initialisations d'entree + + phk + plb + bra pp + +*$ + asc 0d + asc "We cannot promise you anything..."0d + asc "But Future may be wonderful :->"0d + asc "Keep your IIgs..."0d + +pp _TLStartUp + pha + _MMStartUp + pla + sta myID + _MTStartUp + + ldal $e0c060 + bpl noPATCH + lda #$eaea + sta PATCH + +noPATCH sep #$20 + + ldal $e0c022 + sta save1 + ldal $e0c029 + sta save2 + ldal $e0c034 + sta save3 + ldal $e0c035 + sta save4 + + lda #$f0 + stal $e0c022 + lda #$00 + stal $e0c034 + + rep #$20 + +*--- Affichage texte + + PushWord #0 + PushWord #$29 + _ReadBParam + pla + and #$ff + cmp #$02 + bne noFUCK + + lda #1 + sta fgLANG + +*--- Ah! GsBug + +noFUCK sei + + phd + ldal $e1004b + pha + ldal $e10049 + sec + sbc #$82 + pha + tsc + tcd + ldy #0 +]lp lda [$01],y + cmp #$78f0 + beq bugFOUND1 + iny + iny + iny + cpy #12 + bne ]lp + bra bugFOUND2 + +*$ + asc 0d"Hello Atreid!"0d + asc "If you mix The Furies with new intro graphs..."0d + asc "Then you get... Pac In Time!"0d + +bugFOUND1 sta bugA + stx bugY + lda #$7880 + sta [$01],y + + lda #1 + sta bugFG + +bugFOUND2 pla + pla + pld + + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #$fe1f + _FWEntry + pla + cmp #1 + beq bugFOUND3 + lda #$cf28 + sta theDESK2+1 + +bugFOUND3 pla + pla + pla + + PushLong #0 + PushWord #$12 + _GetVector + PullLong saveDESK + + PushWord #$12 + PushLong #theDESK + _SetVector + + cli + +*--- Compact memory + + PushLong #0 + PushLong #$8fffff + PushWord myID + PushWord #%11000000_00000000 + PushLong #0 + _NewHandle + _DisposeHandle + _CompactMem + + PushLong #0 ; 448ko au total + _FreeMem + pla + pla + cmp #7 ; 7*64ko + bcs okINIT2 + sec + jmp memERR + +*$ + asc 0d"Hi Gog! Have U ever seen SuperFamicom code?"0d + +okINIT2 PushLong #0 + PushLong #$8000 + PushWord myID + PushWord #%11000000_00000011 + PushLong #$012000 + _NewHandle + pla + pla + bcc okINIT3 + sec + jmp memERR + +okINIT3 PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + ldx temp + phd + tsc + tcd + ldy #0 + lda [3],y + sta ptrTCK1,x + ldy #2 + lda [3],y + sta ptrTCK1+2,x + pld + pla + pla + jsr memERR + inx + inx + inx + inx + stx temp + cpx #4*7 + bne okINIT3 + +*--- + + PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + phd + tsc + tcd + ldy #0 + lda [3],y + sta ptrUNPACK + ldy #2 + lda [3],y + sta ptrUNPACK+2 + pld + pla + pla + jsr memERR + +*--- + + lda #1 + jsr setSHADOW + + ldx #$7ffe + lda #0 +]lp stal $012000,x + dex + dex + bpl ]lp + + sep #$20 + lda #$c1 + stal $e0c029 + rep #$20 + +*-------------------------- Met les pointeurs + + lda ptrTCK1 + clc + adc #$8000 + sta ptrTCK2 + lda ptrTCK1+2 + sta ptrTCK2+2 + + lda ptrNIV + clc + adc #$8000 + sta ptrBACK + lda ptrNIV+2 + sta ptrBACK+2 + + lda ptrDOC + clc + adc #$8000 + sta ptrABOUT + lda ptrDOC+2 + sta ptrABOUT+2 + + lda ptrBOUGE + clc + adc #$8000 + sta ptrFONTE + lda ptrBOUGE+2 + sta ptrFONTE+2 + + lda ptrGADGET2 + clc + adc #$8000 + sta ptrGADGET3 + lda ptrGADGET2+2 + sta ptrGADGET3+2 + + lda ptrTINY1 + clc + adc #$8000 + sta ptrTINY2 + lda ptrTINY1+2 + sta ptrTINY2+2 + +*--------------------------- + + jsr doTCK + jsr loadNIV + + lda #pLOGO + ldx ptrUNPACK+1 + jsr loadFILE + bcc okINIT4 + jmp initOFF +okINIT4 lda ptrTCK1+1 + jsr unPACK + + lda ptrTCK1+1 + jsr do3200 + +*--- + + lda #pTCK1 + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrTCK1+1 + jsr unPACK + + lda #pTCK2 + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrTCK2+1 + jsr unPACK + + lda #pTINY1 + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrTINY1+1 + jsr unPACK + + lda #pTINY2 + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrTINY2+1 + jsr unPACK + + lda #pFONTE + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrFONTE+1 + jsr unPACK + +*--- + + put TCK.Main + put TCK.Docu + +*-------------------------- +* Fin du programme +*-------------------------- + +initOFF lda #0 + jsr setSHADOW + + ldx #$7ffe + lda #0 +]lp stal $012000,x + dex + dex + bpl ]lp + +initOFF1 sep #$20 + + lda save4 + stal $e0c035 + lda save3 + stal $e0c034 + lda save2 + stal $e0c029 + lda save1 + stal $e0c022 + + rep #$20 + +*--- Ah GsBug + + lda bugFG + beq initOFF2 + + sei + + phd + ldal $e1004b + pha + ldal $e10049 + sec + sbc #$82 + pha + tsc + tcd + ldy bugY + lda bugA + sta [$01],y + pla + pla + pld + + PushWord #$12 + PushLong saveDESK + _SetVector + + cli + +*--- + +initOFF2 _MTShutDown + + PushWord myID + _DisposeAll + PushWord myID + _MMShutDown + _TLShutDown + + ldal $e0c061 + bpl noQUIT + + jsl proDOS + dw $2029 + adrl proQUIT2 + +noQUIT jsl proDOS + dw $2029 + adrl proQUIT + +*$ + asc 0d"Hey Joe... Take a walk on the wild side..."0d + asc "If Tinies could have been released"0d + asc "It has nothing to do with Gog"0d + +*-------------------------- +* Code principal +*-------------------------- + +doTCK lda #pDOC + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrDOC+1 + jsr unPACK + + lda #pABOUT + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrABOUT+1 + jsr unPACK + +*-------------------------------------- Fichiers a charger pour le test + + lda #pBOUGE + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrBOUGE+1 + jsr unPACK + + lda #pGADGET2 + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrGADGET2+1 + jsr unPACK + + lda #pGADGET3 + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrGADGET3+1 + jsr unPACK + + lda #pTAB + ldx ptrTAB+1 + jsr loadFILE + + rts + +*-------------------------- Charge l'image NIV en fonction du NIVEAU + +loadNIV ldx level + lda lvlINTRO,x + and #$00ff + sta temp + + lda temp + and #$00f0 + asl + asl + asl + asl + ora #$3000 + pha + lda temp + and #$000f + ora #$0030 + sta temp + pla + ora temp + xba + sta temp + + lda temp + cmp pNIV+19 + beq loadNIV1 + sta pNIV+19 + + lda #pNIV + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrNIV+1 + jsr unPACK + +loadNIV1 rts + +*-------------------------- Met le temps + +doTIME lda ptrTAB + clc + adc #$5300 + sta Debut + lda ptrTAB+2 + sta Debut+2 + + lda level + asl + tay + lda [Debut],y + pha + and #$00ff + sta minutes + + pla + and #$ff00 + xba + sta secondes + rts + +putTIME lda ptrTAB + clc + adc #$5300 + sta Debut + lda ptrTAB+2 + sta Debut+2 + + lda level + asl + tay + + lda secondes + xba + ora minutes + sta [Debut],y + rts + +*$ + asc 0d"Hello Christer Ericsson"0d + asc "Thank you for the free distribution of Blockade GS..."0d + +*-------------------------- +* Routines gs/os +*-------------------------- + +loadFILE sta proOPEN+4 + stx proREAD+5 + +loadFILE1 jsl proDOS + dw $2010 + adrl proOPEN + bcs loadERR + + lda proOPEN+2 + sta proGETEOF+2 + sta proREAD+2 + + jsl proDOS + dw $2019 + adrl proGETEOF + + lda proGETEOF+4 + sta proREAD+8 + lda proGETEOF+6 + sta proREAD+10 + + jsl proDOS + dw $2012 + adrl proREAD + bcs loadERR + +loadFILE2 jsl proDOS + dw $2014 + adrl proCLOSE + clc + rts + +loadERR jsr loadFILE2 + + PushWord #0 + PushLong #proSTR1 + PushLong #proSTR2 + PushLong #proSTR3 + PushLong #proSTR4 + _TLTextMountVolume + pla + cmp #1 + bne loadERR1 + brl loadFILE1 +loadERR1 jmp initOFF1 + +*$ + asc 0d"Hello Christer!"0d + asc "Do Ya Feel It?"0d + +*-------------------------- Save file + +saveFILE lda ptrTAB + sta proWRITE+4 + lda ptrTAB+2 + sta proWRITE+6 + lda #$53d0 + sta proWRITE+8 + + lda #pTAB + sta proOPEN+4 + lda #^pTAB + sta proOPEN+6 + +saveFILE1 jsl proDOS + dw $2005 + adrl proINFO + bcs saveERR + + jsl proDOS + dw $2002 + adrl proDESTROY + + jsl proDOS + dw $2001 + adrl proCREATE + + jsl proDOS + dw $2010 + adrl proOPEN + bcs saveERR + + lda proOPEN+2 + sta proWRITE+2 + sta proCLOSE+2 + + jsl proDOS + dw $2013 + adrl proWRITE + bcs saveERR + +saveFILE2 jsl proDOS + dw $2014 + adrl proCLOSE + + clc + rts + +saveERR jsr saveFILE2 + + PushWord #0 + PushLong #proSTR11 + PushLong #proSTR2 + PushLong #proSTR31 + PushLong #proSTR41 + _TLTextMountVolume + pla + cmp #1 + bne saveERR1 + brl saveFILE1 + +saveERR1 sec + rts + +*-------------------------- +* Routines diverses +*-------------------------- + +memERR bcs memERR1 ; Erreur de memoire + rts +memERR1 PushWord #0 + PushLong #memSTR1 + PushLong #memSTR2 + PushLong #proSTR3 + PushLong #proSTR4 + _TLTextMountVolume + pla + jmp initOFF1 + +*-------------------------- + +setSHADOW sep #$20 ; A=0, shadow off + ; A=1, shadow on + eor #1 + asl + asl + asl + pha + ldal $e0c035 + and #%11110111 + ora 1,s + stal $e0c035 + pla + rep #$20 + rts + +*$ + asc 0d"A SecondSight Graphic Card? Never"0d + asc "A TurboRez Graphic Card? Forever"0d + +*------------------------------ + +nextVBL lda #150 + jsr waitSPOT + jsr waitVBL + rts + +waitSPOT lsr + sta waitSPOT2+1 +waitSPOT1 ldal $e0c02e + and #$7f +waitSPOT2 cmp #150 + blt waitSPOT1 + cmp #100 + bge waitSPOT1 + rts + +waitVBL ldal $e0c019 + and #$80 + beq waitVBL + rts + +*-------------------------- Decompression + +unPACK tax ; Decompresse + + phd + tdc + clc + adc #$100 + tcd + + stz $04 + stz $06 + stx $05 + + lda ptrUNPACK + sta $00 + lda ptrUNPACK+2 + sta $02 + + lda ptrUNPACK + clc + adc #$8000 + sta $1e + clc + adc #$2000 + sta $22 + lda ptrUNPACK+2 + sta $20 + sta $24 + + ldy #$3fff + lda #0 +]lp sta [$1e],y + dey + dey + bpl ]lp + + lda #$0009 + sta L0517+1 + lda #$01FF + sta L051E+1 + stz $1C + pea $FFFF + +L042C jsr L04E8 + cmp #$0101 + bne L042D + brl L04A4 + +L042D cmp #$0100 + beq L0491 + sta $12 + cmp $14 + bcc L0443 + lda $10 + pei $0E +L0443 cmp #$0100 + bcc L0455 + asl +L0449 tay + lda [$22],Y + pha + lda [$1E],Y + cmp #$0200 + bcs L0449 + lsr +L0455 and #$00FF + sta $0E + sta $1A + ldy #$0000 +L045F sta [$04],Y + iny + pla + bpl L045F + pha + tya + clc + adc $04 + sta $04 + + lda $06 + adc #0 + sta $06 + + jsr L04D8 + lda $12 + sta $10 + lda $14 + cmp $18 + bcc L048F + lda L0517+1 + cmp #$000C + beq L048F + inc + sta L0517+1 + asl + tax + lda packMASK-$12,X + sta L051E+1 + asl $18 +L048F bra L042C +L0491 jsr L04C1 + jsr L04E8 + sta $10 + sta $1A + sta $0E + sta [$04] + + lda $04 + clc + adc #1 + sta $04 + lda $06 + adc #0 + sta $06 + + jmp L042C + +L04A4 pla + pld + phk + plb + rts + +L04C1 lda #$0009 + sta L0517+1 + lda #$01FF + sta L051E+1 + lda #$0200 + sta $18 + lda #$0102 + sta $14 + rts + +L04D8 lda $14 + asl + tay + lda $1A + sta [$22],Y + lda $10 + asl + sta [$1E],Y + inc $14 + rts + +L04E8 lda $1C + and #$0007 + tax + lda $1C + lsr + lsr + lsr + cmp #$03FD + bcc L0502 + clc + adc $00 + sta $00 + stx $1C + lda #$0000 +L0502 tay + lda [$00],Y + sta $08 + iny + iny + lda [$00],Y + txy + beq L0514 +L050E lsr +L050F ror $08 + dex + bne L050E +L0514 lda $1C + clc +L0517 adc #$FFFF ; $0009 on beginning + sta $1C + lda $08 +L051E and #$FFFF ; $01FF on beginning + rts + +*$ + asc 0d + asc "-Olivier, Gimme Salt"0d + asc "-Antoine, Gimme Pepper"0d + asc "-Give us Salt and Pepper"0d + asc "Let us talk about sex baby"0d + asc "Let us talk about U and Me"0d + asc "No, we are not homosexuals"0d + +*------------------------------ + +nowWAIT dec ; Attend A secondes + tax + lda #0 +]lp clc + adc #60 + cpx #0 + beq nowWAIT1 + dex + bra ]lp +nowWAIT1 pha + jsr waitVBL +]lp ldal $e0c019 + and #$80 + bne ]lp + pla + dec + bne nowWAIT1 + sec + rts + +*-------------------------- +* Routines graphiques +*-------------------------- + +*--- Routine 3200 couleurs + +do3200 stz Debut + stz Debut+2 + sta Debut+1 + + sep #$20 + lda #$1e + stal $e0c035 + rep #$20 + + ldx #$7ffe + lda #0 +]lp stal $012000,x + stal $e12000,x + dex + dex + bpl ]lp + + ldy #$7d00 + ldx #0 +]lp lda [Debut],y + stal $012000,x + iny + iny + inx + inx + cpx #$1900 + bne ]lp + + sep #$20 + ldx #$00 +do32001 lda #$0f +]lp stal $019d00,x + stal $e19d00,x + inx + cpx #$c8 + beq do32002 + dec + bpl ]lp + bra do32001 + +do32002 lda #0 + stal $e0c035 + + rep #$20 + + ldy #$7cfe +]lp tyx + lda [Debut],y + stal $e12000,x + dey + dey + bpl ]lp + + phd + tsc + sta mySTACK + + sei + +*--- Main routine 3200 + + ldal $e0c068 + ora #$30 + stal $e0c068 + +do32003 ldy #0 + lda #$1f00 + tcd + +do32004 ldal $e0c02e + and #$ff + cmp affTBL,y + bne do32004 + + iny + iny + + lda #$9fff + tcs + tdc + clc + adc #$0100 + tcd + +]affPOS1 = $00 + lup $80 + pei ]affPOS1 +]affPOS1 = ]affPOS1+2 + --^ + + tdc + clc + adc #$0100 + tcd + +]affPOS1 = $00 + lup $80 + pei ]affPOS1 +]affPOS1 = ]affPOS1+2 + --^ + + cpy #$1a + beq do32005 + brl do32004 + +do32005 ldal $e0bfff + bmi do32007 + ldal $e0c026 + bpl do32006 + and #%00000010_00000000 + bne do32006 + ldal $e0c023 + ldal $e0c023 + and #%10000000_00000000 + beq do32007 + brl do32003 +do32006 ldal $e0c026 + brl do32003 + +do32007 stal $e0c010 + ldal $e0c068 + and #$cf + stal $e0c068 + + cli + + lda mySTACK + tcs + pld + phk + plb + + ldx #$7ffe + lda #0 +]lp stal $012000,x + dex + dex + bpl ]lp + + rts + +*$ + asc 0d + asc "Our only drug is the IIgs"0d + asc "Aaahhh llaaaaa laaaaaa"0d + +*--- Fade sur les palettes + +fadeIN sta fadeIN1+2 + clc + adc #$007e + sta fadeIN5+2 + sta fadeIN7+2 + sta fadeIN9+2 + cpy #-1 + beq fadeIN2 + + ldx #$7dfe +fadeIN1 ldal $062000,x + stal $012000,x + dex + dex + bpl fadeIN1 + +fadeIN2 ldy #$000f +fadeIN3 ldx #$01fe +fadeIN4 ldal $019e00,x + and #$000f + sta temp +fadeIN5 ldal $069e00,x + and #$000f + cmp temp + beq fadeIN6 + ldal $019e00,x + clc + adc #$0001 + stal $019e00,x +fadeIN6 ldal $019e00,x + and #$00f0 + sta temp +fadeIN7 ldal $069e00,x + and #$00f0 + cmp temp + beq fadeIN8 + ldal $019e00,x + clc + adc #$0010 + stal $019e00,x +fadeIN8 ldal $019e00,x + and #$0f00 + sta temp +fadeIN9 ldal $069e00,x + and #$0f00 + cmp temp + beq fadeIN10 + ldal $019e00,x + clc + adc #$0100 + stal $019e00,x + +fadeIN10 dex + dex + bpl fadeIN4 + jsr nextVBL + dey + bpl fadeIN3 + rts + +*--- + +fadeOUT ldy #$000f +fadeOUT1 ldx #$01fe +fadeOUT2 ldal $019e00,x + and #$000f + beq fadeOUT3 + ldal $019e00,x + sec + sbc #$0001 + stal $019e00,x +fadeOUT3 ldal $019e00,x + and #$00f0 + beq fadeOUT4 + ldal $019e00,x + sec + sbc #$0010 + stal $019e00,x +fadeOUT4 ldal $019e00,x + and #$0f00 + beq fadeOUT5 + ldal $019e00,x + sec + sbc #$0100 + stal $019e00,x + +fadeOUT5 dex + dex + bpl fadeOUT2 + jsr nextVBL + dey + bpl fadeOUT1 + + ldx #$7ffe + lda #$0000 +]lp stal $012000,x + dex + dex + bpl ]lp + rts + +*-------------------------- +* Routine control panel +*-------------------------- + + mx %11 + +theDESK jmp theDESK1 + jmp theDESK1 + jmp theDESK1 + +theDESK1 sep #$30 + lda $c025 + + phb + php + phk + plb + + clc + xce + rep #$30 + + lda fgBUG + sta oldBUG + stz fgBUG + + sep #$30 + +theDESK2 jsl $feadb9 + + phk + plb + + clc + xce + sep #$30 + + ldal $e0c034 + and #$f0 + stal $e0c034 + + rep #$30 + + lda oldBUG + sta fgBUG + + sep #$30 + plp + plb + clc + rtl + + mx %00 + +*-------------------------- +* All the datas +*-------------------------- + + hex 8d8d + asc "---- Tinies Construction Kit -----",8d + asc " Version Apple //gs ",8d + asc " Antoine Vignau Olivier Zardini ",8d + asc " Brutal Deluxe ",8d + asc "------------ 9 2 1995 ------------",8d,8d + +*--- Flags + +save1 ds 1 +save2 ds 1 +save3 ds 1 +save4 ds 1 + +fgLANG ds 2 ; 1=fr + +bugA ds 2 +bugY ds 2 +bugFG ds 2 +saveDESK ds 4 + +*--- Textes + +memSTR1 str 'Can'27't allocate (screen) memory' +memSTR2 str 'Press a key to quit.' + +proSTR1 str 'Can'27't load file' +proSTR11 str 'Can'27't save file' +proSTR2 str 'Do what now ?' +proSTR3 str '[RET] Continue' +proSTR31 str '[RET] Retry' +proSTR4 str '[ESC] Quit' +proSTR41 str '[ESC] Cancel' + +*--- Prodos + +proQUIT dw 2 + ds 4 + ds 2 + +proQUIT2 dw 2 + adrl pGAME + ds 2 + +proOPEN dw 2 + ds 2 + adrl pTCK1 + +proGETEOF dw 2 + ds 2 + ds 4 + +proREAD dw 4 + ds 2 + ds 4 + ds 4 + ds 4 + +proCLOSE dw 1 + ds 2 + +proCREATE dw 7 + adrl pTAB ; Pathname + dw $e3 ; AccessCode + dw 6 ; FileType + ds 4 ; AuxType + dw 2 ; Type d'enregistrement + adrl $53d0 ; Data segment + ds 4 ; Resource segment + +proDESTROY dw 1 + adrl pTAB ; Pathname + +proINFO dw 4 + adrl pTAB ; Pathname + dw $e3 ; AccessCode + dw 6 ; FileType + ds 4 ; AuxType + +proWRITE dw 5 + ds 2 ; Id + ds 4 ; Where + adrl $53d0 ; Length + ds 4 ; Written + ds 2 + +*--- Nom des fichiers + +pTCK1 strl '1/Tinies.Data/TCK1' +pTCK2 strl '1/Tinies.Data/TCK2' +pDOC strl '1/Tinies.Data/Tinies.Docu' +pABOUT strl '1/Tinies.Data/TCK.About' +pLOGO strl '1/Tinies.Data/TCK.Logo' +pNIV strl '1/Tinies.Data/Niv00' +pTAB strl '1/Tinies.Data/Tinies.Tab2' + +pBOUGE strl '1/Tinies.Data/Bouge' +pFONTE strl '1/Tinies.Data/Fonte' +pGADGET2 strl '1/Tinies.Data/Gadget2' +pGADGET3 strl '1/Tinies.Data/Gadget3' +pTINY1 strl '1/Tinies.Data/Tiny1' +pTINY2 strl '1/Tinies.Data/Tiny2' + +pGAME strl '1/The.Tinies' + +*--- Routine 3200 couleurs + +mySTACK ds 2 + +affTBL dw $e4,$84,$8c,$94,$9c,$a4,$ac + dw $b4,$bc,$c4,$cc,$d4,$dc + +*--- Memoire + +myID ds 2 + +ptrTCK1 ds 4 ; 0 +ptrNIV ds 4 ; 1 +ptrDOC ds 4 ; 2 +ptrTAB ds 4 ; 3 +ptrBOUGE ds 4 ; 4 +ptrGADGET2 ds 4 ; 5 +ptrTINY1 ds 4 ; 6 + +ptrTCK2 ds 4 ; 7 +ptrBACK ds 4 ; 8 +ptrABOUT ds 4 ; 9 + ds 4 ; A (unused 32kb) +ptrFONTE ds 4 ; B +ptrGADGET3 ds 4 ; C +ptrTINY2 ds 4 ; D + +ptrUNPACK ds 4 ; 64kb for unpacking + +*--- Decompression + +packMASK dw $01ff + dw $03ff + dw $07ff + dw $0fff + dw $0000 + +temp ds 2 + +*--- Lignes + +Ligne = * + +]Ligne = $0 + lup 200 + dw ]Ligne +]Ligne = ]Ligne+160 + --^ + +*$ + asc 0d + asc "Olivier is happy with his new CdROM: HottestFantasies"0d + asc "650mB of happiness... :-)"0d + + put TCK.Play + put TCK.About + +*$ + asc 0d + asc "See You Next Time In The Next Power GS Issue"0d + asc "End of Transmission.."0d diff --git a/thetinies/TINIES.CODES.S b/thetinies/TINIES.CODES.S new file mode 100644 index 0000000..33538b3 --- /dev/null +++ b/thetinies/TINIES.CODES.S @@ -0,0 +1,67 @@ +*--------------------------* +* * +* THE TINIES * +* * +* Brutal Deluxe * +* Atreid Concept * +* * +* Version: 1.1 du 2/2/95 * +*--------------------------* + + org $1000 + mx %11 + lst off + +*--- Mots de passe + +allCODES hex C4C7CDD8C4C6C8D6CAC4D6CCC4D1C7CC + hex CAD5D2CCC7C8CED1D1C8C5C4C6D5D8C6 + hex D5C8D6D7D8D6CBC4C8D1D7D5CFC4C6D2 + hex C5D2D7C6D5C8D3C4D2C6D7D2C4D1D9C4 + hex C6D2C4C7D6D8D3D3D5C4DAC5D6CECCD7 + hex D7C4D1CAD9CCCFCCC7C8D1C4CDD2CCD1 + hex D9C4D0C5D7CBC8C4D8D1D3C4D6D8C5D2 + hex CFC4D1C7D3C4D3DCD3D5C8D3D3C4D1C7 + hex D1CCC9C8D6C4CCCFC5D5D2C6CCD1C7CC + hex C5D8D6CED3D8CFCCCFD2CACCD0C4D5C4 + hex D2C6D7D2CACFC4C5D7D5CCD6C8D0C8D6 + hex C6D2D1D9CDC8CBD2D5C8D1C7C6CFCCD1 + hex D1C8CAC4D3D2CFDCD3C8D7D5C4C6C6C8 + hex D6D3D2D1C8D1C6D5CFC4DDDCCBD2D0CC + hex CBC8D1C7D2D8D7CED3C4D3DCC8D3CCD3 + hex C6D2C6CED6D7D8D0C8D7CBCCCAC4D1CA + hex CCD1CFC4C7D2D1C6CCD1D7C8C4D6D6C4 + hex D0C4D6D7DAD2D2C7C4C5D5D2CCD1D6D7 + hex C5C4C6CEC5C4D1C4C8C6CFD2DACBCCD3 + hex CAD5D2CCCCD0D3D2C6D8C5C4C6D8C5C4 + hex C7C8C6CFC7D5D2CFD6CCD0D3D8D1C7C8 + hex D8D1CBD8D6C6CBD2CFC8CAC4D0D8D5C4 + hex C4D1CCD0C6C4D7C8CFC4D8CAD0C4CAC4 + hex D3C4CFD6C7DCD6D6C5D5D2C6D5C8D9C8 + hex D3D2D5D5D8D1C7C8D8CCCAD8C4D3C8D5 + hex D1D2D1CBD0CCD6C6D3C8D5D8D6D0CCD7 + hex C7DCD6D6C7C8CED1C7CCD8D5CAC4D6CC + hex D2C7D2D5C6C4D8D6D3C8C4D6C4D1C6CB + hex D8D5D2D5C7C8C9C8D6D8C5C5D3CCC6CE + hex D5D8CFC4D6C6C4D5D1D2C7D8D2D2D3CB + hex C6D2C5C8CAC4CFC8D7D5D2CFD7C4C6D6 + hex D3C8C4D6D9C4D0C5DBDCCFD2DACCD5C8 + hex D6C6CCD8D0CCD1D7C8D8CAC8D5D8D1C8 + hex C8D5D8D3D3CFD2D7D0C4D5CCC6D2D1CE + hex D1D8D5D6CBCCD6D3D6D1D2C5CBD2D0D2 + hex D3D2D5D7C6C4D5D2C6CBC4D5CAC8C7C4 + hex D8D1D1C8D3D2DAD6D3D2D2D1D5D2D0C4 + hex D3D5C8C4D3D5C8D3D6C4CCCFDDD2D2D1 + hex CCD6D2D6D1D8D5D6CBC8D1C7DAD2D2C7 + hex C4CAD2D1D8D3D6D1CFC4D1C7C7CCD9D8 + hex D1CCC6CED0C4D6D7D3CCC6CED5D2CFCF + hex D2D8D7D6D6D3D2D7CEC4CFC4C4C6C6C8 + hex D7C8CFD2D5D8CFC4DAD2D5CECFC4D8C7 + hex CAD5C4CCD8D3CFC4D3D2CFD2D2C6D7D2 + hex D5C8D3C4C7C8D7C4C9C8CFC7D8D1C9D2 + hex C5C4C7CCD9C8CFCFD3C4D7CCC5C8C8C9 + hex D7CCD7C4D6C4D8C6D3D8D3CCD8D1D3D5 + hex D0C4D6D7C8D5D8D3D4D8C4D5C9C8CFC7 + hex CAD5CCC9D6CCC7C8DACBCCD7D8D1D1CC + hex C7D2DAD1CCD1D6D8D8D1CFCCCCD6D2D3 + hex D0D8C4C7A3C7CCC5 diff --git a/thetinies/Tinies.Main2.s b/thetinies/Tinies.Main2.s new file mode 100644 index 0000000..3ed5dcd --- /dev/null +++ b/thetinies/Tinies.Main2.s @@ -0,0 +1,1939 @@ + +******************************************************************************* +******************************** INITS ************************************** +******************************************************************************* + + lda #pMAIN + ldx ptrUNPACK+1 + jsr loadFILE + bcc bip + brl initOFF + +bip lda ptrECRAN+1 + jsr unPACK + +*--- Look for preference file + + lda #$6038 + sta loadERR+3 + + lda #pPREF + ldx ptrUNPACK+1 + jsr loadFILE + bcc bip30 + brl bip40 + +bip30 lda ptrUNPACK + sta Debut + lda ptrUNPACK+2 + sta Debut+2 + + ldy #0 ; Select + lda [Debut],y + sta ACTION + and #$7f + sta ACTION+2 + iny ; Left + iny + lda [Debut],y + sta ACTION+4 + and #$7f + sta ACTION+6 + iny ; Right + iny + lda [Debut],y + sta ACTION+8 + and #$7f + sta ACTION+10 + iny ; Up + iny + lda [Debut],y + sta ACTION+12 + and #$7f + sta ACTION+14 + iny ; Down + iny + lda [Debut],y + sta ACTION+16 + and #$7f + sta ACTION+18 + + ldy #14 ; Level + lda [Debut],y + sta LEVEL + sta level + iny ; Life + iny + lda [Debut],y + sta life + iny ; Joker + iny + lda [Debut],y + sta joker + + ldx LEVEL + lda #0 +]lp cpx #0 + beq bip31 + clc + adc #8 + dex + bpl ]lp + lda #0 +bip31 clc + adc #PASSWRD + sta bip32+1 + + ldx #0 +bip32 lda PASSWRD,x + sec + sbc #$0300 + sta SAVESBU,x + inx + inx + cpx #8 + bne bip32 + +*--- Look for construction kit mode + +bip40 lda #pDATAS2 + ldx ptrUNPACK+1 + jsr loadFILE + bcs bip20 + + lda #$eaea + sta loadERR+3 + lda #1 + sta okDATAS2 + bra bip21 + +bip20 lda #$eaea + sta loadERR+3 + stz okDATAS2 + +*--- + +bip21 lda #pDOCU + ldx ptrUNPACK+1 + jsr loadFILE + bcc bip1 + brl initOFF + +bip1 lda ptrBOUGE+1 + jsr unPACK + + ldal $e102e9 + cmp #$0202 + beq bip11 + pha + and #$ff00 + cmp #$0200 + beq bip10 + pla + and #$00ff + cmp #$0002 + beq bip11 + + lda #pDOCUS + bra bip12 + +bip10 pla +bip11 lda #pDOCFR + +bip12 ldx ptrNIV+1 + jsr loadFILE + bcc bip2 + brl initOFF + +bip2 lda ptrNIV + sta AFTTBI + sta AFTDEB0+1 + sta AFTDEB3+1 + + lda #pSPRITE + ldx ptrUNPACK+1 + jsr loadFILE + bcc bip3 + brl initOFF + +bip3 lda ptrDATAS+1 + jsr unPACK + +*--- + LDA #$0000 + STA POSX + STA POSY + STA A1 ; INIT SOURIS + STA AP + JSR SAUV ; SAUVEGARDE DECOR + JSR DESS + + LDA #$0001 + JMP PICT ; AFFICHE L'IMAGE MAIN + +okDATAS2 ds 2 +okDATAS3 ds 2 + +*-------------------------- Message + + hex 0d0d + asc 'Is it possible to create a game without any easter eggs ?' + asc ':-)' + hex 0d0d + +***************************************************************************** +**************************** MOUSE MANAGER ******************************** +***************************************************************************** + +SOURIS LDA BOUT ; ANCIEN BOUT=NOUVEAU BOUT + STA BOUT1 + +SOURIS0 JSR SLECT ; LECTURE SOURIS + CPY #$FFFF + BEQ SECR ; DONNEES NON DISPONIBLES + +SOURIS1 LDA A1 ; A1 POSITION ACTUELLE + STA AP ; AP ANCIENNE POSITION + LDA POSX + LSR + STA SOURIS2+1 + LDA POSY + ASL + TAX + LDA Ligne,X + CLC +SOURIS2 ADC #$0000 ; CALCUL DE A1 (160*POSY+POSX) + STA A1 + JSR TRACE ; ON DESSINE LE POINTEUR + +***** + +SECR 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 + JMP BUMPDEF ; AUCUN BOUTON DETECTE : TRAITEMENT PAR DEFAUT + + +******************************************************************************* +*********************** TRAITEMENT DES BOUTONS ****************************** +******************************************************************************* + +BORD4 LDX SECR2+1 ; NUMERO DU BUMPER (*2) + LDA #BORD44 + STA BUMPER5+1 ; ADRESSE D'EXECUTION + JMP BUMPER +BORD44 JMP SOURIS1 ; ON SORT SANS LIRE LA SOURIS + +BORD5 LDA ECRAN + CMP #$0009 ; ON EST SUR L'ECRAN LINE, ON NE CHANGE RIEN + BEQ BORD55 + LDAL $00C034 ; ICI TRAITEMENT PAR DEFAUT + AND #$FFF0 ; BORDURE NOIRE + STAL $00C034 +BORD55 RTS + +BORD6 LDAL $00C034 + AND #$FFF0 + ORA #$0001 ; ROUGE + STAL $00C034 + RTS + +*********** TINIES MAIN + +ECR0100 LDX SECR2+1 ; MAIN : DOCUMENTATION + LDA #ECR01000 + STA BUMPER5+1 + JMP BUMPER +ECR01000 LDA #$0002 ; IMAGE DOCU + JMP PICT + +ECR0101 LDX SECR2+1 ; MAIN : EXIT + LDA #ECR01010 + STA BUMPER5+1 + JMP BUMPER +ECR01010 lda #1 + jsr nowWAIT + jsr fadeOUT + brl initOFF ; ON QUIT + +ECR0102 LDX SECR2+1 ; MAIN : PLAY + LDA #ECR01020 + STA BUMPER5+1 + JMP BUMPER +ECR01020 lda LEVEL ; TRANSFERT DE LEVEL ET DES TOUCHES + sta level + ldx #0 + txy +]lp lda ACTION,x + sta keyPREF,y + inx + inx + inx + inx + iny + iny + cpy #10 + bne ]lp + + jsr saveFILE + + LDA okDATAS2 ; DETECTION DU DEUXIEME JEU DE TABLEAU + BEQ ECR01021 + LDA #$0003 + JMP PICT3 ; SELECTION DU JEU +ECR01021 lda #1 + jsr nowWAIT + jsr fadeOUT + brl entryGAME ; SAUT AU JEU + +ECR0103 LDA #ECR01030 ; MAIN : SURFACE SAISIE CODE + STA SURFACE5+1 + JMP SURFACE +ECR01030 JSR DESS1 ; SAISIE DU CODE + JSR SAVESAI + JSR ECR0110 ; REAFFICHAGE + JSR SAUV + JMP SOURIS + +ECR0104 LDA #ECR01040 ; MAIN : SURFACE SAISIE HAUT + STA SURFACE5+1 + JMP SURFACE +ECR01040 JSR DESS1 ; SAISIE HAUT + STZ HAUT + LDX #$0CFC + JSR DIRECT + STA HAUT ; VALEUR CLAVIER + AND #$007F + STA HAUT+2 ; VALEUR ASCII + JSR ECR0110 ; AFFICHAGE + JSR SAUV + JMP SOURIS + +ECR0105 LDA #ECR01050 ; MAIN : SURFACE SAISIE BAS + STA SURFACE5+1 + JMP SURFACE +ECR01050 JSR DESS1 ; SAISIE BAS + STZ BAS + LDX #$223C + JSR DIRECT + STA BAS ; VALEUR CLAVIER + AND #$007F + STA BAS+2 ; VALEUR ASCII + JSR ECR0110 ; AFFICHAGE + JSR SAUV + JMP SOURIS + +ECR0106 LDA #ECR01060 ; MAIN : SURFACE SAISIE GAUCHE + STA SURFACE5+1 + JMP SURFACE +ECR01060 JSR DESS1 ; SAISIE GAUCHE + STZ GAUCHE + LDX #$1792 + JSR DIRECT + STA GAUCHE ; VALEUR CLAVIER + AND #$007F + STA GAUCHE+2 ; VALEUR ASCII + JSR ECR0110 ; AFFICHAGE + JSR SAUV + JMP SOURIS + +ECR0107 LDA #ECR01070 ; MAIN : SURFACE SAISIE DROITE + STA SURFACE5+1 + JMP SURFACE +ECR01070 JSR DESS1 ; SAISIE DROITE + STZ DROITE + LDX #$17A6 + JSR DIRECT + STA DROITE ; VALEUR CLAVIER + AND #$007F + STA DROITE+2 ; VALEUR ASCII + JSR ECR0110 ; AFFICHAGE + JSR SAUV + JMP SOURIS + +ECR0108 LDA #ECR01080 ; MAIN : SURFACE SAISIE ACTION + STA SURFACE5+1 + JMP SURFACE +ECR01080 JSR DESS1 ; SAISIE ACTION + STZ ACTION + LDX #$179C + JSR DIRECT + STA ACTION ; VALEUR CLAVIER + AND #$007F + STA ACTION+2 ; VALEUR ASCII + JSR ECR0110 ; AFFICHAGE + JSR SAUV + JMP SOURIS + +ECR0109 LDA #ECR01090 ; MAIN : SURFACE TIPS + STA SURFACE5+1 + JMP SURFACE +ECR01090 NOP + LDA TIPSFLAG ; PLUS COURT... + BNE ECR01091 + INC TIPSFLAG +ECR01091 JMP SOURIS + +TIPSFLAG HEX 0000 + +ECR0110 JSR SAVESAF ; AFFICHAGE ECRAN MAIN + LDA #$2CFC ; UP + STA OPENADR + LDA HAUT+2 + JSR OPENCAR + LDA #$379C ; ACTION + STA OPENADR + LDA ACTION+2 + JSR OPENCAR + LDA #$423C ; DOWN + STA OPENADR + LDA BAS+2 + JSR OPENCAR + LDA #$3792 ; <- + STA OPENADR + LDA GAUCHE+2 + JSR OPENCAR + LDA #$37A6 ; -> + STA OPENADR + LDA DROITE+2 + JSR OPENCAR + + LDA LEVEL ; AFFICHAGE LEVEL + STA VALH + LDA #$2C10 + STA ADRE + JSR TRANS ; AFFICHAGE RHS + RTS + +LEVEL HEX 0000 ; N[ DU NIVEAU (1-110) +ACTION HEX B000,3000 ; CLAVIER,ASCII +GAUCHE HEX B400,3400 ; TOUCHE DE DIRECTION +DROITE HEX B600,3600 +HAUT HEX B800,3800 +BAS HEX B200,3200 + +DIRECT NOP ; SAISIE DIRECTION + LDY #$0004 +DIREC LDA #$0000 + STAL $012000,X + STAL $012002,X ; NETTOY LA SURFACE + TXA + CLC + ADC #$00A0 + TAX + DEY + BPL DIREC + + LDA #$9999 ; AFFICHAGE TIRET ROUGE + STAL $012000,X + LDA #$9099 + STAL $012002,X + +DIRECKB LDAL $00BFFF + BPL DIRECKB + STAL $00C010 ; BIT $C010 + XBA + AND #$00FF + CMP #$00A6 + BEQ DIRECKB ; ON ELIMINE & + CMP #$00A0 + BMI DIRECKB + CMP #$00DB + BMI DIRECKB1 + CMP #$00E1 + BMI DIRECKB + CMP #$00FB + BPL DIRECKB +DIRECKB1 CMP HAUT ; ON ACCEPTE LE CARACTERE + BEQ DIRECKB + CMP BAS + BEQ DIRECKB + CMP GAUCHE ; ON VERIFIE QU'ON NE DOUBLONNE PAS + BEQ DIRECKB + CMP DROITE + BEQ DIRECKB + CMP ACTION + BEQ DIRECKB + TAY + LDA #$0000 ; NETTOYAGE TIRET ROUGE + STAL $012000,X + STAL $012002,X + TYA + RTS + +*********** TINIES DOCUMENTATION + +ECR0200 LDX SECR2+1 ; DOCU : <- + LDA #ECR02000 + STA BUMPER5+1 + JMP BUMPER +ECR02000 LDA AFTIND ; PAGE PRECEDENTE + BEQ ECR02001 + DEC AFTIND + STZ AFTFL4 + JSR AFFTEXT +ECR02001 JMP SOURIS1 + +ECR0201 LDX SECR2+1 ; DOCU : -> + LDA #ECR02010 + STA BUMPER5+1 + JMP BUMPER +ECR02010 LDA AFTFL4 ; PAGE SUIVANTE + BNE ECR02011 ; ON EST AU BOUT DU FICHIER + INC AFTIND ; INDEX + JSR AFFTEXT +ECR02011 JMP SOURIS1 + +ECR0202 LDX SECR2+1 ; DOCU : o + LDA #ECR02020 + STA BUMPER5+1 + JMP BUMPER +ECR02020 LDA AFTIND ; INDICE DE PAGE + BEQ ECR02021 + STZ AFTFL4 ; SOMMAIRE + STZ AFTIND ; PREMIERE PAGE + STZ AFTCONT + JSR AFFTEXT +ECR02021 JMP SOURIS1 + +ECR0203 LDX SECR2+1 ; DOCU : EXIT + LDA #ECR02030 + STA BUMPER5+1 + JMP BUMPER +ECR02030 STZ AFTCONT ; ECRAN MAIN + LDA #$0001 + JMP PICT + +*********** TINIES SELECT + +ECR0300 LDX SECR2+1 ; SELECT : CLASSIC + LDA #ECR03000 + STA BUMPER5+1 + JMP BUMPER +ECR03000 lda #1 + jsr nowWAIT + stz okDATAS3 + jsr fadeOUT + BRL entryGAME + +ECR0301 LDX SECR2+1 ; SELECT : EXTEND + LDA #ECR03010 + STA BUMPER5+1 + JMP BUMPER +ECR03010 lda #1 + jsr nowWAIT + lda #1 + sta okDATAS3 + jsr fadeOUT + BRL entryGAME + +*************************************************************************** +****************************** DATA ************************************* +*************************************************************************** + +************ BUMPER MANAGER ************ PAVE + +BUMPER LDA FLAGTAB,X + BEQ BUMPER2 + LDA BOUT + BEQ BUMPER1 +BUMPER0 JMP SOURIS +BUMPER1 STZ FLAGTAB,X ; RELEVE LE BUMPER ET EFFECTUE LE TRAITEMENT + STZ BMPFLG + JSR DESS1 + JSR AFFSPRR + JSR SAUV +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 + JSR DESS1 + JSR AFFSPRR + JSR SAUV +BUMPER3 LDA BOUT + BEQ BUMPER0 ; 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 + JSR DESS1 + JSR AFFSPRE + JSR SAUV + JMP SOURIS1 + +************* SURFACE MANAGER ************* ZONE D'ECRAN + +SURFACE LDA BMPFLG ; X CONTIENT LE NUMERO DU BOUTON + BEQ SURFACE1 + LDX LAST ; ON FORCE SA RELEVE + STZ BMPFLG + STZ FLAGTAB,X + STX SECR2+1 + JSR DESS1 + JSR AFFSPRR + JSR SAUV + JMP SOURIS1 +SURFACE1 LDA BOUT + BEQ SURFACE2 +SURFACE5 JMP $FFFF ; TRAITEMENT A EFFECTUER +SURFACE2 JMP SOURIS + +******** TRAITEMENT PAR DEFAUT ********* + +BUMPDEF LDA BMPFLG + BEQ BUMPDEF1 + LDX LAST ; FORCE LE REMONTEE DE L'ANCIEN + STZ FLAGTAB,X + STZ BMPFLG + STX SECR2+1 + JSR DESS1 + JSR AFFSPRR + JSR SAUV + JMP SOURIS1 +BUMPDEF1 JMP SOURIS + +********************************************** + + HEX 0A00 ; MAIN NB DE BOUTONS DANS ECRAN1 +ECR01TAB HEX B600,3F01,8900,C700 ; DOCU TABLEAU DES BOUTONS POUR ECRAN1 + HEX 0000,8900,8900,C700 ; EXIT X0,X1 Y0,Y1 + HEX 4E00,F200,5D00,8500 ; PLAY + HEX 2C00,6300,3400,3D00 ; CODE + HEX F700,0201,1200,1B00 ; HAUT + HEX F700,0201,3400,3D00 ; BAS + HEX E300,ED00,2300,2C00 ; GAUCHE + HEX 0B01,1301,2300,2C00 ; DROITE + HEX F700,0201,2300,2C00 ; ACTION + HEX 1700,1800,1E00,1F00 ; TIPS + +ECR01DAT HEX 0600,1800,D87E,1D00 ; LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE + HEX 0E00,2400,1D7A,0000 ; EXIT + HEX 0100,0100,405D,9B00 ; PLAY + + HEX 0400 ; DOCU +ECR02TAB HEX 6C00,7800,B600,BF00 ; <- + HEX 9000,9C00,B600,BF00 ; -> + HEX 8100,8700,B800,BD00 ; POINT + HEX 0601,3801,B300,C100 ; EXIT + +ECR02DAT HEX 0300,0900,F691,2A00 ; LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE + HEX 0300,0900,0892,6A06 + HEX 0200,0500,4093,AA0C + HEX 0800,0700,E892,5D10 + + HEX 0200 ; SELECT +ECR03TAB HEX 5D00,9E00,6500,7300 ; CLASSIC X0,X1 Y0,Y1 + HEX A200,E300,6500,7300 ; EXTENT + +ECR03DAT HEX 0E00,0700,D161,3105 ; LONGUEUR (*4),HAUTEUR,@ ECRAN,@ SPRITE + HEX 0C00,0700,F761,3100 + +**************** + +ECRTAB DA ECR01TAB,ECR02TAB,ECR03TAB ; ADRESSES DES TABLEAUX + +ECRDAT DA ECR01DAT,ECR02DAT,ECR03DAT ; ADRESSE DES DONNEES BUMPERS + +ECRDESA DA ECRDES1,ECRDES2,ECRDES3 ; ADRESSE POUR LES DESTINATIONS + +ECRDES1 DA ECR0100,ECR0101,ECR0102,ECR0103,ECR0104 ; MAIN : ADRESSES DES DESTINATIONS + DA ECR0105,ECR0106,ECR0107,ECR0108,ECR0109 +ECRDES2 DA ECR0200,ECR0201,ECR0202,ECR0203 ; DOCUMENTATION +ECRDES3 DA ECR0300,ECR0301 ; SELECT + +********************* SOUS ROUTINES SOURIS ************************** + +DEC HEX 000000000000 ; DECOR SOUS LE POINTEUR + HEX 000000000000 + HEX 000000000000 + HEX 000000000000 + HEX 000000000000 + HEX 000000000000 + +PTPAI HEX FFFFFFFF0000 + HEX 0F00000F0000 ; POINTEUR POSITION PAIRE + HEX 00F000F00000 + HEX 000F00F00000 + HEX 0000FF000000 + HEX 00000F000000 + +PTPAIMA HEX 00000000FFFF + HEX F0000000FFFF ; MASQUE POSITION PAIRE + HEX FF00000FFFFF + HEX FFF0000FFFFF + HEX FFFF00FFFFFF + HEX FFFFF0FFFFFF + +PTIMP HEX 0FFFFFFFF000 + HEX 00F00000F000 ; POINTEUR POSITION IMPAIRE + HEX 000F000F0000 + HEX 0000F00F0000 + HEX 00000FF00000 + HEX 000000F00000 + +PTIMPMA HEX F00000000FFF + HEX FF0000000FFF ; MASQUE POSITION IMPAIRE + HEX FFF00000FFFF + HEX FFFF0000FFFF + HEX FFFFF00FFFFF + HEX FFFFFF0FFFFF + +POSX HEX 0000 ; 0-312 +POSY HEX 0000 ; 0-194 +A1 HEX 0000 ; POSITION ACTUELLE +AP HEX 0000 ; ANCIENNE POSITION +ECRAN HEX 0000 ; ECRAN 1,2,3... +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 + +******************** + +SEXIT LDY #$FFFF + RTS + +SLECT LDAL $00C026 ; $C027 LECTURE SOURIS + BPL SEXIT + AND #$0200 ; BUG + 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 #$0139 ; 313 + BMI SLECT7 + LDA #$0138 ; 312 +SLECT7 STA POSX + BRA SLECT10 +SLECT8 LDA POSX ; DELX < 0 + SEC + SBC DELX+1 + BPL SLECT9 + LDA #$0000 +SLECT9 STA POSX +SLECT10 LDA NEY ; CALCUL DE POSY + BNE SLECT12 + LDA POSY ; DELY > 0 + CLC + ADC DELY+1 + CMP #$00C3 ; 195 + BMI SLECT11 + LDA #$00C2 ; 194 +SLECT11 STA POSY + BRA SLECT14 +SLECT12 LDA POSY ; DELY < 0 + SEC + SBC DELY+1 + BPL SLECT13 + LDA #$0000 +SLECT13 STA POSY +SLECT14 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 #$0004 ; LARGEUR 3 +DESS3 LDA DEC,Y +DESS4 STAL $012000,X + INY + INY + DEX + DEX + BPL DESS3 + CPY #$0024 ; NB CASES (36) + BPL DESS5 + LDX #$0004 ; LARGEUR 3 + 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 #$0004 ; LARGEUR 3 +SAUV1 LDAL $012000,X + STA DEC,Y + INY + INY + DEX + DEX + BPL SAUV1 + CPY #$0024 ; NB CASES (36) + BPL SAUV2 + LDX #$0004 ; LARGEUR 3 + LDA SAUV1+1 + CLC + ADC #$00A0 + STA SAUV1+1 + BRA SAUV1 +SAUV2 RTS + +TRACE JSR DESS ; OK + JSR SAUV + LDA A1 ; DESSINE LE POINTEUR POSITION PAIRE + CLC + ADC #$2000 + STA TRACE1+1 + STA TRACE4+1 + LDA POSX + LSR + BCC TRACEP + LDX #PTIMP ; POSITION IMPAIRE + LDY #PTIMPMA + BRA TRACE0 +TRACEP LDX #PTPAI ; POSITION PAIRE + LDY #PTPAIMA +TRACE0 STX TRACE3+1 ; MOTIF + STY TRACE2+1 ; MASQUE + LDY #$0000 + LDX #$0000 +TRACE1 LDAL $012000,X +TRACE2 AND $A0A0,Y ; ET AVEC LE MASQUE +TRACE3 ORA $A0A0,Y ; OU AVEC LE MOTIF +TRACE4 STAL $012000,X + INY + INY + INX + INX + CPX #$0006 ; LARGEUR 3 + BNE TRACE1 + CPY #$0024 ; NB CASES (36) + BEQ TRACE5 + LDX #$0000 + LDA TRACE1+1 + CLC + ADC #$00A0 + STA TRACE1+1 + STA TRACE4+1 + BRA TRACE1 +TRACE5 RTS + +************************************************* + +AFFSPRR INC AFFSPRF ; BUMPER RELEVE +AFFSPRE LDA ECRAN ; BUMPER ENFONCE + DEC + ASL + TAX + LDA ECRDAT,X ; ADRESSE DU TABLEAU DES DATA POUR L'ECRAN CONCERNE + STA AFFSPR1+1 + LDA SECR2+1 ; CONTIENT LE NUMERO DU BUMPER (*2) + ASL + ASL ; *4 + CLC +AFFSPR1 ADC #$0000 ; ADRESSE DATA BUMPER + TAX +SECR14 LDA\ $0000,X ; LONGUEUR + DEC + ASL + STA AFFSPR3+1 + INX + INX +SECR15 LDA\ $0000,X ; HAUTEUR + DEC + STA AFFSPR2+1 + INX + INX +SECR16 LDA\ $0000,X ; @ ECRAN + STA AFFSPR5+1 + INX + INX + lda ptrDATAS + sta AFFSPR4+1 + lda ptrDATAS+1 + sta AFFSPR4+2 +SECR17 LDA\ $0000,X ; @ SPRITE + clc + adc AFFSPR4+1 + STA AFFSPR4+1 + LDA AFFSPRF ; FLAG DE AFFSPR + BNE AFFSPR2 ; ON DESSINE LE SPRITE RELEVE + LDA AFFSPR4+1 + CLC ; SPRITE ENFONCE + ADC #$1720 ; 37 LIGNES PLUS BAS + STA AFFSPR4+1 +AFFSPR2 LDY #$0000 ; HAUTEUR-1 +AFFSPR3 LDX #$0000 ; NOMBRE DE *4-2 +AFFSPR4 LDAL $060000,X ; ADRESSE SPRITE (BANC 06) +AFFSPR5 STAL $012000,X ; ADRESSE ECRAN + DEX + DEX + BPL AFFSPR4 ; RECOPIE 1 LIGNE + LDA AFFSPR4+1 + CLC ; LIGNE SUIVANTE SPRITE + ADC #$00A0 + STA AFFSPR4+1 + LDA AFFSPR5+1 + CLC ; LIGNE SUIVANTE ECRAN + ADC #$00A0 + STA AFFSPR5+1 + DEY + BPL AFFSPR3 + STZ AFFSPRF + RTS +AFFSPRF HEX 0000 ; FLAG RELEVE/ENFONCE + +*-------------------------- Message + + hex 0d0d + asc 'Have you ever dreamed of playing the level you prefer ?' + hex 0d0d + +***************** AFFICHE DES CHIFFRES SUR 3 COLONNES **************************** + +TRANS LDA VALH ; ON CONVERTIT L'HEXA EN DECIMAL + BNE TRANS1 + LDA #$000A ; LE CHIFFRE EN NOIR + STA VAL2 + STA VAL3 + stz VAL1 + BRA TRANS6 ; ON AFFICHE LE NOIR +TRANS1 LDX #$0000 +TRANS2 LDA VALH ; VALEUR EN HEXA + CMP #$0064 ; 100 + BMI TRANS3 + SEC + SBC #$0064 + STA VALH + INX + BRA TRANS2 +TRANS3 STX VAL3 ; CENTAINE + LDX #$0000 +TRANS4 LDA VALH ; VALEUR EN HEXA + CMP #$000A ; 10 + BMI TRANS5 + SEC + SBC #$000A ; 10 + STA VALH + INX + BRA TRANS4 +TRANS5 STX VAL2 ; DIZAINE + STA VAL1 ; UNITES + + LDA VAL3 ; CENTAINES + BNE TRANS6 + LDY #$000A + STY VAL3 ; SI LE CHIFFRE DES CENTAINES EST 0, ON LE NOIRCI + LDA VAL2 ; DIZAINE + BNE TRANS6 + STY VAL2 ; SI CENTAINE ET DIZAINE = ZERO, ON NOIRCIT LES 2 + +TRANS6 LDA ADRE ; ON AFFICHE LES 3 CHIFFRES + STA AFTCA+1 ; ADRESSE ECRAN + LDA VAL3 + JSR CHIF ; CENTAINES + LDA ADRE + CLC + ADC #$0003 + STA AFTCA+1 ; ADRESSE ECRAN + LDA VAL2 + JSR CHIF ; DIZAINES + LDA ADRE + CLC + ADC #$0006 + STA AFTCA+1 ; ADRESSE ECRAN + LDA VAL1 + JSR CHIF ; UNITES + RTS + +********************* + +CHIF ASL ; DANS ACC LA VALEUR DECIMALE (0-9) + ASL + STA CHIF1+1 + ASL + ASL ; *16 + CLC +CHIF1 ADC #$0000 ; + *4 + CLC + ADC #$0012 ; 10*2 + TAX + LDY #$0012 ; 10*2 +CHIF2 LDA AFBT0,X + STA AFBTT,Y + DEX + DEX ; RECOPIE DANS LE BUFFER + DEY + DEY + BPL CHIF2 + +*** AFFICHE CARACTERE *** + +AFTCA LDA #$0000 ; ADRESSE ECRAN + STA AFTCA2+1 + INC + INC + STA AFTCA4+1 + LDX #$0000 ; 1 ere COLONNE +AFTCA1 LDA AFBTT,X +AFTCA2 STAL $012000 + LDA AFTCA2+1 + CLC + ADC #$00A0 + STA AFTCA2+1 ; LIGNE SUIVANTE + INX + INX + CPX #$000A + BNE AFTCA1 + LDX #$0000 ; 2 eme COLONNE +AFTCA3 LDA AFBTT1,X +AFTCA4 STAL $012000 + LDA AFTCA4+1 + CLC + ADC #$00A0 + STA AFTCA4+1 ; LIGNE SUIVANTE + INX + INX + CPX #$000A + BNE AFTCA3 + RTS + +AFBTT HEX 00000000000000000000 +AFBTT1 HEX 00000000000000000000 +VALH HEX 0000 ; VALEUR HEXA +VAL1 HEX 0000 +VAL2 HEX 0000 ; VALEUR DECIMALE +VAL3 HEX 0000 +VAL4 HEX 0000 +VALFLAG HEX 0000 ; SI !=0 ALORS 000 EN NOIR +ADRE HEX 0000 ; ADRESSE ECRAN +AFBT0 HEX 00FF0F000F000F0000FFF0000F000F000F00F000 ; 0 + HEX 000F00FF000F000F0FFF0000000000000000FF00 ; 1 + HEX 0FFF000000FF0F000FFFF0000F00F0000000FF00 ; 2 + HEX 0FFF0000000F00000FFFF0000F00F0000F00F000 ; 3 + HEX 0F000F000F000FFF00000000F000F000FF00F000 ; 4 + HEX 0FFF0F000FFF00000FFFFF000000F0000F00F000 ; 5 + HEX 00FF0F000FFF0F0000FFFF000000F0000F00F000 ; 6 + HEX 0FFF0000000F00F000F0FF00F000000000000000 ; 7 + HEX 00FF0F0000FF0F0000FFF0000F00F0000F00F000 ; 8 + HEX 00FF0F0000FF00000FFFF0000F00FF000F00F000 ; 9 + HEX 0000000000000000000000000000000000000000 ; NOIR + +*-------------------------- Message + + hex 0d0d + asc 'Let'27's just hope',0d + asc ':-)' + hex 0d0d + +******************** TRAITEMENT ET AFFICHAGE ECRANS ********************* + +PICT PHA ; DESSINE LE DECOR SUR LE POINTEUR + JSR DESS1 + +PICT00 LDA ECRAN + BEQ PICT01 + jsr fadeOUT +PICT01 PLA + STA ECRAN ; DANS ACC LE NUMERO DE L'ECRAN + dec + asl + tax + lda ECRADTAB,x + tax + + lda ptrECRAN+1,x ; et mettre ces 3 lignes + ldy #0 + jsr fadeIN + + JSR CLNFLG ; LES FLAGS DE BUMPER A ZERO + STZ BMPFLG ; LES FLAGS A ZERO + 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 ECRMAIN,ECRDOCU ; NOM DES ECRANS POUR INIT +ECRADTAB dw 0,4 + +CLNFLG LDX #$0062 ; ON MET TOUS LES FLAG DE BUMPER A 0 + LDA #$0000 +CLNFLG1 STA FLAGTAB,X + DEX + DEX + BPL CLNFLG1 + RTS + +PICT3 STA ECRAN ; CREATION DE L'IMAGE SELECT + JSR DESS1 + JSR fadeOUT + LDA ptrDATAS+1 + STA PICT31+2 +* CLC +* ADC #$007E +* STA Fin3+2 +* STA Fin5+2 ; INIT FADE IN +* STA Fin7+2 + LDA PICT31+1 + AND #$FF00 + ORA #$004E + STA PICT31+1 + LDY #$001A +PICT30 LDX #$0048 +PICT31 LDAL $060000,X +PICT32 STAL $015B8B,X ; IMAGE + DEX + DEX + BPL PICT31 + LDA PICT31+1 + CLC + ADC #$00A0 + STA PICT31+1 ; LIGNE SUIVANTE + LDA PICT32+1 + CLC + ADC #$00A0 + STA PICT32+1 + DEY + BPL PICT30 + LDA #$5B8B + STA PICT32+1 ; REMET LA VALEUR + lda ptrDATAS+1 + ldy #-1 + jsr fadeIN +* JSR Fin0 ; FADEIN + JSR CLNFLG ; LES FLAGS DE BUMPER A ZERO + STZ BMPFLG ; LES FLAGS A ZERO + JSR SAUV + JMP SOURIS1 + +*********** TRAITEMENT INITIAL A L'AFFICHAGE + +ECRMAIN JSR ECR0110 ; ECRAN MAIN + JSR SAUV + JMP SOURIS1 + +ECRDOCU STZ AFTCONT ; ECRAN DOCUMENTATION + JSR AFFTEXT ; INITIALISATION COMPLETE + JSR SAUV + JMP SOURIS1 + +********************************************************************* + +******** SAISIE ******************* + +SAVESAI LDY #$0006 ; NETTOYAGE SURFACE +SAVESAI1 LDA #$0000 + LDX #$0018 +SAVESAI2 STAL $0141D6,X ; 1 LIGNES + DEX + DEX + BPL SAVESAI2 + LDA SAVESAI2+1 + CLC ; 5 LIGNES A EFFACER + ADC #$00A0 + STA SAVESAI2+1 + DEY + BNE SAVESAI1 + LDA #$41D6 ; REMET LA VALEUR + STA SAVESAI2+1 + + LDX #$0006 ; NETTOYAGE BUFFER ET NOM DE SAUVEGARDE (8 LETTRES) + LDA #$0000 +SAVESAI3 STA SAVESBU,X + DEX + DEX + BPL SAVESAI3 + + LDA #$9999 ; AFFICHAGE TIRET ROUGE + STAL $01450C + LDA #$9099 + STAL $01450E + +SAVESAI4 LDAL $00BFFF ; ON COMMENCE LA SAISIE : ON ATTEND 1 LETTRE + BPL SAVESAI4 + STAL $00C010 ; BIT $C010 + XBA + AND #$00FF + + CMP #$00FF ; DELETE : ON EFFACE LA LETTRE + BNE SAVESAI10 + LDA SAVESLS + BEQ SAVESAI4 ; RIEN A EFFACER + JSR SAVESGE ; EFFACE 1 LETTRE : DECALAGE DROITE + JSR SAVESAF ; REAFFICHE LA CHAINE + DEC SAVESLS + BRA SAVESAI4 +SAVESAI10 CMP #$00C1 ; MAJUSCULE ? + BMI SAVESAI4 + CMP #$00DB + BMI SAVESAI5 + CMP #$00E1 ; MINUSCULE ? + BMI SAVESAI4 + CMP #$00FB + BPL SAVESAI4 + SEC + SBC #$0020 + BRA SAVESAI5 ; CONVERSION MINUSCULE -> MAJUSCULE + +SAVESAI5 TAY + JSR SAVESDE ; DECALAGE GAUCHE + STY SAVESBU+7 + JSR SAVESAF ; AFFICHAGE + LDA SAVESLS + INC + CMP #$0008 + BEQ SAVESAI8 ; ON A SAISIE HUIT LETTRES + STA SAVESLS + BRA SAVESAI4 + +SAVESAI8 STZ SAVESLS ; C'EST LA FIN (8 LETTRES SAISIES) + LDA #$0000 ; EFFACE LE TIRET ROUGE + STAL $01450C + STAL $01450E + LDX #$0006 ; ON VERIFIE LE CODE +SAVESAI9 LDA SAVESBU,X + CLC + ADC #$0300 + STA SAVECRY,X ; ON CRYPTE + DEX + DEX + BPL SAVESAI9 + LDY #$0000 + LDX #$0000 +SAVESAI6 LDA SAVECRY,Y ; ON CHERCHE + CMP PASSWRD,X + BNE SAVESAI7 + CPY #$0006 + BEQ SAVESAI11 ; TROUVE + INY + INY + INX + INX + BRA SAVESAI6 +SAVESAI7 LDY #$0000 + INX + INX + CPX #$0328 + BNE SAVESAI6 + LDA #$0000 ; PAS TROUVE... + STA LEVEL + LDX #$0006 +SAVESAI12 LDA SAVEDEF,X ; ON RECOPIE ADJUACES (DEFAULT) + STA SAVESBU,X + DEX + DEX + BPL SAVESAI12 + RTS +SAVESAI11 INX + INX + TXA + LSR + LSR ; /8 + LSR + dec + STA LEVEL + sta level + stz joker + stz life + RTS + +SAVESDE LDX #$0000 ; DECALAGE 1 CRAN VERS LA GAUCHE +SAVESDE1 LDA SAVESBU+1,X + STA SAVESBU,X + INX + INX + CPX #$000A + BNE SAVESDE1 + RTS + +SAVESGE LDX #$0006 ; DECALAGE 1 CRAN VERS LA DROITE +SAVESGE1 LDA SAVESBU,X + STA SAVESBU+1,X + DEX + DEX + BPL SAVESGE1 + LDA #$0000 ; PLACE UN ZERO AU DEBUT + STA SAVESBU-1 + RTS + +SAVESAF LDY #$0000 ; AFFICHAGE SAISIE : 8 CARACTERES + LDA #$41D7 + STA OPENADR +SAVESAF1 LDA SAVESBU,Y + AND #$007F ; PASSAGE 8 bit -> 7 bit + JSR OPENCAR ; AFFICHE 1 CARAC + INY + CPY #$0008 + BNE SAVESAF1 + RTS + + HEX 0000 +SAVESBU HEX C1,C4,CA,D5,C1,C3,C5,D3,0000 ; ADJUACES PAR DEFAUT +SAVESLS HEX 0000 ; NB DE LETTRES SAISIES +SAVEDEF HEX C1C4CAD5C1C3C5D3 +SAVECRY HEX 0000000000000000 + +OPENCAR PHY ; RECOIT DANS ACC LE CARACTERE ET L'AFFICHE (OPENADR) + AND #$00FF + CMP #$0020 ; ESPACE -> SP + BNE OPENCAR8 + LDA #$009E +OPENCAR8 STA OPENCAR6+1 + LDY #$0063 +OPENCAR5 LDA AFTTBL,Y ; ON CHERCHE LE SPRITE CORESPONDANT + AND #$00FF +OPENCAR6 CMP #$00FF + BEQ OPENCAR7 + DEY + BPL OPENCAR5 + LDY #$003B ; PAS TROUVE, ON MET UN ESPACE (40) +OPENCAR7 TYA + ASL + TAY + LDA AFTADR,Y ; ADRESSE DES SPRITES + STA OPENCAR1+1 + CLC + ADC #$000A + STA OPENCAR3+1 + LDA OPENADR ; ADRESSE DESTINATION + STA OPENCAR2+1 + INC + INC + STA OPENCAR4+1 + INC + STA OPENADR + LDY #$0000 ; 1 ere COLONNE +OPENCAR1 LDA $AAAA,Y +OPENCAR2 STAL $012000 + LDA OPENCAR2+1 + CLC + ADC #$00A0 + STA OPENCAR2+1 ; LIGNE SUIVANTE + INY + INY + CPY #$000A + BNE OPENCAR1 + LDY #$0000 ; 2 eme COLONNE +OPENCAR3 LDA $AAAA,Y +OPENCAR4 STAL $012000 + LDA OPENCAR4+1 + CLC + ADC #$00A0 + STA OPENCAR4+1 ; LIGNE SUIVANTE + INY + INY + CPY #$000A + BNE OPENCAR3 + PLY + RTS + +OPENADR HEX 0000 ; ADRESSE ECRAN + +OBJAFF SEC ; AFFICHAGE OBJET + SBC #$00F0 + ASL + TAX + lda ptrDATAS + sta OBJAFF1+1 + lda ptrDATAS+1 + sta OBJAFF1+2 + LDA OBJETT,X + clc + adc OBJAFF1+1 + STA OBJAFF1+1 ; ADRESSE SPR + LDA AFTAE + STA OBJAFF2+1 ; ADRESSE ECR + LDY #$0017 +OBJAFF0 LDX #$000A +OBJAFF1 LDAL $060000,X ; ADRESSE SPRITE +OBJAFF2 STAL $012000,X ; ADRESSE ECRAN + DEX + DEX + BPL OBJAFF1 + LDA OBJAFF1+1 ; LIGNE SUIVANTE + CLC + ADC #$00A0 + STA OBJAFF1+1 + LDA OBJAFF2+1 + CLC + ADC #$00A0 + STA OBJAFF2+1 + DEY + BPL OBJAFF0 + RTS + +*-------------------------- Message + + hex 0d0d + asc 'No wind, no wave, no woman, then no future' + hex 0d0d + +************************************************* + +OBJETT HEX E12E,6140,E151,0B2F,EF2E,6F40,EF51,FD2E,7D40,FD51 + +AFTADR DA AFTA,AFTB,AFTC,AFTD,AFTE,AFTF,AFTG,AFTH,AFTI,AFTJ,AFTK,AFTL,AFTM,AFTN ; 0-13 + DA AFTO,AFTP,AFTQ,AFTR,AFTS,AFTT,AFTU,AFTV,AFTW,AFTX,AFTY,AFTZ,AFT0 ; 14-26 + DA AFT1,AFT2,AFT3,AFT4,AFT5,AFT6,AFT7,AFT8,AFT9,AFTPL,AFTMOI,AFTET,AFTSL,AFTEG ; 27-40 + DA AFTSO,AFTPE,AFTPI,AFTSU,AFTIN,AFTPO,AFTPF,AFTDP,AFTPT,AFTVI,AFTRO ; 41-51 + DA AFTGU,AFTAP,AFTPV,AFTDI,AFTDO,AFTAC,AFTPC,AFTSP ; 52-59 + DA AFTA,AFTB,AFTC,AFTD,AFTE,AFTF,AFTG,AFTH,AFTI,AFTJ,AFTK,AFTL,AFTM,AFTN ; 60-73 + DA AFTO,AFTP,AFTQ,AFTR,AFTS,AFTT,AFTU,AFTV,AFTW,AFTX,AFTY,AFTZ ; 74-85 + DA AFTA,AFTC,AFTE,AFTU,AFTE,AFTE,AFTA,AFTO,AFTBA,AFTRD,AFTFD,AFTFG,AFTSP,AFTNS ; 86-99 + +AFTA HEX 00FF0F000FFF0F000F00F0000F00FF000F000F00 ; A +AFTB HEX 0FFF0F000FFF0F000FFFF0000F00F0000F00F000 ; B +AFTC HEX 00FF0F000F000F0000FFF0000F0000000F00F000 ; C +AFTD HEX 0FFF0F000F000F000FFFF0000F000F000F00F000 ; D +AFTE HEX 0FFF0F000FFF0F000FFFFF00000000000000FF00 ; E +AFTF HEX 0FFF0F000FFF0F000F00FF000000000000000000 ; F +AFTG HEX 00FF0F000F000F0000FFF0000000FF000F00F000 ; G +AFTH HEX 0F000F000FFF0F000F000F000F00FF000F000F00 ; H +AFTI HEX 0FFF000F000F000F0FFFFF00000000000000FF00 ; I +AFTJ HEX 000F000000000F0000FFFF00F000F000F0000000 ; J +AFTK HEX 0F000F000FFF0F000F000F00F0000000F0000F00 ; K +AFTL HEX 0F000F000F000F000FFF0000000000000000FF00 ; L +AFTM HEX 0F000FF00F0F0F000F000F00FF000F000F000F00 ; M +AFTN HEX 0F000FF00F0F0F000F000F000F000F00FF000F00 ; N +AFTO HEX 00FF0F000F000F0000FFF0000F000F000F00F000 ; O +AFTP HEX 0FFF0F000FFF0F000F00F0000F00F00000000000 ; P +AFTQ HEX 00FF0F000F000F0000FFF0000F000F00F0000F00 ; Q +AFTR HEX 0FFF0F000FFF0F000F00F0000F00F000F0000F00 ; R +AFTS HEX 00FF0F0000FF00000FFFFF000000F0000F00F000 ; S +AFTT HEX 0FFF000F000F000F000FFF000000000000000000 ; T +AFTU HEX 0F000F000F000F0000FF0F000F000F000F00F000 ; U +AFTV HEX 0F000F0000F000F0000F0F000F00F000F0000000 ; V +AFTW HEX 0F000F000F0F0FF00F000F000F000F00FF000F00 ; W +AFTX HEX 0F0000F0000F00F00F000F00F0000000F0000F00 ; X +AFTY HEX 0F000F0000F0000F000F0F000F00F00000000000 ; Y +AFTZ HEX 0FFF0000000F00F00FFFFF00F00000000000FF00 ; Z +AFT0 HEX 00FF0F000F000F0000FFF0000F000F000F00F000 ; 0 +AFT1 HEX 000F00FF000F000F0FFF0000000000000000FF00 ; 1 +AFT2 HEX 0FFF000000FF0F000FFFF0000F00F0000000FF00 ; 2 +AFT3 HEX 0FFF0000000F00000FFFF0000F00F0000F00F000 ; 3 +AFT4 HEX 0F000F000F000FFF00000000F000F000FF00F000 ; 4 +AFT5 HEX 0FFF0F000FFF00000FFFFF000000F0000F00F000 ; 5 +AFT6 HEX 00FF0F000FFF0F0000FFFF000000F0000F00F000 ; 6 +AFT7 HEX 0FFF0000000F00F000F0FF00F000000000000000 ; 7 +AFT8 HEX 00FF0F0000FF0F0000FFF0000F00F0000F00F000 ; 8 +AFT9 HEX 00FF0F0000FF00000FFFF0000F00FF000F00F000 ; 9 +AFTPL HEX 000F000F0FFF000F000F00000000FF0000000000 ; + +AFTMOI HEX 000000000FFF0000000000000000FF0000000000 ; - +AFTET HEX 0F0F00FF0FFF00FF0F0F0F00F000FF00F0000F00 ; * +AFTSL HEX 00000000000F00F00F000F00F000000000000000 ; / +AFTEG HEX 00000FFF00000FFF00000000FF000000FF000000 ; = +AFTSO HEX 00000000000000000FFF0000000000000000FF00 ; _ +AFTPE HEX 000F000F000F0000000F00000000000000000000 ; ! +AFTPI HEX 00FF0F00000F0000000FF0000F00F00000000000 ; ? +AFTSU HEX 00F0000F0000000F00F000000000F00000000000 ; > +AFTIN HEX 0000000F00F0000F0000F000000000000000F000 ; < +AFTPO HEX 000F00F000F000F0000F00000000000000000000 ; ( +AFTPF HEX 000F000000000000000F0000F000F000F0000000 ; ) +AFTDP HEX 0000000F0000000F000000000000000000000000 ; : +AFTPT HEX 0000000000000000000F00000000000000000000 ; . +AFTVI HEX 0000000000000000000F000000000000F0000000 ; , +AFTRO HEX 00FF00F000FF00000000F000F000F00000000000 ; o +AFTGU HEX 00F000F0000000000000F000F000000000000000 ; " +AFTAP HEX 000F000F00000000000000000000000000000000 ; ' +AFTPV HEX 0000000000000000000F0000F0000000F0000000 ; ; +AFTDI HEX 00F00FFF00F00FFF00F0F000FF00F000FF00F000 ; # +AFTDO HEX 00FF0F0F00FF000F0FFFFF000000F0000F00F000 ; $ +AFTAC HEX 000F00F00F00000000000000F0000F0000000000 ; ^ +AFTPC HEX 0FF00FF0000F00F00F000F00F0000000FF00FF00 ; % +AFTSP HEX 0000000000000000000000000000000000000000 ; SPACE +AFTRD HEX 00FF0FFF0FFF0FFF00FFF000FF00FF00FF00F000 ; o +AFTBA HEX 0FF0F0000F0000F0FF00FF00F0F0FF00F000F000 ; SP +AFTFD HEX 000F000F0FFF000F000F0000F000FF00F0000000 ; -> +AFTFG HEX 000F00FF0FFF00FF000F00000000FF0000000000 ; <- +AFTNS HEX 0FFF0FFF0FFF0FFF0FFFFF00FF00FF00FF00FF00 ; NO SE + +AFTTBL HEX 4142434445464748494A4B4C4D4E4F505152535455565758595A ; A-Z + HEX 30313233343536373839 ; 0-9 + HEX 2B2D2A2F3D5F213F3E3C28293A2E2C ; +-*/=_!?><():., + HEX 5B22273B23245E2520 ; o"';#$^% @ + HEX 6162636465666768696A6B6C6D6E6F707172737475767778797A ; a-z + HEX 888D8E9D8F9089999E94C8C709 ; @\{|}^e^a^oIo-><-TAB + +PASSWRD ASC "AGJXAFEVGDSLAQDLGUOLDHKQNHBDCUUFRHSWUVHDEQTULDCRBRTFRHPDOFTRAQVD" + ASC "CRAGSXPSRDWESNIWTDNJVLLLDHNDJRIQVDMETKEDUQPDSXBRLDNGPDP\PUESPDNG" + ASC "NLFHSDIOBUOFIQDLBXSNPXLLLRGLMDRDOFTRGOAETUIVEPEVCRNYJHHRRHNGCOIQ" + ASC "NHGDPRL\PHTUAFCHSSOQEQCULDZ\HRMLHHNGOXTNPDP\ESISCRCNSWUPEWHLGDNJ" + ASC "IQLDDRNFIQTHAVSDMDSWWROGAERRIQSWBDCNBDNDEFLRWKISGUOLIPPRCXBDCXBD" + ASC "DHCODUOOSLMSUQDHUQHXSFHRLHGDMXRDAQIPCDTHLDUJMDGDPDLVD\SVBUOFRHVH" + ASC "PRRUUQDHULGXASEUNRNKMLSFPHRXSPIWD\SVDHKQDLUUGDSLOGOUCDUVPHAVAQCK" + ASC "UUOUDHFHSXBEPLCNRXLDSFAUNRDXORPKCRBHGDLHTUOOTDCVPHAVVDMEX\LRWLRH" + ASC "SFIXMLNWEXGHRXNHEUUSPOOWMDRLCRNNNXRVHLSSSQOEHRMRPRRWCDRRCKAUGHDD" + ASC "UQNHPRWVPROQRRMDPUEDPUESSDIOZROQIVOVNXRVHHNGWROGAJOQUSSQLDNGDLVX" + ASC "NLCNMDSWPLCNRRLOOXTVSSOWKDLDAFCHTHLRRXLDWRRNLDUGGUALUSLDPRLROFTR" + ASC "RHPDDHTDFHLGUQFRBDDLVHLOPDTLBHEITLTDSDUFPXPLUQPUMDSWEUUSQXAUFHLG" + ASC "GUIISLDHWKIWUQNLDRWQIQSXUQLLIVOSMXAGDLBX" + +**************************** AFFICHAGE TEXT ********************************** + +AFFTEXT LDA #$0062 ; LONGUEUR DE LA Ligne + STA AFTAM1+1 ; 90 + STZ AFTLIG + STZ AFTCOL + JSR AFTLC ; EN HAUT A GAUCHE + STA AFTAE + JSR AFTNE ; CLEAR SCREEN + + LDA AFTCONT + BNE AFTDEB1 + +*** DEBUT *** + +AFTDEB0 LDA #$0000 ; DEBUT DU TEXTE 040000 + STA AFTDEB3+1 + STA AFTTBI + STZ AFTCONT + STZ AFTIND ; PREMIERE PAGE + STZ AFTFL4 ; FIN DE FICHIER + BRA AFTDEB3 + +AFTDEB1 LDA AFTIND + ASL + TAX ; ON SE MET A LA BONNE PAGE + LDA AFTTBI,X ; ADRESSE + STA AFTDEB3+1 + +****************** + +AFTDEB3 lda #0000 ; ADRESSE DE LA PREMIERE LETTRE + sta AFTDEB4+1 + sta AFTAM+1 + sep #$20 + lda ptrNIV+2 + sta AFTDEB4+3 + sta AFTAM+3 + rep #$20 + + LDY #$0000 +AFTDEB4 LDAL $040000 ; ADRESSE DU MOT + sec + sbc #$0303 + CMP #$A4A4 ; FIN DU FICHIER : ]] + BEQ AFTFFI0 + AND #$00FF + BEQ AFTFFI0 ; FIN DU FICHIER : 00 + CMP #$00A4 ; TIPS... + BEQ AFTTIPS + CMP #$0020 ; ESPACE + BEQ AFTES0 + CMP #$000D ; RETURN + BEQ AFTRE0 + CMP #$0009 ; TABULATION + BEQ AFTTA0 + INY + INC AFTDEB4+1 + BRA AFTDEB4 + +AFTES0 JMP AFTES +AFTRE0 JMP AFTRE +AFTTA0 JMP AFTTA +AFTFFI0 JMP AFTFFI ; FIN DE FICHIER +AFTTIPS LDA TIPSFLAG + BEQ AFTFFI0 + BRA AFTES0 ; ON IGNORE + +*************** + +AFTFFI INC AFTFL4 ; FIN DU FICHIER + JMP AFTFI + +AFTTA CPY #$0000 ; TAB + BNE AFTTA1 + LDA #$0001 ; TAB SEUL + STA AFTTR3+1 + JMP AFTTR1 +AFTTA1 INC AFTFL3 ; MOT AVANT + JMP AFTMO + +AFTRE CPY #$0000 ; RETURN + BNE AFTRE1 + LDA #$0001 ; RETURN SEUL + STA AFTTR6+1 + JMP AFTTR5 +AFTRE1 INC AFTFL2 ; MOT AVANT + JMP AFTMO + +AFTES CPY #$0000 ; ESPACE + BNE AFTES1 + LDA #$0001 ; ESPACE SEUL + STA AFTTR10+1 + JMP AFTTR8 +AFTES1 INC AFTFL1 ; MOT AVANT + JMP AFTMO + +********* AFFICHAGE MOT *********** + +AFTMO CPY #$0033 + BMI AFTMO2 + INY ; MOT SUIVANT + STY AFTMO1+1 + LDA AFTDEB3+1 + CLC +AFTMO1 ADC #$0000 + STA AFTDEB3+1 + JMP AFTDEB3 +AFTMO2 LDA #$0034 + SEC + SBC AFTCOL + STA AFTMO3+1 +AFTMO3 CPY #$0000 ; NB COLON RESTANTE + BMI AFTMO5 + LDA AFTLIG + CMP #$001A ; 26 LIGNES + BNE AFTMO4 + JMP AFTFI ; FIN ECRAN +AFTMO4 STZ AFTCOL + INC AFTLIG +AFTMO5 LDA AFTDEB3+1 ; ADRESSE DU DERNIER MOT + STA AFTAM+1 + TYA + STA AFTAM8+1 + INC + STA AFTTR3+1 ; LONGUEUR DU MOT +1 + STA AFTTR6+1 + STA AFTTR10+1 + JSR AFTLC + STA AFTAE + JSR AFTAM + +****** TRAITEMENT DU SPACE, RETURN, TAB ... ****** + +AFTTR LDA AFTFL3 ; TAB + BEQ AFTTR4 + STZ AFTFL3 +AFTTR1 LDA AFTDEB3+1 + CLC +AFTTR3 ADC #$0000 ; LONGUEUR+1 + STA AFTDEB3+1 + LDA AFTCOL + ASL + TAX + LDA AFTTAB,X + CMP #$0033 + BMI AFTTR2 + LDA AFTLIG ; ON VA A LA LIGNE + CMP #$001A + BEQ AFTFI ; FIN ECRAN + INC AFTLIG + LDA #$0000 +AFTTR2 STA AFTCOL + JMP AFTDEB3 + +AFTTR4 LDA AFTFL2 ; RETURN + BEQ AFTTR7 + STZ AFTFL2 +AFTTR5 LDA AFTDEB3+1 + CLC +AFTTR6 ADC #$0000 ; LONGUEUR+1 + STA AFTDEB3+1 + LDA AFTLIG + CMP #$001A ; 26 LIGNES + BEQ AFTFI ; FIN ECRAN + INC AFTLIG + STZ AFTCOL + JMP AFTDEB3 + +AFTTR7 LDA AFTFL1 ; SPACE + BEQ AFTTR11 ; ********** + STZ AFTFL1 +AFTTR8 LDA AFTDEB3+1 + CLC +AFTTR10 ADC #$0000 ; LONGUEUR +1 + STA AFTDEB3+1 + LDA AFTCOL + INC + STA AFTCOL + CMP #$0033 + BMI AFTTR9 + LDA AFTLIG + CMP #$001A + BEQ AFTFI ; FIN ECRAN + INC AFTLIG + STZ AFTCOL +AFTTR9 JMP AFTDEB3 +AFTTR11 LDA AFTDEB3+1 + CLC + ADC AFTTR10+1 ; LONGUEUR +1 + STA AFTDEB3+1 + JMP AFTDEB3 + +******* FIN D'AFFICHAGE D'1 PAGE ******* + +AFTFI INC AFTCONT ; + LDA AFTIND + INC + ASL ; + TAX + LDA AFTDEB3+1 + STA AFTTBI,X ; INDEX TAB + RTS ; ON SORT + +************************** AFFICHAGE GRAPHIQUE ******************************** + +AFTAM LDAL $040000 ; ADRESSE DE LA LETTRE + AND #$00FF + sec + sbc #$0003 + STA AFTAM3+1 ; cherche le caractere dans la table + AND #$00FF + CMP #$00F0 ; CARACTERE SPECIAUX : OBJETS + BMI AFTAM1 + JSR OBJAFF ; AFFICHAGE OBJETS + BRA AFTAM7 +AFTAM1 LDX #$0000 ; LONGUEUR DE LA Ligne DE CARACTERE +AFTAM2 LDA AFTTBL,X + AND #$00FF +AFTAM3 CMP #$0000 ; notre caractere + BEQ AFTAM5 + CPX #$0000 + BEQ AFTAM4 + DEX + BRA AFTAM2 +AFTAM4 LDX #$0063 ; PAS DANS LA Ligne +AFTAM5 JSR AFTCAR ; AFFICHE LE CARACTERE + DEY ; DANS Y LA LONGUEUR DU MOT + BEQ AFTAM7 + LDA AFTAE + INC + INC ; ADREC LETTRE SUIVANTE + INC + STA AFTAE + INC AFTAM+1 ; LETTRE SUIVANTE + BRA AFTAM +AFTAM7 LDA AFTCOL + CLC +AFTAM8 ADC #$0000 ; LONGUEUR DU MOT+1 + STA AFTCOL + RTS + +******* NETTOYAGE ******** + +AFTNE LDA #$25A2 + STA AFTNE2+1 ; INIT + LDY #$00A0 ; 160 LIGNES +AFTNE1 LDA #$0000 + LDX #$0099 ; 306/2 +AFTNE2 STAL $0125A2,X + DEX ; 1 LIGNE + DEX + BPL AFTNE2 + LDA AFTNE2+1 + CLC ; LIGNE SUIVANTE + ADC #$00A0 + STA AFTNE2+1 + DEY + BPL AFTNE1 + RTS + +******** AFFICHE CARACTERE ******** + +AFTCAR TXA ; RECOIT DANS X LA POSITION + ASL ; DU CARACTERE + TAX + LDA AFTADR,X + STA AFTCAR1+1 + CLC + ADC #$000A + STA AFTCAR3+1 + LDA AFTAE + STA AFTCAR2+1 + INC + INC + STA AFTCAR4+1 + LDX #$0000 ; 1 ere COLONNE +AFTCAR1 LDA $AAAA,X +AFTCAR2 STAL $012000 + LDA AFTCAR2+1 + CLC + ADC #$00A0 + STA AFTCAR2+1 ; LIGNE SUIVANTE + INX + INX + CPX #$000A + BNE AFTCAR1 + LDX #$0000 ; 2 eme COLONNE +AFTCAR3 LDA $AAAA,X +AFTCAR4 STAL $012000 + LDA AFTCAR4+1 + CLC + ADC #$00A0 + STA AFTCAR4+1 ; LIGNE SUIVANTE + INX + INX + CPX #$000A + BNE AFTCAR3 + RTS + +*********** LIGNE COLONNE ************* + +AFTLC LDA AFTLIG + ASL + TAX + LDA AFTTL,X ; LIGNE + STA AFTLC1+1 + LDA AFTCOL + ASL + TAX + LDA AFTTC,X ; COLON + CLC +AFTLC1 ADC #$0000 + CLC + ADC #$2000 + RTS + +*-------------------------- Message + + hex 0d0d + asc 'What is the difference the MAC IIcx and the SE30 ? $1000' + hex 0d0d + +*************** TABLES, VARIABLES ET FLAGS ****************** + +AFTAE HEX 0000 ; ADRESSE ECRAN ECRITURE +AFTLIG HEX 0000 ; 0 A 26 LIGNES +AFTCOL HEX 0000 ; 0 A 50 COLONNES +AFTIND HEX 0000 ; INDEX PAGES + +AFTFL1 HEX 0000 ; 1 SI SPACE +AFTFL2 HEX 0000 ; 1 SI RETURN +AFTFL3 HEX 0000 ; 1 SI TAB +AFTFL4 HEX 0000 ; 1 SI FIN DE FICHIER +AFTCONT HEX 0000 ; 1 SI NON FIN + +AFTTBI HEX 0000000000000000000000000000000000000000 ; 10 + HEX 0000000000000000000000000000000000000000 ; 20 + HEX 0000000000000000000000000000000000000000 ; 30 + HEX 0000000000000000000000000000000000000000 ; 40 + +AFTTL HEX A0056009200DE010A0146018201CE01FA0236027202B ; 0-10 + HEX E02EA0326036203AE03DA04160452049E04CA0506054 ; 11-21 + HEX 2058E05BA05F60632067 ; 22-26 + +AFTTC HEX 0300060009000C000F001200150018001B001E002100 ; 0-10 + HEX 240027002A002D0030003300360039003C003F004200 ; 11-21 + HEX 450048004B004E005100540057005A005D0060006300 ; 22-32 + HEX 660069006C006F007200750078007B007E0081008400 ; 33-43 + HEX 87008A008D009000930096009900 ; 44-50 + +AFTTAB HEX 040004000400040008000800080008000C000C000C000C00 ; 12 + HEX 100010001000100014001400140014001800180018001800 ; + HEX 1C001C001C001C0020002000200020002400240024002400 ; + HEX 28002800280028002C002C002C002C003000300030003000 ; + HEX 34003400340034003800380038003800 + +******************************************************************************* diff --git a/thetinies/Tinies.s b/thetinies/Tinies.s new file mode 100644 index 0000000..a3c2fa8 --- /dev/null +++ b/thetinies/Tinies.s @@ -0,0 +1,4497 @@ +*--------------------------* +* * +* THE TINIES * +* * +* Brutal Deluxe * +* Atreid Concept * +* * +* Version: 1.1 du 2/2/95 * +*--------------------------* + + lst off + rel + dsk The.Tinies.l + + use 4/Locator.Macs + use 4/Mem.Macs + use 4/Misc.Macs + use 4/Sound.Macs + use 4/Util.Macs + + mx %00 + xc + xc + +*--- Parametres Page Zero + +Debut = $00 +Arrivee = $04 +Second = $08 +Third = $0c + +scrMINU = $9818 +scrSECO = $9824 +scrLEVEL = $9844 +scrLIFE = $9868 +scrJOKER = $988c + +proDOS = $e100a8 + +*-------------------------- +* Initialisations d'entree +*-------------------------- + + phk + plb + +*--- StartUp Tools + + _TLStartUp + pha + _MMStartUp + pla + sta myID + _MTStartUp + + ldal $e0c060 + bpl noPATCH + + lda #$eaea + sta PATCH + +*--- Modifie bordure and co... + +noPATCH pha + _GetIRQEnable + pla + and #$20 + beq okIT1 + jsr aptkERR + +okIT1 sep #$20 + ldal $e0c022 + sta save1 + ldal $e0c029 + sta save2 + ldal $e0c034 + sta save3 + ldal $e0c035 + sta save4 + + lda #$f0 + stal $e0c022 + lda #$00 + stal $e0c034 + stal $e0c035 + + rep #$20 + +*--- Ah! GsBug + + phd + ldal $e1004b + pha + ldal $e10049 + sec + sbc #$82 + pha + tsc + tcd + ldy #0 +]lp lda [$01],y + cmp #$78f0 + beq bugFOUND1 + iny + iny + iny + cpy #12 + bne ]lp + pla + pla + pld + brl bugFOUND4 + +bugFOUND1 sta bugA + stx bugY + lda #$7880 + sta [$01],y + + lda #1 + sta bugFG + +bugFOUND2 pla + pla + pld + + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #0 + PushWord #$fe1f + _FWEntry + pla + cmp #1 + beq bugFOUND3 + lda #$cf28 + sta theDESK2+1 + +bugFOUND3 pla + pla + pla + + sei + + PushLong #0 + PushWord #$12 + _GetVector + PullLong saveDESK + + PushWord #$12 + PushLong #theDESK + _SetVector + + cli + +*--- Libere et compacte la memoire + +bugFOUND4 PushLong #0 + PushLong #$8fffff + PushWord myID + PushWord #%11000000_00000000 + PushLong #0 + _NewHandle + _DisposeHandle + _CompactMem + +*--- Verifie que l'on ait 448ko libres + + PushLong #0 ; 448ko au total + _FreeMem + pla + pla + cmp #7 ; 7*64ko + bcs okIT2 + brl memERR3 + +okIT2 PushLong #0 ; Demande Ecran Shadowing + PushLong #$8000 + PushWord myID + PushWord #%11000000_00000011 + PushLong #$012000 + _NewHandle + pla + pla + bcc okIT3 + brl memERR3 + +okIT3 PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + ldx temp + phd + tsc + tcd + ldy #0 + lda [3],y + sta ptrECRAN,x + ldy #2 + lda [3],y + sta ptrECRAN+2,x + pld + pla + pla + jsr memERR + inx + inx + inx + inx + stx temp + cpx #4*6 + bne okIT3 + +*--- + + PushLong #0 + PushLong #$10000 + PushWord myID + PushWord #%11000000_00011100 + PushLong #0 + _NewHandle + phd + tsc + tcd + ldy #0 + lda [3],y + sta ptrBUFFER + ldy #2 + lda [3],y + sta ptrBUFFER+2 + pld + pla + pla + +*--- + + ldx #$7ffe + lda #0 +]lp stal $012000,x + dex + dex + bpl ]lp + + sep #$20 + lda #$c1 + stal $e0c029 + rep #$20 + jmp okIT4 + +*-------------------------- Message + + hex 0d0d + asc 'Hello boy, are you looking for something ?' + hex 0d0d + +*-------------------------- +* Fin du programme +*-------------------------- + +initOFF ldx #$7ffe + lda #0 +]lp stal $012000,x + dex + dex + bpl ]lp + +initOFF1 sep #$30 + + lda save4 + stal $e0c035 + lda save3 + stal $e0c034 + lda save2 + stal $e0c029 + lda save1 + stal $e0c022 + rep #$30 + +*--- Ah GsBug + + lda bugFG + beq initOFF2 + + sei + + phd + ldal $e1004b + pha + ldal $e10049 + sec + sbc #$82 + pha + tsc + tcd + ldy bugY + lda bugA + sta [$01],y + pla + pla + pld + + PushWord #$12 + PushLong saveDESK + _SetVector + + cli + +*--- + +initOFF2 lda noSOUND + cmp #2 + beq initOFF3 + + _SoundShutDown + + +initOFF3 _MTShutDown + + PushWord myID + _DisposeAll + PushWord myID + _MMShutDown + _TLShutDown + + jsl proDOS + dw $2029 + adrl proQUIT + +*-------------------------- +* Met les pointers +*-------------------------- + +okIT4 lda ptrECRAN + clc + adc #$8000 + sta ptrNIV + lda ptrECRAN+2 + sta ptrNIV+2 + + lda ptrBOUGE + clc + adc #$8000 + sta ptrFONTE + lda ptrBOUGE+2 + sta ptrFONTE+2 + + lda ptrGAG2 + clc + adc #$8000 + sta ptrGAG3 + lda ptrGAG2+2 + sta ptrGAG3+2 + + lda ptrTINY1 + clc + adc #$8000 + sta ptrTINY2 + lda ptrTINY1+2 + sta ptrTINY2+2 + + lda ptrUNPACK + clc + adc #$8000 + sta ptrDATAS + lda ptrUNPACK+2 + sta ptrDATAS+2 + +*-------------------------- +* Presentation +*-------------------------- + + lda #pKALISTO ; Charge les fichiers + ldx ptrUNPACK+1 + jsr loadFILE + bcc okIT5 + brl initOFF + +okIT5 lda ptrECRAN+1 + jsr unPACK + + lda #pTINIES + ldx ptrUNPACK+1 + jsr loadFILE + bcc okIT6 + brl initOFF + +okIT6 lda ptrBOUGE+1 + jsr unPACK + + lda ptrECRAN+1 + jsr do3200 + + lda ptrBOUGE+1 + jsr do3200 + +*-------------------------- +* Charges les donnees +*-------------------------- + + PushWord #0 + _SoundToolStatus + pla + bne okIT7 + + stz noSOUND + + tdc + clc + adc #$100 + pha + _SoundStartUp + + lda #pSOUND ; Charge les sons + ldx ptrZIK+1 + jsr loadFILE + bcc okIT7 + + lda #1 + sta noSOUND + +*--- + +okIT7 lda #pFONTE + ldx ptrUNPACK+1 + jsr loadFILE + bcc okIT8 + brl initOFF +okIT8 lda ptrFONTE+1 + jsr unPACK + + lda #pGAG2 + ldx ptrUNPACK+1 + jsr loadFILE + bcc okIT9 + brl initOFF +okIT9 lda ptrGAG2+1 + jsr unPACK + + lda #pGAG3 + ldx ptrUNPACK+1 + jsr loadFILE + bcc okIT10 + brl initOFF +okIT10 lda ptrGAG3+1 + jsr unPACK + + lda #pTINY1 + ldx ptrUNPACK+1 + jsr loadFILE + bcc okIT11 + brl initOFF +okIT11 lda ptrTINY1+1 + jsr unPACK + + lda #pTINY2 + ldx ptrUNPACK+1 + jsr loadFILE + bcc okIT12 + brl initOFF +okIT12 lda ptrTINY2+1 + jsr unPACK + +*-------------------------- +* Les preferences +*-------------------------- + +preferNIV clc + xce + rep #$30 + + lda #'00' + sta pINTRO+21 + sta pNIV+19 + + put Tinies.Main2 + +*-------------------------- Message + + hex 0d0d + asc 'Perhaps a code for a level ?',0d + asc 'Ok! just try CUBACUBA or LANDPAPY...' + hex 0d0d + +*-------------------------- +* Le programme +*-------------------------- + + mx %00 + +entryGAME lda okDATAS3 + beq entryGAME1 + lda #pDATAS2 + bra entryGAME2 +entryGAME1 lda #pDATAS +entryGAME2 ldx ptrDATAS+1 + jsr loadFILE + bcc entryGAME3 + brl initOFF + +entryGAME3 sei + PushLong #intTIME + _SetHeartBeat + PushLong #intANIM + _SetHeartBeat + cli + + stz noBUG + + lda ptrECRAN+1 + sta intANIM17+2 + sta hideCURS1+2 + sta hideCURS3+2 + sta hideCURS4+2 + sta esprit8+2 + clc + adc #$000e + sta hideCURS2+2 + + lda #pBOUGE ; Indispensable + ldx ptrUNPACK+1 + jsr loadFILE + bcc entryGAME4 + brl initOFF +entryGAME4 lda ptrBOUGE+1 + jsr unPACK + + bra playGAME + +*--- On a fini la partie + +endGAME sei + PushLong #intTIME + _DelHeartBeat + PushLong #intANIM + _DelHeartBeat + cli + + jmp preferNIV + +*-------------------------- +* Joue le niveau + +playGAME jsr allLVL ; calcule le level + jsr allNIV ; charge en consequence + bcc playGAME1 + jmp endGAME + +playGAME1 stz fgLOST ; on n'a pas perdu + stz fgPRINT ; et on doit afficher + stz intANIM4+1 + lda #-1 + sta fgCURS + + stz arrTINYcur + stz doMAIN2+1 + + jsr decodeALL ; decode le niveau + bcs playNEXT1 + + lda ptrECRAN+1 ; fait un fade sur le niveau + ldy #0 + jsr fadeIN + jsr affALL ; affiche la barre de menu + + lda #1 + sta noBUG + + stz curX + stz curY + + stal $e0c010 + jmp gereCURS + +*--- On a gagne + +playNEXT lda #2 + jsr nowWAIT + jsr fadeOUT + + stz noBUG + +playNEXT1 inc level + lda level + cmp #101 + beq playNEXT2 + brl playGAME +playNEXT2 jmp winGAME + +*--- On a perdu + +lostTIME lda ptrFONTE + clc + adc #$4b00 + ldy #$0198 + jsr putBAR + +lostTIME1 lda #2 + jsr nowWAIT + jsr fadeOUT + + stz noBUG + + ldal $e0c060 + bmi lostTIME2 + + lda life + beq lostTIME2 + dec life + brl playGAME + +lostTIME2 jsr clrECRAN + + stz life + stz joker + + lda #strGAME + ldy #$2bc8 + ldx ptrECRAN+2 + jsr print16 + lda #strCOD + ldy #$44d0 + ldx ptrECRAN+2 + jsr print16 + lda ptrECRAN+1 + ldy #0 + jsr fadeIN +]lp lda #5 + jsr nowWAIT + bcs ]lp + jsr fadeOUT + + lda #pPERDU ; On a perdu en 3200 + ldx ptrUNPACK+1 + jsr loadFILE + bcs lostTIME3 + lda ptrECRAN+1 + jsr unPACK + lda ptrECRAN+1 + jsr do3200 + +lostTIME3 jmp endGAME + +*-------------------------- Message + + hex 0d0d + asc 'So you are still here ?',0d + asc 'Try another one: PURITIES' + hex 0d0d + +*--- 101 niveaux faits + +winGAME lda #2 + jsr nowWAIT + + jsr fadeOUT + + stz noBUG + + jsr clrECRAN + + lda #strWIN + ldy #$2bc8 + ldx ptrECRAN+2 + jsr print16 + lda ptrECRAN+1 + ldy #0 + jsr fadeIN +]lp lda #5 + jsr nowWAIT + bcs ]lp + jsr fadeOUT + + lda #pGAGNE + ldx ptrUNPACK+1 + jsr loadFILE + bcs winGAME1 + lda ptrECRAN+1 + jsr unPACK + lda ptrECRAN+1 + jsr do3200 + +winGAME1 stz level + brl playGAME + +*-------------------------- +* Gestion du curseur +*-------------------------- + +gereCURS lda fgLOST ; Tant que l'on n'a pas perdu + beq gereCURS1 + jmp lostTIME + +gereCURS1 ldx curX + ldy curY + jsr showCURS ; Show curseur + jsr gereKEY ; gere les touches + bcs gereCURS ; aucun deplacement + cmp #-1 ; 'esc' hit + bne gereCURS2 + jmp lostTIME1 + +gereCURS2 pha ; Efface le curseur + ldx curX + ldy curY + jsr hideCURS + + pla + bne gereCURS3 + + ldx curX + ldy curY + jsr calcWHAT + lda plateau3,x + cmp #4 + bcs gereCURS + stz fgCURS + brl doTINIES ; On gere les Tinies + +gereCURS3 cmp #1 ; Left + bne gereCURS5 + + lda curX + beq gereCURS4 + dec + sta curX +gereCURS4 brl gereCURS + +gereCURS5 cmp #2 ; Right + bne gereCURS7 + + lda curX + cmp #12 + beq gereCURS6 + inc + sta curX +gereCURS6 brl gereCURS + +gereCURS7 cmp #3 ; Up + bne gereCURS9 + + lda curY + beq gereCURS8 + dec + sta curY +gereCURS8 brl gereCURS + +gereCURS9 cmp #4 ; Down + bne gereCURS10 + + lda curY + cmp #7 + beq gereCURS10 + inc + sta curY +gereCURS10 brl gereCURS + +*-------------------------- Message + + hex 0d0d + asc 'Sorry but the previous code was not a real one',0d + asc 'It is dangerous to believe us ! :-)' + hex 0d0d + +*-------------------------- +* Gere les Tinies +*-------------------------- + +doTINIES sta espCOL ; couleur du Tiny + + ldx curX + ldy curY + jsr calcWHAT + stx curXY + + lda curX + sta oldX + lda curY + sta oldY + lda curXY + sta oldXY + + ldx anNUMBER ; Met le Tiny inactif +]lp lda anOBJET,x + cmp espCOL + bne doTINIES1 + lda anCOORD,x + cmp curXY + beq doTINIES2 +doTINIES1 dex + dex + bpl ]lp + ldx anNUMBER +doTINIES2 stx myNUMBER ; Sauve X pour plus tard + stz anANIM,x + stz anACTIF,x + + stz compteur2 ; Affiche le Tiny qui attend de bouger + lda #anBougDr + ldx curXY + ldy ptrBOUGE+1 + jsr esprit + +*--- + +doMAIN lda fgLOST ; Tant que l'on n'a pas perdu + beq doMAIN1 + jmp lostTIME + +doMAIN1 lda arrTINYcur ; etait-ce un tiny en cours? + beq doMAIN2 + + ldx arrNUMBER + lda oldXY + sta anCOORD,x + lda #-1 + sta anACTIF,x + + lda arrCOL + sta espCOL + lda arrXY + sta curXY + sta oldXY + lda arrX + sta curX + sta oldX + lda arrY + sta curY + sta oldY + stz arrTINYcur + +doMAIN2 ldx #0 ; est-ce que l'on a un tiny sur fleche? + lda plateau4,x + inx + inx + stx doMAIN2+1 + cpx #208 + bne doMAIN3 + stz doMAIN2+1 + brl doMAIN6 + +doMAIN3 cmp #-1 + beq doMAIN2 + + ldy espCOL + sty arrCOL + sta espCOL + + dex + dex + lda #-1 + sta plateau4,x + + lda curXY + sta arrXY + lda curX + sta arrX + lda curY + sta arrY + + stx curXY + + lda tblXY,x + pha + and #$ff00 + xba + sta curX + pla + and #$00ff + sta curY + + lda #-1 + sta arrTINYcur + + txy + ldx anNUMBER ; Met le Tiny inactif +]lp lda anOBJET,x + cmp espCOL + bne doMAIN4 + lda anCOORD,x + cmp curXY + beq doMAIN5 +doMAIN4 dex + dex + bpl ]lp + ldx anNUMBER +doMAIN5 stx arrNUMBER ; Sauve X pour plus tard + sei + stz anACTIF,x + cli + + lda plateau2,y + sec + sbc #24 + asl + tax + lda spyDIR2,x + bra doMAIN9 + +*--- + +doMAIN6 jsr gereKEY + bcc doMAIN7 + brl doMAIN +doMAIN7 cmp #-1 + bne doMAIN8 + jmp lostTIME1 + +doMAIN8 cmp #0 ; Deselectionne + bne doMAIN9 + + lda #-1 + sta fgCURS + + jmp itsEND + +doMAIN9 sta tinyDIR + stz tinyMOVE ; a pas bouge + stz tinyROULE ; roule pas + +doMAIN10 ldal $e0bfff + bpl doMAIN12 + xba + and #$ff + cmp #$9b + bne doMAIN12 +doMAIN11 brl lostTIME1 + +doMAIN12 lda fgLOST + bne doMAIN11 + + lda curX + sta oldX + lda curY + sta oldY + lda curXY + sta oldXY + + ldx curXY ; Sommes-nous sur une fleche ? + lda plateau2,x ; empeche le joueur de partir + cmp #24 ; de la fleche + bcc doMAIN13 + cmp #28 + bcs doMAIN13 + sec + sbc #24 + asl + tax + lda spyDIR2,x + sta tinyDIR + +doMAIN13 jsr calcDIR ; regarde la nouvelle position + cmp #-1 + bne doMOVE + + jsr doBOOM ; boom... + brl doMAIN + +*-------------------------- Message + + hex 0d0d + asc 'Don'27't waste your time reading this! ' + asc 'Go away and play' + hex 0d0d + +*-------------------------- + +doMOVE ldx curX ; Regarde ce qu'il y a sur la nouvelle + ldy curY ; position + jsr calcWHAT + stx curXY + + lda plateau1,x ; is there a sol + cmp #5 + bcc doMOVE2 + +doMOVE1 lda oldX + sta curX + lda oldY + sta curY + lda oldXY + sta curXY + + jsr doBOOM + brl doMAIN + +*--- + +doMOVE2 lda plateau3,x ; is there a tiny + cmp #-1 + beq doMOVE3 + + ldx oldXY ; Is Tiny on Arrow ? + lda plateau2,x + cmp #24 + bcc doMOVE1 + cmp #28 + bcs doMOVE1 + + lda espCOL + sta plateau4,x + + lda oldX + sta curX + lda oldY + sta curY + lda oldXY + sta curXY + brl doMAIN + +doMOVE3 lda plateau2,x ; animation + sta tinyDEC + cmp #-1 + bne move1 + brl moveSHOW + +*--- + +move1 cmp #4 ; tiny + bcs move2 + jsr doBOOM + brl doMAIN + +move2 cmp #8 ; sleeper + bcs move3 + jsr doSLEEP + brl moveSHOW + +move3 cmp #12 ; teleporteur + bcs move5 + jsr doTELE + bcc move4 + brl moveSHOW2 +move4 brl moveSHOW3 + +move5 cmp #16 ; bombe + bcs move6 + jsr doBOMB + brl moveSHOW2 + +move6 cmp #20 ; porte + bcs move8 + jsr doDOOR + bcc move7 + brl doMOVE1 +move7 brl moveSHOW + +move8 cmp #24 ; interrupteur + bcs move9 + jsr doINTE + brl moveSHOW + +move9 cmp #28 ; fleche + bcs move10 + jsr doFLEC + brl moveSHOW2 + +move10 cmp #28 ; bumper + bne move11 + jsr doBUMP + brl moveSHOW + +move11 cmp #29 ; bonus temps + bne move12 + jsr doTIME + brl moveSHOW + +move12 cmp #30 ; life + bne move13 + jsr doLIFE + brl moveSHOW + +move13 cmp #31 ; joker + bne move14 + jsr doJOKE + brl moveSHOW + +move14 cmp #32 ; animation fixe + bne moveSHOW + jsr doBOOM + brl doMAIN + +*--- + +moveSHOW jsr doSHOW + + lda tinyROULE + bne moveSHOW1 + ldx #07 + jsr doSND + bra moveSHOW2 +moveSHOW1 ldx #10 + jsr doSND + +moveSHOW2 ldx oldXY + lda #-1 + sta plateau3,x +moveSHOW3 ldx curXY + lda espCOL + sta plateau3,x + + lda #1 + sta tinyMOVE + brl doMAIN10 + +*-------------------------- Message 1 + + hex 0d0d + asc 'Good morning Vietnam !!' + hex 0d0d + +*-------------------------- +* Routines Tinies +*-------------------------- + +itsEND ldx anNUMBER ; Regarde si sous le Tiny +]lp lda anCOORD,x ; on n'aurait pas un sleeper + cmp oldXY + bne itsEND1 + lda anOBJET,x + sec + sbc espCOL + cmp #4 + beq itsEND3 +itsEND1 dex + dex + bpl ]lp + +itsEND2 ldx myNUMBER ; No sleeper under + sei + lda #-1 + sta anACTIF,x + cli + lda oldXY + sta anCOORD,x + jmp gereCURS + +itsEND3 lda anACTIF2,x ; Sleeper was active ? + beq itsEND2 + + ldx myNUMBER ; Tiny now sleeps + sei + lda #$2222 + sta anACTIF,x + cli + lda oldXY + sta anCOORD,x + + ldx anNUMBER + dex ; Regarde, s'ils dorment tous + dex +]lp lda anOBJET,x + cmp #4 + bcs itsEND4 + lda anACTIF,x + cmp #$2222 + bne itsEND5 +itsEND4 dex + dex + bpl ]lp + jmp playNEXT +itsEND5 jmp gereCURS + +*------------ Affiche le Tiny a l'ecran + +doSHOW stz compteur2 + lda tinyDIR + dec + asl + clc + adc tinyROULE + tax + lda chseBOUG,x + ldy ptrECRAN+1 + jsr moveIT + + ldx anNUMBER ; Regarde si sous le Tiny (pos. precedente) +]lp lda anCOORD,x ; on n'aurait pas un sleeper + cmp oldXY + bne doSHOW1 + lda anOBJET,x + cmp #4 + bcc doSHOW1 + cmp #8 + bcc doSHOW2 +doSHOW1 dex + dex + bpl ]lp + rts +doSHOW2 sei + lda anACTIF2,x + sta anACTIF,x + stz anANIM,x + cli + rts + +*------------ Boooommmmm + +doBOOM lda tinyROULE + bne doBOOM1 + lda tinyMOVE + beq doBOOM1 + rts + +doBOOM1 ldx #12 + jsr doSND + + lda #99 + sta compteur2 + lda tinyDIR + dec + asl + tax + lda chseBOOM,x + ldx curXY + ldy ptrTINY1+1 + jsr esprit + rts + +*------------ + +doSLEEP ldx anNUMBER ; Regarde si sous le Tiny +]lp lda anCOORD,x ; on n'aurait pas un sleeper + cmp curXY + bne doSLEEP1 + lda anOBJET,x + cmp #4 + bcc doSLEEP1 + cmp #8 + bcc doSLEEP2 +doSLEEP1 dex + dex + bpl ]lp + rts +doSLEEP2 sei + lda anACTIF,x + sta anACTIF2,x + stz anACTIF,x + stz anANIM,x + cli + rts + +*------------ Les teleporteurs + +doTELE jsr doSHOW + + lda tinyDEC + sec + sbc espCOL + cmp #8 + beq doTELE1 + + ldx #11 + jsr doSND + sec + rts + +doTELE1 ldx oldXY + lda #-1 + sta plateau3,x + + ldx #206 +]lp lda plateau2,x + cmp tinyDEC + bne doTELE2 + cpx curXY + bne doTELE3 +doTELE2 dex + dex + bpl ]lp + rts + +doTELE3 lda plateau3,x + cmp #-1 + beq doTELE4 + rts + +doTELE4 lda curXY + sta oldXY + stx curXY + + ldx #01 + jsr doSND + + lda #99 + sta compteur2 + + lda tinyDIR + dec + asl + tax + lda chseTELE,x + ldx oldXY + ldy ptrGAG2+1 + jsr esprit + + ldx curXY + stx oldXY + lda tblXY,x + pha + and #$ff00 + xba + sta curX + sta oldX + pla + and #$00ff + sta curY + sta oldY + + ldx #05 + jsr doSND + + lda tinyDIR + dec + asl + tax + lda chseTELE2,x + ldx curXY + ldy ptrGAG2+1 + jsr esprit + + jsr doSHOW + + lda #8 + sta tinyROULE + clc + rts + +*------------ Les bombes + +doBOMB jsr doSHOW + + lda tinyDEC + sec + sbc espCOL + cmp #12 + beq doBOMB1 + + ldx #11 + jsr doSND + + rts + +doBOMB1 ldx #04 + jsr doSND + + lda #99 + sta compteur2 + + lda #anEXPL1 + ldx curXY + ldy ptrTINY1+1 + jsr esprit + + ldx curXY + lda plateau1,x + jsr sprite + + lda #anEXPL2 + ldx curXY + ldy ptrTINY1+1 + jsr esprit + + lda joker + bne doBOMB2 + jmp lostTIME1 + +doBOMB2 dec joker + jsr affALL + + ldx #08 + jsr doSND + + lda #anJOKER + ldx curXY + ldy ptrGAG3+1 + jsr esprit + + ldx #02 + jsr doSND + + stz tinyROULE + + ldx curXY + lda #-1 + sta plateau2,x + rts + +*------------ Les portes + +doDOOR lda tinyDEC + sec + sbc espCOL + cmp #16 + beq doDOOR1 + + sec + rts + +doDOOR1 ldx #13 + jsr doSND + + lda #99 + sta compteur2 + + lda #anDOOR + ldx curXY + ldy ptrGAG3+1 + jsr esprit + + lda espCOL + asl + tax + lda anOPEN,x + clc + adc ptrGAG3 + ldx curXY + jsr sprite10 + + ldx curXY + lda #-1 + sta plateau2,x + clc + rts + +*------------ Les interrupteurs + +doINTE lda tinyDEC + sec + sbc espCOL + cmp #20 + beq doINTE1 + rts + +doINTE1 ldx #03 + jsr doSND + + ldx anNUMBER +]lp lda anOBJET,x + sec + sbc espCOL + cmp #4 + bne doINTE2 + sei + lda #-1 + sta anACTIF,x + sta anACTIF2,x + stz anANIM,x + cli +doINTE2 dex + dex + bpl ]lp + + lda espCOL + asl + tax + lda anINTE,x + clc + adc ptrGAG3 + ldx curXY + jsr sprite10 + + rts + +*------------ Les fleches + +doFLEC jsr doSHOW + +doFLEC1 ldx curXY + lda plateau2,x + sec + sbc #24 + + asl + tax + lda spyDIR2,x + sta tinyDIR + + ldx #06 + jsr doSND + + rts + +*------------ Bumper + +doBUMP ldx #09 + jsr doSND + + lda #99 + sta compteur2 + + stz esprit4+1 + + lda tinyDIR + dec + asl + tax + lda chseBUMP,x + ldx curXY + ldy ptrTINY1+1 + jsr esprit + + lda tinyDIR + dec + asl + tax + lda chseBOOM,x + ldx oldXY + ldy ptrTINY1+1 + jsr esprit + + lda #10 + sta esprit4+1 + lda #1 + sta tinyMOVE + lda #8 + sta tinyROULE + + lda tinyDIR ; change la direction du Tiny + dec + asl + tax + lda spyDIR,x + sta tinyDIR + + lda oldX + sta curX + lda oldY + sta curY + lda oldXY + sta curXY + + rts + +*------------ Time is life for the joker + +doTIME sei + inc minutes + cli + jsr doCLR + bra doALL + +doLIFE sei + inc life + cli + jsr doCLR + bra doALL + +doJOKE sei + inc joker + cli + jsr doCLR + +doALL ldx curXY + lda #-1 + sta plateau2,x + + jsr affALL + rts + +*------------ Clear a case + +doCLR ldx #03 + jsr doSND + + ldx curXY + lda plateau1,x + jsr sprite + rts + +*-------------------------- +* Routines programme +*-------------------------- + +calcDIR lda tinyDIR ; left + cmp #1 + bne calcDIR2 + lda curX + bne calcDIR1 + lda #-1 + rts +calcDIR1 dec curX + rts + +calcDIR2 cmp #2 ; right + bne calcDIR4 + lda curX + cmp #12 + bne calcDIR3 + lda #-1 + rts +calcDIR3 inc curX + rts + +calcDIR4 cmp #3 ; up + bne calcDIR6 + lda curY + bne calcDIR5 + lda #-1 + rts +calcDIR5 dec curY + rts + +calcDIR6 lda curY ; down + cmp #7 + bne calcDIR7 + lda #-1 + rts +calcDIR7 inc curY + rts + +*--- + +calcWHAT txa ; calcule adresse plateau + asl + asl + asl + asl + pha + tya + asl + clc + adc 1,s + tax + pla + rts + +*-------------------------- + +gereKEY ldal $e0bfff ; lit le clavier + bpl gereKEY7 + stal $e0c010 + xba + and #$00ff + cmp #$009b + bne gereKEY1 + lda #-1 + clc + rts +gereKEY1 cmp #$0089 ; Tab for save ?? + bne gereKEY2 + jsr saveFILE + sec + rts +gereKEY2 cmp keyPREF ; Select ?? + bne gereKEY3 + lda #0 + clc + rts +gereKEY3 cmp keyPREF+2 ; left ?? + bne gereKEY4 + lda #1 + clc + rts +gereKEY4 cmp keyPREF+4 ; right ?? + bne gereKEY5 + lda #2 + clc + rts +gereKEY5 cmp keyPREF+6 ; up ?? + bne gereKEY6 + lda #3 + clc + rts +gereKEY6 cmp keyPREF+8 ; down ?? + bne gereKEY7 + lda #4 + clc + rts +gereKEY7 sec + rts + +*-------------------------- Message + + hex 0d0d + asc 'Only lamers use block editors' + hex 0d0d + +*-------------------------- +* Calcul des donnees +*-------------------------- + +putTIME ldx minutes + lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strMINU + pla + and #$000f + ora #$00b0 + ora strMINU + xba + sta strMINU + + ldx secondes + lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strSECO + pla + and #$000f + ora #$00b0 + ora strSECO + xba + sta strSECO + rts + +*--- + +putLEVEL ldx level + cpx #100 + bne putLEVEL1 + + lda #"()" + bne putLEVEL2 + +putLEVEL1 lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strLEVEL + pla + and #$000f + ora #$00b0 + ora strLEVEL + xba +putLEVEL2 sta strLEVEL + rts + +*--- + +putLIFE ldx life + cpx #99 + bcc putLIFE1 + ldx #99 +putLIFE1 lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strLIFE + pla + and #$000f + ora #$00b0 + ora strLIFE + xba + sta strLIFE + rts + +*--- + +putJOKER ldx joker + cpx #99 + bcc putJOKER1 + ldx #99 +putJOKER1 lda scdVAR,x + and #$00ff + pha + and #$00f0 + asl + asl + asl + asl + ora #$b000 + sta strJOKER + pla + and #$000f + ora #$00b0 + ora strJOKER + xba + sta strJOKER + rts + +*-------------------------- +* Routines barre de menu +*-------------------------- + +affALL jsr putTIME + jsr putLEVEL + jsr putLIFE + jsr putJOKER + + lda ptrFONTE + clc + adc #$18 + tay + ldx ptrFONTE+2 + lda #strMINU + jsr printIT + + lda ptrFONTE + clc + adc #$24 + tay + ldx ptrFONTE+2 + lda #strSECO + jsr printIT + + lda ptrFONTE + clc + adc #$44 + tay + ldx ptrFONTE+2 + lda #strLEVEL + jsr printIT + + lda ptrFONTE + clc + adc #$68 + tay + ldx ptrFONTE+2 + lda #strLIFE + jsr printIT + + lda ptrFONTE + clc + adc #$8c + tay + ldx ptrFONTE+2 + lda #strJOKER + jsr printIT + + lda minutes + bne affALL1 + + lda fgPRINT + bne affALL2 + +affALL1 stz fgPRINT + lda ptrFONTE ; Affiche depuis fonte + ldy #$0198 + jsr putBAR + +affALL2 rts + +*--- + +putBAR ldx ptrFONTE+1 + stx putBAR1+2 + + sta putBAR1+1 + sty putBAR2+2 + + ldx #$04f4 +putBAR1 ldal $012000,x +putBAR2 stal $012000,x + dex + dex + bpl putBAR1 + rts + +*--- + +saveBAR lda #$9800 + sta Debut + lda #$0001 + sta Debut+2 + lda ptrFONTE + clc + adc #$7800 + sta Arrivee + lda ptrFONTE+2 + sta Arrivee+2 + + ldy #$4f4 +]lp lda [Debut],y + sta [Arrivee],y + dey + dey + bpl ]lp + rts + +*-------------------------- +* Routines interruption +*-------------------------- + +intTIME ds 4 + dw 60 + dw $a55a + + phb + phk + plb + clc + xce + rep #$30 + + lda #60 + sta intTIME+4 + + lda noBUG + beq intTIME1 + + lda fgLOST + beq intTIME2 +intTIME1 brl intTIME11 + +intTIME2 lda minutes + bne intTIME6 + + lda fgPRINT + bne intTIME3 + + lda secondes + cmp #30 + bne intTIME4 + + lda #1 + sta fgPRINT + jsr saveBAR + lda ptrFONTE + clc + adc #$500 + ldy #$0198 + jsr putBAR + bra intTIME6 + +intTIME3 lda secondes + cmp #28 + bcc intTIME5 + +intTIME4 cmp #28 + bne intTIME6 + +intTIME5 stz fgPRINT + jsr affALL + +intTIME6 lda secondes + beq intTIME7 + dec + sta secondes + bra intTIME9 +intTIME7 lda #59 + sta secondes + lda minutes + beq intTIME8 + dec + sta minutes + bra intTIME9 + +intTIME8 lda #1 + sta fgPRINT + sta fgLOST + stz secondes + stz minutes + +intTIME9 jsr putTIME + + lda fgPRINT ; affiche le temps sur fonte + bne intTIME10 + + lda fgLOST + bne intTIME11 + + lda #strMINU + ldy #scrMINU + ldx #$0001 + jsr printIT + + lda #strSECO + ldy #scrSECO + ldx #$0001 + jsr printIT + bra intTIME11 + +intTIME10 lda ptrFONTE + clc + adc #$18 + tay + lda #strMINU + ldx ptrFONTE+2 + jsr printIT + + lda ptrFONTE + clc + adc #$24 + tay + lda #strSECO + ldx ptrFONTE+2 + jsr printIT + +intTIME11 sep #$30 + plb + clc + rtl + + mx %00 + +*--- Interruption pour Tinies + +intANIM ds 4 + dw 1 + dw $a55a + + phb + phk + plb + clc + xce + rep #$30 + + lda #1 + sta intANIM+4 + + lda noBUG + bne intANIM2 + brl intANIM21 + +intANIM2 lda #0 ; temporisation + beq intANIM3 + dec intANIM2+1 + brl intANIM21 +intANIM3 lda fgTEMP + sta intANIM2+1 + +intANIM4 lda #0 ; Numero de l'objet a animer + cmp anNUMBER + bne intANIM5 + stz intANIM4+1 + bra intANIM4 + +intANIM5 tax + inc + inc + sta intANIM4+1 + + stz intANIM8+1 + lda anACTIF,x ; Regarde s'il est actif + cmp #-1 + beq intANIM7 + cmp #$2222 + beq intANIM6 + brl intANIM21 + +intANIM6 lda #$8000 ; sleep + sta intANIM8+1 + +intANIM7 stz intANIM16+1 + lda anOBJET,x ; Recupere l'adresse source +intANIM8 ldy #$8000 + bpl intANIM9 + clc + adc #36 +intANIM9 asl ; de l'image + tay + lda anCORRES,y + asl + asl + tay + lda ptrECRAN+1,y + sta intANIM16+2 + + lda anCOORD,x ; On a la coordonnee ecran + tay + lda scrCASE,y ; Adresse ecran source + clc + adc #$0002 + sta intANIM17+1 + clc + adc #$2000 ; et ecran destination + sta intANIM19+1 + +intANIM10 lda anOBJET,x ; Numero de l'objet + ldy intANIM8+1 + bpl intANIM11 + clc + adc #36 +intANIM11 asl + tay + lda anDRAW,y ; table de correspondance + sta intANIM18+1 + lda anTYPE,y ; Recherche la table des adresses + clc + adc anANIM,x + tay + hex b90000 ; en A, adresse ecran source + cmp #-1 + bne intANIM12 + + stz anANIM,x + brl intANIM10 + +intANIM12 clc + adc intANIM16+1 + sta intANIM16+1 + + inc anANIM,x + inc anANIM,x + + lda anOBJET,x ; Regarde si tiny sur sleeper + cmp #4 + bcc intANIM13 + cmp #8 + bcs intANIM13 + + lda anCOORD,x + tax + lda plateau3,x + cmp #-1 + bne intANIM21 + +intANIM13 lda #23 + sta compteur + +*--- Debut routine d'affichage (lente) + +intANIM14 sep #$20 +intANIM15 ldx #0 +intANIM16 ldal $110000,x ; data + tay +intANIM17 ldal $e10000,x ; ECRAN source + and tblMASK,y ; MASK +intANIM18 ora tblGRE,y ; data +intANIM19 stal $012000,x ; $01/2000 + inx +intANIM20 cpx #12 + bne intANIM16 + + rep #$20 + lda intANIM15+1 + clc + adc #160 + sta intANIM15+1 + clc + adc #12 + sta intANIM20+1 + + dec compteur + lda compteur + bpl intANIM14 + + stz intANIM15+1 + lda #12 + sta intANIM20+1 + + lda intANIM4+1 + dec + dec + tax + lda anOBJET,x + cmp #32 + bne intANIM21 + lda anANIM,x + cmp sprFIX + bne intANIM21 + stz anANIM,x + +intANIM21 sep #$30 + plb + clc + rtl + +*-------------------------- Message + + hex 0d0d + asc 'As you are still here, please listen to this story: <',0d + asc 'What is the worst thing in oral sex ?',0d + asc 'The view' + hex 0d0d + +*-------------------------- + + mx %00 + +*-------------------------- +* Routines tableau +*-------------------------- + +allLVL ldx level ; Charge image INTRO + lda lvlINTRO,x + and #$00ff + sta temp + + dec ; Nb sprites/Anim fixe + asl + tax + lda sprNUM,x + asl + sta sprFIX + + lda temp + and #$00f0 + asl + asl + asl + asl + ora #$3000 + pha + lda temp + and #$000f + ora #$0030 + sta temp + pla + ora temp + xba + sta temp + + lda temp + cmp pINTRO+21 + beq allLVL2 + sta pINTRO+21 + sta pNIV+19 + + lda #pINTRO + ldx ptrUNPACK+1 + jsr loadFILE + bcs allLVL1 + + lda ptrECRAN+1 + jsr unPACK + lda ptrECRAN+1 + jsr do3200 + +allLVL1 lda #pNIV + ldx ptrUNPACK+1 + jsr loadFILE + lda ptrNIV+1 + jsr unPACK + +allLVL2 rts + +*--- + +allNIV lda level ; Calcule nom niveau + asl + asl + asl + clc + adc #allCODES + sta allNIV1+1 + + ldx #7 + sep #$20 +allNIV1 lda allCODES,x + dec + dec + dec + sta strCOD,x + dex + bpl allNIV1 + rep #$20 + + lda ptrDATAS + clc + adc #$5300 + sta Debut + lda ptrDATAS+2 + sta Debut+2 + + lda level + asl + tay + lda [Debut],y + pha + and #$00ff + sta minutes + + pla + and #$ff00 + xba + sta secondes + +*--- + + jsr clrECRAN + lda #strCOD + ldy #$3490 + ldx ptrECRAN+2 + jsr print16 + lda ptrECRAN+1 + ldy #0 + jsr fadeIN +]lp lda #5 + jsr nowWAIT + bcs ]lp + jsr fadeOUT + jsr clrECRAN + + lda clickKEY + cmp #$9b + beq allNIV2 + clc + rts +allNIV2 sec + rts + +*-------------------------- Message + + hex 0d0d + asc 'The funniest story: the Apple II is dead' + hex 0d0d + +*-------------------------- +* Routines decodage +*-------------------------- + +*--- Couche 1 + +decodeALL jsr clrECRAN + + stz fgNBTINIES + stz fgNBSLEEPERS + + ldx #16-2 +]lp stz nbOBJECTS,x + dex + dex + bpl ]lp + + ldx #208-2 + lda #-1 +]lp sta plateau2,x + sta plateau3,x + sta plateau4,x + dex + dex + bpl ]lp + + ldx level + jsr ZLevel + clc + adc ptrDATAS + sta Debut + lda ptrDATAS+2 + sta Debut+2 + + ldy #0 + tyx +decodeALL1 phx + phy + lda [Debut],y + and #$00ff + sta plateau1,x + cmp #$00ff + beq decodeALL2 + + jsr sprite + +decodeALL2 ply + iny + plx + inx + inx + cpx #208 + bne decodeALL1 + +*--- Couche 2 + + lda Debut + clc + adc #104 + sta Debut + + ldy #0 + tyx +decodeALL3 phx + phy + lda [Debut],y + and #$00ff + cmp #$00ff + beq decodeALL5 + cmp #0032 + bne decodeBUG + lda #-1 + sta plateau1,x + lda #32 + bra decodeALL4 + +decodeBUG cmp #0008 ; is it a Sleeper ? + bcs decodeALL4 + cmp #0004 + bcc decodeBUG1 + sta plateau2,x + pha + phy + asl + tay + lda nbOBJECTS,y + clc + adc #1 + sta nbOBJECTS,y + ply + inc fgNBSLEEPERS + pla + bra decodeALL4 + +decodeBUG1 sta plateau3,x ; is it a Tiny ? + phy + asl + tay + lda nbOBJECTS,y + clc + adc #1 + sta nbOBJECTS,y + ply + inc fgNBTINIES + lda #-1 + sta plateau2,x + bra decodeALL5 + +decodeALL4 sta plateau2,x + + clc + adc #21 + jsr sprite + +decodeALL5 ply + iny + plx + inx + inx + cpx #208 + bne decodeALL3 + +*--- Animation + + ldx #208*5 + lda #$5555 +]lp sta anNUMBER,x + dex + dex + bpl ]lp + + ldy #0 + tyx +]lp lda [Debut],y + and #$00ff + cmp #$00ff + beq decodeALL7 + cmp #32 + beq decodeALL6 + cmp #8 + bcs decodeALL7 + +decodeALL6 sta anOBJET,x + stz anANIM,x + lda #-1 + sta anACTIF,x + sta anACTIF2,x + tya + asl + sta anCOORD,x + inx + inx + +decodeALL7 iny + cpy #104 + bne ]lp + + stx anNUMBER + +*--- Calcule le temps d'attente entre animations + + lda intTEMP,x + sta fgTEMP + stz intANIM2+1 + +*--- Interrupteurs + + ldy #0 +decodeALL8 lda [Debut],y + and #$00ff + cmp #0020 + bcc decodeALL10 + cmp #0024 + bcs decodeALL10 + + sec + sbc #0016 + ldx anNUMBER +]lp cmp anOBJET,x + bne decodeALL9 + stz anACTIF,x + stz anACTIF2,x +decodeALL9 dex + dex + bpl ]lp + +decodeALL10 iny + cpy #104 + bne decodeALL8 + +*--- Test de validite + + lda fgNBTINIES ; nb tinies = nb sleepers + cmp fgNBSLEEPERS + bne decodeALL11 + + lda fgNBTINIES ; if equal, is zero ? + beq decodeALL11 + + ldx #8-2 +]lp lda nbOBJECTS,x + cmp nbOBJECTS+8,x + bne decodeALL11 + dex + dex + bpl ]lp + + lda anNUMBER ; no anim + beq decodeALL11 + clc + rts +decodeALL11 sec + rts + +*--- + +ZLevel lda #0 + cpx #0 + bne ZLevel1 + rts +ZLevel1 clc + adc #208 + dex + bne ZLevel1 + rts + +*-------------------------- +* Routine clavier +*-------------------------- + +clickIT ldal $e0bfff ; keyboard + bpl clickIT1 + stal $e0c010 + xba + and #$00ff + sta clickKEY + clc + rts +clickIT1 ldal $e0c026 ; mouse + bmi clickIT3 +clickIT2 sec + rts +clickIT3 ldal $e0c023 + ldal $e0c023 + and #%10000000_00000000 + bne clickIT2 + clc + rts + +*-------------------------- +* Routines gs/os +*-------------------------- + +loadFILE sta proOPEN+4 + stx proREAD+5 + +loadFILE1 jsl proDOS + dw $2010 + adrl proOPEN + bcs loadERR + lda proOPEN+2 + sta proGETEOF+2 + sta proREAD+2 + + jsl proDOS + dw $2019 + adrl proGETEOF + lda proGETEOF+4 + sta proREAD+8 + lda proGETEOF+6 + sta proREAD+10 + + jsl proDOS + dw $2012 + adrl proREAD + bcs loadERR + +loadFILE2 jsl proDOS + dw $2014 + adrl proCLOSE + clc + rts + +loadERR jsr loadFILE2 + nop + nop + + PushWord #0 + PushLong #proSTR1 + PushLong #proSTR2 + PushLong #proSTR3 + PushLong #proSTR4 + _TLTextMountVolume + pla + cmp #1 + bne loadERR1 + brl loadFILE1 +loadERR1 sec + rts + +*--- + +saveFILE stz noBUG + + jsl proDOS + dw $2005 + adrl proINFO + + jsl proDOS + dw $2002 + adrl proKILL + + jsl proDOS + dw $2001 + adrl proCREATE + bcs saveERR + + lda #pPREF + sta proOPEN+4 + lda #^pPREF + sta proOPEN+6 + + jsl proDOS + dw $2010 + adrl proOPEN + + lda proOPEN+2 + sta proWRITE+2 + sta proCLOSE+2 + + jsl proDOS + dw $2013 + adrl proWRITE + +saveFILE1 jsl proDOS + dw $2014 + adrl proCLOSE + + lda #1 + sta noBUG + rts + +saveERR PushWord #0 + PushLong #proSTR11 + PushLong #proSTR2 + PushLong #proSTR31 + PushLong #proSTR41 + _TLTextMountVolume + pla + cmp #1 + bne saveFILE1 + brl saveFILE + +*-------------------------- +* Routines diverses +*-------------------------- + +memERR bcs memERR1 ; Erreur de memoire + rts +memERR1 PushWord #0 + PushLong #memSTR1 + PushLong #memSTR2 + PushLong #proSTR3 + PushLong #proSTR4 + _TLTextMountVolume + pla +memERR2 jmp initOFF + +memERR3 lda #$6060 + sta memERR2 + jsr memERR1 + brl initOFF1 + +*--- + +aptkERR PushWord #0 + PushLong #aptkSTR1 + PushLong #memSTR2 + PushLong #proSTR3 + PushLong #proSTR4 + _TLTextMountVolume + pla + cmp #1 + bne aptkERR1 + rts +aptkERR1 jmp initOFF3 + +*------------------------------ + +nextVBL lda #150 + jsr waitSPOT + jsr waitVBL + rts + +waitSPOT lsr + sta waitSPOT2+1 +waitSPOT1 ldal $e0c02e + and #$7f +waitSPOT2 cmp #150 + blt waitSPOT1 + cmp #100 + bge waitSPOT1 + rts + +waitVBL ldal $e0c019 + and #$80 + beq waitVBL + rts + +*------------------------------ + +unPACK tax ; Decompresse + + phd + tdc + clc + adc #$200 + tcd + + stz $04 + stz $06 + stx $05 + + lda ptrUNPACK + sta $00 + lda ptrUNPACK+2 + sta $02 + + lda ptrBUFFER + sta $1e + clc + adc #$2000 + sta $22 + lda ptrBUFFER+2 + sta $20 + sta $24 + + ldy #$3fff + lda #0 +]lp sta [$1e],y + dey + dey + bpl ]lp + + LDA #$0009 + STA L0517+1 + LDA #$01FF + STA L051E+1 + STZ $1C + PEA $FFFF + +L042C JSR L04E8 + CMP #$0101 + bne L042D + brl L04A4 + +L042D CMP #$0100 + BEQ L0491 + STA $12 + CMP $14 + BCC L0443 + LDA $10 + PEI $0E +L0443 CMP #$0100 + BCC L0455 + ASL +L0449 TAY + LDA [$22],Y + PHA + LDA [$1E],Y + CMP #$0200 + BCS L0449 + LSR +L0455 AND #$00FF + STA $0E + STA $1A + LDY #$0000 +L045F STA [$04],Y + INY + PLA + BPL L045F + PHA + TYA + CLC + ADC $04 + STA $04 + + lda $06 + adc #0 + sta $06 + + JSR L04D8 + LDA $12 + STA $10 + LDA $14 + CMP $18 + BCC L048F + LDA L0517+1 + CMP #$000C + BEQ L048F + INC + STA L0517+1 + ASL + TAX + LDA packMASK-$12,X + STA L051E+1 + ASL $18 +L048F BRA L042C +L0491 JSR L04C1 + JSR L04E8 + STA $10 + STA $1A + STA $0E + STA [$04] + + lda $04 + clc + adc #1 + sta $04 + lda $06 + adc #0 + sta $06 + + JMP L042C + +L04A4 pla + pld + phk + plb + rts + +L04C1 LDA #$0009 + STA L0517+1 + LDA #$01FF + STA L051E+1 + LDA #$0200 + STA $18 + LDA #$0102 + STA $14 + RTS + +L04D8 LDA $14 + ASL + TAY + LDA $1A + STA [$22],Y + LDA $10 + ASL + STA [$1E],Y + INC $14 + RTS + +L04E8 LDA $1C + AND #$0007 + TAX + LDA $1C + LSR + LSR + LSR + CMP #$03FD + BCC L0502 + CLC + ADC $00 + STA $00 + STX $1C + LDA #$0000 +L0502 TAY + LDA [$00],Y + STA $08 + INY + INY + LDA [$00],Y + TXY + BEQ L0514 +L050E LSR +L050F ROR $08 + DEX + BNE L050E +L0514 LDA $1C + CLC +L0517 ADC #$FFFF ; $0009 on beginning + STA $1C + LDA $08 +L051E AND #$FFFF ; $01FF on beginning + RTS + +*------------------------------ + +nowWAIT dec ; Attend A secondes + tax + lda #0 +]lp clc + adc #60 + cpx #0 + beq nowWAIT1 + dex + bra ]lp +nowWAIT1 pha + jsr waitVBL + jsr clickIT + bcc nowWAIT2 +]lp ldal $e0c019 + and #$80 + bne ]lp + pla + dec + bne nowWAIT1 + sec + rts +nowWAIT2 pla + clc + rts + +*-------------------------- +* Routines sonores +*-------------------------- + +doSND lda ptrZIK + sta pZIKptr + lda ptrZIK+2 + sta pZIKptr+2 + + dex + txa + asl + tax + + lda sndADR,x + clc + adc pZIKptr+1 + sta pZIKptr+1 + + lda sndSIZ,x + sta pZIKptr+4 + + lda noSOUND + beq doSND1 + rts + +doSND1 PushWord #%00000000_00010000 + _FFStopSound + PushWord #$0401 + PushLong #pZIKptr + _FFStartSound + rts + +*-------------------------- +* Routines graphiques +*-------------------------- + +*--- Affichage du curseur + +showCURS txa + asl + tax + lda scrX,x + pha + tya + asl + tay + lda scrY,y + clc + adc 1,s + tax ; en X, adresse ecran + pla + + lda fgCURS + cmp #-1 + beq showCURS1 + rts + +showCURS1 lda cursL + stal $012002,x + stal $012e62,x + lda cursL+2 + stal $012004,x + stal $012e64,x + lda cursL+4 + stal $012006,x + stal $012e66,x + lda cursL+6 + stal $012008,x + stal $012e68,x + lda cursL+8 + stal $01200a,x + stal $012e6a,x + lda cursL+10 + stal $01200c,x + stal $012e6c,x + + ldy #0 +]lp sep #$20 + ldal $0120a2,x + and cursMSK1,y + ora cursCOL1,y + stal $0120a2,x + ldal $0120ad,x + and cursMSK2,y + ora cursCOL2,y + stal $0120ad,x + rep #$20 + txa + clc + adc #$a0 + tax + iny + cpy #22 + bne ]lp + rts + +*--- + +hideCURS txa + asl + tax + lda scrX,x + pha + tya + asl + tay + lda scrY,y + clc + adc 1,s + tax ; en X, adresse ecran + pla + phx + + sei + ldy #$0a +hideCURS1 ldal $110002,x + stal $012002,x +hideCURS2 ldal $110e62,x + stal $012e62,x + inx + inx + dey + dey + bpl hideCURS1 + + plx + ldy #0 +]lp sep #$20 +hideCURS3 ldal $1100a2,x + stal $0120a2,x +hideCURS4 ldal $1100ad,x + stal $0120ad,x + rep #$20 + txa + clc + adc #$a0 + tax + iny + cpy #22 + bne ]lp + cli + rts + +*--- Effacement de l'ecran + +clrECRAN lda ptrECRAN + sta Debut + lda ptrECRAN+2 + sta Debut+2 + ldy #0 + tya +]lp sta [Debut],y + iny + iny + cpy #$7e00 + bne ]lp + + lda ptrNIV ; Met la palette + sta Debut + lda ptrECRAN + sta Arrivee + lda ptrNIV+2 + sta Debut+2 + lda ptrECRAN+2 + sta Arrivee+2 + + ldy #$7e00 +]lp lda [Debut],y + sta [Arrivee],y + iny + iny + cpy #$8000 + bne ]lp + rts + +*--- Routine col/col + +moveIT sta moveIT2+1 + + sty moveIT6+2 ; page 2 + + lda ptrBOUGE+1 + sta moveIT5+2 + + ldx oldXY + cpx curXY + bne moveIT1 + rts + +moveIT1 lda scrCASE,x + clc + adc #$2 + sta espECR + clc + adc #$2000 + sta espSCR + +moveIT2 lda $ffff ; Lit adresse sprite source + clc + adc ptrBOUGE + sta moveIT5+1 + + inc moveIT2+1 + inc moveIT2+1 + + lda tinyDIR ; En fonction de la direction + dec + asl ; calcule les bonnes coordonnees + tax + lda tinyHOW,x + sta moveIT12+1 + lda tinyCALC,x + pha + clc + adc espECR + sta espECR + clc + adc ptrECRAN + sta moveIT6+1 + + pla + clc + adc espSCR + sta espSCR + sta moveIT8+1 + + lda espCOL ; couleur du Tinie + asl + tax + lda anDRAW,x + sta moveIT7+1 + + ldx #2 +]lp wai + dex +PATCH bpl ]lp + + lda #23 + sta compteur3 +moveIT3 sep #$20 +moveIT4 ldx #0 +moveIT5 ldal $110000,x ; data + tay +moveIT6 ldal $e12000,x + and tblMASK,y ; MASK +moveIT7 ora tblGRE,y ; pour couleur +moveIT8 stal $012000,x + inx +moveIT9 cpx #12 + bne moveIT5 + + rep #$20 + lda moveIT4+1 + clc + adc #160 + sta moveIT4+1 + clc + adc #12 + sta moveIT9+1 + dec compteur3 + lda compteur3 + bpl moveIT3 + + stz moveIT4+1 + lda #12 + sta moveIT9+1 + + lda tinyDIR ; Maintenant efface + dec + pha + asl + tax + lda tinyCALC2,x + clc + adc espECR + tax + pla + cmp #2 + bcs moveIT10 + jsr clrLR + bra moveIT11 +moveIT10 jsr clrUD + +moveIT11 inc compteur2 + lda compteur2 +moveIT12 cmp #8 + beq moveIT13 + brl moveIT2 +moveIT13 rts + +*--- Efface les colonnes + +clrLR txa + clc + adc ptrECRAN + sta Second + lda ptrECRAN+2 + sta Second+2 + + txa + clc + adc #$2000 + sta Third + lda #$0001 + sta Third+2 + + ldy #0 +]lp lda [Second],y + sta [Third],y + iny + lda [Second],y + sta [Third],y + dey + tya + clc + adc #160 + tay + cpy #24*160 + bne ]lp + rts + +*--- Efface les lignes + +clrUD txa + clc + adc ptrECRAN + sta Second + lda ptrECRAN+2 + sta Second+2 + + txa + clc + adc #$2000 + sta Third + lda #$0001 + sta Third+2 + + ldx #3 + brl sprite2 + +*--- Best routine pour afficher un sprite + +esprit pha + lda scrCASE,x + sta espECR + pla +esprit1 sta esprit2+1 ; Adresse table d'animation + sty espADR+1 + sty esprit7+2 + +esprit2 lda $ffff ; adresse source de la table d'animation + cmp #-1 + bne esprit3 + rts + +esprit3 clc + adc espADR + sta esprit7+1 + +esprit4 ldx #9 +]lp wai + dex + bpl ]lp + + stz esprit6+1 + lda #12 + sta esprit11+1 + + lda espECR ; prend adresse ecran + clc + adc #2 + adc ptrECRAN + sta esprit8+1 + + lda espECR + clc + adc #$2002 + sta esprit10+1 + + lda espCOL ; couleur du Tiny + asl + tax + lda anDRAW,x + sta esprit9+1 + + lda esprit2+1 ; next one + inc + inc + sta esprit2+1 + + lda #23 + sta compteur3 + +esprit5 sep #$20 +esprit6 ldx #0 +esprit7 ldal $110000,x ; data + tay +esprit8 ldal $e12000,x + and tblMASK,y ; MASK +esprit9 ora tblGRE,y ; pour couleur +esprit10 stal $012000,x + inx +esprit11 cpx #12 + bne esprit7 + + rep #$20 + lda esprit6+1 + clc + adc #160 + sta esprit6+1 + clc + adc #12 + sta esprit11+1 + dec compteur3 + lda compteur3 + bpl esprit5 + + dec compteur2 + lda compteur2 + bmi esprit12 + brl esprit2 +esprit12 rts + +*--- Routine pour afficher un sprite + +sprite10 sta Second + lda ptrGAG3+2 + sta Second+2 + + bra sprite1 + +*--- Routine pour afficher un sprite + +sprite asl + tay + + lda scrNIV,y + tay + clc + adc ptrNIV + sta Second + lda ptrNIV+2 + sta Second+2 + +sprite1 lda scrCASE,x + clc + adc #$0002 + clc + adc ptrECRAN + sta Third + lda ptrECRAN+2 + sta Third+2 + + ldx #23 +sprite2 ldy #0 +]lp lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + iny + iny + lda [Second],y + sta [Third],y + + tya + clc + adc #160-10 + tay + + dex + bpl ]lp + rts + +*-------------------------------------- Affichage d'un texte + +printIT sta printIT1+1 + stx Arrivee+2 + sty Arrivee + +printIT1 lda $ffff + and #$00ff + bne printIT2 + rts +printIT2 pha + inc printIT1+1 + + ldy #99 +]lp lda tblFNT8,y + and #$00ff + cmp 1,s + beq printIT3 + dey + bpl ]lp + iny + +printIT3 pla + tya + asl + tay + lda adrFNT8,y + clc + adc ptrFONTE + sta Debut + lda ptrFONTE+2 + sta Debut+2 + + ldx #0007 + ldy #0000 +]lp lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + + tya + clc + adc #160-2 + tay + + dex + bpl ]lp + + lda Arrivee + clc + adc #4 + sta Arrivee + brl printIT1 + +*--- + +print16 sta print161+1 + stx Arrivee+2 + sty Arrivee + +print161 lda $ffff + and #$00ff + bne print162 + rts +print162 pha + inc print161+1 + + ldy #0037 +]lp lda tblFNT16,y + and #$00ff + cmp 1,s + beq print163 + dey + bpl ]lp + +print163 pla + tya + asl + tay + lda adrFNT16,y + clc + adc ptrFONTE + sta Debut + lda ptrFONTE+2 + sta Debut+2 + + ldx #0023 + ldy #0000 +]lp lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + iny + iny + lda [Debut],y + sta [Arrivee],y + + tya + clc + adc #160-14 + tay + + dex + bpl ]lp + + lda Arrivee + clc + adc #16 + sta Arrivee + brl print161 + +*-------------------------- Message + + hex 0d0d + asc 'Oh! no more lemmings...' + hex 0d0d + +*--- Fade sur les palettes + +fadeIN sta fadeIN1+2 + clc + adc #$007e + sta fadeIN5+2 + sta fadeIN7+2 + sta fadeIN9+2 + cpy #-1 + beq fadeIN2 + + ldx #$7dfe +fadeIN1 ldal $062000,x + stal $012000,x + dex + dex + bpl fadeIN1 + +fadeIN2 ldy #$000f +fadeIN3 ldx #$01fe +fadeIN4 ldal $019e00,x + and #$000f + sta temp +fadeIN5 ldal $069e00,x + and #$000f + cmp temp + beq fadeIN6 + ldal $019e00,x + clc + adc #$0001 + stal $019e00,x +fadeIN6 ldal $019e00,x + and #$00f0 + sta temp +fadeIN7 ldal $069e00,x + and #$00f0 + cmp temp + beq fadeIN8 + ldal $019e00,x + clc + adc #$0010 + stal $019e00,x +fadeIN8 ldal $019e00,x + and #$0f00 + sta temp +fadeIN9 ldal $069e00,x + and #$0f00 + cmp temp + beq fadeIN10 + ldal $019e00,x + clc + adc #$0100 + stal $019e00,x + +fadeIN10 dex + dex + bpl fadeIN4 + jsr nextVBL + dey + bpl fadeIN3 + rts + +*--- + +fadeOUT ldy #$000f +fadeOUT1 ldx #$01fe +fadeOUT2 ldal $019e00,x + and #$000f + beq fadeOUT3 + ldal $019e00,x + sec + sbc #$0001 + stal $019e00,x +fadeOUT3 ldal $019e00,x + and #$00f0 + beq fadeOUT4 + ldal $019e00,x + sec + sbc #$0010 + stal $019e00,x +fadeOUT4 ldal $019e00,x + and #$0f00 + beq fadeOUT5 + ldal $019e00,x + sec + sbc #$0100 + stal $019e00,x + +fadeOUT5 dex + dex + bpl fadeOUT2 + jsr nextVBL + dey + bpl fadeOUT1 + + ldx #$7ffe + lda #$0000 +]lp stal $012000,x + dex + dex + bpl ]lp + rts + +*-------------------------- +* Routine control panel +*-------------------------- + + mx %11 + +theDESK jmp theDESK1 + jmp theDESK1 + jmp theDESK1 + +theDESK1 sep #$30 + lda $c025 + + phb + php + phk + plb + + clc + xce + rep #$30 + + lda noBUG + sta oldBUG + stz noBUG + + sep #$30 + +theDESK2 jsl $feadb9 + + phk + plb + + clc + xce + sep #$30 + + ldal $e0c034 + and #$f0 + stal $e0c034 + + rep #$30 + + lda oldBUG + sta noBUG + + sep #$30 + plp + plb + clc + rtl + + mx %00 + +*-------------------------- Message + + hex 0d0d + asc 'During a year: we have released something ' + asc 'the FTA has never done: a GAME !!!' + hex 0d0d + +*-------------------------- +* Routines 3200 +*-------------------------- + +do3200 tax + + sep #$20 ; A= pointeur source image compressee + lda #$1e + stal $e0c035 + rep #$20 + + stz Debut + stz Debut+2 + stx Debut+1 + + ldx #$7ffe + lda #0 +]lp stal $012000,x + stal $e12000,x + dex + dex + bpl ]lp + + ldy #$7d00 + ldx #0 +]lp lda [Debut],y + stal $012000,x + iny + iny + inx + inx + cpx #$1900 + bne ]lp + + sep #$20 + ldx #$00 +do32001 lda #$0f +]lp stal $019d00,x + stal $e19d00,x + inx + cpx #$c8 + beq do32002 + dec + bpl ]lp + bra do32001 + +do32002 lda #0 + stal $e0c035 + + rep #$20 + + ldy #$7cfe +]lp tyx + lda [Debut],y + stal $e12000,x + dey + dey + bpl ]lp + + phd + tsc + sta mySTACK + + sei + +*--- Main routine 3200 + + ldal $e0c068 + ora #$30 + stal $e0c068 + +do32003 ldy #0 + lda #$1f00 + tcd + +do32004 ldal $e0c02e + and #$ff + cmp affTBL,y + bne do32004 + + iny + iny + + lda #$9fff + tcs + tdc + clc + adc #$0100 + tcd + +]affPOS1 = $00 + lup $80 + pei ]affPOS1 +]affPOS1 = ]affPOS1+2 + --^ + + tdc + clc + adc #$0100 + tcd + +]affPOS1 = $00 + lup $80 + pei ]affPOS1 +]affPOS1 = ]affPOS1+2 + --^ + + cpy #$1a + beq do32005 + brl do32004 + +do32005 ldal $e0bfff + bmi do32007 + ldal $e0c026 + bmi do32006 + brl do32003 +do32006 ldal $e0c023 + ldal $e0c023 + and #%10000000_00000000 + beq do32007 + brl do32003 + +do32007 stal $e0c010 + ldal $e0c068 + and #$cf + stal $e0c068 + +*--- End of routine + + cli + + lda mySTACK + tcs + pld + phk + plb + + ldx #$7ffe + lda #0 +]lp stal $012000,x + stal $e12000,x + dex + dex + bpl ]lp + + rts + +*-------------------------- +* All the datas +*-------------------------- + + hex 8d8d + asc "----------- The Tinies -----------",8d + asc " Version Apple //gs ",8d + asc " Antoine Vignau Olivier Zardini ",8d + asc " Brutal Deluxe ",8d + asc "------------ 9 2 1995 ------------",8d,8d + +*--- Flags + +noSOUND dw 2 +noBUG ds 2 +oldBUG ds 2 +bugFG ds 2 +bugA ds 2 +bugY ds 2 +saveDESK ds 4 + +clickKEY ds 2 + +save1 ds 1 +save2 ds 1 +save3 ds 1 +save4 ds 1 +save5 ds 2 +save6 ds 2 + +compteur ds 2 ; pour affichage tiny (intANIM) +compteur2 ds 2 ; nombre de sprites a animer +compteur3 ds 2 ; pour affichage tiny (esprit) + +fgKEY ds 2 +fgLOST ds 2 +fgPRINT ds 2 +fgTEMP ds 2 +fgCURS ds 2 + +nbOBJECTS ds 16 +fgNBTINIES ds 2 +fgNBSLEEPERS ds 2 + +spyDIR dw 2,1,4,3 +spyDIR2 dw 2,1,3,4 + +keyPREF dw $00b0 ; select + dw $00b4 ; left + dw $00b6 ; right + dw $00b8 ; up + dw $00b2 ; down + +minutes ds 2 ; Bar info +secondes ds 2 +level ds 2 +life dw 2 +joker dw 2 + +*--- Flags pour le jeu + +tinyMOVE ds 2 ; a-t-il bouge +tinyROULE ds 2 ; faut-il qu'il roule ?? +tinyDIR ds 2 ; direction du Tiny +tinyDEC ds 2 ; le decor +espCOL ds 2 ; la couleur du Tiny + word (sauvegarde) +espADR ds 4 +espECR ds 2 +espSCR ds 2 +myNUMBER ds 2 ; numero du tiny arrete (anim table) + +tinyCALC dw $fffe,$0002,$fe20,$01e0 +tinyCALC2 dw $000c,$fffd,$0f00,$fe20 +tinyHOW dw 6,6,8,8 + +curXY ds 2 ; Curseur +curX ds 2 +curY ds 2 +oldXY ds 2 +oldX ds 2 +oldY ds 2 + +arrCOL ds 2 +arrTINYcur ds 2 +arrXY ds 2 +arrX ds 2 +arrY ds 2 +arrNUMBER ds 2 + +strMINU asc " ",00 +strSECO asc " ",00 +strLEVEL asc " ",00 +strLIFE asc " ",00 +strJOKER asc " ",00 + +strPREF asc " ",00 +strPREF2 asc "LEVEL 00",00 + +strCOD asc " ",00 +strGAME asc "GAME OVER",00 +strWIN asc " YOU WIN ",00 + +*--- Textes + +memSTR1 str 'Can'27't allocate (screen) memory' +memSTR2 str 'Press a key to quit.' + +aptkSTR1 str 'The game may not work with AppleTalk' + +proSTR1 str 'Can'27't load file' +proSTR11 str 'Can'27't save file' +proSTR2 str 'Do what now ?' +proSTR3 str '[RET] Continue' +proSTR31 str '[RET] Retry' +proSTR4 str '[ESC] Quit' +proSTR41 str '[ESC] Cancel' + +*--- Prodos + +proQUIT dw 2 + ds 4 + ds 2 + +proOPEN dw 2 + ds 2 + adrl pINTRO + +proGETEOF dw 2 + ds 2 + ds 4 + +proREAD dw 4 + ds 2 + ds 4 + ds 4 + ds 4 + +proCLOSE dw 1 + ds 2 + +proCREATE dw 7 + adrl pPREF ; Pathname + dw $e3 ; AccessCode + dw $5a ; FileType + ds 4 ; AuxType + dw $02 ; Type d'enregistrement + adrl $14 ; Data segment + ds 4 ; Resource segment + +proKILL dw 1 + adrl pPREF ; Pathname + +proINFO dw 4 + adrl pPREF ; Pathname + dw $e3 ; AccessCode + dw $5a ; FileType + ds 4 ; AuxType + +proWRITE dw 5 + ds 2 ; Id + adrl keyPREF ; Where + adrl $14 ; Length + ds 4 ; Written + ds 2 + +*--- Nom des fichiers + +pINTRO strl '1/Tinies.Data/Intro00' +pNIV strl '1/Tinies.Data/Niv00' +pBOUGE strl '1/Tinies.Data/Bouge' +pGAG2 strl '1/Tinies.Data/Gadget2' +pGAG3 strl '1/Tinies.Data/Gadget3' +pTINY1 strl '1/Tinies.Data/Tiny1' +pTINY2 strl '1/Tinies.Data/Tiny2' +pFONTE strl '1/Tinies.Data/Fonte' +pGAGNE strl '1/Tinies.Data/Gagne' +pPERDU strl '1/Tinies.Data/Perdu' +pKALISTO strl '1/Tinies.Data/Kalisto' +pTINIES strl '1/Tinies.Data/Tinies' +pDATAS strl '1/Tinies.Data/Tinies.Tab' +pDATAS2 strl '1/Tinies.Data/Tinies.Tab2' +pSOUND strl '1/Tinies.Data/Tinies.Sound' + +pMAIN strl '1/Tinies.Data/Tinies.Select' +pDOCU strl '1/Tinies.Data/Tinies.Docu' +pDOCFR strl '1/Tinies.Data/Tinies.Datas1' +pDOCUS strl '1/Tinies.Data/Tinies.Datas2' +pSPRITE strl '1/Tinies.Data/Tinies.Sprite' +pPREF strl '1/Tinies.Data/Tinies.Prefs' + +*--- Memoire + +myID ds 2 +mySTACK ds 2 + +ptrECRAN ds 4 ; 0 +ptrBOUGE ds 4 ; 1 +ptrGAG2 ds 4 ; 2 +ptrTINY1 ds 4 ; 3 +ptrUNPACK ds 4 ; 4 +ptrZIK ds 4 ; 5 + +ptrNIV ds 4 ; 0+8000 +ptrFONTE ds 4 ; 1+8000 +ptrGAG3 ds 4 ; 2+8000 +ptrTINY2 ds 4 ; 3+8000 +ptrDATAS ds 4 ; 4+8000 + +*--- Decompression + +ptrBUFFER ds 4 ; pour le decompactage + +packMASK dw $01ff + dw $03ff + dw $07ff + dw $0fff + dw $0000 + +temp ds 2 + +*--- Adresses des sons + +sndADR dw $00,$21,$36,$3d,$46,$54,$61,$63,$6a,$74,$85,$8d,$d0 +sndSIZ dw $21,$15,$07,$09,$0e,$0d,$02,$07,$0a,$11,$08,$43,$0a + +pZIKptr adrl 0 ; waveStart + dw 41 ; waveSize + dw $00f5 ; freqOffset + da $1000 ; docBuffer + dw 1 ; bufferSize + adrl 0 ; nextWavePtr + dw 255 ; volSetting + +*--- Table routine 3200 + +affTBL dw $e4,$84,$8c,$94,$9c,$a4,$ac + dw $b4,$bc,$c4,$cc,$d4,$dc + +*--- Tables pour les animations (jusqu'a 104 animations) + +anNUMBER ds 2 +anOBJET ds 208 +anACTIF ds 208 +anCOORD ds 208 +anANIM ds 208 +anACTIF2 ds 208 + +*--- Donnees pour les plateaux + +plateau1 ds 208 +plateau2 ds 208 +plateau3 ds 208 +plateau4 ds 208 + +*--- Conversion HEXA/DECI + +lvlINTRO hex 01,01,01,01,01,01,01,01,01,01 + hex 02,02,02,02,02,02,02,02,02,02 + hex 03,03,03,03,03,03,03,03,03,03 + hex 04,04,04,04,04,04,04,04,04,04 + hex 05,05,05,05,05,05,05,05,05,05 + hex 06,06,06,06,06,06,06,06,06,06 + hex 07,07,07,07,07,07,07,07,07,07 + hex 08,08,08,08,08,08,08,08,08,08 + hex 09,09,09,09,09,09,09,09,09,09 + hex 10,10,10,10,10,10,10,10,10,10,11 + +scdVAR hex 00,01,02,03,04,05,06,07,08,09 + hex 10,11,12,13,14,15,16,17,18,19 + hex 20,21,22,23,24,25,26,27,28,29 + hex 30,31,32,33,34,35,36,37,38,39 + hex 40,41,42,43,44,45,46,47,48,49 + hex 50,51,52,53,54,55,56,57,58,59 + hex 60,61,62,63,64,65,66,67,68,69 + hex 70,71,72,73,74,75,76,77,78,79 + hex 80,81,82,83,84,85,86,87,88,89 + hex 90,91,92,93,94,95,96,97,98,99 + +*--- Adresses caracteres + +adrFNT8 dw $5780,$5784,$5788,$578c,$5790,$5794,$5798,$579c + dw $57a0,$57a4,$57a8,$57ac,$57b0,$57b4,$57b8,$57bc + dw $57c0,$57c4,$57c8,$57cc,$57d0,$57d4,$57d8,$57dc + dw $57e0,$57e4,$57e8,$57ec,$57f0,$57f4,$57f8,$57fc + dw $5800,$5804,$5808,$580c,$5810,$5814,$5818,$581c + dw $5c80,$5c84,$5c88,$5c8c,$5c90,$5c94,$5c98,$5c9c + dw $5ca0,$5ca4,$5ca8,$5cac,$5cb0,$5cb4,$5cb8,$5cbc + dw $5cc0,$5cc4,$5cc8,$5ccc,$5cd0,$5cd4,$5cd8,$5cdc + dw $5ce0,$5ce4,$5ce8,$5cec,$5cf0,$5cf4,$5cf8,$5cfc + dw $5d00,$5d04,$5d08,$5d0c,$5d10,$5d14,$5d18,$5d1c + dw $6180,$6184,$6188,$618c,$6190,$6194,$6198,$619c + dw $61a0,$61a4,$61a8,$61ac,$61b0,$61b4,$61b8,$61bc + dw $61c0,$61c4,$61c8,$61cc + +adrFNT16 dw $0f00,$0f10,$0f20,$0f30,$0f40,$0f50,$0f60,$0f70,$0f80,$0f90 + dw $1e00,$1e10,$1e20,$1e30,$1e40,$1e50,$1e60,$1e70,$1e80,$1e90 + dw $2d00,$2d10,$2d20,$2d30,$2d40,$2d50,$2d60,$2d70,$2d80,$2d90 + dw $3c00,$3c10,$3c20,$3c30,$3c40,$3c50,$3c60,$3c70 + +tblFNT8 hex a0a1a2a3a4a5a6a7a8a9aaabacadaeaf + hex b0b1b2b3b4b5b6b7b8b9babbbcbdbebf + hex c0c1c2c3c4c5c6c7c8c9cacbcccdcecf + hex d0d1d2d3d4d5d6d7d8d9dadbdcdddedf + hex e0e1e2e3e4e5e6e7e8e9eaebecedeeef + hex f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff + hex 88958b8a + +tblFNT16 asc "ABCDEFGHIJ" + asc "KLMNOPQRST" + asc "UVWXYZ 012" + asc "3456789-" + +*--- Donnees du curseur + +cursL hex a89999b9bbbbbbbb9b99998a + +cursCOL1 hex 8990909090b090b0b0b0b0 + hex b0b0b0b090b09090909989 +cursCOL2 hex 98090909090b090b0b0b0b + hex 0b0b0b0b090b0909090998 +cursMSK1 hex 000f0f0f0f0f0f0f0f0f0f + hex 0f0f0f0f0f0f0f0f0f0000 +cursMSK2 hex 00f0f0f0f0f0f0f0f0f0f0 + hex f0f0f0f0f0f0f0f0f00000 + +*--- Adresses pour NIV + +scrNIV dw $0000,$0010,$0020,$0030,$0040 + dw $0050,$1e00,$0060,$0070,$0080 + dw $0090,$0f00,$0f10,$0f20,$0f30 + dw $0f40,$0f50 + dw $0f60,$0f70,$0f80,$0f90 + dw $5a00,$5a10,$5a20,$5a30 + dw $1e10,$1e20,$1e30,$1e40,$1e50,$1e60,$1e70,$1e80,$1e90 + dw $2d00,$2d10,$2d20,$2d30,$2d40,$2d50,$2d60,$2d70,$2d80,$2d90 + dw $3c00,$3c10,$3c20,$3c30,$3c40,$3c50,$3c60,$3c70,$3c80 + +scrCASE dw $0000,$0f00,$1e00,$2d00,$3c00,$4b00,$5a00,$6900 + dw $000c,$0f0c,$1e0c,$2d0c,$3c0c,$4b0c,$5a0c,$690c + dw $0018,$0f18,$1e18,$2d18,$3c18,$4b18,$5a18,$6918 + dw $0024,$0f24,$1e24,$2d24,$3c24,$4b24,$5a24,$6924 + dw $0030,$0f30,$1e30,$2d30,$3c30,$4b30,$5a30,$6930 + dw $003c,$0f3c,$1e3c,$2d3c,$3c3c,$4b3c,$5a3c,$693c + dw $0048,$0f48,$1e48,$2d48,$3c48,$4b48,$5a48,$6948 + dw $0054,$0f54,$1e54,$2d54,$3c54,$4b54,$5a54,$6954 + dw $0060,$0f60,$1e60,$2d60,$3c60,$4b60,$5a60,$6960 + dw $006c,$0f6c,$1e6c,$2d6c,$3c6c,$4b6c,$5a6c,$696c + dw $0078,$0f78,$1e78,$2d78,$3c78,$4b78,$5a78,$6978 + dw $0084,$0f84,$1e84,$2d84,$3c84,$4b84,$5a84,$6984 + dw $0090,$0f90,$1e90,$2d90,$3c90,$4b90,$5a90,$6990 + +scrX dw $0000,$000c,$0018,$0024,$0030,$003c,$0048 + dw $0054,$0060,$006c,$0078,$0084,$0090 + +scrY dw $0000,$0f00,$1e00,$2d00 + dw $3c00,$4b00,$5a00,$6900 + +intTEMP dw 4,4,3,3,2,2,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + +*--- Types d'animation a faire + +anCORRES dw $9,$9,$9,$9 + dw $2,$2,$2,$2 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw $6,$6,$6,$6 + dw $3,$3,$3,$3 + +anDRAW da tblGRE,tblBLU,tblRED,tblYEL + da tblGRE,tblBLU,tblRED,tblYEL + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + da tblGRE,tblGRE,tblGRE,tblGRE + da tblGRE,tblBLU,tblRED,tblYEL + +anTYPE da anGREE,anBLUE,anREDE,anYELL + da anSLEE,anSLEE,anSLEE,anSLEE + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + dw -1,-1,-1,-1 + da anSTAT,anSTAT,anSTAT,anSTAT + da anDORM,anDORM,anDORM,anDORM + +anGREE dw $0000,$000c,$0018,$0024,$0030,$003c,$0048,$0054,$0060,$006c,$0078,$0084 + dw $0f00,$0f0c,$0f18,$0f24,-1 + +anBLUE dw $0f30,$0f3c,$0f48,$0f54,$0f60,$0f6c,$0f78,$0f84 + dw $1e00,$1e0c,$1e18,$1e24,$1e30,-1 + +anREDE dw $1e3c,$1e48,$1e54,$1e60,$1e6c,$1e78,$1e84 + dw $2d00,$2d0c,$2d18,$2d24,$2d30,-1 + +anYELL dw $2d3c,$2d48,$2d54,$2d60,$2d6c,$2d78,$2d84 + dw $3c00,$3c0c,$3c18,$3c24,$3c30,$3c3c,$3c48,$3c54,-1 + +anSLEE dw $0000,$000c,$0018,$0024,$0030,$003c,$0048,$0054,-1 + +anSTAT dw $4b00,$4b0c,$4b18,$4b24,$4b30,$4b3c,$4b48,$4b54 + dw $4b60,$4b6C,$4b78,$4b84,$4b90,-1 + +anDORM dw $3c30,$3c30,$3c3c,$3c3c,$3c48,$3c48,$3c54,$3c54,-1 + +*--- Tables de correspondance pour les animations + +tblGRE hex 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f + hex 202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f + hex 404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f + hex 606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f + hex 808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9f + hex a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf + hex c0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedf + hex e0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff + +tblBLU hex 000502070405060708090a0b0c0d0e0f505552575455565758595a5b5c5d5e5f + hex 202522272425262728292a2b2c2d2e2f707572777475767778797a7b7c7d7e7f + hex 404542474445464748494a4b4c4d4e4f505552575455565758595a5b5c5d5e5f + hex 606562676465666768696a6b6c6d6e6f707572777475767778797a7b7c7d7e7f + hex 808582878485868788898a8b8c8d8e8f909592979495969798999a9b9c9d9e9f + hex a0a5a2a7a4a5a6a7a8a9aaabacadaeafb0b5b2b7b4b5b6b7b8b9babbbcbdbebf + hex c0c5c2c7c4c5c6c7c8c9cacbcccdcecfd0d5d2d7d4d5d6d7d8d9dadbdcdddedf + hex e0e5e2e7e4e5e6e7e8e9eaebecedeeeff0f5f2f7f4f5f6f7f8f9fafbfcfdfeff + +tblRED hex 0009020b0405060708090a0b0c0d0e0f9099929b9495969798999a9b9c9d9e9f + hex 2029222b2425262728292a2b2c2d2e2fb0b9b2bbb4b5b6b7b8b9babbbcbdbebf + hex 4049424b4445464748494a4b4c4d4e4f5059525b5455565758595a5b5c5d5e5f + hex 6069626b6465666768696a6b6c6d6e6f7079727b7475767778797a7b7c7d7e7f + hex 8089828b8485868788898a8b8c8d8e8f9099929b9495969798999a9b9c9d9e9f + hex a0a9a2aba4a5a6a7a8a9aaabacadaeafb0b9b2bbb4b5b6b7b8b9babbbcbdbebf + hex c0c9c2cbc4c5c6c7c8c9cacbcccdcecfd0d9d2dbd4d5d6d7d8d9dadbdcdddedf + hex e0e9e2ebe4e5e6e7e8e9eaebecedeeeff0f9f2fbf4f5f6f7f8f9fafbfcfdfeff + +tblYEL hex 000d020f0405060708090a0b0c0d0e0fd0ddd2dfd4d5d6d7d8d9dadbdcdddedf + hex 202d222f2425262728292a2b2c2d2e2ff0fdf2fff4f5f6f7f8f9fafbfcfdfeff + hex 404d424f4445464748494a4b4c4d4e4f505d525f5455565758595a5b5c5d5e5f + hex 606d626f6465666768696a6b6c6d6e6f707d727f7475767778797a7b7c7d7e7f + hex 808d828f8485868788898a8b8c8d8e8f909d929f9495969798999a9b9c9d9e9f + hex a0ada2afa4a5a6a7a8a9aaabacadaeafb0bdb2bfb4b5b6b7b8b9babbbcbdbebf + hex c0cdc2cfc4c5c6c7c8c9cacbcccdcecfd0ddd2dfd4d5d6d7d8d9dadbdcdddedf + hex e0ede2efe4e5e6e7e8e9eaebecedeeeff0fdf2fff4f5f6f7f8f9fafbfcfdfeff + +tblMASK hex fff0f0f0f0f0f0f0f0f0f0f0f0f0f0f00f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + hex 0f0000000000000000000000000000000f000000000000000000000000000000 + +tblXY dw $0000,$0001,$0002,$0003,$0004,$0005,$0006,$0007 + dw $0100,$0101,$0102,$0103,$0104,$0105,$0106,$0107 + dw $0200,$0201,$0202,$0203,$0204,$0205,$0206,$0207 + dw $0300,$0301,$0302,$0303,$0304,$0305,$0306,$0307 + dw $0400,$0401,$0402,$0403,$0404,$0405,$0406,$0407 + dw $0500,$0501,$0502,$0503,$0504,$0505,$0506,$0507 + dw $0600,$0601,$0602,$0603,$0604,$0605,$0606,$0607 + dw $0700,$0701,$0702,$0703,$0704,$0705,$0706,$0707 + dw $0800,$0801,$0802,$0803,$0804,$0805,$0806,$0807 + dw $0900,$0901,$0902,$0903,$0904,$0905,$0906,$0907 + dw $0a00,$0a01,$0a02,$0a03,$0a04,$0a05,$0a06,$0a07 + dw $0b00,$0b01,$0b02,$0b03,$0b04,$0b05,$0b06,$0b07 + dw $0c00,$0c01,$0c02,$0c03,$0c04,$0c05,$0c06,$0c07 + +*--- Tinies bougent + +moveLEFT dw $0000,$000c,$0018,$0024 + dw $0030,$003c,$0048,$0054 + +moveRIGHT dw $0f00,$0f0c,$0f18,$0f24 + dw $0f30,$0f3c,$0f48,$0f54 + +moveUP dw $1e00,$1e0c,$1e18,$1e24 + dw $1e30,$1e3c,$1e48,$1e54 + +moveDOWN dw $2d00,$2d0c,$2d18,$2d24 + dw $2d30,$2d3c,$2d48,$2d54 + +rollLEFT dw $3c00,$3c0c,$3c18,$3c24 + dw $3c30,$3c3c,$3c48,$3c54 + +rollRIGHT dw $4b00,$4b0c,$4b18,$4b24 + dw $4b30,$4b3c,$4b48,$4b54 + +rollUP dw $5a00,$5a0c,$5a18,$5a24 + dw $5a30,$5a3c,$5a48,$5a54 + +rollDOWN dw $6900,$690c,$6918,$6924 + dw $6930,$693c,$6948,$6954 + +*--- Adresses ecran des sprites + +chseBOUG da anBougGa,anBougDr,anBougHa,anBougBa + da anRoulGa,anRoulDr,anRoulHa,anRoulBa +anBougGa dw $0f0c,$0f18,$0f24,$0f30,$0f3c,$0f48 +anBougDr dw $000c,$0018,$0024,$0030,$003c,$0048 +anBougHa dw $1e00,$1e0c,$1e18,$1e24,$1e30,$1e3c,$1e48,$1e54 +anBougBa dw $2d00,$2d0c,$2d18,$2d24,$2d30,$2d3c,$2d48,$2d54 +anRoulGa dw $4b0c,$4b18,$4b24,$4b30,$4b3c,$4b48 +anRoulDr dw $3c0c,$3c18,$3c24,$3c30,$3c3c,$3c48 +anRoulHa dw $5a00,$5a0c,$5a18,$5a24,$5a30,$5a3c,$5a48,$5a54 +anRoulBa dw $6900,$690c,$6918,$6924,$6930,$693c,$6948,$6954 + +chseBUMP da anBumpGa,anBumpDr,anBumpBa,anBumpHa +anBumpGa dw $0064,$0070,$007c,$0088,$0094 + dw $0f64,$0f70,$0f7c,$0f88,$0064,-1 +anBumpDr dw $0064,$0f94,$1e64,$1e70,$1e7c + dw $1e88,$1e94,$2d64,$0f88,$0064,-1 +anBumpHa dw $0064,$2d64,$2d70,$2d7c,$2d88 + dw $2d94,$3c64,$3c70,$3c7c,$0064,-1 +anBumpBa dw $0064,$3c7c,$3c88,$3c94,$4b64 + dw $4b70,$4b7c,$4b88,$4b94,$0064,-1 + +chseTELE da anTeleGa,anTeleDr,anTeleHa,anTeleBa +anTeleGa dw $1e30,$1e48,$1e60,$1e78 + dw $2d00,$2d18,$2d30 + dw $2d48,$693c,-1 +anTeleDr dw $0060,$0078 + dw $0f00,$0f18,$0f30 + dw $0f48,$0f60,$0f78,$693c,-1 +anTeleHa dw $3c00,$3c18,$3c30 + dw $3c48,$3c60,$3c78 + dw $4b00,$4b18,$693c,-1 +anTeleBa dw $4b60,$4b78 + dw $5a00,$5a18,$5a30 + dw $5a48,$5a60,$5a78,$693c,-1 + +chseTELE2 da anTeleGa2,anTeleDr2,anTeleHa2,anTeleBa2 +anTeleGa2 dw $2d84,$2d78,$2d6c,$2d60,$1e54,$1e48,$1e3c,$1e30,-1 +anTeleDr2 dw $1e24,$1e18,$1e0c,$1e00,$0084,$0078,$006c,$0060,-1 +anTeleHa2 dw $4b54,$4b48,$4b3c,$4b30,$3c24,$3c18,$3c0c,$3c00,-1 +anTeleBa2 dw $6924,$6918,$690c,$6900,$4b84,$4b78,$4b6c,$4b60,-1 + +anINTE dw $0000,$0f00,$1e00,$2d00 +anOPEN dw $006c,$0f6c,$1e6c,$2d6c +anDOOR dw $000c,$0018,$0024,$0030,$003c,$0048,$0054,$0060,$006c,-1 +anJOKER dw $3c00,$3c0c,$3c18,$3c24,$3c30,$3c3c + dw $3c48,$3c54,$3c60,$3c6c,$3c78,$3c84,-1 + +chseBOOM da anBoumGa,anBoumDr,anBoumHa,anBoumBa +anBoumGa dw $0f00,$0f0c,$0f18,$0f24,$0f30,$0f3c,$0f48,$0f54,-1 +anBoumDr dw $0000,$000c,$0018,$0024,$0030,$003c,$0048,$0054,-1 +anBoumHa dw $1e00,$1e0c,$1e18,$1e24,$1e30,$1e3c,$1e48,$1e54,-1 +anBoumBa dw $2d00,$2d0c,$2d18,$2d24,$2d30,$2d3c,$2d48,$2d54,-1 + +anEXPL1 dw $4b30,$4b3c,$4b48,$4b54,-1 +anEXPL2 dw $5a00,$5a0c,$5a18,$5a24,$5a30,$5a3c + dw $5a48,$5a54,$6900,$690c,$6918,$6924,-1 + +*--- Nombre Sprites animation fixe + +sprNUM dw 8,9,11,8,7,10,8,8,12,1,1,1,1,1,1,5,12 +sprFIX ds 2 + +*--- Mots de passe + +allCODES hex C4C7CDD8C4C6C8D6CAC4D6CCC4D1C7CC + hex CAD5D2CCC7C8CED1D1C8C5C4C6D5D8C6 + hex D5C8D6D7D8D6CBC4C8D1D7D5CFC4C6D2 + hex C5D2D7C6D5C8D3C4D2C6D7D2C4D1D9C4 + hex C6D2C4C7D6D8D3D3D5C4DAC5D6CECCD7 + hex D7C4D1CAD9CCCFCCC7C8D1C4CDD2CCD1 + hex D9C4D0C5D7CBC8C4D8D1D3C4D6D8C5D2 + hex CFC4D1C7D3C4D3DCD3D5C8D3D3C4D1C7 + hex D1CCC9C8D6C4CCCFC5D5D2C6CCD1C7CC + hex C5D8D6CED3D8CFCCCFD2CACCD0C4D5C4 + hex D2C6D7D2CACFC4C5D7D5CCD6C8D0C8D6 + hex C6D2D1D9CDC8CBD2D5C8D1C7C6CFCCD1 + hex D1C8CAC4D3D2CFDCD3C8D7D5C4C6C6C8 + hex D6D3D2D1C8D1C6D5CFC4DDDCCBD2D0CC + hex CBC8D1C7D2D8D7CED3C4D3DCC8D3CCD3 + hex C6D2C6CED6D7D8D0C8D7CBCCCAC4D1CA + hex CCD1CFC4C7D2D1C6CCD1D7C8C4D6D6C4 + hex D0C4D6D7DAD2D2C7C4C5D5D2CCD1D6D7 + hex C5C4C6CEC5C4D1C4C8C6CFD2DACBCCD3 + hex CAD5D2CCCCD0D3D2C6D8C5C4C6D8C5C4 + hex C7C8C6CFC7D5D2CFD6CCD0D3D8D1C7C8 + hex D8D1CBD8D6C6CBD2CFC8CAC4D0D8D5C4 + hex C4D1CCD0C6C4D7C8CFC4D8CAD0C4CAC4 + hex D3C4CFD6C7DCD6D6C5D5D2C6D5C8D9C8 + hex D3D2D5D5D8D1C7C8D8CCCAD8C4D3C8D5 + hex D1D2D1CBD0CCD6C6D3C8D5D8D6D0CCD7 + hex C7DCD6D6C7C8CED1C7CCD8D5CAC4D6CC + hex D2C7D2D5C6C4D8D6D3C8C4D6C4D1C6CB + hex D8D5D2D5C7C8C9C8D6D8C5C5D3CCC6CE + hex D5D8CFC4D6C6C4D5D1D2C7D8D2D2D3CB + hex C6D2C5C8CAC4CFC8D7D5D2CFD7C4C6D6 + hex D3C8C4D6D9C4D0C5DBDCCFD2DACCD5C8 + hex D6C6CCD8D0CCD1D7C8D8CAC8D5D8D1C8 + hex C8D5D8D3D3CFD2D7D0C4D5CCC6D2D1CE + hex D1D8D5D6CBCCD6D3D6D1D2C5CBD2D0D2 + hex D3D2D5D7C6C4D5D2C6CBC4D5CAC8C7C4 + hex D8D1D1C8D3D2DAD6D3D2D2D1D5D2D0C4 + hex D3D5C8C4D3D5C8D3D6C4CCCFDDD2D2D1 + hex CCD6D2D6D1D8D5D6CBC8D1C7DAD2D2C7 + hex C4CAD2D1D8D3D6D1CFC4D1C7C7CCD9D8 + hex D1CCC6CED0C4D6D7D3CCC6CED5D2CFCF + hex D2D8D7D6D6D3D2D7CEC4CFC4C4C6C6C8 + hex D7C8CFD2D5D8CFC4DAD2D5CECFC4D8C7 + hex CAD5C4CCD8D3CFC4D3D2CFD2D2C6D7D2 + hex D5C8D3C4C7C8D7C4C9C8CFC7D8D1C9D2 + hex C5C4C7CCD9C8CFCFD3C4D7CCC5C8C8C9 + hex D7CCD7C4D6C4D8C6D3D8D3CCD8D1D3D5 + hex D0C4D6D7C8D5D8D3D4D8C4D5C9C8CFC7 + hex CAD5CCC9D6CCC7C8DACBCCD7D8D1D1CC + hex C7D2DAD1CCD1D6D8D8D1CFCCCCD6D2D3 + hex D0D8C4C7A3C7CCC5 + +*--- Lignes + +Ligne = * + +]Ligne = $0 + lup 200 + da ]Ligne +]Ligne = ]Ligne+160 + --^