mirror of
https://github.com/jeremysrand/BuGS.git
synced 2025-02-16 10:32:33 +00:00
Start work on supporting two player games. When the user starts a two player game now, two scores are initialized and the number of lives of the two players are independently tracked. Also, all of the score code has been updated to increment the player one or player two score correct. Still need to implement the logic to save the game state per player and switch between the players on each death.
This commit is contained in:
parent
4700bd9cff
commit
1cd4ccea3a
@ -186,6 +186,7 @@ startGame entry
|
||||
bne startGame_notRunning
|
||||
rtl
|
||||
startGame_notRunning anop
|
||||
sta isSinglePlayer
|
||||
stz gameRunning
|
||||
jsl addRandomMushrooms
|
||||
jsl scoreStartGame
|
||||
|
@ -23,8 +23,9 @@ initPlayer entry
|
||||
ldy #STARTING_NUM_LIVES
|
||||
sty numLives
|
||||
stz playerIgnoreFirstPoll
|
||||
stz playerNum
|
||||
ldx #P1_LIVES_OFFSET
|
||||
initPlayer_loop anop
|
||||
initPlayer_loop1 anop
|
||||
lda #TILE_PLAYER
|
||||
sta tileType,x
|
||||
phy
|
||||
@ -33,9 +34,35 @@ initPlayer_loop anop
|
||||
dex
|
||||
dex
|
||||
dey
|
||||
bne initPlayer_loop
|
||||
rtl
|
||||
bne initPlayer_loop1
|
||||
|
||||
lda isSinglePlayer
|
||||
beq initPlayer_done
|
||||
; DEBUG
|
||||
; lda #PLAYER_TWO
|
||||
; sta playerNum
|
||||
; DEBUG
|
||||
ldy #STARTING_NUM_LIVES
|
||||
sty numLives+2
|
||||
ldx #P2_LIVES_OFFSET
|
||||
initPlayer_loop2 anop
|
||||
lda #TILE_PLAYER
|
||||
sta tileType,x
|
||||
phy
|
||||
_dirtyNonGameTile
|
||||
ply
|
||||
dex
|
||||
dex
|
||||
dey
|
||||
bne initPlayer_loop2
|
||||
|
||||
initPlayer_done anop
|
||||
jmp playerSwitch
|
||||
|
||||
|
||||
playerSwitch entry
|
||||
jsl scoreSwitchPlayer
|
||||
rtl
|
||||
|
||||
playerLevelStart entry
|
||||
stz playerIgnoreFirstPoll
|
||||
@ -53,12 +80,19 @@ playerLevelStart entry
|
||||
sta mouseAddress
|
||||
lda #1
|
||||
sta mouseDown
|
||||
dec numLives
|
||||
ldx playerNum
|
||||
dec numLives,x
|
||||
cpx #PLAYER_ONE
|
||||
beq playerLevelStart_playerOne
|
||||
lda #P2_LIVES_OFFSET
|
||||
bra playerLevelStart_cont
|
||||
playerLevelStart_playerOne anop
|
||||
lda #P1_LIVES_OFFSET
|
||||
playerLevelStart_cont anop
|
||||
sec
|
||||
sbc numLives
|
||||
sbc numLives,x
|
||||
sec
|
||||
sbc numLives
|
||||
sbc numLives,x
|
||||
tax
|
||||
lda #TILE_EMPTY
|
||||
sta tileType,x
|
||||
@ -67,13 +101,20 @@ playerLevelStart entry
|
||||
|
||||
|
||||
playerAddLife entry
|
||||
ldx playerNum
|
||||
cpx #PLAYER_ONE
|
||||
beq playerAddLife_playerOne
|
||||
lda #P2_LIVES_OFFSET
|
||||
bra playerAddLife_cont
|
||||
playerAddLife_playerOne anop
|
||||
lda #P1_LIVES_OFFSET
|
||||
playerAddLife_cont anop
|
||||
sec
|
||||
sbc numLives
|
||||
sec
|
||||
sbc numLives
|
||||
inc numLives,x
|
||||
tax
|
||||
inc numLives
|
||||
lda #TILE_PLAYER
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
@ -90,7 +131,8 @@ updatePlayer_gameRunning anop
|
||||
bne updatePlayer_notNone
|
||||
lda playerFrameCount
|
||||
bne updatePlayer_wait
|
||||
lda numLives
|
||||
ldx playerNum
|
||||
lda numLives,x
|
||||
beq updatePlayer_gameOver
|
||||
lda numSegments
|
||||
bne updatePlayer_notNextLevel
|
||||
|
@ -134,6 +134,9 @@ SOUND_SYSTEM_VOLUME gequ $e100ca
|
||||
MOUSE_STATUS gequ $c027
|
||||
MOUSE_DATA_REG gequ $c024
|
||||
|
||||
PLAYER_ONE gequ 0
|
||||
PLAYER_TWO gequ 2
|
||||
|
||||
|
||||
gameRunning dc i2'1'
|
||||
|
||||
@ -141,7 +144,6 @@ gameRunning dc i2'1'
|
||||
; this information will need to be copied to a backup location when the player
|
||||
; switches.
|
||||
numSegments dc i2'0'
|
||||
numLives dc i2'0'
|
||||
gameLevel dc i2'0'
|
||||
gameScore dc i4'0'
|
||||
scoreWithin12000 dc i2'0'
|
||||
@ -150,15 +152,23 @@ scoreNum20000 dc i2'0'
|
||||
centipedeLevelNum dc i2'0'
|
||||
colourLevelNum dc i2'0'
|
||||
numInfieldMushrooms dc i2'0'
|
||||
scoreOnesOffset dc i2'0'
|
||||
scoreTensOffset dc i2'0'
|
||||
scoreHundredsOffset dc i2'0'
|
||||
scoreThousandsOffset dc i2'0'
|
||||
; tileType
|
||||
|
||||
|
||||
playerState dc i2'PLAYER_STATE_NONE'
|
||||
mouseX dc i2'0'
|
||||
mouseY dc i2'0'
|
||||
playerState dc i2'PLAYER_STATE_NONE'
|
||||
playerNum dc i2'0'
|
||||
isSinglePlayer dc i2'0'
|
||||
numLives dc i2'0' ; Two values for this, indexed by playerNum
|
||||
dc i2'0'
|
||||
mouseX dc i2'0'
|
||||
mouseY dc i2'0'
|
||||
mouseAddress dc i2'0'
|
||||
backupStack dc i2'0'
|
||||
collision dc i2'0'
|
||||
backupStack dc i2'0'
|
||||
collision dc i2'0'
|
||||
collisionAddr dc i2'0'
|
||||
|
||||
|
||||
|
Binary file not shown.
163
BuGS/score.s
163
BuGS/score.s
@ -99,19 +99,63 @@ scoreStartGame entry
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
dex
|
||||
dex
|
||||
|
||||
scoreStartGame_loop anop
|
||||
dex
|
||||
dex
|
||||
scoreStartGame_loop1 anop
|
||||
lda #TILE_EMPTY
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
dex
|
||||
dex
|
||||
cpx #P1_SCORE_FIRST_OFFSET
|
||||
bne scoreStartGame_loop
|
||||
|
||||
bge scoreStartGame_loop1
|
||||
|
||||
ldx #P2_SCORE_ONES_OFFSET
|
||||
lda isSinglePlayer
|
||||
beq scoreStartGame_loop2
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
dex
|
||||
dex
|
||||
scoreStartGame_loop2 anop
|
||||
lda #TILE_EMPTY
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
dex
|
||||
dex
|
||||
cpx #P2_SCORE_FIRST_OFFSET
|
||||
bge scoreStartGame_loop2
|
||||
rtl
|
||||
|
||||
|
||||
scoreSwitchPlayer entry
|
||||
lda playerNum
|
||||
cmp #PLAYER_ONE
|
||||
beq scoreSwitchPlayer_isPlayer1
|
||||
lda #P2_SCORE_ONES_OFFSET
|
||||
sta scoreOnesOffset
|
||||
lda #P2_SCORE_TENS_OFFSET
|
||||
sta scoreTensOffset
|
||||
lda #P2_SCORE_HUNDREDS_OFFSET
|
||||
sta scoreHundredsOffset
|
||||
lda #P2_SCORE_THOUSANDS_OFFSET
|
||||
sta scoreThousandsOffset
|
||||
bra scoreSwitchPlayer_done
|
||||
scoreSwitchPlayer_isPlayer1 anop
|
||||
lda #P1_SCORE_ONES_OFFSET
|
||||
sta scoreOnesOffset
|
||||
lda #P1_SCORE_TENS_OFFSET
|
||||
sta scoreTensOffset
|
||||
lda #P1_SCORE_HUNDREDS_OFFSET
|
||||
sta scoreHundredsOffset
|
||||
lda #P1_SCORE_THOUSANDS_OFFSET
|
||||
sta scoreThousandsOffset
|
||||
scoreSwitchPlayer_done anop
|
||||
rtl
|
||||
|
||||
|
||||
; The score tile to increment is in the X register
|
||||
; Note that this function and the next one do no sanitization
|
||||
; of the value in the X register. That also means that if
|
||||
@ -176,158 +220,158 @@ scoreAddToTile_done anop
|
||||
|
||||
scoreAddOne entry
|
||||
_incrementScore 1
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
jmp scoreAddOneToTile
|
||||
|
||||
|
||||
scoreAddFive entry
|
||||
_incrementScore 5
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
lda #5*4
|
||||
jmp scoreAddToTile
|
||||
|
||||
|
||||
scoreAddTen entry
|
||||
_incrementScore 10
|
||||
lda tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
lda tileType,x
|
||||
bne scoreAddTen_skipZeroOnes
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddTen_skipZeroOnes anop
|
||||
ldx #P1_SCORE_TENS_OFFSET
|
||||
ldx scoreTensOffset
|
||||
jmp scoreAddOneToTile
|
||||
|
||||
|
||||
scoreAddOneHundred entry
|
||||
_incrementScore 100
|
||||
lda tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
lda tileType,x
|
||||
bne scoreAddHundred_skipZeroOnes
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddHundred_skipZeroOnes anop
|
||||
lda tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx scoreTensOffset
|
||||
lda tileType,x
|
||||
bne scoreAddHundred_skipZeroTens
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx #P1_SCORE_TENS_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddHundred_skipZeroTens anop
|
||||
ldx #P1_SCORE_HUNDREDS_OFFSET
|
||||
ldx scoreHundredsOffset
|
||||
jmp scoreAddOneToTile
|
||||
|
||||
|
||||
scoreAddTwoHundred entry
|
||||
_incrementScore 200
|
||||
lda tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
lda tileType,x
|
||||
bne scoreAddTwoHundred_skipZeroOnes
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddTwoHundred_skipZeroOnes anop
|
||||
lda tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx scoreTensOffset
|
||||
lda tileType,x
|
||||
bne scoreAddTwoHundred_skipZeroTens
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx #P1_SCORE_TENS_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddTwoHundred_skipZeroTens anop
|
||||
ldx #P1_SCORE_HUNDREDS_OFFSET
|
||||
ldx scoreHundredsOffset
|
||||
lda #2*4
|
||||
jmp scoreAddToTile
|
||||
|
||||
|
||||
scoreAddThreeHundred entry
|
||||
_incrementScore 300
|
||||
lda tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
lda tileType,x
|
||||
bne scoreAddThreeHundred_skipZeroOnes
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddThreeHundred_skipZeroOnes anop
|
||||
lda tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx scoreTensOffset
|
||||
lda tileType,x
|
||||
bne scoreAddThreeHundred_skipZeroTens
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx #P1_SCORE_TENS_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddThreeHundred_skipZeroTens anop
|
||||
ldx #P1_SCORE_HUNDREDS_OFFSET
|
||||
ldx scoreHundredsOffset
|
||||
lda #3*4
|
||||
jmp scoreAddToTile
|
||||
|
||||
|
||||
scoreAddSixHundred entry
|
||||
_incrementScore 600
|
||||
lda tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
lda tileType,x
|
||||
bne scoreAddSixHundred_skipZeroOnes
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddSixHundred_skipZeroOnes anop
|
||||
lda tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx scoreTensOffset
|
||||
lda tileType,x
|
||||
bne scoreAddSixHundred_skipZeroTens
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx #P1_SCORE_TENS_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddSixHundred_skipZeroTens anop
|
||||
ldx #P1_SCORE_HUNDREDS_OFFSET
|
||||
ldx scoreHundredsOffset
|
||||
lda #6*4
|
||||
jmp scoreAddToTile
|
||||
|
||||
|
||||
scoreAddNineHundred entry
|
||||
_incrementScore 900
|
||||
lda tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
lda tileType,x
|
||||
bne scoreAddNineHundred_skipZeroOnes
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddNineHundred_skipZeroOnes anop
|
||||
lda tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx scoreTensOffset
|
||||
lda tileType,x
|
||||
bne scoreAddNineHundred_skipZeroTens
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx #P1_SCORE_TENS_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddNineHundred_skipZeroTens anop
|
||||
ldx #P1_SCORE_HUNDREDS_OFFSET
|
||||
ldx scoreHundredsOffset
|
||||
lda #9*4
|
||||
jmp scoreAddToTile
|
||||
|
||||
|
||||
scoreAddOneThousand entry
|
||||
_incrementScore 1000
|
||||
lda tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx scoreOnesOffset
|
||||
lda tileType,x
|
||||
bne scoreAddOneThousand_skipZeroOnes
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_ONES_OFFSET
|
||||
ldx #P1_SCORE_ONES_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddOneThousand_skipZeroOnes anop
|
||||
lda tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx scoreTensOffset
|
||||
lda tileType,x
|
||||
bne scoreAddOneThousand_skipZeroTens
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_TENS_OFFSET
|
||||
ldx #P1_SCORE_TENS_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddOneThousand_skipZeroTens anop
|
||||
lda tileType+P1_SCORE_HUNDREDS_OFFSET
|
||||
ldx scoreHundredsOffset
|
||||
lda tileType,x
|
||||
bne scoreAddOneThousand_skipZeroHundreds
|
||||
lda #TILE_NUMBER_0
|
||||
sta tileType+P1_SCORE_HUNDREDS_OFFSET
|
||||
ldx #P1_SCORE_HUNDREDS_OFFSET
|
||||
sta tileType,x
|
||||
_dirtyNonGameTile
|
||||
scoreAddOneThousand_skipZeroHundreds anop
|
||||
ldx #P1_SCORE_THOUSANDS_OFFSET
|
||||
ldx scoreThousandsOffset
|
||||
jmp scoreAddOneToTile
|
||||
|
||||
|
||||
@ -372,7 +416,14 @@ checkHighScore_doneCopy anop
|
||||
lda gameScore+2
|
||||
sta settings+SETTINGS_HIGH_SCORE_OFFSET+HIGH_SCORE_SCORE_OFFSET+2,y
|
||||
|
||||
lda playerNum
|
||||
cmp #PLAYER_ONE
|
||||
beq checkHighScore_isPlayer1
|
||||
ldx #P2_SCORE_ONES_OFFSET-18
|
||||
bra checkHighScore_saveHighScore
|
||||
checkHighScore_isPlayer1 anop
|
||||
ldx #P1_SCORE_ONES_OFFSET-18
|
||||
checkHighScore_saveHighScore anop
|
||||
lda tileType,x
|
||||
jsl tileTypeToAscii
|
||||
sta settings+SETTINGS_HIGH_SCORE_OFFSET+HIGH_SCORE_SCORE_TEXT_OFFSET,y
|
||||
|
Loading…
x
Reference in New Issue
Block a user