diff --git a/pacman/PACMAN.E.S b/pacman/PACMAN.E.S index 5eb4a08..fa2f9ea 100644 --- a/pacman/PACMAN.E.S +++ b/pacman/PACMAN.E.S @@ -48,10 +48,10 @@ HGR3 = $6000 ; does not exist but marks the area past HGR2 CH = $24 ; firmware X-pos CV = $25 ; firmware Y-pos -zpHISCORE = $00 ; (3 bytes) high score +highSCORE = $00 ; (3 bytes) high score zpXBIT = $03 ; X from X-coord to X-bit offset zpXCOL = $04 ; Y from X-coord to X-col in screen -zpDECSCORE = $05 ; (3 bytes) the decimal score +deciSCORE = $05 ; (3 bytes) the decimal score zpTEMP1 = $08 zpTEMP2 = $09 zpTEMP3 = $0a @@ -64,24 +64,25 @@ zpHGR = $12 ; (word) pointer to HGR world zpPTR1 = $14 ; (word) 1st pointer zpPTR2 = $16 ; (word) 2nd pointer ptrMOVE = zpPTR2 ; (word) pointer to the list of authorized moves -zpSPRHEIGHT = $18 ; (byte) sprite height in lines -zpSPRWIDTH = $1a ; (byte) sprite width in bytes +sprHEIGHT = $18 ; (byte) sprite height in lines +sprWIDTH = $1a ; (byte) sprite width in bytes zpPTR3 = $1b ; (word) fgCOLOR = $1d ; 0: b&w, 1: color hgrBIT7 = $1e ; (byte) defines which palette to use ($00 or $80) zp1F = $1f * $20 to $4F are not used -zpCURPLAYER = $50 ; (byte) current player index -zpNBPLAYERS = $51 ; (byte) number of players (1..5) +curPLAYER = $50 ; (byte) current player index +nbPLAYERS = $51 ; (byte) number of players (1..5) curSCORE = $52 ; 0 (3 bytes) score -zpRANK = $55 ; 3 (byte) rank number (ie. the level) -zpNBDOTS = $56 ; 4 (byte) number of dots on the board (248 by default) +theRANK = $55 ; 3 (byte) rank number (ie. the level) +nbDOTS = $56 ; 4 (byte) number of dots on the board (248 by default) fruitFREQ = $57 ; 5 (byte) appearance frequency of a fruits -zpNBLIVES = $58 ; 6 (byte) number of lives (bit 7 is set) +nbLIVES = $58 ; 6 (byte) number of lives (bit 7 is set) frameCNT = $59 ; 7 (byte) frame counter -zpPTRFRUIT = $5c ; (word) pointer to the fruit sprite -zpDOTTEMPO = $5e ; (byte) tempo for energizer dot blinking -zpDOTFLAG = $5f ; (byte) 0: show dots, 1: hide dots +fruitCNT = $5a ; (word) fruit counter (how long it is displayed) +ptrFRUIT = $5c ; (word) pointer to the fruit sprite +dotTEMPO = $5e ; (byte) tempo for energizer dot blinking +fgDOTS = $5f ; (byte) 0: show dots, 1: hide dots * * Within board, X/Y coords of Pacman are: * UL 41/0B @@ -98,9 +99,8 @@ pacmanBOARD = $64 ; (byte) current index in boardMOVES where Pacman is pacmanNEXTBOARD = $65 ; (byte) next index in the same table, $FF if move is invalid pacmanSTEP = $66 ; (byte) Pacman sprite index (that makes the animation step) * $67 is no more used, see $8B7E -* bonusINDEX = $68 ; (byte) 2/4/8/16 for bonus 200/400/800/1600 -* +pacmanTUNNEL = $69 ; (byte) 0: Pacman not in tunnel, 1: Pacman in tunnel boardY = $6a ; (byte) y-coord in board boardX = $6b ; (byte) x-coord in board * @@ -144,6 +144,7 @@ ghost4FRIGHTENED = ghost4DATA+8 ghost4DEAD = ghost4DATA+9 * ghostINDEX = $e0 ; (byte) 1: Inky, 2: Pinky, 3: Blinky, 4: Clyde +frFRUIT = $e7 ; (byte) 0: fruit counter not activated, 1: fruit counter activated fgDEMO = $e8 ; (byte) 0: game, 1: demo saveVAR = $f1 ; (byte) save variable * $F2 is not used diff --git a/pacman/PACMAN.S b/pacman/PACMAN.S index 78d6c32..29b24f7 100644 --- a/pacman/PACMAN.S +++ b/pacman/PACMAN.S @@ -71,13 +71,13 @@ L4010 LDA (zpPTR1),Y JMP L4027 L4027 LDA #$01 - STA zpNBPLAYERS + STA nbPLAYERS JSR initNEWGAME LDA #$00 - STA zpHISCORE - STA zpHISCORE+1 - STA zpHISCORE+2 - STA zpNBLIVES + STA highSCORE + STA highSCORE+1 + STA highSCORE+2 + STA nbLIVES LDA #$01 STA fgCOLOR ; ZP - color monitor if 1 STA fgDEMO ; ZP - demo if 1 @@ -156,7 +156,7 @@ L4178 LDA strCARTOON,X ; CARTOON NUMBER (1-3) CPX #"2" BEQ L4197 LDA #$09 -L4197 STA zpRANK ; ZP +L4197 STA theRANK ; ZP JSR playCARTOON JMP selectRANKCARTOON @@ -222,7 +222,7 @@ L4233 JSR RDKEY BCS L4233 JSR printCHAR AND #$07 - STA zpNBPLAYERS ; ZP + STA nbPLAYERS ; ZP LDA #$00 STA CH @@ -314,9 +314,9 @@ L432A CLC INC L55B1+2 L4338 LDA #$01 ; width in bytes - STA zpSPRWIDTH + STA sprWIDTH LDA #$09 ; height in lines - STA zpSPRHEIGHT + STA sprHEIGHT LDA #$00 STA zpXBIT JSR drawCOLORSPRITE @@ -618,9 +618,9 @@ welcomePAGE LDA #$00 STA zpXBIT LDA #$05 - STA zpSPRWIDTH + STA sprWIDTH LDA #$09 - STA zpSPRHEIGHT + STA sprHEIGHT LDA #sprC1983 @@ -655,9 +655,9 @@ welcomeTAB LDA #$49 ; set X welcomePOINTS LDA #$04 ; Draw the Points sprite - STA zpSPRWIDTH + STA sprWIDTH LDA #$07 - STA zpSPRHEIGHT + STA sprHEIGHT LDA #sprPOINTS @@ -742,7 +742,7 @@ welcomeBONUS *----------------------------------- doWELCOME LDA #$70 - STA zpDOTTEMPO + STA dotTEMPO LDA #$20 STA frameCNT LDA #$18 @@ -755,7 +755,7 @@ doWELCOME LDA #$70 STA ghostISDEAD ; ghost is alive LDA #$01 STA $81 - STA zpDOTFLAG + STA fgDOTS LDA #$8D ; coordinate of Pacman STA pacmanX LDA #$68 @@ -812,8 +812,8 @@ L4711 JSR getGHOSTSDATA DEC $5E BNE L4742 LDA #$60 - STA zpDOTTEMPO - LDA zpDOTFLAG + STA dotTEMPO + LDA fgDOTS BEQ L4733 LDA #$67 STA zpY1 @@ -828,7 +828,7 @@ L4733 LDA #$66 STA zpX1 JSR L7819 LDA #$01 -L4740 STA zpDOTFLAG +L4740 STA fgDOTS L4742 LDA pacmanX CMP #$4F BCC L474B @@ -901,7 +901,7 @@ L47C9 LDA #sprHISCORE STA L5596+1 - LDA zpHISCORE + LDA highSCORE STA curSCORE - LDA zpHISCORE+1 + LDA highSCORE+1 STA curSCORE+1 - LDA zpHISCORE+2 + LDA highSCORE+2 STA curSCORE+2 JMP L550E @@ -1835,14 +1835,14 @@ L556E LDA L55C7,X ; X on screen LDA #$00 STA zpXBIT LDA #$07 ; 7w and 7h - STA zpSPRHEIGHT - STA zpSPRWIDTH + STA sprHEIGHT + STA sprWIDTH L5591 LDA #sprPLAYER STA L55B1+2 JSR drawCOLORSPRITE - LDA zpCURPLAYER ; skip if player 0 + LDA curPLAYER ; skip if player 0 BEQ L55A5 JSR printDIGIT L55A5 RTS @@ -1855,7 +1855,7 @@ drawCOLORSPRITE JSR setHGRADDRESS LDX zpXBIT LDY zpXCOL - LDA zpSPRWIDTH ; number of bytes per line to output + LDA sprWIDTH ; number of bytes per line to output STA zpTEMP2 L55B1 LDA $0666,X ORA (zpHGR),Y @@ -1866,7 +1866,7 @@ L55B1 LDA $0666,X BNE L55B1 STX zpXBIT ; next X bit INC zpY1 ; next Y - DEC zpSPRHEIGHT ; data-- + DEC sprHEIGHT ; data-- BNE drawCOLORSPRITE RTS @@ -1909,13 +1909,13 @@ prepareLEVEL JSR setHGR JSR drawGAMEBOARD JSR drawGHOSTDOOR - LDA zpCURPLAYER ; save current player index + LDA curPLAYER ; save current player index STA saveVAR JSR loadPLAYERDATA JSR drawDOTS JSR drawSCORES LDA saveVAR ; restore current player index - STA zpCURPLAYER + STA curPLAYER JSR loadPLAYERDATA JSR printRANK JSR printNBLIVES @@ -1932,7 +1932,7 @@ L5691 RTS * PRINT RANK (LEVEL) *----------------------------------- -printRANK JMP showFRUITEDRANK ; LoGo +printRANK JMP drawFRUITEDRANK ; LoGo LDA #$E1 ; display the rank number, aka the level STA zpX2 ; it was replaced on the released game @@ -1940,7 +1940,7 @@ printRANK JMP showFRUITEDRANK ; LoGo STA zpX2+1 LDA #$B0 STA zpY2 - LDA zpRANK + LDA theRANK JSR L56C3 STA $19 AND #$F0 @@ -1974,7 +1974,7 @@ L56C8 ADC #$01 *----------------------------------- printNBLIVES - LDA zpNBLIVES ; Show 2 Pacman if we have 3 lives + LDA nbLIVES ; Show 2 Pacman if we have 3 lives AND #$7F STA $19 ; save nb lives LDA fgDEMO @@ -2015,26 +2015,26 @@ L56FD LDA zpX2 ; draw Pacman sprite blinkTHINGS JSR blinkPLAYERNAME - LDA zpDOTTEMPO ; blink dots + LDA dotTEMPO ; blink dots BEQ L5716 - DEC zpDOTTEMPO + DEC dotTEMPO RTS L5716 JSR getMAXRANK15 TAX LDA tblBLINKTEMPO,X - STA zpDOTTEMPO + STA dotTEMPO - LDA zpDOTFLAG + LDA fgDOTS BEQ L572B JSR hideENERGIZERS LDA #$00 - STA zpDOTFLAG + STA fgDOTS RTS L572B JSR showENERGIZERS LDA #$01 - STA zpDOTFLAG + STA fgDOTS RTS tblBLINKTEMPO ; Tempo table @@ -2212,9 +2212,9 @@ L585A LDA #$68 ; yes... LDA #$00 STA zpXBIT LDA #$05 - STA zpSPRWIDTH + STA sprWIDTH LDA #$07 - STA zpSPRHEIGHT + STA sprHEIGHT LDA #$11 STA zpXCOL LDA #sprDATA SEC SBC zpXBIT BCS L7E4C DEY -L7E4C JMP drawSPRITE +L7E4C JMP drawSPRITE ; and draw sprite *----------------------------------- -* +* ALIGN SPRITE DATA ON HGR COLUMN *----------------------------------- -L7E4F LDX #$1B -L7E51 ASL sprDATA,X - ASL sprDATA,X - INX - ROL sprDATA,X +alignSPRITEHGR + LDX #$1B ; rotate sprite data +L7E51 ASL sprDATA,X ; bit by bit + ASL sprDATA,X ; so that it is + INX ; aligned with + ROL sprDATA,X ; the HGR screen ASL sprDATA,X INX ROL sprDATA,X @@ -5480,10 +5432,11 @@ sprDATA DB $CB DB $4C *----------------------------------- -* +* ANIMATE PACMAN WHEN IT DIES *----------------------------------- -L7EC0 JSR setXYPACMAN +animPACMANDIES + JSR setXYPACMAN LDA #sprPACMANUP2 JSR drawSPRITE @@ -5494,185 +5447,86 @@ L7ECC LDX #$FF BNE L7ECC JSR setXYPACMAN JSR eraseSPRITE44 - LDA #$06 - STA zpTEMP3 + LDA #$06 ; Pacman dies + STA zpTEMP3 ; in 6 sprites L7EDE LDA zpTEMP3 ASL TAX JSR setXYPACMAN - LDA L7F05,X - LDY L7F05+1,X + LDA tblSPRPACMANDIES,X + LDY tblSPRPACMANDIES+1,X STA zpPTR2 STY zpPTR2+1 - JSR L7E1F - JSR L7C82 + JSR prepareSPRITE + JSR playPACMANDIES ; play a sound LDX #$80 JSR doWAIT2 JSR setXYPACMAN JSR eraseSPRITE54 - DEC zpTEMP3 + DEC zpTEMP3 ; next sprite BNE L7EDE RTS -L7F05 DA $0000 - DA L7FA9 - DA L7F8B - DA L7F6D - DA L7F4F - DA L7F31 - DA L7F13 +tblSPRPACMANDIES + DA $0000 + DA sprPACDIES6 ; 6th sprite + DA sprPACDIES5 + DA sprPACDIES4 + DA sprPACDIES3 + DA sprPACDIES2 + DA sprPACDIES1 ; 1st sprite -L7F13 DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $06 - DB $0C - DB $00 - DB $1E - DB $0F - DB $00 - DB $7E - DB $0F - DB $00 - DB $7E - DB $0F - DB $00 - DB $7C - DB $07 - DB $00 - DB $78 - DB $03 - DB $00 - DB $70 - DB $01 - DB $00 -L7F31 DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $7E - DB $0F - DB $00 - DB $7E - DB $0F - DB $00 - DB $7C - DB $07 - DB $00 - DB $78 - DB $03 - DB $00 - DB $70 - DB $01 - DB $00 -L7F4F DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $78 - DB $03 - DB $00 - DB $7C - DB $07 - DB $00 - DB $7C - DB $07 - DB $00 - DB $78 - DB $03 - DB $00 - DB $70 - DB $01 - DB $00 -L7F6D DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $70 - DB $01 - DB $00 - DB $78 - DB $03 - DB $00 - DB $78 - DB $03 - DB $00 - DB $70 - DB $01 - DB $00 - DB $60 - DB $00 - DB $00 -L7F8B DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $00 - DB $60 - DB $00 - DB $00 - DB $60 - DB $00 - DB $00 - DB $60 - DB $00 - DB $00 - DB $60 - DB $00 - DB $00 - DB $60 - DB $00 - DB $00 -L7FA9 HEX 000000 +sprPACDIES1 HEX 000000 + HEX 000000 + HEX 000000 + HEX 060C00 + HEX 1E0F00 + HEX 7E0F00 + HEX 7E0F00 + HEX 7C0700 + HEX 780300 + HEX 700100 +sprPACDIES2 HEX 000000 + HEX 000000 + HEX 000000 + HEX 000000 + HEX 000000 + HEX 7E0F00 + HEX 7E0F00 + HEX 7C0700 + HEX 780300 + HEX 700100 +sprPACDIES3 HEX 000000 + HEX 000000 + HEX 000000 + HEX 000000 + HEX 000000 + HEX 780300 + HEX 7C0700 + HEX 7C0700 + HEX 780300 + HEX 700100 +sprPACDIES4 HEX 000000 + HEX 000000 + HEX 000000 + HEX 000000 + HEX 000000 + HEX 700100 + HEX 780300 + HEX 780300 + HEX 700100 + HEX 600000 +sprPACDIES5 HEX 000000 + HEX 000000 + HEX 000000 + HEX 000000 + HEX 000000 + HEX 600000 + HEX 600000 + HEX 600000 + HEX 600000 + HEX 600000 +sprPACDIES6 HEX 000000 HEX 240200 HEX 280100 HEX 000000 @@ -5682,6 +5536,7 @@ L7FA9 HEX 000000 HEX 240200 HEX 000000 HEX 000000 + sprSCORE200 HEX 000000 HEX 000000 @@ -5847,13 +5702,13 @@ showGAMEOVER JMP drawGO prepareGO STA zpY1 - STX zpSPRWIDTH + STX sprWIDTH STY zpXCOL LDA #$00 STA zpXBIT RTS -drawGO STX zpSPRHEIGHT +drawGO STX sprHEIGHT STA L55B1+1 STY L55B1+2 JMP drawCOLORSPRITE @@ -5882,7 +5737,7 @@ sprOVER HEX 4E687701 * WHICH CARTOON TO PLAY? *----------------------------------- -playCARTOON LDA zpRANK +playCARTOON LDA theRANK L8157 CMP #$02 BNE L815E JMP playCARTOON1 @@ -6051,7 +5906,7 @@ L827A LDA $0666,Y DEY BPL L827A LDA #$14 - STA zpSPRHEIGHT + STA sprHEIGHT LDA zpXBIT BEQ L8292 L828B JSR L82B1 @@ -6070,7 +5925,7 @@ L829D LDA sprDATA,X BNE L829D STX zpXBIT INC zpY1 - DEC zpSPRHEIGHT + DEC sprHEIGHT BNE L8292 RTS @@ -6298,7 +6153,7 @@ L8519 JSR doWAIT LDY L854A+1,X STA zpPTR2 STY zpPTR2+1 - JSR L7E1F + JSR prepareSPRITE L8546 JMP L84F9 L8549 RTS @@ -7119,7 +6974,7 @@ L8B3F BCS L8B45 L8B45 CMP #$0A BCS L8B7D TAX - LDA zpRANK + LDA theRANK CMP #$05 BCC L8B67 LDA ghostDIR @@ -7200,6 +7055,10 @@ L8B9D LDA ghostFRIGHTENED ; is ghost frightened? JSR displayPLAYERSCORE L8BDC RTS +*----------------------------------- +* +*----------------------------------- + L8BDD JSR getGHOSTSDATA JSR L58FA LDY #$03 @@ -7214,39 +7073,40 @@ L8BF1 JSR setGHOSTSDATA JSR eraseSPRITE44 DEC ghostINDEX BNE L8BF1 - JSR setXYPACMAN - JSR eraseSPRITE44 - JSR L7EC0 - LDA fgDEMO - BEQ L8C0E - JMP welcomePAGE + JSR setXYPACMAN ; set XY coords + JSR eraseSPRITE44 ; erase the current Pacman sprite + JSR animPACMANDIES ; and shows the dying animation + LDA fgDEMO ; are we on demo mode? + BEQ L8C0E ; no + JMP welcomePAGE ; yes, return -L8C0E DEC zpNBLIVES - LDA zpNBLIVES +L8C0E DEC nbLIVES ; lives-- + LDA nbLIVES AND #$7F BNE L8C1A - LDA #$00 - STA zpNBLIVES + LDA #$00 ; we are dead + STA nbLIVES + L8C1A JSR savePLAYERBOARD JSR savePLAYERDATA - LDA zpCURPLAYER + LDA curPLAYER STA zpTEMP4 JMP L8C2E L8C27 JSR loadPLAYERDATA - LDA zpNBLIVES + LDA nbLIVES BNE L8C4A -L8C2E INC zpCURPLAYER - LDA zpNBPLAYERS - CMP zpCURPLAYER +L8C2E INC curPLAYER ; next player + LDA nbPLAYERS + CMP curPLAYER BCS L8C3A LDA #$01 - STA zpCURPLAYER -L8C3A LDA zpCURPLAYER + STA curPLAYER +L8C3A LDA curPLAYER CMP zpTEMP4 BNE L8C27 JSR loadPLAYERDATA - LDA zpNBLIVES + LDA nbLIVES BNE L8C4A JMP endGAME @@ -7768,7 +7628,7 @@ L906D CPX ghostX BCS L906A L9073 CMP #$02 BEQ L90A3 - LDA $69 + LDA pacmanINTUNNEL BEQ L907E LDA #$03 RTS