123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502 |
- ; NSELECT.S
- ; THIS FILE CONTAINS "MKSELECT" AND "SELECT"
- ; BOTH VERY SIMILAR TO "MKLOGO" AND "LOGO" RESPECTIVELY.
- GLBL XDMAOFF
- 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,FOODSTUF,SCRAPALL
- GLBL THRWTIME
- GLBL PL1BCD,PL0BCD,PL0RACK,PL1RACK
- GLBL PL0LIVES,CTEXT1,CTEXT2,CTEXT3,CTEXT4
- GLBL MGAME
- GLBL GAME,GOD
- GLBL AWOLDRAW,CLRSCRN
- GLBL MKLOGO
- GLBL STATINIT,STATCOMB,STATPLAY,OLDDIR,DLIST3
- GLBL COLORS
- GLBL SELECT,MKSELECT
- GLBL SELTEXT1,SELTEXT2
- RAMDEF ; ZERO PAGE
- RSEG CODE1
- MKSELECT LDX #FALSE ; NO MLOADER IN LOGO MODE
- STX RUNLOAD
- ; ONSCREEN wait until off screen for init
- ; INVBLANK
- DMAOFF
- STX TEMP4 zero out in case this was IR text
- STX SCORELST+1 FALSE is 0
- STX STATLIST+1
- ; End of all dlists:
- STX DLIST2+6
- STX DLIST4+6
- STX DLIST5+6
- STX DLIST6+6
- LDA #MSELECT
- STA MODE
- NEWSTATE SELECT
- LDA #$19 ; COLORS FOR TEXT
- STA COLORS+20
- LDA #$15
- STA COLORS+21
- LDA #$1F
- STA COLORS+22
- 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)
- JSR CLRMAPS
- ; FIRST LINE OF TEXT:
- LDY #4
- NSLOOP LDA NSTABLE,Y
- STA DLIST6,Y
- DEY
- BPL NSLOOP
- LDY #14
- SCOPYLP0 LDA SELTEXT1,Y ; "SELECT STARTING"
- STA TXTLIST2,Y ; 15 WIDE MAP
- DEY
- BPL SCOPYLP0
- ; DO SECOND LINE OF TEXT:
- LDY #4
- NSLOOP1 LDA NSTABLE1,Y
- STA DLIST5,Y
- DEY
- BPL NSLOOP1
- LDY #4
- SCOPYLP1 LDA SELTEXT2,Y
- STA TXTLIST3,Y
- DEY
- BPL SCOPYLP1
- ; THIRD LINE OF TEXT:
- LDY #4
- NSLOOP2 LDA NSTABLE2,Y
- STA DLIST4,Y
- DEY
- BPL NSLOOP2
- ; 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
- LDY #4
- NSLOOP3 LDA NSTABLE3,Y
- STA DLIST2,Y
- DEY
- BPL NSLOOP3
- 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 #22
- bne itisnt
- lda fppause
- beq itisnt
- jmp mkcomb
- ; If the throw or the reset button is pushed, select this rack and start
- ; a new game.
- ITISNT LDA HTHROW
- BPL SELTST1
- LDA THREADY
- BPL SELTST1
- JMP GENDSEL
- SELTST1 LDA FPRESET
- BPL SELTEST1
- LDA RESREADY
- BPL SELTEST1
- MOVE #FALSE,RESREADY
- 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
- 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
- LDA PLBCD
- STA PL1BCD
- LDA PLBCD+1
- STA PL1BCD+1
- JMP SELEXIT
- SELCOPY1 LDA PLBCD
- STA PL0BCD
- LDA PLBCD+1
- STA PL0BCD+1
- SELEXIT LDA PLRACK
- STA 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
- JMP CLRSCRN ; GET RID OF THIS DISPLAY
- ; same as JSR and RTS ( to 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 #3
- bmi cont001
- stx FOODSTUF
- cont001 cpx #7
- bpl doit
- endcycle
- doit
- jsr clrmaps
- ldy #00
- sty dlist4+1
- iny to get 1
- doitlp1 lda ctext1,y by
- sta txtlist2,y
- dey
- bpl doitlp1
- ldy #11
- doitlp0 lda ctext4,y keith sawyer
- sta txtlist3,y
- dey
- bpl doitlp0
- LDA #L(TXTLIST1) ; "PLAYER N"
- STA DLIST3
- LDA #$60
- STA DLIST3+1
- LDA #H(TXTLIST1)
- STA DLIST3+2
- ldy #13
- doitlp2 lda ctext2,y the "alchemist
- sta txtlist1,y
- dey
- bpl doitlp2
- ldy #6
- doitlp3 lda ctext3,y of fun"
- sta clowmap2,y
- dey
- bpl doitlp3
- ldx #$be new widths for character strings
- stx dlist6+3
- ldx #$94
- stx dlist5+3
- ldx #$b2
- stx dlist3+3
- ldx #$b9
- stx dlist2+3
- lda #72 new horizontal positions
- sta dlist6+4
- lda #32
- sta dlist5+4
- lda #24
- sta dlist3+4
- lda #52
- sta dlist2+4
- endcycle
- nextcomb DB 0,4,2,6,0,4,2,6
- CLRMAPS
- LDX #$2B
- LDA #NULL2
- MKSELP0 STA TXTLIST1,X
- DEX
- BNE MKSELP0
- RTS
- NSTABLE DB L(TXTLIST2),$60,H(TXTLIST2),$B1,$10
- NSTABLE1 DB L(TXTLIST3),$60,H(TXTLIST3),$B4,$38
- NSTABLE2 DB L(TXTLIST1),$60,H(TXTLIST1),$B3,$30
- NSTABLE3 DB L(CLOWMAP2),$60,H(CLOWMAP2),$BC,$40
- END
|