123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441 |
- ; SELECT.S
- ; THIS FILE CONTAINS "MKSELECT" AND "SELECT"
- ; BOTH VERY SIMILAR TO "MKLOGO" AND "LOGO" RESPECTIVELY.
- GLBL DRAWLOGO
- GLBL TRUE,FALSE
- GLBL TEXT1 ; IN "TEXT.S"
- GLBL TXTLIST1,TXTLIST2,TXTLIST3,CLOWMAP2
- GLBL DLIST6,DLIST5,DLIST4,DLIST2
- GLBL MSELECT
- GLBL SCORELST,STATLIST
- GLBL NULL2,DPPINIT,SCRAPALL
- GLBL THRWTIME,HTHROW,HJOYDIR
- GLBL THREADY
- GLBL PLRACK,PLBCD,PL1BCD,PL0BCD,PL0RACK,PL1RACK
- GLBL PLLIVES,PL0LIVES
- GLBL MGAME
- GLBL GAME,GOD
- GLBL AWOLDRAW,CLRSCRN
- GLBL FPSELECT,SELREADY,MKLOGO
- GLBL HIGHEST
- GLBL STATINIT,STATCOMB,STATPLAY,FPPAUSE,JOYDIR,OLDDIR,DLIST3
- GLBL SELECT,MKSELECT
- RAMDEF ; ZERO PAGE
- RSEG CODE1
- MKSELECT LDA #FALSE ; NO MLOADER IN LOGO MODE
- STA RUNLOAD
- STA TEMP4 zero out in case this was IR text
- LDA #MSELECT
- STA MODE
- NEWSTATE SELECT
- LDA #$19 ; COLORS FOR TEXT
- STA P5C1
- LDA #$15
- STA P5C2
- LDA #$1F
- STA P5C3
- LDA #00 ; CLEAR OUT ALL CHARACTER MAP INFO
- STA SCORELST+1
- STA STATLIST+1
- JSR DRAWLOGO ; DRAW THE "FOODFIGHT" LOGO
- LDA #8 ; LOGO DLISTS-- EACH WITH TWO ENTRIES
- STA LISTSTRT+8
- STA LISTSTRT+9
- ; SETUP THE HEADERS USED BELOW THE LOGO:
- ; "PLAYER N"
- ; "SELECT STARTING"
- ; "LEVEL"
- ; "NNN"
- ; PUT BLANKS IN THE CHARACTER MAPS:
- ; (ALL THREE, LENGTHS 13,14, AND 15)
- LDX #$2A
- LDA #NULL2
- MKSELP0 STA TXTLIST1,X
- DEX
- BNE MKSELP0
- ; FIRST LINE OF TEXT:
- LDA #L(TXTLIST2) ; "SELECT STARTING"
- STA DLIST6
- LDA #$60
- STA DLIST6+1
- LDA #H(TXTLIST2)
- STA DLIST6+2
- LDA #$B1 ; 15 CHARACTERS; PALETTE 5
- STA DLIST6+3
- LDA #$10
- STA DLIST6+4
- LDA #0
- STA DLIST6+6
- LDY #14
- SCOPYLP0 LDA SELTEXT1,Y ; "SELECT STARTING"
- STA TXTLIST2,Y ; 15 WIDE MAP
- DEY
- BPL SCOPYLP0
- ; DO SECOND LINE OF TEXT:
- LDA #L(TXTLIST3) ; "LEVEL"
- STA DLIST5
- LDA #$60
- STA DLIST5+1
- LDA #H(TXTLIST3)
- STA DLIST5+2
- LDA #$B4 ; 12 CHARACTERS; PALETTE 5
- STA DLIST5+3
- LDA #$38 ; HPOS
- STA DLIST5+4
- LDA #0
- STA DLIST5+6
- LDY #4
- SCOPYLP1 LDA SELTEXT2,Y
- STA TXTLIST3,Y
- DEY
- BPL SCOPYLP1
- ; THIRD LINE OF TEXT:
- LDA #L(TXTLIST1) ; "PLAYER N"
- STA DLIST4
- LDA #$60
- STA DLIST4+1
- LDA #H(TXTLIST1)
- STA DLIST4+2
- LDA #$B3 ; PALETTE 5, 13 LENGTH
- STA DLIST4+3
- LDA #$30
- STA DLIST4+4
- ; NOW FILL THIS WITH THE TEXT "PLAYER "
- LDX #05
- SCOPYLP2 LDA TEXT1,X ; IN "TEXT.S"
- STA TXTLIST1,X
- DEX
- BPL SCOPYLP2
- ; TACK ON THE PLAYER NUMBER:
- LDA CURRENT ; 0 OR 1
- ASL A ; 0 OR 2
- CLC
- ADC #$D8 ; LOW BYTE FOR DIGIT "1"
- STA TXTLIST1+7
- ; NOW DISPLAY THE STARTING LEVEL OF 1 (ALREADY INITIALIZED TO THIS):
- LDX #4 ; FIRST FILL WITH NULL
- SCOPYLP4 LDA #NULL2
- STA CLOWMAP2,X
- DEX
- BPL SCOPYLP4
- LDA #L(CLOWMAP2)
- STA DLIST2
- LDA #$60
- STA DLIST2+1
- LDA #H(CLOWMAP2)
- STA DLIST2+2
- LDA #$BC ; WIDTH OF 4
- STA DLIST2+3
- LDA #$40
- STA DLIST2+4
- LDA #0
- STA DLIST2+6
- JSR NEWLEVEL ; PUTS LEVEL INTO "CLOWMAP2"
- LDA #30 ; DE-BOUNCE BEFORE FIRST SWITCH
- STA THRWTIME
- STA TEMP2
- LDA #2
- STA TEMP1
- LDA #FALSE
- STA THREADY
- JSR SCRAPALL
- JSR DPPINIT ; TURN DMA ON
- ENDCYCLE
- ; THE ROUTINE WHICH DISPLAYS THE RACK NUMBER
- SELECT LDA STATUS
- CMP #STATCOMB
- BNE SELTEST0
- JMP COMBINE
- SELTEST0 LDA PLRACK
- CMP #12
- BNE ITISNT
- LDA FPPAUSE
- BEQ ITISNT
- JMP MKCOMB
- ITISNT LDA HTHROW
- BPL SELTEST1
- LDA THREADY
- BPL SELTEST1
- JMP GENDSEL
- ; SEE IF WE SHOULD GO INTO "LOGO" MODE:
- SELTEST1 LDA FPSELECT
- BPL SELTEST2
- LDA SELREADY
- BPL SELTEST2
- JMP MKLOGO ; HOP INTO LOGO; IT RESETS THE STACK
- ; AND GOES TO "GOD"
- ; DO THE LEVEL SELECT BY POLLING THE JOYSTICK:
- SELTEST2 LDA THRWTIME ; JOYSTICK DEBOUNCE
- BEQ SELTEST3
- DEC THRWTIME
- JMP SELCONT1
- SELTEST3 LDA HJOYDIR
- CMP #8
- BNE SELTEST4
- JMP SETTT0 ; IF 8, NO PUSH AT ALL
- SELTEST4 CMP #7 ; DON'T LET 7 DECREASE LEVEL
- BEQ SELOVER
- CMP #3 ; INCREASES ON 0,1,2
- BMI SELRIGHT
- CMP #4 ; DECREASES ON 4,5,6
- BPL SELLEFT
- JMP SELOVER ; MUST BE = 3
- SELRIGHT LDX CURRENT
- LDA PLRACK
- CMP HIGHEST,X ; indexed for each player
- BCS SELOVER
- INC PLRACK
- ; ADD ONE TO THE BCD REPRESENTATION OF THE LEVEL:
- SED
- LDA PLBCD+1
- CLC
- ADC #1
- STA PLBCD+1
- DEX ; HIGH ORDER DIGITS
- LDA PLBCD
- ADC #0
- STA PLBCD
- CLD
- JSR NEWLEVEL
- JMP SELOVER
- SELLEFT
- LDA PLRACK
- BEQ SELOVER
- DEC PLRACK
- SED
- LDA PLBCD+1
- SEC
- SBC #1
- STA PLBCD+1
- LDA PLBCD
- SBC #0
- STA PLBCD
- CLD
- JSR NEWLEVEL ; DISPLAYS PLBCD
- ; COME HERE AFTER A JOYSTICK PUSH HAS BEEN DETECTED-- RESET DEBOUNCE
- SELOVER LDA TEMP2
- STA THRWTIME
- DEC TEMP1
- BMI SPEEDUP
- ENDCYCLE
- SPEEDUP LDA #5
- STA TEMP2
- ENDCYCLE
- SELCONT1 LDA HJOYDIR
- CMP #8
- BNE SELBYE
- SETTT0 LDA #0
- STA THRWTIME
- LDA #2 ; FASTER TIMER
- STA TEMP1
- LDA #30
- STA TEMP2
- SELBYE ENDCYCLE
- GENDSEL
- LDX CURRENT
- BEQ SELCOPY1
- MOVE PLBCD,PL1BCD
- MOVE PLBCD+1,PL1BCD+1
- JMP SELEXIT
- SELCOPY1 MOVE PLBCD,PL0BCD
- MOVE PLBCD+1,PL0BCD+1
- SELEXIT MOVE PLRACK,PL0RACK,X
- ; SED
- LDA PLBCD
- BEQ NO10
- LDA #10 10 extra lives for the 100
- CLC
- ADC PLLIVES
- STA PLLIVES
- STA PL0LIVES,X
- NO10 LDA PLBCD+1 now, one for every 10s digit
- LSR A
- LSR A
- LSR A
- LSR A
- CLC
- ADC PLLIVES
- STA PLLIVES
- STA PL0LIVES,X
- ; CLD
- LDA #MGAME
- STA MODE
- MOVE #STATINIT,STATUS
- NEWSTATE GAME
- JSR AWOLDRAW ; PUT WALL BACK
- JSR CLRSCRN ; GET RID OF THIS DISPLAY
- RTS ; GOES BACK INTO "INIT.S"
- NEWLEVEL LDA #FALSE ; USE THIS TO TELL IF ZEROES ARE
- STA TEMP0 ; DISPLAYED
- LDA PLBCD ; LIVES IN BCD
- BEQ SBLANK1 ; IF ZERO, PUT A BLANK
- ASL A ; TIMES 2
- ADC #$D6 ; DIGIT "1" IS AT $D8
- STA CLOWMAP2
- LDA #TRUE
- STA TEMP0
- JMP NEWLP1
- SBLANK1 LDA #$2F
- STA CLOWMAP2
- NEWLP1 LDA PLBCD+1
- LSR A
- LSR A
- LSR A
- LSR A
- LDX TEMP0
- BNE NEWLP2 ; IF "TRUE", DISPLAY IT
- TAY ; TO RESET FLAGS TO "A"
- BNE NEWLP2 ; IF NOT ZERO, DISPLAY IT
- LDA #$2F ; IF A LEADING ZERO, PUT A BLANK
- STA CLOWMAP2+1
- JMP NEWLP3
- NEWLP2 ASL A ; TIMES 2
- ADC #$D6 ; THE "O" CHARACTER
- STA CLOWMAP2+1
- NEWLP3 LDA PLBCD+1
- AND #$F
- ASL A ; TIMES 2
- ADC #$D6
- STA CLOWMAP2+2
- RTS
- mkcomb lda #statcomb
- sta status
- lda #0
- sta temp5
- endcycle
- combine ldx temp5
- lda hjoydir
- cmp olddir
- beq skip
- sta olddir
- cmp #8
- beq skip
- cmp nextcomb,x
- beq cont
- lda #statplay
- sta status
- skip endcycle
- cont inc temp5
- cpx #7
- bpl doit
- endcycle
- doit lda #0 blank out the text
- sta dlist5+1
- sta dlist4+1
- sta dlist3+1
- endcycle
- nextcomb DB 0,2,4,6,0,2,4,6
- SELTEXT1 DB $CA,$BA,$C4,$BA,$B6,$CC,$2F ; SELECT
- DB $CA,$CC,$B8,$C8,$CC,$C2,$BE,$B4 ; STARTING
- SELTEXT2 DB $C4,$BA,$BC,$BA,$C4 ; LEVEL
- END
|