Skip to content

Commit

Permalink
twoplayer: Fix demo when two players are enabled
Browse files Browse the repository at this point in the history
As an easter egg, if one of the players moves with the controller that
player would then be playing against the demo.
  • Loading branch information
ejona86 committed Mar 20, 2020
1 parent da53266 commit bc164df
Show file tree
Hide file tree
Showing 2 changed files with 136 additions and 6 deletions.
44 changes: 41 additions & 3 deletions twoplayer-tetris-PRG.s.diff
Original file line number Diff line number Diff line change
Expand Up @@ -792,7 +792,7 @@
lda twoPlayerPieceDelayCounter
cmp #$00
bne @twoPlayerPieceDelay
@@ -2803,24 +2950,30 @@ @notDelaying:
@@ -2803,79 +2950,89 @@ @notDelaying:
sta tetriminoY
lda #$01
sta playState
Expand Down Expand Up @@ -826,11 +826,25 @@
sta autorepeatY
@ret: rts

@@ -2839,43 +2992,47 @@ chooseNextTetrimino:
chooseNextTetrimino:
lda gameMode
cmp #$05
bne pickRandomTetrimino
- ldx demoIndex
- inc demoIndex
+ .import chooseNextTetrimino_mod ; ldx demoIndex
+ jsr chooseNextTetrimino_mod ; inc demoIndex
+ nop
lda demoTetriminoTypeTable,x
lsr a
lsr a
lsr a
lsr a
and #$07
tax
lda spawnTable,x
rts
-
pickRandomTetrimino:
- jsr @realStart
- rts
Expand Down Expand Up @@ -1021,6 +1035,30 @@
adc #$04
tax
lda musicSelectionTable,x
@@ -3477,19 +3660,19 @@ pollControllerButtons:

@demoGameMode:
lda demo_recording
cmp #$FF
beq @recording
- jsr pollController
+ .import demo_pollController_mod
+ jmp demo_pollController_mod
lda newlyPressedButtons_player1
- cmp #$10
+@demo_pollController_mod_after: cmp #$10
beq @startButtonPressed
- lda demo_repeats
+@demo_pollController_mod_skip: lda demo_repeats
beq @finishedMove
dec demo_repeats
jmp @moveInProgress
-
@finishedMove:
ldx #$00
lda (demoButtonsAddr,x)
sta generalCounter
jsr demoButtonsTable_indexIncr
@@ -3830,11 +4013,11 @@ L9FE9: ldy #$00
sty PPUSCROLL
sty PPUSCROLL
Expand Down
98 changes: 95 additions & 3 deletions twoplayer.s
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,13 @@

.segment "GAMEBSS"

.ifndef TOURNAMENT_MODE
.res 1 ; must be at least size 1 to prevent init loop from breaking
.else
; 0 for both players demo
demo_playingPlayer:
.res 1
demoIndex_player2:
.res 1

.ifdef TOURNAMENT_MODE
tetrisCount_P1:
.res 1
tetrisCount_P2:
Expand Down Expand Up @@ -526,6 +530,94 @@ isStartNewlyPressed:
cmp #$10
rts

demo_pollController_mod_after := $9D66
demo_pollController_mod_skip := $9D6A
demo_pollController_mod:
.export demo_pollController_mod
jsr pollController
lda newlyPressedButtons_player1
ora newlyPressedButtons_player2
and #$10
bne @ret

lda numberOfPlayers
cmp #$02
bne @done
lda demo_playingPlayer
cmp #$01
beq @player1Playing
cmp #$02
beq @player2Playing

; check for starting player
lda newlyPressedButtons_player1
bne @startPlayer1
lda newlyPressedButtons_player2
beq @bothPlayersDemo

@startPlayer2:
lda #$02
sta demo_playingPlayer
@player2Playing:
@done:
lda #$00
@ret:
jmp demo_pollController_mod_after

@startPlayer1:
inc demo_playingPlayer
@player1Playing:
; copy player1 input to player2
lda newlyPressedButtons_player1
sta newlyPressedButtons_player2
lda heldButtons_player1
sta heldButtons_player2
jsr demo_pollController_mod_skip
; now swap player1 and player2 input
lda newlyPressedButtons_player2
sta tmp1
lda newlyPressedButtons_player1
sta newlyPressedButtons_player2
lda tmp1
sta newlyPressedButtons_player1

lda heldButtons_player2
sta tmp1
lda heldButtons_player1
sta heldButtons_player2
lda tmp1
sta heldButtons_player1
rts

@bothPlayersDemo:
jsr demo_pollController_mod_skip
lda newlyPressedButtons_player1
sta newlyPressedButtons_player2
lda heldButtons_player1
sta heldButtons_player2
rts


chooseNextTetrimino_mod:
.export chooseNextTetrimino_mod
; Assume that when demoIndex is 0/1, this is being called from
; gameModeState_initGameState and that it applies to both players
lda demoIndex
cmp #$02
bmi @bothPlayers
lda activePlayer
cmp #$01
bne @player2
ldx demoIndex
inc demoIndex
rts
@bothPlayers:
inc demoIndex
@player2:
ldx demoIndex_player2
inc demoIndex_player2
rts


gameMode_levelMenu_nametable_mod:
.export gameMode_levelMenu_nametable_mod
Expand Down

0 comments on commit bc164df

Please sign in to comment.