Skip to content

Commit

Permalink
handicap: Make more compatible with twoplayer
Browse files Browse the repository at this point in the history
Hasn't actually been tested with twoplayer, but made the IPS hunks
non-conflicting and added player2 logic. Unfortunately, it is 5 bytes
too large to fit in the leftover space of
height_menu_nametablepalette_patch.
  • Loading branch information
ejona86 committed Mar 16, 2020
1 parent 0db887f commit c1246b3
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 38 deletions.
12 changes: 6 additions & 6 deletions handicap.ips.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,21 @@ MEMORY {
ENABLE_HEIGHT_IN_TYPE_A2HDR:start = $0000, size = $0005;
ENABLE_HEIGHT_IN_TYPE_A2: start = $8581, size = $0002;
JMP_INIT_GAME_STATEHDR:start = $0000, size = $0005;
JMP_INIT_GAME_STATE: start = $86E2, size = $0003;
JMP_INIT_GAME_STATE: start = $873F, size = $0003;
IS_POSITION_VALID_MODHDR:start = $0000, size = $0005;
IS_POSITION_VALID_MOD: start = $94B2, size = $0002;
JMP_CHECK_FOR_COMPLETED_ROWSHDR:start = $0000, size = $0005;
JMP_CHECK_FOR_COMPLETED_ROWS: start = $9A74, size = $0003;
JMP_CHECK_FOR_COMPLETED_ROWS: start = $9A8C, size = $0003;
TYPE_A_MENU_PATCHHDR:start = $0000, size = $0005;
TYPE_A_MENU_PATCH :start = $C95D, size = $0049;
CODEHDR:start = $0000, size = $0005;
CODE: start = $D6C9, size = $0637;
UNREFERENCED_DATA3HDR:start = $0000, size = $0005;
UNREFERENCED_DATA3: start = $E0C8, size = $003B;
IPSEOF: start = $0000, size = $0003;
}

SEGMENTS {
IPSHEADER:load = IPSHDR;
IPSEOF: load = IPSEOF;
CODEHDR: load = CODEHDR;
CODE: load = CODE, define = yes;
ENABLE_HEIGHT_IN_TYPE_AHDR:load = ENABLE_HEIGHT_IN_TYPE_AHDR;
ENABLE_HEIGHT_IN_TYPE_A: load = ENABLE_HEIGHT_IN_TYPE_A, define = yes;
ENABLE_HEIGHT_IN_TYPE_A2HDR:load = ENABLE_HEIGHT_IN_TYPE_A2HDR;
Expand All @@ -34,4 +32,6 @@ SEGMENTS {
JMP_CHECK_FOR_COMPLETED_ROWS: load = JMP_CHECK_FOR_COMPLETED_ROWS, define = yes;
TYPE_A_MENU_PATCHHDR: load = TYPE_A_MENU_PATCHHDR;
TYPE_A_MENU_PATCH: load = TYPE_A_MENU_PATCH, define = yes;
UNREFERENCED_DATA3HDR: load = UNREFERENCED_DATA3HDR;
UNREFERENCED_DATA3: load = UNREFERENCED_DATA3, define = yes;
}
74 changes: 42 additions & 32 deletions handicap.s
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,6 @@
.include "build/tetris.inc"
.include "ips.inc"

.segment "CODEHDR"
ips_hunkhdr "CODE"

.segment "CODE"

.byte $FF

.segment "TYPE_A_MENU_PATCHHDR"
ips_hunkhdr "TYPE_A_MENU_PATCH"

Expand All @@ -22,61 +15,78 @@
.byte $20,$6D,$01,$0A
.byte $FF

playfieldSize := $0003
playfieldSize := $0043
player1_playfieldSize := $0063
player2_playfieldSize := $0084

initGameState_mod:
jsr memset_page
jsr chooseNextTetrimino ; replaced code

jsr makePlayer1Active
jsr initPlayfieldSize
jsr savePlayer1State

jsr makePlayer2Active
jsr initPlayfieldSize
jmp savePlayer2State

initPlayfieldSize:
lda gameType
bne @typeB
ldy startHeight
lda heightToSizeTable,y
sta playfieldSize
ldx typeBBlankInitCountByHeightTable,y

ldx startHeight
ldy typeBBlankInitCountByHeightTable,x
lda #$4F
@setRows:
cpx #200
cpy #200
beq @ret
sta playfield,x
inx
sta (playfieldAddr),y
iny
bne @setRows

@typeB:
lda #$16
sta playfieldSize
ldx #$00
@ret:
lda heightToSizeTable,x
sta playfieldSize
rts


heightToSizeTable:
.byte 20+2, 17+2, 15+2, 12+2, 10+2, 8+2

.segment "UNREFERENCED_DATA3HDR"
ips_hunkhdr "UNREFERENCED_DATA3"

.segment "UNREFERENCED_DATA3"

checkForCompletedRows_mod:
lda tetriminoY
clc
adc lineIndex
tay ; replaced code
lda generalCounter2
; clc performed recently
adc #$02
cmp playfieldSize
bpl @skip
; run replaced code
lda tetriminoY
sec
jmp afterCheckForCompletedRowsMod
@skip:
jmp $9ACC ; @rowNotComplete
bmi @noskip
ldy #$FF ; (playfieldAddr),#$FF is always $EF
@noskip:
ldx #$0A ; replaced code
rts

.segment "JMP_INIT_GAME_STATEHDR"
ips_hunkhdr "JMP_INIT_GAME_STATE"

.segment "JMP_INIT_GAME_STATE"

; at beginning of initGameState, replaces "jsr memset_page"
; within initGameState, replaces "jsr chooseNextTetrimino" after "sta player2_autorepeatY"
jsr initGameState_mod

.segment "JMP_CHECK_FOR_COMPLETED_ROWSHDR"
ips_hunkhdr "JMP_CHECK_FOR_COMPLETED_ROWS"

.segment "JMP_CHECK_FOR_COMPLETED_ROWS"

; at @updatePlayfieldComplete in playState_checkForCompletedRows, replaces "lda tetriminoY; sec"
jmp checkForCompletedRows_mod
afterCheckForCompletedRowsMod:
; at @yInRange in playState_checkForCompletedRows, replaces "tay; ldx #$0A"
jsr checkForCompletedRows_mod

.segment "ENABLE_HEIGHT_IN_TYPE_AHDR"
ips_hunkhdr "ENABLE_HEIGHT_IN_TYPE_A"
Expand Down

0 comments on commit c1246b3

Please sign in to comment.