123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538 |
- * ANIMATE.S THE MS PAC MAN ANIMATIONS
- * START THE ANIMATIONS
- ANIMATE STA ANWHICH ;STORE WHICH ANIMATION
- JSR CLEARTUN
- JSR CLRSCRN ;TURN OFF INDICATORS
- PFILL SCREEN,#$00,#$04 ;ERASE SCREEN
- * JSR LOADDLST ;RE-LOAD DISPLAY LIST
- LDA #WHITE ;SET UP COLOR FOR WORDS
- LDY #$18
- ANLOOP0 STA P0C3,Y
- DEY
- DEY
- DEY
- DEY
- BPL ANLOOP0
- JSR BARSOFF ;GET BLACK BARS OFF THE SCREEN
- JSR ANITUNE ;START TUNE
- JSR ANIWORDS ;PUT UP ACT
- PFILL SCREEN,#$00,#$04 ;ERASE SCREEN
- LDX ANWHICH
- LDA ANASTART,X ;GET OFFSET INTO ANIMATION DATA
- STA ANAOFF
- LDA ANSSTART,X ;GET OFFSET INTO SEGMENT DATA
- STA ANSOFF
- LDA ANFRAMES,X ;GET NUMBER OF FRAMES PER TIC
- STA ANFRM
- JSR ANINEXT ;DO ANIMATION
- ABOGLOOP JSR SEEBNORM
- LDA TUNON ;MAKE SURE TUNE OVER
- BNE ABOGLOOP
- RTS
- * START THE ANIMATION TUNE
- ANITUNE LDX ANWHICH
- LDA TUNE1,X
- JSR DOTUNE
- LDA TUNE2,X
- JMP DOTUNE
- * PUT THE INITIAL MESSAGE UP
- ANIWORDS LDA ANWHICH
- CLC
- ADC #$1B
- TAY
- JSR WRTMESG ;WRITE THE ACT NUMBER
- LDA ANWHICH
- CLC
- ADC #$1E
- TAY
- JSR WRTMESG ;WRITE THE MESSAGE
- LDX #$02 ;SET UP BASE OF CLAPBOARD
- AWLOOP2 LDA ACTBASH,X
- STA HPLIST+3,X
- LDA ACTBASV,X
- JSR VTOZO
- STA VOLIST+3,X
- TYA
- STA VZLIST+3,X
- LDA ACTBASSL,X
- STA SLLIST+3,X
- LDA ACTBASSH,X
- STA SHLIST+3,X
- STA DOLIST+3,X
- DEX
- BPL AWLOOP2
- JSR AWUPSTMP ;WRITE UP CLAPBOARD
- LDA #$40 ;DO A LITTLE WAIT
- JSR AWWAIT
- JSR AWDNSTMP ;WRITE DOWN CLAPBOARD
- LDA #$10 ;DO A LITTLE WAIT
- JSR AWWAIT
- JSR AWUPSTMP ;WRITE UP CLAPBOARD
- LDA #$30 ;DO A LITTLE WAIT
- JSR AWWAIT
- RTS
- * WAIT A BIT - VALUE OF RTLOCAL+1 IN A
- AWWAIT CLC ;ADD IT TO PRESENT TIME
- ADC RTLOCAL+1
- STA TEMP16
- AWWLOOP JSR SEEBNORM ;SEE IF ANYTHING TO DO
- LDA TEMP16 ;SEE IF DONE YET
- CMP RTLOCAL+1
- BPL AWWLOOP
- RTS
- * SET UP STAMPS FOR UP CLAPBOARD
- AWUPSTMP LDX #$02 ;SET UP BASE OF CLAPBOARD
- AULOOP LDA ACTUPH,X
- STA HPLIST,X
- LDA ACTUPV,X
- JSR VTOZO
- STA VOLIST,X
- TYA
- STA VZLIST,X
- LDA ACTUPSL,X
- STA SLLIST,X
- LDA ACTUPSH,X
- STA SHLIST,X
- STA DOLIST,X
- DEX
- BPL AULOOP
- RTS
- * SET UP STAMPS FOR DOWN CLAPBOARD
- AWDNSTMP LDX #$02 ;SET UP BASE OF CLAPBOARD
- ADLOOP LDA ACTDNH,X
- STA HPLIST,X
- LDA ACTDNV,X
- JSR VTOZO
- STA VOLIST,X
- TYA
- STA VZLIST,X
- LDA ACTDNSL,X
- STA SLLIST,X
- LDA ACTDNSH,X
- STA SHLIST,X
- STA DOLIST,X
- DEX
- BPL ADLOOP
- RTS
- * SET UP THE STATE FOR AN ANIMATION SEGMENT AND DO IT
- ANINEXT JSR ANICLEAR ;CLEAR THE OLD ANIMATIONS
- LDX ANAOFF ;LOAD IN A SET OF ANIMATIONS
- INC ANAOFF
- LDA ANCHARS,X ;NUMBER TO SET UP THIS TIME
- BNE ANCONT
- RTS ;ALL DONE
- ANCONT STA TEMP0
- LDA ANTICS,X ;SEE HOW MANY TICS TILL NEXT SEGMENT
- STA ANCOUNT
- LDA #$00 ;WILL USE ANSTATE FOR WHICH CHAR SLOT
- STA ANSTATE
- ANLOOP LDY ANSOFF ;Y IS OFFSET INTO SEGMENT DATA
- LDX ANSTATE ;X IS WHAT CHARACTER SLOT WE DEAL WITH
- LDA #$01
- STA A0ENABLE,X ;TURN THIS ONE ON
- LDA ANIHPOS,Y ;STORE THE STAMP INFO
- BEQ ANLJMP0 ;IF 0 - LEAVE CURRENT HPOS
- STA HPLIST,X
- ANLJMP0 LDA ANIVPOS,Y
- BEQ ANLJMP1 ;IF 0 - LEAVE CURRENT VPOS
- STA A0VPOS,X ;STORE VPOS
- ANLJMP1 LDA ANICHAR,Y ;STORE STARTING CHARACTER
- STA A0CHAR,X
- LDA ANIHPDIF,Y ;STORE WHERE DELTAS TO POSITION ARE
- STA A0HPDIF,X
- LDA ANIVPDIF,Y
- STA A0VPDIF,X
- LDA ANIANDIF,Y ;AND ANIMATION SEQUENCE
- STA A0ANDIF,X
- LDA ANIPALET,Y ;SET COLORS
- TAY ;Y IS NOW OFFSET INTO PALETTE INFO
- TXA ;SET X TO 4*CHAR NUMBER
- ASL A ; THUS, INDEX INTO PALETTES
- ASL A
- TAX
- LDA ANPALET1,Y
- STA P1C1,X
- LDA ANPALET2,Y
- STA P1C2,X
- LDA ANPALET3,Y
- STA P1C3,X
- INC ANSTATE ;UPDATE STATE VARIABLES
- INC ANSOFF
- DEC TEMP0
- BNE ANLOOP
- JSR CHRCLEAR ;CLEAR SCREEN
- LDA #$07
- STA ANSTATE ;THIS WILL NOW BE 7,6,5,4,3,2,1,0,7,...
- * MAIN LOOP FOR THE CURRENT ANIMATION
- ANIDOIT JSR ANIMOVE ;MOVE THEM ALL
- LDA RTLOCAL+1 ;WAIT FOR A BIT
- CLC
- ADC ANFRM
- STA TEMP16
- ADWLOOP JSR SEEBNORM ;SEE IF ANY BUTTONS HIT
- LDA TEMP16 ;SEE IF WAIT OVER YET
- CMP RTLOCAL+1
- BNE ADWLOOP
- DEC ANCOUNT
- BNE ANIDOIT
- JMP ANINEXT ;TIME FOR NEXT READ
- * MOVE THE ANIMATION CHARACTERS
- ANIMOVE LDX #$05 ;MOVE THEM ALL
- ANMLOOP LDA A0ENABLE,X
- BEQ ANMNEXT
- JSR ANIDISP ;SHOW THE ANIMATION
- ANMNEXT DEX
- BPL ANMLOOP
- LDX #$05 ;SET UP FOR WHICHEVER LOOP
- DEC ANSTATE ;NEXT STATE
- BPL ANMINC ;SEE IF WRAP
- LDA ANSTATE ;WRAP - GET ANSTATE BACK AGAIN
- AND #$07
- STA ANSTATE
- ANMWLOOP LDA A0HPDIF,X ;AND WRAP THE OFFSETS BACK AGAIN
- SEC
- SBC #$07
- STA A0HPDIF,X
- LDA A0VPDIF,X
- SEC
- SBC #$07
- STA A0VPDIF,X
- LDA A0ANDIF,X
- SEC
- SBC #$07
- STA A0ANDIF,X
- DEX
- BPL ANMWLOOP
- RTS
- ANMINC INC A0HPDIF,X ;INCREMENT OUR OFFSETS
- INC A0VPDIF,X
- INC A0ANDIF,X
- DEX
- BPL ANMINC
- RTS
- * THIS ROUTINE MOVES A SINGLE ANIMATION FIGURE. THE CHARACTER IS IN X, THIS
- * MUST BE PRESERVED
- ANIDISP LDA HPLIST,X ;MODIFY HPOS
- LDY A0HPDIF,X ;INDEX FOR MODIFICATION
- CLC
- ADC ANHPMOVE,Y ;MODIFICATION
- STA HPLIST,X
- LDA A0VPOS,X ;MODIFY VPOS
- LDY A0VPDIF,X ;INDEX FOR MODIFICATION
- CLC
- ADC ANVPMOVE,Y ;MODIFICATION
- STA A0VPOS,X
- JSR VTOZO ;CONVERT IT TO ZONE AND COLUMN
- STA VOLIST,X
- TYA
- STA VZLIST,X
- LDA A0CHAR,X ;MODIFY CHAR
- LDY A0ANDIF,X ;INDEX FOR MODIFICATION
- CLC
- ADC ANANMOVE,Y ;MODIFICATION
- STA A0CHAR,X
- TAY ;GET THE NEW STAMP
- LDA #L(MSCHAR) ;OFFSET FROM THE BASE OF MSCHAR
- CLC
- ADC CHAROFFL,Y
- STA SLLIST,X
- LDA #H(MSCHAR)
- ADC CHAROFFH,Y
- STA SHLIST,X
- STA DOLIST,X ;AND TELL LOADER TO DISPLAY IT
- RTS
- * CLEAR OUT THE ANIMATION THINGS
- ANICLEAR LDY #$05
- LDA #$00
- ACLOOP STA A0ENABLE,Y
- DEY
- BPL ACLOOP
- RTS
- * CLEAR OUT THE CHARACTER THINGS
- CHRCLEAR LDY #$05
- LDA #OFFSCRN
- CCLOOP LDX A0ENABLE,Y
- BNE CCNEXT
- STA HPLIST,Y
- STA DOLIST,Y
- CCNEXT DEY
- BPL CCLOOP
- RTS
- * TUNES FOR THE ANIMATIONS
- TUNE1 DB 2,4,8
- TUNE2 DB 3,6,9
- * TABLES FOR POSITIONS OF CLAPBOARD STAMPS
- ACTBASH ;HORIZONTAL POSITIONS
- ACTUPH
- ACTDNH DB $0E+LEFTSIDE,$16+LEFTSIDE,$1E+LEFTSIDE
- ACTBASV DB $55,$55,$55 ;VERTICAL POSITONS
- ACTUPV DB $4A,$42,$3A
- ACTDNV DB $51,$51,$51
- ACTBASSL DB L(CLAPBRD),L(CLAPBRD+24),L(CLAPBRD+48) ;STAMP LOW BYTE
- ACTUPSL DB L(CLAPBRDU),L(CLAPBRDU+24),L(CLAPBRDU+48)
- ACTDNSL DB L(CLAPBRDD),L(CLAPBRDD+24),L(CLAPBRDD+48)
- ACTBASSH DB H(CLAPBRD),H(CLAPBRD+24),H(CLAPBRD+48) ;STAMP HI BYTE
- ACTUPSH DB H(CLAPBRDU),H(CLAPBRDU+24),H(CLAPBRDU+48)
- ACTDNSH DB H(CLAPBRDD),H(CLAPBRDD+24),H(CLAPBRDD+48)
- * OFFSET TABLES FROM CHARACTER INDEX TO OFFSET
- CHAROFFL DB $00,$18,$30,$48,$60,$78,$90,$A8
- DB $C0,$D8,$F0,$08,$20,$38,$50,$68
- DB $80,$98,$B0,$C8,$E0,$F8,$10,$28
- DB $40,$58,$70,$88,$A0,$B8,$D0,$E8
- DB $00,$18,$30,$48,$60,$78,$90,$A8
- DB $C0,$D8,$F0,$08,$20,$38,$50,$68
- CHAROFFH DB $00,$00,$00,$00,$00,$00,$00,$00
- DB $00,$00,$00,$01,$01,$01,$01,$01
- DB $01,$01,$01,$01,$01,$01,$02,$02
- DB $02,$02,$02,$02,$02,$02,$02,$02
- DB $03,$03,$03,$03,$03,$03,$03,$03
- DB $03,$03,$03,$04,$04,$04,$04,$04
- * GLOBAL INFORMATION FOR ANIMATIONS
- ANASTART DB $00,$07,$0F ;OFFSET INTO ANIMATION INFORMATION
- ANSSTART DB $00,$16,$22 ;OFFSET INTO ANIMATION SEGMENT INFO
- ANFRAMES DB $01,$01,$02 ;FRAMES PER TIC
- * INFORMATION ABOUT EACH ANIMATION
- ANTICS DB $DB,$4D,$0E,$18,$0C,$1D,$00 ;TICS PER ANIMATION SEGMENT
- DB $22,$D6,$BE,$BE,$32,$38,$60,$00
- DB $30,$20,$10,$30,$00
- ANCHARS DB 4,4,4,4,3,3,0 ;CHARACTERS PER ANIMATION
- DB 1,2,2,2,2,2,1,0
- DB 6,6,6,6,0
- * INFORMATION ABOUT EACH ANIMATION SEGMENT
- ANIHPOS DB $FF,$90,$E0,$B0 ;STARTING HPOS
- DB $91,$FE,$A5,$EA
- DB $00,$00,$00,$00
- DB $00,$00,$00,$00
- DB $00,$00,$48
- DB $00,$00,$00
- DB $F0
- DB $E0,$FF
- DB $90,$B0
- DB $E0,$FF
- DB $90,$B0
- DB $E0,$FF
- DB $F0
- DB $10,$20,$8E,$90,$98,$A0
- DB $00,$00,$00,$00,$00,$00
- DB $00,$00,$00,$00,$00,$00
- DB $00,$00,$00,$00,$00,$00
- ANIVPOS DB $60,$A0,$60,$A0 ;STARTING VPOS
- DB $80,$80,$80,$80
- DB $00,$00,$00,$00
- DB $00,$00,$00,$00
- DB $00,$00,$28
- DB $00,$00,$00
- DB $00
- DB $40,$40
- DB $80,$80
- DB $60,$60
- DB $40,$40
- DB $80,$80
- DB $00
- DB $80,$80,$40,$3E,$3E,$3E
- DB $00,$00,$00,$00,$00,$00
- DB $00,$00,$00,$00,$00,$00
- DB $00,$00,$00,$00,$00,$00
- ANICHAR DB $00,$12,$18,$1C ;STARTING CHARACTER
- DB $06,$0C,$1C,$18
- DB $09,$15,$1C,$18
- DB $09,$15,$18,$1C
- DB $06,$0C,$26
- DB $08,$0E,$26
- DB $00
- DB $00,$0C
- DB $06,$12
- DB $00,$0C
- DB $06,$12
- DB $00,$0C
- DB $00
- DB $02,$0E,$27,$29,$2A,$2C
- DB $02,$0E,$27,$29,$2A,$2C
- DB $02,$0E,$27,$29,$2A,$2C
- DB $02,$0E,$28,$29,$2A,$2C
- ANIPALET DB $00,$00,$01,$02 ;PALETTE
- DB $00,$00,$01,$02
- DB $00,$00,$01,$02
- DB $00,$00,$01,$02
- DB $00,$00,$00
- DB $00,$00,$00
- DB $00
- DB $00,$00
- DB $00,$00
- DB $00,$00
- DB $00,$00
- DB $00,$00
- DB $00
- DB $00,$00,$03,$03,$03,$03
- DB $00,$00,$03,$03,$03,$03
- DB $00,$00,$03,$03,$03,$03
- DB $00,$00,$00,$03,$03,$03
- ANIHPDIF DB $10,$28,$18,$30 ;CHANGES TO HPOS
- DB $28,$10,$30,$18
- DB $00,$00,$30,$18
- DB $00,$00,$08,$20
- DB $00,$00,$00
- DB $00,$00,$00
- DB $00
- DB $18,$10
- DB $28,$30
- DB $18,$10
- DB $48,$50
- DB $40,$38
- DB $00
- DB $00,$00,$30,$30,$30,$30
- DB $00,$00,$30,$30,$30,$30
- DB $00,$00,$20,$30,$30,$30
- DB $00,$00,$00,$30,$30,$30
- ANIVPDIF DB $00,$00,$00,$00 ;CHANGES TO VPOS
- DB $00,$00,$00,$00
- DB $08,$08,$00,$00
- DB $08,$08,$10,$10
- DB $00,$00,$00
- DB $00,$00,$00
- DB $00
- DB $00,$00
- DB $00,$00
- DB $00,$00
- DB $00,$00
- DB $00,$00
- DB $00
- DB $00,$00,$00,$00,$20,$20
- DB $00,$00,$18,$00,$20,$20
- DB $00,$00,$10,$00,$20,$20
- DB $00,$00,$00,$00,$20,$20
- ANIANDIF DB $08,$08,$10,$10 ;CHANGES TO ANIMATION CHARS
- DB $08,$08,$10,$10
- DB $08,$08,$10,$10
- DB $08,$08,$10,$10
- DB $08,$08,$00
- DB $00,$00,$00
- DB $00
- DB $08,$08
- DB $08,$08
- DB $08,$08
- DB $08,$08
- DB $08,$08
- DB $00
- DB $00,$00,$00,$00,$18,$18
- DB $00,$00,$00,$00,$18,$18
- DB $00,$00,$00,$00,$18,$18
- DB $00,$00,$00,$00,$18,$18
- * PALETTE TABLES
- ANPALET1 DB YELLOW,RED,LTBLUE,YELLOW ;PALETTES FOR STAMPS
- ANPALET2 DB PINK,WHITE,WHITE,BLUE
- ANPALET3 DB BLACK,BLUE,BLUE,WHITE
- * HPOS MOVEMENT TABLES
- ANHPMOVE DB 0,0,0,0,0,0,0,0 ;0 POSSIBLE MOVEMENTS FOR CHARS
- DB 1,0,1,0,1,0,1,0 ;8
- DB 1,1,1,1,1,1,1,0 ;10
- DB 1,1,1,1,1,1,1,1 ;18
- DB -1,0,-1,0,-1,0,-1,0 ;20
- DB -1,-1,-1,-1,-1,-1,-1,0 ;28
- DB -1,-1,-1,-1,-1,-1,-1,-1 ;30
- DB 3,3,2,3,3,2,3,2 ;38
- DB 3,3,3,3,3,3,3,3 ;40
- DB -3,-3,-2,-3,-3,-2,-3,-2 ;48
- DB -3,-3,-3,-3,-3,-3,-3,-3 ;50
- * VPOS MOVEMENT TABLES
- ANVPMOVE DB 0,0,0,0,0,0,0,0 ;0 POSSIBLE MOVEMENTS FOR CHARS
- DB -2,-2,-2,-2,-2,-2,-2,-2 ;8
- DB -1,-1,0,0,1,1,0,0 ;10
- DB 2,2,2,2,2,2,2,2 ;18
- DB 0,0,-2,0,0,0,2,0 ;20
- * ANIMATION TABLES
- ANANMOVE DB 0,0,0,0,0,0,0,0 ;0 MOVEMENTS FOR ANIMATIONS
- DB 0,1,0,1,0,-1,0,-1 ;8
- DB 0,1,0,-1,0,1,0,-1 ;10
- DB 0,0,1,0,0,0,-1,0 ;18
|