Skip to content

Commit

Permalink
taus: Split playerid into separate mod
Browse files Browse the repository at this point in the history
Shrunk size to fit in unreferenced_data3, to ease CODE location
allocation. The IPS does not conflict with twoplayer, but combining the
two is untested.
  • Loading branch information
ejona86 committed Mar 23, 2020
1 parent 46657f6 commit afe414c
Show file tree
Hide file tree
Showing 4 changed files with 57 additions and 45 deletions.
11 changes: 7 additions & 4 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
all: tetris taus screens custom handicap twoplayer build/game_palette.pal build/menu_palette.pal build/game_nametable.nam build/level_menu_nametable.nam
all: tetris taus screens custom handicap twoplayer playerid build/game_palette.pal build/menu_palette.pal build/game_nametable.nam build/level_menu_nametable.nam

# Manually list prerequisites that are generated. Non-generated files will
# automatically be computed.
Expand All @@ -14,7 +14,8 @@ build/twoplayer-CHR-01.chr.ips.o: build/twoplayer.chrs/fake
build/twoplayer-tetris-PRG.s: build/tetris-PRG.s
# List linker dependencies. There should be a .cfg for each target
build/tetris.nes: build/tetris.o build/tetris-CHR.o build/tetris-PRG.o build/tetris-ram.o
build/taus.ips: build/taus.o build/ips.o build/fastlegal.o build/playerid.o build/chart.o
build/taus.ips: build/taus.o build/ips.o build/fastlegal.o build/chart.o
build/playerid.ips: build/ips.o build/playerid.o
build/screens.ips: build/screens.o build/ips.o
build/highscores.ips: build/highscores.o build/ips.o
build/handicap.ips: build/handicap.o build/ips.o
Expand All @@ -25,9 +26,10 @@ build/taus.nes: build/tetris.nes
build/screens.nes: build/tetris.nes
build/highscores.nes: build/tetris.nes
build/handicap.nes: build/tetris.nes
build/playerid.nes: build/tetris.nes
build/twoplayer-CHR-01.chr: build/tetris-CHR-01.chr
# Combine mods
build/custom.nes: build/taus.ips build/highscores.ips
build/custom.nes: build/taus.ips build/highscores.ips build/playerid.ips

build/twoplayer.dist.ips: build/tetris.nes build/twoplayer.nes
flips --create $^ $@ > /dev/null
Expand Down Expand Up @@ -91,9 +93,10 @@ screens: build/screens.nes
custom: build/custom.nes
handicap: build/handicap.nes
twoplayer: build/twoplayer.nes build/twoplayer.dist.ips
playerid: build/playerid.nes

# These are simply aliases
.PHONY: all dis tetris taus screens custom handicap twoplayer
.PHONY: all dis tetris taus screens custom handicap twoplayer playerid
# These are "true" phonies, and always execute something
.PHONY: test

Expand Down
29 changes: 29 additions & 0 deletions playerid.ips.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
MEMORY {
IPSHDR: start = $0000, size = $0005;
JMP_GAME_SHOW_PLAYERID_SPRITEHDR:start = $0000, size = $0005;
JMP_GAME_SHOW_PLAYERID_SPRITE: start = $8180, size = $0003;
JMP_LEVEL_MENU_CHECK_SELECT_PRESSEDHDR:start = $0000, size = $0005;
JMP_LEVEL_MENU_CHECK_SELECT_PRESSED: start = $84AE, size = $0004;
JMP_MENU_SHOW_PLAYERID_BGHDR:start = $0000, size = $0005;
JMP_MENU_SHOW_PLAYERID_BG: start = $85EC, size = $0003;
JMP_GAME_SHOW_PLAYERID_BGHDR:start = $0000, size = $0005;
JMP_GAME_SHOW_PLAYERID_BG: start = $8636, size = $0003;
CODEHDR:start = $0000, size = $0005;
CODE: start = $E103, size = $023F;
IPSEOF: start = $0000, size = $0003;
}

SEGMENTS {
IPSHEADER:load = IPSHDR;
IPSEOF: load = IPSEOF;
CODEHDR: load = CODEHDR;
CODE: load = CODE, define = yes;
JMP_LEVEL_MENU_CHECK_SELECT_PRESSEDHDR: load = JMP_LEVEL_MENU_CHECK_SELECT_PRESSEDHDR;
JMP_LEVEL_MENU_CHECK_SELECT_PRESSED: load = JMP_LEVEL_MENU_CHECK_SELECT_PRESSED, define = yes;
JMP_GAME_SHOW_PLAYERID_SPRITEHDR: load = JMP_GAME_SHOW_PLAYERID_SPRITEHDR;
JMP_GAME_SHOW_PLAYERID_SPRITE: load = JMP_GAME_SHOW_PLAYERID_SPRITE, define = yes;
JMP_GAME_SHOW_PLAYERID_BGHDR: load = JMP_GAME_SHOW_PLAYERID_BGHDR;
JMP_GAME_SHOW_PLAYERID_BG: load = JMP_GAME_SHOW_PLAYERID_BG, define = yes;
JMP_MENU_SHOW_PLAYERID_BGHDR: load = JMP_MENU_SHOW_PLAYERID_BGHDR;
JMP_MENU_SHOW_PLAYERID_BG: load = JMP_MENU_SHOW_PLAYERID_BG, define = yes;
}
46 changes: 21 additions & 25 deletions playerid.s
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,9 @@

.segment "JMP_LEVEL_MENU_CHECK_SELECT_PRESSED"

; at start of @showSelection, replaces "lda selectingLevelOrHeight; bne @showSelectionLevel"
jmp level_menu_check_select_pressed
; at gameMode_levelMenu_handleLevelHeightNavigation, replaces "lda newlyPressedButtons; cmp #$01"
jsr level_menu_check_select_pressed
nop
afterJmpLevelMenuCheckSelectPressedMod:

.segment "JMP_GAME_SHOW_PLAYERID_SPRITEHDR"
ips_hunkhdr "JMP_GAME_SHOW_PLAYERID_SPRITE"
Expand Down Expand Up @@ -52,40 +51,37 @@ afterJmpLevelMenuCheckSelectPressedMod:
sta PPUSCROLL
.endif

.segment "CODEHDR"
ips_hunkhdr "CODE"

.segment "CODE"

playerId := $0003
showSelectionLevel := $855F

level_menu_check_select_pressed:
lda newlyPressedButtons
cmp #$20
bne level_menu_check_select_pressed_render
lda playerId
cmp #$07
beq reset_playerid
bne @render
inc playerId
jmp level_menu_check_select_pressed_render
reset_playerid:
lda #$00
lda playerId
and #$07
sta playerId
level_menu_check_select_pressed_render:
@render:
.ifdef PLAYERID_SPRITE
jsr stagePlayerIdSprite
.endif

lda selectingLevelOrHeight
bne level_menu_check_select_return_level
jmp afterJmpLevelMenuCheckSelectPressedMod
level_menu_check_select_return_level:
jmp showSelectionLevel
; replaced code
lda newlyPressedButtons
cmp #$01
rts

.ifdef PLAYERID_SPRITE
game_show_playerid_sprite:
jsr stageSpriteForNextPiece
stagePlayerIdSprite:
lda playerId
beq stagePlayerIdSprite_return
beq @ret
ldx oamStagingLength
lda #$07
sta oamStaging,x
Expand All @@ -95,19 +91,19 @@ stagePlayerIdSprite:
inx
lda gameMode
cmp #$03
beq stagePlayerIdSprite_menu
beq @menu
lda #$03
jmp stagePlayerIdSprite_control
stagePlayerIdSprite_menu:
jmp @control
@menu:
lda #$00
stagePlayerIdSprite_control:
@control:
sta oamStaging,x
inx
lda #$F8
sta oamStaging,x
inx
stx oamStagingLength
stagePlayerIdSprite_return:
@ret:
rts

.else
Expand All @@ -129,9 +125,9 @@ game_show_playerid_bg:
lda #$3F
sta PPUADDR
lda playerId
bne game_show_playerid_bg_display
bne @display
lda #$82
game_show_playerid_bg_display:
@display:
sta PPUDATA
rts
.endif
16 changes: 0 additions & 16 deletions taus.ips.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,8 @@ MEMORY {
IPSHDR: start = $0000, size = $0005;
JMP_RENDER_MODHDR:start = $0000, size = $0005;
JMP_RENDER_MOD: start = $800E, size = $0003;
JMP_GAME_SHOW_PLAYERID_SPRITEHDR:start = $0000, size = $0005;
JMP_GAME_SHOW_PLAYERID_SPRITE: start = $8180, size = $0003;
SKIP_LEGALHDR:start = $0000, size = $0005;
SKIP_LEGAL: start = $8236, size = $0002;
JMP_LEVEL_MENU_CHECK_SELECT_PRESSEDHDR:start = $0000, size = $0005;
JMP_LEVEL_MENU_CHECK_SELECT_PRESSED: start = $8555, size = $0004;
JMP_MENU_SHOW_PLAYERID_BGHDR:start = $0000, size = $0005;
JMP_MENU_SHOW_PLAYERID_BG: start = $85EC, size = $0003;
JMP_GAME_SHOW_PLAYERID_BGHDR:start = $0000, size = $0005;
JMP_GAME_SHOW_PLAYERID_BG: start = $8636, size = $0003;
JMP_INIT_GAME_STATEHDR:start = $0000, size = $0005;
JMP_INIT_GAME_STATE: start = $86E2, size = $0003;
JMP_RENDER_STATSHDR:start = $0000, size = $0005;
Expand Down Expand Up @@ -61,12 +53,4 @@ SEGMENTS {
JMP_RENDER_MOD: load = JMP_RENDER_MOD, define = yes;
JMP_RENDER_STATSHDR: load = JMP_RENDER_STATSHDR;
JMP_RENDER_STATS: load = JMP_RENDER_STATS, define = yes;
JMP_LEVEL_MENU_CHECK_SELECT_PRESSEDHDR: load = JMP_LEVEL_MENU_CHECK_SELECT_PRESSEDHDR;
JMP_LEVEL_MENU_CHECK_SELECT_PRESSED: load = JMP_LEVEL_MENU_CHECK_SELECT_PRESSED, define = yes;
JMP_GAME_SHOW_PLAYERID_SPRITEHDR: load = JMP_GAME_SHOW_PLAYERID_SPRITEHDR;
JMP_GAME_SHOW_PLAYERID_SPRITE: load = JMP_GAME_SHOW_PLAYERID_SPRITE, define = yes;
JMP_GAME_SHOW_PLAYERID_BGHDR: load = JMP_GAME_SHOW_PLAYERID_BGHDR;
JMP_GAME_SHOW_PLAYERID_BG: load = JMP_GAME_SHOW_PLAYERID_BG, define = yes;
JMP_MENU_SHOW_PLAYERID_BGHDR: load = JMP_MENU_SHOW_PLAYERID_BGHDR;
JMP_MENU_SHOW_PLAYERID_BG: load = JMP_MENU_SHOW_PLAYERID_BG, define = yes;
}

0 comments on commit afe414c

Please sign in to comment.