Skip to content

Commit

Permalink
twoplayer: Exit game once both players die
Browse files Browse the repository at this point in the history
  • Loading branch information
ejona86 committed Oct 5, 2019
1 parent 4d71e80 commit 59baf36
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 48 deletions.
91 changes: 43 additions & 48 deletions twoplayer-tetris-PRG.s.diff
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@
spriteIndexInOamContentLookup:= $00A2
outOfDateRenderFlags:= $00A3 ; Bit 0-lines 1-level 2-score 6-stats 7-high score entry letter
twoPlayerPieceDelayCounter:= $00A4 ; 0 is not delaying
@@ -426,22 +446,25 @@ branchOnGameMode:
@@ -426,32 +446,36 @@ branchOnGameMode:
gameModeState_updatePlayer1:
jsr makePlayer1Active
jsr branchOnPlayStatePlayer1
Expand All @@ -79,9 +79,21 @@
@ret: inc gameModeState
rts

+.import gameModeState_handleGameOver_mod
gameMode_playAndEndingHighScore:
lda gameModeState
@@ -517,11 +540,12 @@ gameMode_legalScreen:
jsr switch_s_plus_2a
.addr gameModeState_initGameBackground
.addr gameModeState_initGameState
.addr gameModeState_updateCountersAndNonPlayerState
- .addr gameModeState_handleGameOver
+ .addr gameModeState_handleGameOver_mod
.addr gameModeState_updatePlayer1
.addr gameModeState_updatePlayer2
.addr gameModeState_checkForResetKeyCombo
.addr gameModeState_startButtonHandling
.addr gameModeState_vblankThenRunState2
@@ -517,11 +541,12 @@ gameMode_legalScreen:
jsr updateAudioWaitForNmiAndResetOamStaging
lda #$00
ldx #$02
Expand All @@ -95,7 +107,7 @@
sta generalCounter
@waitForStartButton:
lda newlyPressedButtons_player1
@@ -753,12 +777,16 @@ gameMode_levelMenu:
@@ -753,12 +778,16 @@ gameMode_levelMenu:
jsr changeCHRBank0
lda #$00
jsr changeCHRBank1
Expand All @@ -114,7 +126,7 @@
jsr bulkCopyToPpu
.addr height_menu_nametablepalette_patch
@skipTypeBHeightDisplay:
@@ -814,12 +842,14 @@ gameMode_levelMenu_processPlayer1Navigat
@@ -814,12 +843,14 @@ gameMode_levelMenu_processPlayer1Navigat
@startAndANotPressed:
lda #$00
sta gameModeState
Expand All @@ -131,7 +143,7 @@
lda newlyPressedButtons_player1
cmp #$40
bne @chooseRandomHole_player1
@@ -844,11 +874,13 @@ @chooseRandomHole_player2:
@@ -844,11 +875,13 @@ @chooseRandomHole_player2:
lda rng_seed
and #$0F
cmp #$0A
Expand All @@ -146,7 +158,7 @@
; Starts by checking if right pressed
gameMode_levelMenu_handleLevelHeightNavigation:
lda newlyPressedButtons
@@ -1026,12 +1058,18 @@ gameModeState_initGameBackground:
@@ -1026,12 +1059,18 @@ gameModeState_initGameBackground:
jsr changeCHRBank0
lda #$03
jsr changeCHRBank1
Expand All @@ -167,7 +179,7 @@
lda #$83
sta PPUADDR
lda gameType
@@ -1088,10 +1126,12 @@ @endOfPpuPatching:
@@ -1088,10 +1127,12 @@ @endOfPpuPatching:
lda startHeight
and #$0F
sta PPUDATA
Expand All @@ -180,7 +192,7 @@
jsr updateAudioWaitForNmiAndResetOamStaging
jsr updateAudioWaitForNmiAndEnablePpuRendering
jsr updateAudioWaitForNmiAndResetOamStaging
@@ -1113,12 +1153,14 @@ game_typeb_nametable_patch:
@@ -1113,12 +1154,14 @@ game_typeb_nametable_patch:
.byte $FE,$23,$57,$3D,$3E,$3E,$3E,$3E
.byte $3E,$3E,$3F,$FD
gameModeState_initGameState:
Expand All @@ -197,7 +209,7 @@
; statsByType
@initStatsByType:
sta $03EF,x
@@ -1166,16 +1208,17 @@ @initStatsByType:
@@ -1166,16 +1209,17 @@ @initStatsByType:
sta player2_autorepeatY
jsr chooseNextTetrimino
sta player1_currentPiece
Expand All @@ -218,7 +230,7 @@
lda #$25
sta player1_lines
sta player2_lines
@@ -1552,17 +1595,17 @@ stageSpriteForCurrentPiece:
@@ -1552,17 +1596,17 @@ stageSpriteForCurrentPiece:
lda numberOfPlayers
cmp #$01
beq L8A2C
Expand All @@ -238,7 +250,7 @@
lda tetriminoY
rol a
rol a
@@ -1596,11 +1639,12 @@ L8A4B: lda orientationTable,x
@@ -1596,11 +1640,12 @@ L8A4B: lda orientationTable,x
lda orientationTable,x
sta oamStaging,y
inc oamStagingLength
Expand All @@ -252,7 +264,7 @@
cmp #$2F
bcs L8A84
inc oamStagingLength
@@ -1882,36 +1926,36 @@ sprite03PausePalette6:
@@ -1882,36 +1927,36 @@ sprite03PausePalette6:
sprite05PausePalette4:
.byte $00,$19,$00,$00,$00,$0A,$00,$08
.byte $00,$1E,$00,$10,$00,$1C,$00,$18
Expand Down Expand Up @@ -303,7 +315,7 @@
.byte $00,$FC,$21,$00,$FF
; Unused, but referenced from unreferenced_orientationToSpriteTable
sprite0FTPieceOffset:
@@ -2356,14 +2400,15 @@ render_mode_play_and_demo:
@@ -2356,14 +2401,15 @@ render_mode_play_and_demo:
@playStateNotDisplayLineClearingAnimation:
lda player1_vramRow
sta vramRow
Expand All @@ -323,7 +335,7 @@
@renderPlayer2Playfield:
lda numberOfPlayers
cmp #$02
@@ -2397,14 +2442,14 @@ @renderPlayer2Playfield:
@@ -2397,14 +2443,14 @@ @renderPlayer2Playfield:
@player2PlayStateNotDisplayLineClearingAnimation:
lda player2_vramRow
sta vramRow
Expand All @@ -342,7 +354,7 @@
@renderLines:
lda outOfDateRenderFlags
and #$01
@@ -2424,21 +2469,21 @@ @renderLines:
@@ -2424,21 +2470,21 @@ @renderLines:
and #$FE
sta outOfDateRenderFlags
jmp @renderLevel
Expand All @@ -368,7 +380,7 @@
sta PPUDATA
lda player2_lines
jsr twoDigsToPPU
@@ -2464,12 +2509,15 @@ @renderLevel:
@@ -2464,12 +2510,15 @@ @renderLevel:
jsr updatePaletteForLevel
lda outOfDateRenderFlags
and #$FD
Expand All @@ -386,7 +398,7 @@
and #$04
beq @renderStats
lda #$21
@@ -2592,18 +2640,18 @@ copyPlayfieldRowToVRAM:
@@ -2592,18 +2641,18 @@ copyPlayfieldRowToVRAM:
lda playfieldAddr+1
cmp #$05
beq @playerTwo
Expand All @@ -407,7 +419,7 @@

@onePlayer:
lda vramPlayfieldRows,x
@@ -2653,18 +2701,18 @@ @twoPlayers:
@@ -2653,18 +2702,18 @@ @twoPlayers:
lda playfieldAddr+1
cmp #$04
bne @player2
Expand All @@ -428,7 +440,7 @@
iny
lda vramPlayfieldRows,y
sta generalCounter2
@@ -2717,11 +2765,11 @@ @copyPalettes:
@@ -2717,11 +2766,11 @@ @copyPalettes:
lda #$00
sta generalCounter
@copyPalette:
Expand All @@ -441,7 +453,7 @@
sta PPUADDR
lda colorTable,x
sta PPUDATA
@@ -2767,11 +2815,12 @@ @ret: rts
@@ -2767,11 +2816,12 @@ @ret: rts

playState_spawnNextTetrimino:
lda vramRow
Expand All @@ -455,7 +467,7 @@
lda twoPlayerPieceDelayCounter
cmp #$00
bne @twoPlayerPieceDelay
@@ -2796,24 +2845,25 @@ @notDelaying:
@@ -2796,24 +2846,25 @@ @notDelaying:
sta tetriminoY
lda #$01
sta playState
Expand Down Expand Up @@ -484,7 +496,7 @@
sta autorepeatY
@ret: rts

@@ -2832,43 +2882,47 @@ chooseNextTetrimino:
@@ -2832,43 +2883,47 @@ chooseNextTetrimino:
tax
lda spawnTable,x
rts
Expand Down Expand Up @@ -542,7 +554,7 @@
tetriminoTypeFromOrientation:
.byte $00,$00,$00,$00,$01,$01,$01,$01
.byte $02,$02,$03,$04,$04,$05,$05,$05
@@ -3128,11 +3182,12 @@ @ret: rts
@@ -3128,11 +3183,12 @@ @ret: rts

playState_receiveGarbage:
lda numberOfPlayers
Expand All @@ -556,7 +568,7 @@
cmp #$20
bmi L9B52
lda multBy10Table,y
@@ -3154,11 +3209,11 @@ L9B31: cpx garbageHole
@@ -3154,11 +3210,11 @@ L9B31: cpx garbageHole
beq @garbageEmptySpace
lda #$78
jmp @placeGarbage
Expand All @@ -569,38 +581,21 @@
inx
cpx #$0A
bne L9B45
@@ -3387,18 +3442,25 @@ gameModeState_handleGameOver:
beq @ret
lda #$04
@@ -3389,11 +3445,12 @@ gameModeState_handleGameOver:
sta generalCounter2
lda player2_playState
cmp #$00
- bne @ret
+ bne @clearAAndRet
bne @ret
@gameOver:
- lda numberOfPlayers
+ ;lda numberOfPlayers
+ lda #$01
cmp #$01
beq @onePlayerGameOver
- lda #$09
- sta gameModeState
- rts
+ ;lda #$09
+ ;sta gameModeState
+ ;rts
+@clearAAndRet:
+; put known data in a, to avoid it from matching "cmp gameModeState" in
+; @mainLoop. In 1 player mode, numberOfPlayers will be in a.
+ lda #$00
+ beq @ret
+ nop

@onePlayerGameOver:
lda #$03
sta renderMode
lda numberOfPlayers
@@ -3823,11 +3885,11 @@ L9FE9: ldy #$00
lda #$09
sta gameModeState
rts
@@ -3823,11 +3880,11 @@ L9FE9: ldy #$00
sty PPUSCROLL
sty PPUSCROLL
rts
Expand All @@ -613,7 +608,7 @@
jmp LA085

L9FFB: jsr bulkCopyToPpu
@@ -6204,17 +6266,17 @@ dmc1: .byte $6D,$6E,$6F,$5F,$3C,$33,
@@ -6204,17 +6261,17 @@ dmc1: .byte $6D,$6E,$6F,$5F,$3C,$33,
.byte $87,$78,$84,$7A,$77,$87,$78,$84
.byte $7A,$67,$87,$77,$87,$77,$72,$83
.byte $80,$81,$77,$67,$82,$79,$7A,$67
Expand Down
22 changes: 22 additions & 0 deletions twoplayer.s
Original file line number Diff line number Diff line change
Expand Up @@ -516,3 +516,25 @@ gameMode_levelMenu_processPlayer2Navigation:
@doneProcessing:
jsr updateAudioWaitForNmiAndResetOamStaging
jmp @afterPatch


gameModeState_handleGameOver_mod:
.export gameModeState_handleGameOver_mod
lda numberOfPlayers
cmp #$01
bne @twoPlayers
jmp gameModeState_handleGameOver

@twoPlayers:
lda player1_playState
ora player2_playState
cmp #$00
beq @gameOver
; put known data in a, to avoid it from matching "cmp gameModeState" in
; @mainLoop. In 1 player mode, numberOfPlayers will be in a.
lda #$00
inc gameModeState
rts

@gameOver:
jmp gameModeState_handleGameOver

0 comments on commit 59baf36

Please sign in to comment.