*--------------------------* * * * 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 --^