********************************* * * * AFFICHAGE DU PAYSAGE MURYADEN * * (C)1989 BY DECKARD * * * ********************************* * ; ORG $4000 ; SPMVT EQU $1D2F ; NBRE DE SPRITES EN MVT SPM EQU $1D33 ; DEBUT STOCKAGE DES SPRITES EN MVT SPMX EQU $1D97 ; " " " " COORD. X SPMY EQU $1DFB ; " " " " COORD. Y MULT EQU $1B1B ; MODULE MULTIPLICATION SPRITED EQU $1AB6 ; &SPRITE DIRECT CARTE2 EQU $4F00 ; DATA CARTE (RENCONTRES) CARTE1 EQU $52C2 ; DATA CARTE (SPRITES) CBT1 EQU $540E ; SPRITE BATEAU SUR CARTE SPRITE (DANS ILE) CBT2 EQU $5410 ; " " " " " " " " " (HORS ILE) COMPX EQU $08 COMPY EQU $19 CY EQU $17 CX EQU $18 X EQU $09 Y EQU $1A CH EQU $24 CV EQU $25 WAIT EQU $FCA8 POSITION EQU $FC22 ; ; INITIALISATION GAME0 JSR RAZMVT ; ANNULE LES SPRITES MOUVANTS ACTUELS LDA #$01 STA X STA Y ; LAISSE UNE PLACE POUR LE CADRE ; JSR CALCOU? ; ; DETERMINE X0 ; SEC TXA SBC #$C8 ; =200 STA X0+1 STA X0COP+1 TYA SBC #$00 STA X0+2 STA X0COP+2 ; ; AFFICHAGE ; LDA #$00 STA COMPY AFFIC1 LDA #$00 STA COMPX AFFIC2 LDX COMPX X0 LDA $FFFF,X ; LDA $????,X JSR BROUILL ; TEST BROUILLARD ; TEST SI MOBILE OU NON CMP #29 ; 1ER SPRITE MOBILE BPL MVT1 JMP FIN_MVT MVT1 CMP #59 ; DERNIER SPRITE (JEU 1) MOBILE+1 BMI MVT2 JMP FIN_MVT ; 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 COMPX LDX COMPX CPX #$05 ; ON REGARDE SI ON EST AU CENTRE BNE PACENTRE LDY COMPY CPY #$05 BNE PACENTRE ; ON EST AU CENTRE INC COMPX LDA #$0B STA X STA Y CLASSE LDA #33 ; SPRITE BONHOMME JSR SPRITED JMP AFFIC3 ; PACENTRE CPX #$0B ; EST-CE LA BORDURE DU CADRE? BEQ NEXTL ; AFFIC3 INC X ; REPLACE POUR SPRITE SUIVANT INC X DEC Y JMP AFFIC2 ; NEXTL INC COMPY ; PASSE A LA LIGNE DE SPRITES SUIVANTE LDY COMPY CPY #$0B ; EST-CE LA BORDURE DU CADRE BEQ FINCADRE ; LDA #$01 STA X ; REPOSITIONNE POUR CADRE INC Y ; ON DESCEND DE 1 CLC LDA X0+1 ; POSITIONNEMENT SUR LA CARTE (+39) ADC #$27 ; +39 STA X0+1 STA X0COP+1 LDA X0+2 ADC #$00 ; RETENUES STA X0+2 STA X0COP+2 JMP AFFIC1 ; ON REFAIT 1 LIGNE DE SPRITES ; FINCADRE RTS ; ; TEST BROUILLARD ; BROUILL BMI OKBROUIL RTS ; RETOUR CAR PAS DE BROUILLARD ; * ON VERIFIE QU'ON EST PAS DANS LA MINI FENETRE DU PERSO ; OKBROUIL JSR TESTPOS BCS NORM JMP CBROUIL NORM LDX COMPY JSR TESTPOS BCS NORM2 JMP CBROUIL ; NORM2 SBC #$80 ; AFFICHE SPRITE NORMAL (ON ENLEVE $80) LDY NATURE ; REGARDE NATURE LIEU. SI DONJON, ON POKE ; LA NOUVELLE VALEUR (DECOUVERTE) BNE PADONJON ; DONJON = 0 LDX COMPX X0COP STA $FFFF,X ; STA $????,X PADONJON RTS ; ; BROUILLARD COMPLET ; CBROUIL LDA #16 ; SPRITE VIDE COMPLET RTS ; ; ; TEST POSITION ; TESTPOS CPX #$04 BPL TESTPOS2 ; X>=4 CLC RTS ; TESTPOS2 CPX #$07 BMI TESTPOS3 ; X<7 CLC RTS TESTPOS3 SEC ; ON EST DANS LA FENETRE 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 ; ; +ADR DEBUT CARTE1 (SPRITES) ; CLC TXA ADC #CARTE1 TAY RTS ; ; *------------------------------------------------- ; ; MAIN PROG ; DECALAGE EQU $17FA CPTMUS EQU $19AD SOUNDD EQU $19CF ; SOUND DIRECT MUSICD EQU $1992 ; MUSIC DIRECT NOISED EQU $1A3D AD1 EQU $1A31 AD3 EQU $1A33 RDKEY EQU $FD0C OUTDO EQU $DB5C STROUT EQU $DB3A XCOPIE EQU $4C YCOPIE EQU $4D ; START LDA CMD CMP #2 ; COMBAT BNE START2 ; ON ETAIT EN COMBAT DEC SPMVT ; ON AFFICHE PLUS LE SPRITE MONSTRE DEC SPMVT ; NOTRE PERSO REDEVIENT IMMOBILE 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 A 100% LDA MONSTRE CMP #1 ; CYCLOPE BEQ GARDEPAS+1 CMP #10 ; MATRIARCHE BEQ GARDEPAS+1 CMP #17 ; FAMILIER BEQ GARDEPAS+1 CMP #16 ; LE NECROMANT BEQ GARDEPAS+1 LDY MONSTRE ; ON GARDE MONSTRE A 10% GARDEPAS DFB $2C ; BIT LDY #0 ; ON POKE 0 : 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 #$95 ; DROITE BNE MAIN1 ; FLECHE DROITE LDA #EST JSR STROUT LDX CX INX MAIN0 STX XCOPIE LDA CY STA YCOPIE JMP AA ; MAIN1 CMP #$88 ; OUEST BNE MAIN2 ; FLECHE GAUCHE LDA #OUEST JSR STROUT LDX CX DEX JMP MAIN0 ; MAIN2 CMP #$8B ; NORD BNE MAIN3 ; FLECHE HAUT LDA #NORD JSR STROUT LDY CY DEY MAIN00 STY YCOPIE LDA CX STA XCOPIE JMP AA ; MAIN3 CMP #$8A ; SUD BNE MAIN4 ; FLECHE BAS LDA #SUD JSR STROUT LDY CY INY JMP MAIN00 ; MAIN4 CMP #$D0 ; 'P' BNE MAIN5 JMP ENTRER ; MAIN5 CMP #$D1 ; 'Q' BNE MAIN6 JMP QUIT ; MAIN6 CMP #$C9 ; 'I' BNE MAIN7 JMP INVENTOR ; MAIN7 CMP #$D5 ; 'U' BNE MAIN8 JMP UTILISER ; MAIN8 CMP #$CC ; 'L' BNE MAIN9 JMP SORT ; MAIN9 CMP #$CA ; 'J' BNE MAIN10 JMP JETER ; MAIN10 CMP #$C5 ; 'E' BNE MAIN11 JMP EQUIPER ; MAIN11 CMP #$CF ; 'O' BNE MAIN12 JMP OUVRIR ; MAIN12 CMP #$CD ; 'M' BNE MAIN13 JMP BATEAU ; MAIN13 CMP #$D3 ; 'S' BNE MAIN14 JMP SAUVEJEU ; MAIN14 CMP #$C3 ; 'C' BNE MAIN? JMP CHERCHER ; MAIN? JMP WAITKEY ; ; ; CHERCHER ; CHERCHER LDA #SEEK JSR STROUT JSR HEREIS CMP #200 BMI CHERCHE? ; <200 CMP #204 BPL CHERCHE? ; >203 ; SEC SBC #199 ; NUMEROTES DE 1 A 4 STA DIVERS ; PHA LDA #TROUVE JSR STROUT PLA TAX DEX BNE CHERCHE2 ; CLEF LDA #CLEF JSR STROUT JMP FCHERCHE ; CHERCHE2 DEX BNE CHERCHE3 ; PARCHEMIN LDA #SCROLL JSR STROUT JMP FCHERCHE ; CHERCHE3 DEX BNE CHERCHE4 ; MURYADEN LDA #MURYADEN JSR STROUT JMP FCHERCHE ; PRINCESSE CHERCHE4 LDA #PRINCESS JSR STROUT ; FCHERCHE LDA #12 ; CMD=CHERCHER JMP GOBASIC ; CHERCHE? LDA #KEDAL JSR STROUT JMP START ; ; ENLEVOBJ LDA #22 JMP ICISPRIT ; ON MET LE SPRITE CADRE VIDE ; ; ; SAUVEGARDE SCENARIO ; SAUVEJEU LDA #SAVEGAME JSR STROUT LDA #11 JMP GOBASIC ; ; MONTER A BORD ; BATEAU LDA #EMBARK JSR STROUT JSR HEREIS CMP #204 BNE BATEAU2 ; ON QUITTE L'ILE JSR BATEAUP LDA #29 ; SUR CARTE: MER REMPLACE BATEAU (DEPART ILE) STA CBT1 INC CX JSR BATEAUP3 INC CX JSR BATEAUP3 LDA #32 ; SUR CARTE: BATEAU REMPLACE MER (DEPART ILE) STA CBT2 JMP BATEAUP2 ; BATEAU2 CMP #205 BNE BATEAU? ; ON VA DANS L'ILE JSR BATEAUP LDA #29 ; SUR CARTE: MER REMPLACE BATEAU (VA SUR ILE) STA CBT2 DEC CX JSR BATEAUP3 DEC CX JSR BATEAUP3 LDA #32 ; SUR CARTE: BATEAU REMPLACE MER (VA SUR ILE) STA CBT1 JMP BATEAUP2 ; BATEAU? JMP ENTRER8 ; MONTER OU? ; BATEAUP LDA #ABORD JSR STROUT LDA CLASSE+1 STA BATEAUP2+1 LDA #32 STA CLASSE+1 ; SPRITE BATEAU AU CENTRE DE L'ECRAN RTS ; BATEAUP2 LDA #$00 ; LDA #$?? STA CLASSE+1 ; ON REMET LE SPRITE DU PERSO AU CENTRE JSR GAME0 JMP START ; BATEAUP3 JSR RAZMVT JMP GAME0 ; RTS INCLU ; ; OUVRIR ; OUVRIR LDA #OPEN JSR STROUT JSR HEREIS BPL OUVRE? ; SI >0 AND #$7F ; -$80 CMP #82 BMI OUVRE? ; SI <210 CMP #91 BPL OUVRE? ; SI >218 ; SEC SBC #81 ; LES COFFRES SONT NUMEROTES DE 1 A 9 STA DIVERS ; LDA #COFFRE JSR STROUT LDA #10 JMP GOBASIC ; OUVRE? JMP QUIT4 ; OUVRIR QUOI? ; ; COFFRVID LDA #15 ; POKE COFFRE VIDE SUR CARTE1 JMP ICISPRIT ; ; ; EQUIPER ; EQUIPER LDA #EQUIP JSR STROUT LDA #9 JMP GOBASIC ; ; JETER OBJET ; JETER LDA #JETTE JSR STROUT LDA #8 JMP GOBASIC ; ; UTILISER OBJET ; UTILISER LDA #OBJET JSR STROUT LDA #6 JMP GOBASIC ; ; LANCER UN SORT ; SORT LDA #SPELL JSR STROUT LDA #7 JMP GOBASIC ; INVENTOR LDA #INVEN JSR STROUT LDA #5 JMP GOBASIC ; ; GOBASIC STA CMD JSR DECALAGE RTS ; ; ENTRER ; ENTRER LDA #ENTRE JSR STROUT JSR HEREIS CMP #240 BNE ENTRER1 ; BAR-TOLAINOR JSR MDANS LDA #TOLAINOR JSR STROUT LDA #2 ; VILLE 2 ENTRE0 LDX #3 ; CMD = 3 (VILLES/CHATEAU/DONJON) STA LIEU STX CMD JSR RAZMVT RTS ; ENTRER1 CMP #241 BNE ENTRER2 ; BAR-CALENLAD JSR MDANS LDA #CALENLAD JSR STROUT LDA #1 ; VILLE1 JMP ENTRE0 ; ENTRER2 CMP #242 BNE ENTRER3 ; ECHORKELIANT JSR MDANS LDA #ECHORKEL JSR STROUT LDA #3 JMP ENTRE0 ; ENTRER3 CMP #245 BNE ENTRER4 ; GONDARNOST JSR MDANS LDA #GONDARNO JSR STROUT LDA #4 JMP ENTRE0 ; ENTRER4 CMP #250 BNE ENTRER5 ; DONJON CYCLOPE JSR MDANS LDA #DONJON1 JSR STROUT LDY #32 ; POSITIONNEMENT LDX #20 LDA #5 JMP ENTRER7 ; ENTRER5 CMP #251 BNE ENTRER6 ; DONJON MATRIARCHE JSR MDANS LDA #DONJON2 JSR STROUT LDY #32 ; POSITIONNEMENT LDX #18 LDA #6 JMP ENTRER7 ; ENTRER6 CMP #252 BNE ENTRER8 ; DONJON NECROMANT JSR MDANS LDA #DONJON3 JSR STROUT LDY #32 LDX #19 LDA #7 JMP ENTRER7 ; ENTRER7 PHA LDA #0 ; DONJON STA NATURE PLA STX CX STY CY JMP ENTRE0 ; ; PAS DE:VILLE/CHATEAU/DONJON ; ENTRER8 LDA #OU JSR STROUT JMP START ; MDANS LDA #DANS JSR STROUT RTS ; ; ; QUITTER DONJON ; QUIT LDA #QUITTER JSR STROUT JSR HEREIS CMP #170 BNE QUIT2 ; QUITTER DONJON 1 LDA #4 STA NMAP ; ON SORT SUR LA CARTE 4 LDA #24 ; CX PHA LDA #14 ; CY PHA QUIT0 LDA #DJN JSR STROUT PLA ; RECUPERE COORDONNEES STA CY PLA STA CX LDA #4 STA CMD LDA #1 STA NATURE ; ON SORT DONC: NATURE EXTERIEURE (=1) RTS ; QUIT2 CMP #171 BNE QUIT3 ; QUITTER DONJON 2 LDA #2 STA NMAP ; ON REVIENT SUR LA CARTE 2 LDA #30 ; CX PHA LDA #24 ; CY PHA JMP QUIT0 ; QUIT3 CMP #172 BNE QUIT4 ; QUITTER DONJON 3 LDA #3 STA NMAP ; RETOUR SUR CARTE 3 LDA #18 ; CX PHA LDA #7 ; CY PHA JMP QUIT0 ; ; QUITTER QUOI ?? ; QUIT4 LDA #QUOI JSR STROUT JMP START ; 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 ; *------------------------------------------------- ; ; ON REGARDE LA NATURE DU LIEU OU ON ARRIVE ; AA JSR ENLEVE b LDA $FFFF ; LDA $???? BNE A1 ; AUCUN OBSTACLE JMP B ; A1 CMP #$FF ; =255 BNE A2 ; SOLIDE LDA #1 ; &MUSIC1,0,15 STA CPTMUS LDA #0 STA $EC NOP LDX #15 JSR MUSICD ; JSR DECALAGE LDA #IMPOSS JSR STROUT ; ?"IMPOSSIBLE" JMP D ; A2 CMP #$01 BPL A3 JMP COM A3 CMP #$79 BMI A4 JMP COM ; A4 STA COPYLIEU ; ; DETERMINE NOMBRE ALEATOIRE ; LDX FLAG? BNE ANNEX1 LDA $4E JMP FLGOK ANNEX1 DEX BNE ANNEX2 LDA $4F JMP FLGOK ANNEX2 SEC LDA $4E SBC $4F ; FLGOK TAX DEC FLAG? LDA FLAG? BPL FLGOK2 LDA #2 STA FLAG? FLGOK2 TXA ; ; NB ALEATOIRE COMPRIS ENTRE 0 ET 100 A6 BPL A5 ; SI >=0 AND #$7F A5 CMP #$65 ; =101 BMI A7 ; SI <101 (DONC SI <=100) ROR A CLC JMP A6 ; A7 STA PROBA LDX #$00 LDA COPYLIEU A8 CMP #31 BMI A9 ; SI <=30 ON A LE NUMERO DU MONSTRE SEC SBC #30 ; -30 INX JMP A8 ; A9 TAY SEC LDA POURCENT,X STA PCOMB ; SAUVE CE POURCENTAGE SBC PROBA BPL CCOMB ; COMBAT (PROBA<=POURCENTAGE) ; JMP A10 ; PAS DE COMBAT ; ; COMBAT ; %TAGE>=PROBA ALEATOIRE CCOMB STY MONSTRE TYA PHA ; NUMERO MONSTRE ; AFFICHE SPRITE MONSTRE LDA SPCOMBAT-1,Y PHA ; SAUVE LE SPRITE DU MONSTRE 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 STA X JMP AFF_SP ; ADROITE LDA #$0D STA X ; RETOUR BASIC AFF_SP PLA ; RECUPERE LE SPRITE DU MONSTRE PHA JSR MVTSTAT ; AJOUTE SPRITE (FAIT AUSSI AFFICHAGE) PLA JSR SPRITED ; ON FAIT BOUGER NOTRE PERSO AU CENTRE LDA #$0B STA X STA Y ; COORDONNES MILIEU ECRAN LDA CLASSE+1 ; NO SPRITE PERSO JSR MVTSTAT ; AJOUTE SPRITE ; NOP NOP JSR DECALAGE LDA #MCOMBAT JSR STROUT JSR DECALAGE ; DECLIC DEBUT COMBAT SOUNDCB LDY #$10 TYA JSR WAIT BIT $C030 DEY BNE SOUNDCB+2 ; PLA ; RECUPERE NUMERO BESTIOLE TAY DEY ; -1 POUR POINTER SUR TABLE TYA ASL A ; *2 POUR LA TABLE TAX LDA MTABLE,X ; HIGH TAY PHA ; SAUVE HIGH INX LDA MTABLE,X ; LOW PHA ; SAUVE LOW JSR STROUT JSR DECALAGE ; AFFICHE NOM MONSTRE DANS LE CADRE HAUT LDX #1 LDY #5 JSR WINDPOS ; PLA ; RECUPERE LOW TAX PLA ; RECUPERE HIGH TAY TXA JSR STROUT ; AFFICHE NOM ; ; REPOSITIONNE DANS FENETRE BAS LDX #0 LDY #23 JSR WINDPOS ; ; LDA #$02 ; = COMBAT STA CMD RTS ; WINDPOS STX CH STY CV JSR POSITION POSITIONNE DANS FENETRE RTS ; ; ; A10 JMP B ; AUCUN OBSTACLE (DONC MOUVEMENT NORMAL) ; * * SPRITES DES MONSTRES * ; SPCOMBAT DFB 48,54,51,45,57,37,38,42,41,43,46,37,43,35,52 DFB 35,39,55,58,53,40,43,51,56,34,47,36,44,49,50 ; CYCLOPE ASC "Le cyclope" dfb 0 ETTIN asc "Un ettin" dfb 0 MANTICOR asc "Une manticore" dfb 0 HARPIE asc "Une harpie" dfb 0 SAURE ASC "Un saure" dfb 0 ORQUE asc "Un orque" dfb 0 KOBOLD asc "Un kobold" dfb 0 SERPENT asc "Un serpent" dfb 0 RAT asc "Un rat" dfb 0 MATRIARC asc "La Matriarche" dfb 0 CHAMANE asc "Un chamane" dfb 0 TROLL asc "Un troll" dfb 0 OGRE asc "Un ogre" dfb 0 MAGE asc "Un mage" dfb 0 DIABLE asc "Un diablotin" dfb 0 NECROMAN asc "Le n{cromant" dfb 0 FAMILIER asc "Le familier" dfb 0 XORN asc "Un xorn" dfb 0 DEMON asc "Un d{mon" dfb 0 SPECTRE asc "Un spectre" dfb 0 ZOMBIE asc "Un zombie" dfb 0 GOLEM asc "Un golem" dfb 0 WYRM asc "Un wyrm" dfb 0 BALROG asc "Un balrog" dfb 0 BANDIT asc "Un bandit" dfb 0 BARBARE asc "Un barbare" dfb 0 PRETRE asc "Un pr~tre" dfb 0 ARAIGNEE asc "Une araign{e" dfb 0 MARCHAND asc "Un marchand" dfb 0 MERCENAI asc "Un mercenaire" dfb 0 MCOMBAT ASC "Une rencontre! " DFB 0 ; ; ; MTABLE DFB #>CYCLOPE,#ETTIN,#MANTICOR,#HARPIE,#SAURE,#ORQUE,#KOBOLD,#SERPENT,#RAT,#MATRIARC,#CHAMANE,#TROLL,#OGRE,#MAGE,#DIABLE,#NECROMAN,#FAMILIER,#XORN,#DEMON,#SPECTRE,#ZOMBIE,#GOLEM,#WYRM,#BALROG,#BANDIT,#BARBARE,#PRETRE,#ARAIGNEE,#MARCHAND,#MERCENAI,#CARTE2 STA b+2 ; HIGH TAY RTS ; *--------------------------------------------- ; ; MOUVEMENTS ; B JSR RAZMVT ; ANNULE LES SPRITES MOUVANTS ACTUELS LDA #1 ; &MUSIC1,1,5 STA CPTMUS LDA #1 STA $EC NOP 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 B0 LDA #$01 JSR MAP ; DETERMINE CARTE A CHARGER RTS ; B2 LDA #$05 ; ON CHANGE X, ON GARDE Y STA CX JMP B0 ; B3 LDA #$21 ; ON GARDE X, ON CHANGE Y STA CY B00 LDA #$00 JSR MAP RTS ; B4 LDA #$05 ; ON GARDE X, ON CHANGE Y STA CY JMP B00 ; ; TRANSFERT XCOPIE->X ET YCOPIE->Y C LDA XCOPIE STA CX LDA YCOPIE STA CY JSR GAME0 ; TELEP? DFB $2C ; BIT DFB #TELE ; TRAP? DFB $2C ; BIT DFB #PIEGE ; 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 ; E STA CMD JSR RETABLIR RTS ; ; ; 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 ; ; ; REMISE A ZERO DU NOMBRE DE SPRITES EN MVT ; RAZMVT LDA #0 STA SPMVT RTS ; ; ; DETERMINE LA CARTE A LOADER ; MAP BNE MAP1 ; NORD OU SUD LDX NMAP STX OMAP ; LA NEW MAP DEVIENT OLD MAP CPX #$03 BPL MAP2 ; SI NO MAP>=3 (MAP=MAP-2) ; INX ; MAP=MAP+2 INX MAP0 STX NMAP LDA #$01 ; CHARGEMENT CARTE JMP E ; MAP2 DEX ; MAP=MAP-2 DEX JMP MAP0 ; EST OU OUEST MAP1 LDX NMAP STX OMAP ; LA NEW MAP DEVIEN OLD MAP CPX #$02 BNE MAP3 ; MAP=MAP-1 MAP4 DEX JMP MAP0 ; MAP3 CPX #$04 BEQ MAP4 ; INX JMP MAP0 ; ; LES COMMENTAIRES ; CETRE EQU $58B3 COUIE EQU $58B4 CSPECIAL EQU $58B5 CSENTIR EQU $58B6 NBPAS EQU $58B7 ; NOMBRE DE PASSAGERS TABLECOM EQU $58C7 ; DEBUT DES ADR DE DEBUT DES COMMENTAIRES ; COM CMP #$8B BPL COM2 ; SI LIEU>=139 JMP TELEP0 COM2 CMP #$AA BMI COM3 ; SI LIEU<170 (DONC SI LIEU<=169) JMP TELEP0 ; ; OK COMMENTAIRES ; COM3 STA COPYLIEU ; SAUVEGARDE LIEU LDA #$20 ; REMPLACE LE BIT PAR LE JSR STA COM? JMP B ; ; F LDA #$2C ; REMET LE BIT A LA PLACE DU JSR STA COM? JSR DECALAGE ; ON DETERMINE LE NUMERO DU COMMANTAIRE LDA COPYLIEU SEC SBC #$8B ; -139 ( LE 1ER COMMENTAIRE A LE NB:0) STA COPYLIEU PHA ; ; TESTS POUR DETERMINER LE DEBUT DU COM. ; CMP CSENTIR BMI TESTCOM2 ; SI SENTIR ; ; ; PRINTCOM TESTCOM0 JSR STROUT PLA ; RECUPERE LE NO DU COMMENTAIRE CLC ASL ; ON MULTIPLIE PAR 2 PR POINTER L'ADR ADC #TABLECOM ADC #$00 STA $3D ; HIGH ; LDY #$00 LDA ($3C),Y ; CHARGE ADR LOW TAX INY LDA ($3C),Y ; CHARGE ADR HIGH TAY TXA ; RECUPERE ADR LOW JSR STROUT ; ; SUITE DES COMMENTAIRES JSR VERIFPAS ; VERIFICATION SI PASSAGER RTS ; TESTCOM2 CMP CSPECIAL BPL TESTCOM0+3 ; SI >=SPECIAL (ON SAUTE LE JSR STROUT) ; CMP COUIE BMI TESTCOM3 ; SI OUIE JMP TESTCOM0 ; TESTCOM3 CMP CETRE BMI TESTCOM4 ; SI ETRE JMP TESTCOM0 ; ; VOIR TESTCOM4 LDA #VOIR JMP TESTCOM0 ; ; VERIFICATION S'IL Y A DES COM PASSAGERS ; VERIFPAS JSR LDTERRIN STX d+1 ; RECUPERATION ADR LOW STY d+2 ; RECUPERATION ADR HIGH ; LDA NBPAS BNE PAS1 FINPAS RTS ; PAS DE PASSAGERS ; PAS1 LDX #$00 PAS2 LDA NBPAS+1,X ; NBPAS+1 = DEBUT DES PASSAGERS CMP COPYLIEU BEQ PAS3 ; CE N'EST PAS UN PASSAGER. SUIVANT? CPX NBPAS BEQ FINPAS INX JMP PAS2 ; NEXT ; ; SI C'EST UN PASSAGER ON POKE 0 PAS3 LDA #$00 d STA $FFFF ; STA $???? RTS ; ; TELEPORTATION ; TELEP0 CMP #206 BNE TEL2 LDA #9 ; NOUVELLES VALEURS DE CY,CX PHA LDA #21 PHA TELE00 LDA #$4C ; JMP STA TELEP? JMP B ; TELE LDA #$2C ; RETABLI LE BIT STA TELEP? JSR DECALAGE LDA #TELEPORT JSR STROUT ; AFFICHE FRANCHISSEMENT JSR SONTEL PLA ; RECUPERE NOUVELLES COORDONNEES STA CX PLA STA CY JSR GAME0 JSR SONTEL JMP START ; TEL2 CMP #207 BNE PIEGER LDA #6 ; NOUVELLES VALEURS DE CY,CX PHA LDA #16 PHA JMP TELE00 ; ; SONTEL LDA #200 ; SON TELEPORTATION (&SOUND200,10) STA AD1 LDA #20 STA AD3 JMP SOUNDD RTS ; ; PIEGER TAY ; SAUVE ACC AND #$7F ; -$80 CMP #62 BMI PORTECLE CMP #68 BPL PORTECLE ; ON TOMBE DANS UN PIEGE SEC SBC #61 ; RECUPERE LE NUMERO DU PIEGE STA DIVERS LDA #$4C ; JMP STA TRAP? JMP B ; ; POINT D'ARRIVEE DE PIEGE ; PIEGE LDA #$2C STA TRAP? ; RETABLIT LE BIT LDA #13 ; CMD=PIEGE JMP GOBASIC ; ; ; PORTE MATRIARCHE FERMEE A CLEF ; PORTECLE TYA CMP #189 BNE AUTRLIEU LDA #14 JMP GOBASIC ; OPENDOOR DEC CY ; ON PASSE PAR LA PORTE JSR GAME0 REMPLAS0 LDY #0 JSR MNORMAL RTS ; ; ; AUTRLIEU JMP B ; ; ; ; * 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 REMPLAS0 ; ET ON POKE 0 SUR CARTE2 RTS ; SAV GAME