ORG $4000 LST OFF ********************************* * * * AFFICHAGE PAYSAGE MURYADEN 2 * * (C)1989 BY DECKARD * * * ********************************* * BANK 2 LIB_DESCRIPT EQU $F000 ; DESCRIPTIF DE LA LIBRAIRIE SPRITE REF_BIT EQU $F00B ; BITS DE SOLIDITE/VISIBILITE CETRE EQU $F110 COUIE EQU $F111 CSPECIAL EQU $F112 CSENTIR EQU $F113 NBPAS EQU $F114 ; NOMBRE DE PASSAGERS NOIR_COM EQU $F124 ; NUMEROS DES COM VISIBLES DANS LE NOIR TABLECOM EQU $F133 ; DEBUT DES ADR DE DEBUT DES COMMENTAIRES ORDRE EQU $F880 CASES EQU $F8D1 KELPACK EQU $FB84 NOPACK EQU $FC74 MESSAGE EQU $FC87 ******************************** BUF_RDOS EQU $B200 ; UTILISE LE BUFFER RWTS DU RDOS ******************************** * RAM CARTEVAL EQU $1500 ; DATA CARTE (RENCONTRES) CARTESP EQU $18C2 ; DATA CARTE (SPRITES) DECALAGE EQU $92F MUSICD EQU $CEA ; MUSIC DIRECT CPTMUS EQU $D0A SOUNDD EQU $D2C ; SOUND DIRECT AD1 EQU $D93 AD3 EQU $D95 NOISED EQU $D9F SPRITED EQU $E2C ; &SPRITE DIRECT MULT EQU $E97 ; MODULE MULTIPLICATION SPCPT EQU $B14 ; INDICE DE SWAP SPMVT = SPCPT+1 ; NOMBRE DE SPRITES EN MVT SPM = SPCPT+2 ; DEBUT STOCKAGE DES SPRITES EN MVT SPMX = SPCPT+123 ; " " " " COORD. X SPMY = SPCPT+244 ; " " " " COORD. Y QUART EQU $33A NMAP = QUART+1 ; NO DE LA NOUVELLE CARTE (ICI CARTE 2) OMAP = QUART+2 ; OLD MAP (SERT POUR LE &DEL) MONSTRE = QUART+3 CMD = QUART+4 LIEU = QUART+5 COPYLIEU = QUART+6 PROBA = QUART+7 PCOMB = QUART+8 ; POURCENTAGE DE PRESENCE DU MONSTRE MBUTE = QUART+9 ; MONSTRE TUE=1/MONSTRE VIVANT=0 DIVERS = QUART+10 NATURE = QUART+11 POURCENT = QUART+12 SON EQU $1FF0 ; RAM SPECIAL ******************************** COMPX EQU $08 COMPY EQU $19 CY EQU $17 CX EQU $18 X EQU $09 Y EQU $1A CH EQU $24 CV EQU $25 XCOPIE EQU $4C YCOPIE EQU $4D ******************************** * ADR SYSTEME RDKEY EQU $FD0C OUTDO EQU $DB5C STROUT EQU $DB3A WAIT EQU $FCA8 POSITION EQU $FC22 MOVFM EQU $EAF9 RND EQU $EFAE INT EQU $EC23 FMULT EQU $E97F GETADR EQU $E752 LINPRT EQU $ED24 OUTSP EQU $DB57 LINNUM EQU $50 FAC EQU $9D PTRGET EQU $DFE3 CHECKCOM EQU $DEBE FRMNUM EQU $DD67 GETBYT EQU $E6F8 ******************************** * ADRESSE GESTION RAM AUXILIAIRE SWAP_AUX EQU $3A0 STRING EQU $349 ; DS 17,0 -> NOM DU MONSTRE VALS EQU $35A ; DS 70,0 -> CARACTERISTIQUES DU MONSTRE ******************************** AJ MAC INC ]1 BNE FAJ INC ]2 FAJ <<< ******************************** JMP START JMP GAME0 LST ON RETOUR_MONS0 JMP RETOUR_MONS JMP TRAVERSE ; FAIT PASSER LE BATEAU D'UN RIVE A L'AUTRE JMP IS_LUX? ; ON REGARDE SI LE LIEU EST ECLAIRE JMP ENLEVOBJ ; POKE LA VALEUR 191 POUR ANNULER L'OBJET JMP COFFRVID ; MET UN SPRITE DE COFFRE VIDE JMP QUITCHAOS ; SORTIE PAR TELEPORTATIN VERS L'EXTERIEUR JMP BACK_MACRO ; RECOPIE LIBRARY.MACRO EN RAM PRINC JMP REMPLAS191 JMP DOPIEGE JMP RAMTOBK JMP SORTQUIT JMP DOMARCH JMP OPENDOOR LST OFF JMP $FFFF LST ON CLASSE HEX 00 ; 0=SORCIER/1=PRETRE/2=GUERRIER/3=VOLEUR LUX? HEX 00 ; =0 SI LIEU NON ECLAIRE / =1 SI LIEU ECLAIRE MESS_LUX HEX 00 ; SI = 1 ON A DEJA ECRIT LE MESSAGE LUMIERE MVTMAX DFB 15 ; NBRE DE MVTS SANS RENCONTRE (15 MINIMUM) POISON_RND HEX 00 ; NOMBRE DE ROUNDS OU LE PERSO PERD -1 CPT_POISON HEX 00 ; NB DE ROUNDS EFFECTUES POINT_VIE HEX 00 ; POINTS DE VIE DU PERSO LUMIERE HEX 00 ; SI = 0 DANS DONJON -> ON NE VOIT PLUS MVTACT HEX 00 ; NBRE RESTANT DE MVT SANS AVOIR DE RENCONTRE PREMONITION HEX 00 ; NBR DE MOUVEMENTS OU LE MONSTRE OU PREVISIBLE DETECTION HEX 00 ; IDEM POUR PIEGES BRAVOURE HEX 00 ; POINT DE VIE SUPPLEMENTAIRES (SORT) RGN_RND HEX 00 ; NBRE DE ROUNDS OU LE PERSO REGENERE MAX_PV HEX 00 ; NBR DE POINTS DE VIE A NE PAS DEPASSER LST OFF HEX 00 HEX 00 HEX 00 HEX 00 HEX 00 HEX 00 HEX 00 SAVED_PACK HEX 00 ; SAUVEGARDE DU NUMERO PACK DERNIER COMBAT NAVIRE HEX 00 LST OFF START LDA CMD CMP #2 ; COMBAT BNE START2 ; ON ETAIT EN COMBAT JSR GAME0 ; DEGAGE LA BESTIOLE DE L'ECRAN LDA #0 STA CMD ; ON EST PLUS EN MODE COMBAT ; LDA MBUTE ; A-T-ON BUTER LE MONSTRE? CMP #1 BNE START2 ; ON A TUE LE MONSTRE LDA #0 STA MBUTE ; LDA PCOMB CMP #100 BNE START2 ; C'ETAIT UN MONSTRE UNIQUE A 100% LDA SAVED_PACK CMP #20 BMI GARDEPAS+1 CLC ; ON GARDE MONSTRE A 5% LDA SAVED_PACK ADC #80 TAY GARDEPAS DFB $2C ; BIT LDY #191 ; ON POKE 191 : PLUS DE MONSTRES ICI JSR MNORMAL ; ON MET UN NOUVEAU POURCENTAGE:10% START2 JSR DECALAGE LDA #$BE ; AFFICHE '>' JSR OUTDO WAITKEY JSR RDKEY ; ATTENTE TOUCHE CMP #0 ; AU CAS OU BEQ WAITKEY STA $EC LDY #0 WAITKEY2 LDA TOUCHES,Y BEQ WAITKEY ; COMMANDE INEXISTANTE CMP $EC ; CMP TOUCHE ENFONCEE BEQ OK_KEY INY BNE WAITKEY2 OK_KEY TYA ASL A ; *2 TAX LDA BRANCHE_OU,X ; LOW STA $EC INX LDA BRANCHE_OU,X ; HIGH STA $ED JMP ($00EC) TOUCHES DFB $95,$88,$8B,$8A,"P","Q","I","U" DFB "S","J","E","O",$9B,"C"," ","D","B",0 BRANCHE_OU DA MAIN1,MAIN2,MAIN3,MAIN4,ENTRER,QUIT DA INVENTOR,UTILISER,SORT,JETER,EQUIPER DA OUVRIR,SAUVEJEU,CHERCHER,LISTCAR DA MARCHAND,BRUITAGE ******************************** * TOUCHES ; FLECHE DROITE MAIN1 LDX #1 ; EST JSR PRINT_MESS LDX CX INX MAIN0 STX XCOPIE LDA CY STA YCOPIE JMP NEXTIS ; FLECHE GAUCHE MAIN2 LDX #2 ; OUEST JSR PRINT_MESS LDX CX DEX JMP MAIN0 ; FLECHE HAUT MAIN3 LDX #3 JSR PRINT_MESS LDY CY DEY MAIN00 STY YCOPIE LDA CX STA XCOPIE JMP NEXTIS ; FLECHE BAS MAIN4 LDX #4 ; SUD JSR PRINT_MESS LDY CY INY JMP MAIN00 ******************************** * CHERCHER CHERCHER LDX #42 ; SEEK JSR PRINT_MESS JSR HEREIS CMP #193 BMI CHERCHE? ; <193 CMP #198 BPL CHERCHE? ; >197 ; SEC SBC #192 ; NUMEROTES DE 1 A 5 STA DIVERS ; LDA #14 ; CMD=CHERCHER JMP GOBASIC CHERCHE? LDX #43 ; KEDAL JSR PRINT_MESS JMP START ******************************** * SAUVEGARDE SCENARIO SAUVEJEU LDX #41 ; SAVEGAME JSR PRINT_MESS LDA #13 JMP GOBASIC ******************************** * BRUITAGE BRUITAGE LDX #0 LDA SON BNE BRUIT2 INX BRUIT2 STX SON CPX #1 BNE BRUIT3 LDA #MSG_ON JMP BRUIT4 BRUIT3 LDA #MSG_OFF BRUIT4 JSR STROUT JMP START2 MSG_ON ASC "Bruitage ON"00 MSG_OFF ASC "Bruitage OFF"00 ******************************** * OUVRIR OUVRIR LDX #39 ; OPEN JSR PRINT_MESS LDA NATURE BEQ OUVRE? ; ON OUVRE RIEN EN EXTERIEUR JSR HEREIS BPL OUVRE? ; SI >0 AND #$7F ; -$80 CMP #106 BEQ GOCAVERNE CMP #117 BMI OUVRE? ; SI <117 CMP #127 BPL OUVRE? ; SI >126 ; SEC SBC #117 TAX LDA IN_CHEST,X ; NUMERO DE L'OBJET DANS LA LISTE STA DIVERS LDX #40 ; COFFRE JSR PRINT_MESS LDA #12 JMP GOBASIC OUVRE? JMP QUIT_QUOI ; OUVRIR QUOI? GOCAVERNE LDX #40 ; COFFRE JSR PRINT_MESS JSR DECALAGE LDA #TOBOGGAN JSR STROUT JSR HANDPASS LDA #8 ; NOUVELLE NATURE STA NATURE LDA #1 ; CARTE UNIQUE STA NMAP LDA #10 ; COORDONNEES DANS LA CAVERNE STA CY LDA #31 STA CX LDA #4 ; EQUIVALENT DU 'QUITTER' NORMAL JMP GOBASIC IN_CHEST DFB 128,129,92,98,120,104,18,105,64,49 TOBOGGAN ASC "Une trappe s'ouvre sous vospieds! Vous" ASC " glissez alors sur un toboggan!"00 ******************************** * EQUIPER EQUIPER LDX #38 ; EQUIP JSR PRINT_MESS LDA #9 JMP GOBASIC ******************************** * JETER OBJET JETER LDX #37 ; JETTE JSR PRINT_MESS LDA #8 JMP GOBASIC ******************************** * UTILISER OBJET UTILISER LDX #35 ; OBJET JSR PRINT_MESS LDA #6 JMP GOBASIC ******************************** * LANCER UN SORT SORT LDX #34 ; SPELL JSR PRINT_MESS LDA #7 JMP GOBASIC ******************************** * INVENTAIRE INVENTOR LDX #36 ; INVEN JSR PRINT_MESS LDA #5 JMP GOBASIC ******************************** * PENETRER DONJON/VILLE/VILLAGE/... ENTRER LDX #12 ; ENTRE JSR PRINT_MESS JSR HEREIS STA PEN+1 ; POUR TRAVERSE PHA LDA NATURE BEQ ENTREXT PLA ; PENETRE A PARTIR D'UN LIEU BPL ENTREROU AND #$7F CMP #94 BMI ENTREROU CMP #98 BPL ENTREAUTR SEC SBC #83 ; DE 11 A 14 BNE ENTRER4D ENTREROU LDX #13 JSR PRINT_MESS JMP START2 ENTREAUTR CMP #112 BMI ENTREROU CMP #116 BPL ENTREROU JMP GOTUNNEL ENTREXT PLA ; PENETRE A PARTIR DE L'EXTERIEUR BPL ENTREROU AND #$7F CMP #110 BMI ENTREROU CMP #116 BPL ENTRER4 ; ON RENTRE DANS UNE GUILDE DE NAVIGATEURS JSR MDANS LDX #49 ; PORT JSR PRINT_MESS LDA #10 JMP GOBASIC ENTRER4 SEC SBC #116 ; LIEU DE 0 A 10 ENTRER4D PHA JSR MDANS ; ENTRE DANS PLA PHA TAX LDA ENTRE_LIEU,X ; NUMERO DU MESSAGE TAX JSR PRINT_MESS PLA CMP #3 BEQ CAS_TEREBAND TAX JSR HANDPASS LDA NATURLIEU,X ; NOUVELLE NATURE STA NATURE LDA QUARTLIEU,X ; NEW NUMERO DE CARTE STA NMAP LDA LIEUX,X STA CX LDA LIEUY,X STA CY JSR RAZMVT LDA #3 ; CMD = 3 (VILLES/CHATEAU/DONJON) JMP GOBASIC CAS_TEREBAND JSR DECALAGE LDX #21 ; NO_ACCESS JSR PRINT_MESS JMP START2 MDANS LDX #15 ; DANS JSR PRINT_MESS RTS GOTUNNEL SEC SBC #112 PHA JSR MDANS LDA #TUNNEL JSR STROUT PLA TAX LDA NMAP STA OMAP LDA TMAP,X STA NMAP LDA XTUNNEL,X STA CX LDA YTUNNEL,X STA CY LDA #1 JMP GOBASIC ; SIMULE CHANGEMENT DE CARTE TUNNEL ASC "un tunnel"00 ENTRE_LIEU DFB 17,18,19,20,22,23,24,25,26,27,28,32,33,29,30 NATURLIEU DFB 10,11,12,0,2,3,4,5,13,14,15,16,9,6,7 QUARTLIEU DFB 3,4,3,0,1,1,1,3,3,1,1,1,1,1,1 LIEUX DFB 6,21,7,0,6,8,8,9,31,7,6,7,6,31,16 LIEUY DFB 22,31,15,0,18,20,7,32,31,18,23,6,18,6,32 TMAP DFB 1,4,2,1 XTUNNEL DFB 26,15,16,16 YTUNNEL DFB 7,14,14,19 ******************************** * QUITTER DONJON/CRYPTE/... QUIT LDX #6 ; QUITTER JSR PRINT_MESS JSR HEREIS BPL QUIT_QUOI AND #$7F CMP #85 BMI QUIT_QUOI CMP #94 BPL QUIT_QUOI SEC ; IL S'AGIT BIEN D'UNE ECHELLE SBC #85 ; DE 0 A 8 PHA PHA JSR DECALAGE PLA TAX LDA QUIT_LIEU,X TAX JSR PRINT_MESS PLA TAX QUITDJN3 JSR HANDPASS LDA QUITNATUR,X ; NOUVELLE NATURE STA NATURE LDA QUITQUART,X STA NMAP LDA QUITX,X STA CX LDA QUITY,X STA CY LDA #4 JMP GOBASIC QUIT_QUOI LDX #14 ; QUITTER QUOI?? JSR PRINT_MESS JMP START2 QUITDJN JSR DECALAGE LDX #0 QUITDJN4 LDA CANQUIT,X CMP #255 BEQ QUITDJN2 CMP NATURE BEQ QUITDJN3 INX BNE QUITDJN4 QUITDJN2 LDX #5 ; INPOSSIBLE JSR PRINT_MESS LDA #0 STA CMD RTS CANQUIT DFB 1,2,3,4,5,16,9,7,6,255 QUIT_LIEU DFB 20,22,23,24,25,32,33,30,29 QUITNATUR DFB 0,0,0,0,0,13,13,12,3 QUITQUART DFB 18,16,25,35,19,1,3,2,1 QUITX DFB 22,27,8,26,6,7,8,31,31 QUITY DFB 11,18,21,17,27,6,18,6,6 ******************************** * SORTIE DONJON PAR SORT SORTQUIT LDA NATURE CMP #10 BPL SORTQUIT3 ; >9 SORTQUIT2 JMP QUITDJN ; SORTIE IDEM ECHELLE SORTQUIT3 CMP #16 BEQ SORTQUIT2 JSR DECALAGE ; SORTIE VILLE (QUITTER O/N) JMP BYEBYE2 ******************************** * AFFICHAGE DES CARACTERISTIQUES LISTCAR LDA #CARAC_PERSO JSR STROUT LDA #19 JMP GOBASIC CARAC_PERSO ASC "Inspecter le personnage"00 ******************************** * TRANSACTION AVEC MARCHAND MARCHAND LDA #DISCUTER JSR STROUT JSR HEREIS BPL NOMAN AND #$7F CMP #53 BMI NOMAN CMP #63 BPL NOMAN SEC SBC #53 ; MARCHAND (0 A 9) STA DIVERS PHA SEC LDA NATURE SBC #10 ; 0 A 6 STA $EC LDA #10 ; *10 STA $ED JSR MULT CLC PLA ADC $EF ; LOW ASL A ; *2 POUR DA PHA LDA #YAMAN JSR STROUT PLA TAY ; VARIABLE PASSEE A SWAP LDX #6 JSR SWAP_AUX LDA #20 JMP GOBASIC NOMAN LDA #QUI? JSR STROUT JMP START2 DISCUTER ASC "Discuter avec "00 YAMAN ASC "un marchand"00 QUI? ASC "qui ???"00 *<><><><><><><><><><><><><><><><><><><><><><> ******************************** * CHERCHE LA VALEUR DE LA CASE OU ON EST HEREIS LDA CX STA XCOPIE LDA CY STA YCOPIE JSR ENLEVE STX HEREIS2+1 STY HEREIS2+2 HEREIS2 LDX $FFFF ; LDA $???? CHARGE JSR RETABLIR TXA ; LE TYPE DE TERRIN EST DANS L'ACC RTS ******************************** * NATURE DU LIEU OU ON VEUT ALLER NEXTIS JSR ENLEVE b LDA $FFFF ; LDA #$???? CMP #191 BNE A1 ; AUCUN OBSTACLE JMP OK_MOVE ; A1 CMP #$FF ; =255 BNE A2 ; SOLIDE LDA #1 ; &MUSIC1,0,15 STA CPTMUS LDA #0 STA $EC LDX #15 JSR MUSICD ; JSR DECALAGE LDX #5 JSR PRINT_MESS ; ?"IMPOSSIBLE" JMP D A2 CMP #0 BPL A3 ; SI >=0 TAX AND #$7F ; -$80 CMP #12 ; ET SI <140 BMI A4 JMP COM ; SUITE RECHERCHE AVEC COMMENTAIRES A4 TXA ; RETABLIT A3 STA COPYLIEU ; UNE RENCONTRE EST POSSIBLE ; ; DETERMINE NOMBRE ALEATOIRE ENTRE 0 ET 100 ; ALEA101 JSR RND1 LDA #PK101 JSR RNDFIN STA PROBA LDA COPYLIEU BMI C5P ; PACK 5 % SI NEGATIF CMP #100 BPL C5P ; PACK 5 % SI >=100 CMP #60 BPL C15P ; PACK 15 % SI >=60 CMP #20 BPL C100P ; PACK 100 % SI >=20 BMI A8 ; COMBAT CERTAIN (MONSTRE 100%) C5P SEC ; TROUVE LE NUMERO DE PACK (0 A 39) SBC #100 BPL A7 C15P SEC SBC #60 BPL A6 C100P SEC SBC #20 LDX #2 ; 100% HEX 2C ; BIT A6 LDX #1 ; 15% HEX 2C ; BIT A7 LDX #0 ; 5 % TAY ; SAUVE NUMERO PACK SEC LDA POURCENT,X STA PCOMB ; SAUVE CE POURCENTAGE SBC PROBA BPL CCOMB? ; COMBAT (PROBA<=POURCENTAGE) ; NO_COMB JMP A10 ; PAS DE COMBAT * COMBAT (POURCENTAGE>=PROBA ALEATOIRE) A8 LDX #100 ; MONSTRE A 100% (SANS PACK) STX PCOMB TAY STY SAVED_PACK STA $C084 ; LECTURE BK2 LDA NOPACK,Y ; CHARGE LE NUMERO DU MONSTRE STA $C081 JMP CCOMB CCOMB? LDA PCOMB ; SI C'EST UN PACK A 100% -> COMBAT CERTAIN CMP #100 BEQ CCOMB0? LDA MVTACT ; SINON ON REGARDE L'OCTET ROUTE CALME BNE NO_COMB ; LA DERNIERE RENCONTRE EST TROP FRAICHE CCOMB0? LDA MVTMAX ; COMBAT: ON REINITIALISE MVTACT STA MVTACT CCOMB0 STY $EC ; TRAITEMENT D'UN PACK LDA COPYLIEU ; SAUVE LE NUMERO DU PACK D'ORIGINE STA SAVED_PACK LDA #6 STA $ED JSR MULT ; NUMERO DE PACK*6 CLC LDA #KELPACK ADC $EE ; HIGH STA $ED JSR ALEA6 ; CHOISIT UN MONSTRE DU PACK TAY STA $C084 ; LECTURE BK2 LDA ($EC),Y ; NUMERO DU MONSTRE (LISTE COMPLETE) STA $C081 BPL CCOMB ; ON LE TIENT SEC ; C'EST UN NUMERO DE PACK SBC #140 ; ON LE MET DE 0 A 39 TAY BPL CCOMB0 ; ON REMET CA CCOMB STA MONSTRE PHA ; LE PLA EST EFFECTUE EN RAM AUX LDY NATURE ; ARGUMENT = NATURE DU LIEU LDX #2 ; CMD=2 -> COPIE LE MONSTRE JMP SWAP_AUX RETOUR_MONS JSR RETABLIR LDA CX CMP XCOPIE BNE HORIZ ; SOIT A GAUCHE SOIT A DROITE LDA #$0B STA X LDA CY ; SOIT EN HAUT SOIT EN BAS CMP YCOPIE BMI ENBAS ; MONSTRE EN HAUT LDA #$09 STA Y AFF_SP0 JMP AFF_SP ; MONSTRE EN BAS ENBAS LDA #$0D JMP AFF_SP0-2 HORIZ LDX #$0B STX Y CMP XCOPIE BMI ADROITE ; MONSTRE A GAUCHE LDA #9 HEX 2C ; ADROITE LDA #$0D STA X ; RETOUR BASIC AFF_SP LDA SPMVT ; ON VERIFIE QUE LE SOL EST INANIME BEQ GO_AFFSP ; PAS DE SPRITES ANIMES LDX #0 ; IL Y A DES SP ANIMES IS_MOVING LDA SPMX,X ; COMPARE LES X CMP X BNE BAD_SP LDA SPMY,X ; ET LES Y CMP Y BNE BAD_SP INX ; IL FAUT SUPPRIMER L'ANIMATION DU SOL CPX SPMVT BEQ VIDEF_SP ; SI C LE DERNIER ON SE CONTENTE DE LE VIDER DEX LDY SPMVT ; DETRUIT LE SP MOUVANT AFFICHE OU ON VA DEY ; METTRE LE MONSTRE. ON LE REMPLACE PAR LE LDA SPM,Y ; DERNIER SP DE LA LISTE STA SPM,X LDA SPMX,Y STA SPMX,X LDA SPMY,Y STA SPMY,X VIDEF_SP DEC SPMVT ; UN SPRITE DE MOINS JMP GO_AFFSP BAD_SP INX CPX SPMVT ; ON VERIFIE TOUTE LA LISTE BNE IS_MOVING ; BEQ=SOL IMMOBILE CAR HORS LISTE GO_AFFSP LDA VALS ; LE 1ER OCTET = NUMERO DU SPRITE JSR MVTSTAT ; AJOUTE SPRITE (FAIT AUSSI AFFICHAGE) LDA VALS JSR SPRITED ; ON FAIT BOUGER NOTRE PERSO AU CENTRE LDA #$0B STA X STA Y ; COORDONNES MILIEU ECRAN LDX #5 ; 1ER MONSTRE STA $C084 ; BK2 LECTURE LDA LIB_DESCRIPT,X STA $C081 ; ROM CLC ADC CLASSE JSR MVTSTAT ; AJOUTE SPRITE JSR DECALAGE LDX #0 ; MCOMBAT JSR PRINT_MESS JSR DECALAGE ; DECLIC DEBUT COMBAT SOUNDCB LDY #$10 TYA JSR WAIT BIT $C030 DEY BNE SOUNDCB+2 LDA #STRING JSR STROUT JSR DECALAGE ; AFFICHE NOM MONSTRE DANS LE CADRE HAUT LDX #1 LDY #5 JSR WINDPOS LDA #STRING JSR STROUT LDX #0 ; REPOSITIONNE EN BAS DE L'ECRAN LDY #23 JSR WINDPOS LDA #$02 ; = COMBAT STA CMD RTS ; WINDPOS STX CH STY CV JSR POSITION POSITIONNE DANS FENETRE RTS A10 JMP OK_MOVE ; AUCUN OBSTACLE (DONC MOUVEMENT NORMAL) *------------------------------------------ ; CHARGE LE TYPE DE TERRAIN LDTERRIN LDA YCOPIE STA $EC LDA #31 ; YCOPIE*31 STA $ED JSR MULT ; + XCOPIE CLC LDA $EF ADC XCOPIE TAX LDA $EE ADC #$00 ; RETENUE TAY ; + DEBUT 1ERE CARTE CLC TXA ADC #CARTEVAL STA b+2 ; HIGH TAY RTS ******************************** * * MOUVEMENTS OK_MOVE JSR RAZMVT ; ANNULE LES SPRITES MOUVANTS ACTUELS LDA MVTACT ; DECREMENTE QUE SI ON PEUT ENCORE EVITER BEQ OK_MOVEB ; LE MONSTRE DEC MVTACT ; UNE CHANCE DE MOINS D'EVITER UN MONSTRE OK_MOVEB LDA PREMONITION BEQ END_PREMO DEC PREMONITION END_PREMO LDA DETECTION BEQ END_DETEC DEC DETECTION END_DETEC LDA BRAVOURE BEQ END_BRAV DEC BRAVOURE BNE END_BRAV LDA POINT_VIE BPL END_BRAV JMP DEADMAN END_BRAV LDA RGN_RND BEQ FIN_RGN DEC RGN_RND LDA POINT_VIE ; ON REGARDE SI ON A DEJA TOUT RECUPERER CMP MAX_PV BPL FIN_RGN ; OUI INC POINT_VIE ; NON DONC PV+1 JSR NEWPV FIN_RGN LDA POISON_RND BEQ FIN_POISON ; LE PERSO N'EST PAS EMPOISONNE INC CPT_POISON LDA CPT_POISON CMP POISON_RND BPL PERD1 BMI FIN_POISON ; LE NBRE DE ROUND N'EST PAS ENCORE ATTEINT PERD1 LDA POINT_VIE ; ON REGARDE L'EFFET DU POISON SUR LES PV BEQ TRT_PV0 ; PV=0 BPL PERD2 ; PV>0 AND #$7F ; PV<0 DEVIENT PV PERDU>0 CMP BRAVOURE BPL CREVEPSN ; MORT CAR ON DOIT FAIRE PV=PV-1 ET |PV|>BRAVOR INC POINT_VIE ; PV=PV-1 (INC CAR NEGATIF) JMP PERD3 TRT_PV0 LDA #129 ; PV = -1 STA POINT_VIE LDA BRAVOURE CMP #1 BMI CREVEPSN BPL PERD3 CREVEPSN JSR DECALAGE LDX #48 ; AFFICHE LE POISON VOUS TERRASSE JSR PRINT_MESS JSR DECALAGE DEADMAN LDA #11 JMP GOBASIC ; MORT DUE AU POISON PERD2 DEC POINT_VIE ; PERD 1 POINT DE VIE JSR NEWPV ; EFFACE NBRE DE PV ET MET LE NOUVEAU PERD3 LDA #0 ; REINITIALISE LE COMPTEUR POISON STA CPT_POISON JSR DECALAGE LDX #47 ; AFFICHE LA PERTE JSR PRINT_MESS ; LOOSE1 FIN_POISON LDA LUMIERE BEQ BBIS ; PAS DE LUX ARTIFICIELLE DEC LUMIERE ; LA SOURCE DE LUX FAIBLIT (MEME SI LUX NAT) BNE BBIS LDA #0 STA MESS_LUX BBIS LDA #1 ; &MUSIC1,1,5 STA CPTMUS LDA #1 STA $EC LDX #15 JSR MUSICD ; COM? DFB $2C ; BIT OU JSR DFB #F JSR RETABLIR ; TESTS DE SORTIE DE LA CARTE DES SPRITES ; ; TESTS DE X LDA XCOPIE CMP #$05 BMI B1 ; SI X<5 (TOUCHE <-) CMP #$22 BPL B2 ; SI X>=34 (TOUCHE ->) ; ; TESTS DE Y LDA YCOPIE CMP #$05 BMI B3 ; SI Y<5 (FLECHE HAUT) CMP #$22 BPL B4 ; SI Y>=34 (FLECHE BAS) ; JMP C ; OK ON CONTINUE ; B1 LDA #$21 ; ON CHANGE X, ON GARDE Y STA CX ; X=33 LDX NMAP STX OMAP DEX MAP STX NMAP LDA #1 ; COMMANDE CHARGEMENT STA CMD JSR RETABLIR RTS ; B2 LDA #$05 ; ON CHANGE X, ON GARDE Y STA CX LDX NMAP STX OMAP INX JMP MAP ; B3 LDA #$21 ; ON GARDE X, ON CHANGE Y STA CY LDX NMAP STX OMAP LDA NATURE BNE NOT_EXT DEX ; EN EXTERIEUR ON FAIT NUMERO MAP-6 DEX DEX DEX NOT_EXT DEX ; SINON NUMERO-2 DEX JMP MAP ; B4 LDA #$05 ; ON GARDE X, ON CHANGE Y STA CY LDX NMAP STX OMAP LDA NATURE BNE NOT_EXT2 INX ; EN EXTERIEUR NUMERO MAP+6 INX INX INX NOT_EXT2 INX ; SINON NUMERO+2 INX JMP MAP ; ; TRANSFERT XCOPIE->X ET YCOPIE->Y C LDA XCOPIE STA CX LDA YCOPIE STA CY JSR GAME0 ; TELEP? DFB $2C ; BIT DA TELE ; TRAP? DFB $2C ; BIT DA PIEGE EXP? DFB $2C ; BIT DA EXPER MECHAOS? DFB $2C DA OUICHAOS OMB? DFB $2C DA OUIOMBRE JMP START ******************************** RETABLIR LDA XCOPIE CLC ADC #$04 STA XCOPIE LDA YCOPIE CLC ADC #$04 STA YCOPIE RTS ENLEVE LDA XCOPIE SEC SBC #$04 STA XCOPIE LDA YCOPIE SEC SBC #$04 STA YCOPIE JSR LDTERRIN RTS ******************************** D JSR RETABLIR JMP START ******************************** * ENLEVE LE 100% DU MONSTRE MNORMAL0 LDY #0 ; POUR LE CALL BASIC MNORMAL LDA b+1 STA MNORMAL2+1 LDA b+2 STA MNORMAL2+2 MNORMAL2 STY $FFFF ; STY $???? RTS ******************************** * GENERATEUR DE NOMBRE ALEATOIRE RND1 LDA #PK1 ; FLOTTANTE JSR MOVFM JSR RND ; EFFECTUE RND(1) RTS RNDFIN JSR FMULT ; ET ARG * FAC = FAC -> RND(1)*N JSR INT ; INT(RND(1)*N) JSR GETADR ; FAC -> ENTIER SUR 2 OCTETS DANS LINNUM LDA LINNUM ; LOW RTS * TIRE NOMBRE ENTRE 0 ET 5 ALEA6 JSR RND1 LDA #PK6 JSR RNDFIN RTS * NOMBRE PACKE PK1 HEX 8100000000 ; 1 PK6 HEX 8340000000 ; 6 PK101 HEX 874A000000 ; 101 ******************************** * REMISE A ZERO DU NOMBRE DE SPRITES EN MVT RAZMVT LDA #0 STA SPMVT STA SPCPT RTS ******************************** * COMMENTAIRES COM CMP #13 ; IL Y A EUT UN AND #$7F AVANT BPL COM2 ; SI LIEU>=13 JMP DOORS? COM2 CMP #53 BMI COM3 ; SI LIEU<53 (DONC SI LIEU<=52) JMP DOORS? ; OK COMMENTAIRES COM3 SEC SBC #13 ; -13 ( LE 1ER COMMENTAIRE A LE NB:0) STA COPYLIEU STA COM_PARE+1 LDA LUX? ; ON REGARDE S'IL Y A DE LA LUMIERE BNE COM3B ; OK ON Y VOIT LDA LUMIERE BNE COM3B ; SOURCE DE LUX ARTIFICIEL ; ON REGARDE SI LE MESSAGE PEUT ETRE PERCU STA $C084 ; LECTURE BK2 LDY #0 COM_PARE0 LDA NOIR_COM,Y CMP #255 BEQ NO_COM COM_PARE CMP #$FF ; NUMERO DU COMMENTAIRE BEQ COM3B ; LE COMMENTAIRE APPARAIT DANS LE NOIR INY BNE COM_PARE0 NO_COM STA $C081 ; ROM JMP OK_MOVE COM3B STA $C081 ; ROM LDA #$20 ; REMPLACE LE BIT PAR LE JSR STA COM? JMP OK_MOVE ; F LDA #$2C ; REMET LE BIT A LA PLACE DU JSR STA COM? JSR DECALAGE ; ON DETERMINE LE NUMERO DU COMMENTAIRE LDA COPYLIEU PHA STA $C084 ; LECTURE BK2 ; TESTS POUR DETERMINER LE DEBUT DU COM. CMP CSENTIR BMI TESTCOM2 ; SI TABLECOM ADC #0 STA $3D ; HIGH ; STA $C084 ; LECTURE BK2 LDY #0 LDA ($3C),Y ; LOW STA $EC INY LDA ($3C),Y ; HIGH STA $ED LDY #0 ; RECOPIE LE COMMENTAIRE EN BUF_RDOS RECOP_COM LDA ($EC),Y STA BUF_RDOS,Y BEQ RECOP_COM2 INY BNE RECOP_COM RECOP_COM2 LDA #BUF_RDOS STA $C081 ; ROM JSR STROUT ; SUITE DES COMMENTAIRES JSR VERIFPAS ; VERIFICATION SI PASSAGER RTS TESTCOM2 CMP CSPECIAL BPL TESTCOM00 ; SI >=SPECIAL (ON SAUTE LE JSR STROUT) ; CMP COUIE BMI TESTCOM3 ; SI FOUTLECAMP JSR STROUT JSR RDKEY CMP #"O" BEQ BYEBYE LDA #NON JSR STROUT JMP START2 BYEBYE LDA #OUI JSR STROUT BYEBYE2 SEC LDA NATURE SBC #10 TAX JSR HANDPASS LDA #0 STA NATURE ; ON RETOURNE TOUJOURS A L'EXTERIEUR LDA DEGAGECX,X ; NOUVELLES COORDONNEES STA CX LDA DEGAGECY,X STA CY LDA DEGAGEQUART,X STA NMAP LDA #18 JMP GOBASIC ******************************** * ON TOMBE DANS UN PIEGE PIEGER CMP #100 BMI TELEP0 CMP #106 BPL TELEP0 SEC SBC #99 ; RECUPERE LE NUMERO DU PIEGE (1 A 6) STA DIVERS LDA #$4C ; JMP STA TRAP? JMP OK_MOVE ; POINT D'ARRIVEE DE PIEGE PIEGE LDA #$2C STA TRAP? ; RETABLIT LE BIT LDA #15 ; CMD=PIEGE JMP GOBASIC ******************************** AUTRLIEU JMP OK_MOVE ; * * TELEPORTATION * TELEP0 CMP #107 BMI AUTRLIEU CMP #111 BPL AUTRLIEU CMP #110 BNE FCAS110 LDX NATURE BEQ AUTRLIEU FCAS110 SEC SBC #107 ; DE 0 A 4 TAX ; DETERMINE LES COORDONNEES D'ARRIVEE LDA CAVCY,X ; CY PHA LDA CAVCX,X ; CX PHA LDA #$4C ; JMP STA TELEP? JMP OK_MOVE TELE LDA #$2C ; RETABLI LE BIT STA TELEP? JSR DECALAGE LDX #11 ; TELEPORT JSR PRINT_MESS JSR SONTEL PLA ; RECUPERE NOUVELLES COORDONNEES STA CX PLA STA CY JSR GAME0 JSR SONTEL JMP START SONTEL LDA #200 ; SON TELEPORTATION (&SOUND200,10) STA AD1 LDA #20 STA AD3 JMP SOUNDD RTS CAVCX DFB 7,7,32,31 CAVCY DFB 31,18,19,10 ******************************** HANDPASS LDA NATURE ; SAUVE LA NATURE ACTUELLE STA QUART LDA NMAP ; SAUVE NUMERO MAP ACTUELLE STA OMAP RTS ******************************** * PASSE PAR LES PORTES SPECIALES OPENDOOR LDA DIVERS ; LE NO DE PORTE EST CONSERVE CMP #4 BEQ OPEN1 CMP #6 BEQ OPEN1 CMP #5 BEQ OPEN2 INC CY DFB $2C ; BIT OPEN1 INC CX DFB $2C ; BIT OPEN2 DEC CY JSR GAME0 REMPLAS191 LDY #191 ; AUCUN OBSTACLE JSR MNORMAL RTS ******************************** * ECRIT UN NOUVEAU SPRITE SUR LA CARTE1 A * L'ENDROIT OU ON EST ; ICISPRIT PHA ; MET DE COTE LA VALEUR A POKER JSR CALCOU? STX ICISP2+1 STY ICISP2+2 PLA ; RECUPERE LA VALEUR ICISP2 STA $FFFF ; STA $???? JSR REMPLAS191 ; ET ON POKE 191 SUR CARTE2 RTS ******************************** GOBASIC STA CMD JSR DECALAGE RTS ******************************** ENLEVOBJ LDA #1 JMP ICISPRIT ; ON MET LE SPRITE CADRE VIDE ******************************** COFFRVID JSR HEREIS CMP #245 ; FRIC 1 DANS PETIT COFFRE BEQ COFFRVID2 LDA #6 ; POKE COFFRE VIDE SUR CARTE1 HEX 2C ; BIT COFFRVID2 LDA #7 ; PETIT COFFRE VIDE JMP ICISPRIT ******************************** TRAVERSE LDA #0 STA CPT_NAVIRE PEN LDA #$FF ; NUMERO DU PORT AND #$7F CMP #113 BPL TRAVG INC CX ; ON SE PLACE SUR LE PONT TRAVD LDX CPT_NAVIRE ; VA VERS LA DROITE LDA NAVIRED,X STA NAVIRE JSR RAZMVT JSR GAME0 INC CX INC CPT_NAVIRE LDA CPT_NAVIRE CMP #4 BNE TRAVD BEQ END_TRAVERSE TRAVG DEC CX ; SUR LE PONT TRAVG2 LDX CPT_NAVIRE ; VA VERS LA GAUCHE LDA NAVIREG,X STA NAVIRE JSR RAZMVT JSR GAME0 DEC CX INC CPT_NAVIRE LDA CPT_NAVIRE CMP #4 BNE TRAVG2 END_TRAVERSE LDA #0 ; ON QUITTE LE BATEAU STA NAVIRE JSR RAZMVT JSR GAME0 RTS NAVIRED DFB 55,71,78,55 NAVIREG DFB 57,73,80,57 CPT_NAVIRE HEX 00 ******************************** * TELEPORTATION VERS L'EXTERIEUR APRES BLABLA QUITCHAOS LDX #1 ; SIMULE DEPART D'ILMLOKINI JMP QUITDJN3 ******************************** * RETABLI LIBRARY.MACROS2 BACK_MACRO LDX #4 ; CMD = 4 -> RECOPIE LIBRARIE.MACROS2 EN PRINC JMP SWAP_AUX ******************************** * TRAITEMENT D'UN PIEGE DOPIEGE JSR GETBYT ; LECTURE INDICE DEX TXA PHA ; INDICE-1 ASL A PHA ; (INDICE-1)*2 JSR CHECKCOM JSR PTRGET LDY #1 ; FAIT LE NOM PLA ; RECUPERE (INDICE-1)*2 TAX LDA PI0,X ; ADR LOW STA ($83),Y INX INY LDA PI0,X ; ADR HIGH STA ($83),Y PLA ; RECUPERE INDICE-1 TAX LDY #0 ; FAIT LA LONGUEUR LDA LGPI,X STA ($83),Y TXA ; FAIT LES VALEURS ASL A ASL A STA $ED ; (INDICE-1)*4 LDA #0 STA $EC DOPIEGE2 JSR CHECKCOM JSR PTRGET LDX $ED LDA DATAPI,X LDY #1 STA ($83),Y ; LOW DEY TYA ; HIGH=0 STA ($83),Y INC $ED ; VALEUR SUIVANTE DU PIEGE SELECTIONNE INC $EC LDA $EC CMP #4 BNE DOPIEGE2 RTS PI0 DA PI1,PI2,PI3,PI4,PI5,PI6 PI1 ASC 'Une fosse'00 PI2 ASC 'Un pi}ge @ feu'00 PI3 ASC 'Un pi}ge @ loup'00 PI4 ASC 'Des dards'00 PI5 ASC 'Des gaz nocifs'00 PI6 ASC 'Un bloc broyeur'00 LGPI DFB 9,14,15,9,14,15 DATAPI HEX 0C0A0A08 ; PIEGE 1 HEX 0A0C0C0A ; PIEGE 2 HEX 0C0A0C06 ; PIEGE 3 HEX 0A0A0E06 ; PIEGE 4 HEX 0F0F0A0A ; PIEGE 5 HEX 0A0C0C0F ; PIEGE 6 ******************************** * RECOPIE RAM EN BK2 RAMTOBK LDA #<$900 ; ZONE A RECOPIER STA $EE LDA #>$900 STA $EF LDX $EC DEX BEQ BKD000 DEX BEQ BKE000 BKF000 LDA #<$0880 ; IL FAUT VERIFIER LE LOW LDX #>$F000 LDY #>$F000+$0880 BNE DOBK BKE000 LDA #0 LDX #>$E000 LDY #>$E000+$1000 BNE DOBK BKD000 LDA #0 LDX #>$D000 LDY #>$D000+$1000 DOBK STX $ED LDX #0 ; LOW TOUJOURS NUL STX $EC STY DOBKHMAX+1 STA DOBKLMAX+1 LDA $C083 ; BK2 LDA $C083 DOBK2 LDY #0 LDA ($EE),Y STA ($EC),Y AJ $EE ;$EF AJ $EC ;$ED LDA $EC DOBKLMAX CMP #$FF ; CMP LOWMAX BNE DOBK2 LDA $ED DOBKHMAX CMP #$FF ; CMP HIGHMAX BNE DOBK2 STA $C081 ; ROM RTS ******************************** DOMARCH LDA #0 STA $EC ; COMPTEUR DE VARIABLES DOMARCH2 JSR PTRGET LDY #1 LDX $EC LDA VALS,X ; NBRE D'OBJETS STA ($83),Y ; - DEY TYA STA ($83),Y ; +=0 INC $EC INX CPX #11 ; NBRE D'OBJ+LES 10 OBJETS POSSIBLES BEQ DOMARCH3 JSR CHECKCOM JMP DOMARCH2 DOMARCH3 RTS ******************************** * LIEU OU IL N'Y A PAS DE LUMIERE WHERENO_LUX DFB 2,4,5,6,7,8,9,255 IS_LUX? LDX #0 IS_LUX2? LDA WHERENO_LUX,X CMP #255 ; FIN DE LA LISTE BEQ IS_LUX ; DONC IL Y A DE LA LUMIERE CMP NATURE BEQ IS_NO_LUX ; NATURE EST DANS LA LISTE DONC PAS DE LUX INX BNE IS_LUX2? IS_LUX LDA #1 ; LIEU ECLAIRE HEX 2C IS_NO_LUX LDA #0 ; LIEU DANS L'OMBRE STA LUX? LDA #0 ; INITIALISE L'AFFICHAGE DU MESSAGE STA MESS_LUX RTS * AFFICHE LES PV DANS LA FENETRE HAUTE NEWPV JSR CLEARPV LDA #0 ; AFFICHE LA NOUVELLE VALEUR DES PV LDX POINT_VIE JSR LINPRT NEWPV2 LDX #0 ; REPOSITIONNE EN BAS DE L'ECRAN LDY #23 JSR WINDPOS RTS CLEARPV LDX #5 LDY #2 JSR WINDPOS JSR OUTSP ; AFFICHE 3 ESPACES JSR OUTSP JSR OUTSP LDX #5 LDY #2 JSR WINDPOS RTS ******************************** * AFFICHE LE MESSAGE X (0 A ??) PRINT_MESS TXA ; ON SE POSITIONNE SUR L'ADRESSE ASL A ; X*2 CLC ADC #MESSAGE ADC #0 STA $ED LDA $C083 ; BK2 LDA $C083 LDY #0 ; LECTURE DE L'ADRESSE LDA ($EC),Y ; LOW STA $EE INY LDA ($EC),Y ; HIGH STA $EF LDY #0 ; RECOPIE LE MESSAGE DANS BUF_RDOS PRINT_MESS2 LDA ($EE),Y STA BUF_RDOS,Y BEQ END_PMESS INY BNE PRINT_MESS2 END_PMESS STA $C081 ; ROM LDA #BUF_RDOS JSR STROUT RTS ************************************************ ; INITIALISATION GAME0 JSR RAZMVT ; ANNULE LES SPRITES MOUVANTS ACTUELS LDA #$01 STA X STA Y ; LAISSE UNE PLACE POUR LE CADRE ; LDA LUX? BNE YA_LUM ; IL Y A DE LA LUMIERE NATURELLE DANS CE LIEU LDA LUMIERE ; PAS DE LUMIERE NATURELLE BNE YA_LUM ; IL Y A DE LA LUMIERE ARTIFICIELLE LDA MESS_LUX BNE NOLUX0 ; MESSAGE DEJA AFFICHE JSR DECALAGE LDX #46 ; NO_LUX JSR PRINT_MESS LDA #1 ; SIGNALE L'AFFICHAGE STA MESS_LUX STA X STA Y ; LAISSE UNE PLACE POUR LE CADRE NOLUX0 LDX #0 ; ON N'AFFICHE QUE DES CASES VIDES TXA IS_NO_LUX2 STA WORK_TABLE,X INX CPX #121 BNE IS_NO_LUX2 JMP FIN_OMBRE ; ON AFFICHE LES VIDES ; IL Y A DE LA LUMIERE YA_LUM JSR CALCOU? ; EXTRACTION DE LA CARTE DES SPRITES SEC TXA SBC #200 STA $EE TYA SBC #0 STA $EF LDX #0 STX CPTBCL BCL1 LDY #0 BCL2 LDA ($EE),Y STA WORK_TABLE,X INX INY CPY #11 BNE BCL2 INC CPTBCL LDA CPTBCL CMP #11 BEQ END_EXTRACT CLC LDA $EE ADC #39 STA $EE LDA $EF ADC #0 STA $EF JMP BCL1 * BOUCLE EFFECTUANT L'EFFET D'OMBRE * 0000000B -> B=BIT DE VISIBILITE * 0 = NE CACHE PAS ET 1 = CACHE END_EXTRACT LDX #0 STX $EE OMBRE STA $C084 ; LECTURE BK2 LDA ORDRE,X ; POSITION A TRAITER STA $C081 BEQ FIN_OMBRE ; FIN DE LA LISTE TAX ; DEVIENT INDICE LDA WORK_TABLE,X ; CHARGE LE NUMERO DE SPRITE BEQ NEXTSP ; SPRITE DU VIDE ; LE SPRITE EST VISIBLE TAY STA $C084 ; LECTURE BK2 LDA REF_BIT,Y ; ON REGARDE LE BIT DE VISIBILITE STA $C081 ; ROM LSR A BCC NEXTSP ; LE SPRITE PEUT EN CACHER D'AUTRES TXA SEC ; DETERMINE LA TABLE DES CASES SBC #12 ; PAS PERDRE DE PLACE ASL A ; *2 (DA OBLIGE) CLC ; +DEBUT TABLE ADRESSE ADC #CASES ADC #0 TAY ; HIGH JSR CACHER ; MET DES VIDES SUR LES SPRITES DERRIERE NEXTSP INC $EE LDX $EE JMP OMBRE ; MET A BLANC CACHER STX $EC ; TROUVE ADR DEBUT CASES A EFFACER STY $ED LDA $C083 ; BK2 LDA $C083 LDY #0 LDA ($EC),Y STA CACHER2+1 INY LDA ($EC),Y STA CACHER2+2 LDX #0 CACHER2 LDA $FFFF,X ; LDA CASE?,X CMP #$FF BEQ FIN_CACHER TAY LDA #0 ; VIDE STA WORK_TABLE,Y INX BNE CACHER2 FIN_CACHER STA $C081 RTS CPTBCL HEX 00 * AFFICHE LES SPRITES SUR L'ECRAN FIN_OMBRE LDA #0 STA COMPY ; COMPTEUR LECTURE WORK_TABLE AFFIC1 LDA #$00 STA COMPX ; COMPTEUR DE CHANGEMENT DE LIGNE AFFIC2 LDY COMPY LDA WORK_TABLE,Y JSR IS_ANIM? BCC FIN_MVT ; PAS D'ANIM ; C'EST UN SPRITE MOBILE MVT2 PHA ; SAUVE NUMERO SPRITE JSR MVTSTAT ; SIGNALE LE SPRITE A AFFICHER PLA ; RECUPERE NUMERO SPRITE POUR AFFICHAGE ; FIN_MVT JSR SPRITED ; SPRITE DIRECT INC COMPY INC COMPX LDX COMPY ; ON REGARDE SI ON EST AU CENTRE CPX #60 BNE PACENTRE ; ON EST AU CENTRE INC COMPY INC COMPX LDA #11 STA X STA Y LDA NAVIRE BEQ NOT_NAVIRE JMP IS_NAVIRE ; ACC CONTIENT LE NUMERO DU SPRITE NOT_NAVIRE LDX #5 STA $C084 ; BK2 LECTURE LDA LIB_DESCRIPT,X ; SPRITE BONHOMME STA $C081 ; ROM CLC ADC CLASSE IS_NAVIRE JSR SPRITED JMP AFFIC3 PACENTRE LDX COMPX CPX #11 ; EST-CE LA BORDURE DU CADRE? BEQ NEXTL ; AFFIC3 INC X ; REPLACE POUR SPRITE SUIVANT INC X DEC Y JMP AFFIC2 ; ; PASSE A LA LIGNE DE SPRITES SUIVANTE NEXTL LDY COMPY CPY #121 ; EST-CE LA BORDURE DU CADRE BEQ FINCADRE ; LDA #$01 STA X ; REPOSITIONNE POUR CADRE INC Y ; ON DESCEND DE 1 JMP AFFIC1 ; ON REFAIT 1 LIGNE DE SPRITES ; FINCADRE RTS ******************************** IS_ANIM? STA $C084 ; LECTURE BK2 TAY ; PREND LE NUMERO SPRITE EN INDICE LDA REF_BIT,Y STA $C081 ; ROM LSR A ; ON REGARDE SI SPRITE ANIME LSR A LSR A ; REPONSE IN CARRY TYA ; RECUPERE NUMERO SPRITE RTS ******************************** * SAUVE DONNEES POUR SPRITE MOUVANT MVTSTAT LDX SPMVT STA SPM,X ; SAUVE NUMERO SPRITE LDA X STA SPMX,X ; SAUVE COORD. X LDA Y STA SPMY,X ; SAUVE COORD. Y INC SPMVT ; 1 SPRITE MOUVANT EN PLUS RTS ******************************** * CALCUL POSITION DU BONHOMME SUR LA CARTE DES SPRITES CALCOU? LDA CY ; DETERMINE XP STA $EC LDA #39 STA $ED JSR MULT ; CY*39 CLC LDA $EF ; (-) ADC CX TAX LDA $EE ; (+) ADC #$00 ; RETENUES TAY CLC ; +ADR DEBUT CARTESP TXA ADC #CARTESP TAY RTS ******************************** * TABLE CONTENANT LES SPRITES A AFFICHER SUR ECRAN WORK_TABLE DS 121,0 ; 11*11 SAV GAME2