Nametable two collision; collision flag

This commit is contained in:
RochesterX
2026-02-21 20:35:58 -05:00
parent f8c8f37e9e
commit 0a21517721
2 changed files with 126 additions and 62 deletions

BIN
plat.nes

Binary file not shown.

188
plat.s
View File

@@ -261,69 +261,73 @@ gamepad_poll:
.segment "RODATA" .segment "RODATA"
level: level:
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,1,0,0,1,0,0,0,0,1,0,0,2,7,7,3 .byte $00,$00,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9 .byte $82,$83,$00,$00,$00,$00,$00,$00,$81,$00,$0C,$00,$81,$00,$00,$00
.byte 0,1,0,0,1,7,7,7,7,1,7,7,6,0,0,9 .byte $84,$85,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
.byte 0,0,1,1,0,0,0,0,0,1,0,0,4,8,8,5 .byte $0F,$0E,$00,$00,$00,$00,$00,$00,$0C,$00,$0C,$00,$0C,$00,$00,$00
.byte 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 .byte $0F,$0E,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $0F,$0E,$00,$00,$00,$00,$00,$00,$81,$00,$0C,$00,$81,$00,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $0F,$0E,$00,$00,$00,$00,$00,$81,$00,$81,$00,$81,$00,$81,$00,$00
.byte 0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0 .byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10 .byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,0,1,0,0,0,0,1,0,0,0,11,11,11,11,11 .byte $0F,$8C,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87,$87
.byte 0,1,2,3,4,5,6,7,8,9,0,11,11,11,11,11 .byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11 .byte $0F,$0E,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
level2: level2:
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,1,0,0,1,0,0,0,0,1,0,0,2,7,7,3 .byte $00,$8C,$8C,$8C,$8C,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9 .byte $00,$09,$0C,$0C,$0C,$8C,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,1,0,0,1,7,7,7,7,1,7,7,6,0,0,9 .byte $00,$8C,$8C,$8C,$0C,$06,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00
.byte 0,0,1,1,0,0,0,0,0,1,0,0,4,8,8,5 .byte $00,$09,$0C,$0C,$0C,$8C,$00,$00,$00,$00,$00,$82,$83,$00,$00,$00
.byte 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0 .byte $00,$8C,$8C,$8C,$8C,$8C,$00,$00,$00,$00,$00,$84,$85,$00,$00,$00
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$82,$83
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$84,$85
.byte 0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0 .byte $00,$00,$00,$00,$00,$00,$00,$00,$82,$83,$00,$0F,$0E,$00,$0F,$0E
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $00,$00,$00,$00,$00,$00,$00,$00,$84,$85,$00,$0F,$0E,$00,$0F,$0E
.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 .byte $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
.byte 0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10 .byte $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
.byte 0,0,1,0,0,0,0,1,0,0,0,11,11,11,11,11 .byte $87,$87,$87,$87,$87,$8C,$00,$00,$0F,$0E,$00,$0F,$0E,$00,$0F,$0E
.byte 0,1,2,3,4,5,6,7,8,9,0,11,11,11,11,11 .byte $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$8A,$8A,$8A,$8A,$0E
.byte 0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11 .byte $00,$00,$00,$00,$00,$00,$00,$00,$0F,$0E,$00,$8B,$8B,$8B,$8B,$0E
;level2: ;level:
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,1,0,0,1,0,0,0,0,1,0,0,2,7,7,3
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,6,0,0,9
;.byte 0,1,0,0,1,7,7,7,7,1,7,7,6,0,0,9
;.byte 0,0,1,1,0,0,0,0,0,1,0,0,4,8,8,5
;.byte 0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0 ;.byte 0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
;.byte 0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10 ;.byte 0,0,0,0,0,0,0,0,0,0,0,10,10,10,10,10
;.byte 0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11 ;.byte 0,0,1,0,0,0,0,1,0,0,0,11,11,11,11,11
;.byte 0,1,7,7,7,7,7,7,7,1,0,11,11,11,11,11 ;.byte 0,1,2,3,4,5,6,7,8,9,0,11,11,11,11,11
;.byte 0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11 ;.byte 0,0,0,0,0,0,0,0,0,0,0,11,11,11,11,11
metatiles: metatiles:
.byte 0,0,0,0,0 .byte 0,0,0,0,0
.byte $14,$15,$16,$17,1 ; Full block .byte $14,$15,$16,$17,%00000000 ; 1: Full block
.byte $14,$18,$1B,$00,0 ; up / left .byte $14,$18,$1B,$00,%00000000 ; 2: up / left
.byte $18,$15,$00,$19,0 ; up / right .byte $18,$15,$00,$19,%00000000 ; 3: up / right
.byte $1B,$00,$16,$1A,0 ; down / left .byte $1B,$00,$16,$1A,%00000000 ; 4: down / left
.byte $00,$19,$1A,$17,0 ; down / right .byte $00,$19,$1A,$17,%00000000 ; 5: down / right
.byte $1B,$00,$1B,$00,0 ; left .byte $1B,$00,$1B,$00,%00000000 ; 6: left
.byte $18,$18,$00,$00,0 ; up .byte $18,$18,$00,$00,%00000000 ; 7: up
.byte $00,$00,$1A,$1A,0 ; down .byte $00,$00,$1A,$1A,%00000000 ; 8: down
.byte $00,$19,$00,$19,0 ; right .byte $00,$19,$00,$19,%00000000 ; 9: right
.byte $10,$11,$12,$13,2 .byte $10,$11,$12,$13,%00000010 ; A: grass top
.byte $12,$12,$12,$12,2 .byte $12,$12,$12,$12,%00000010 ; B: grass bottom
.byte $14,$15,$16,$17,%00000001 ; C: Intangible full block
.byte $01,$01,$01,$01,%00000001 ; D: Intangible grey
.byte $1B,$00,$1B,$00,%00000000 ; E: Intangible left
.byte $00,$19,$00,$19,%00000000 ; F: Intangible right
example_palette: example_palette:
.byte $0F,$00,$3D,$20 ; greyscale .byte $0F,$00,$3D,$20 ; greyscale
@@ -499,13 +503,13 @@ draw_player:
@skip_bcs_right: @skip_bcs_right:
lda player_nmt_x lda player_nmt_x
eor scroll_nmt eor scroll_nmt
beq @hide_player_right bne @hide_player_right
jmp :++ jmp :++
: :
; if nothing, nametable bits must be same to continue ; if nothing, nametable bits must be same to continue
lda player_nmt_x lda player_nmt_x
eor scroll_nmt eor scroll_nmt
bne @hide_player_right beq @hide_player_right
: :
jmp @end_hide_player_right jmp @end_hide_player_right
@@ -552,13 +556,13 @@ draw_player:
@skip_bcs_left: @skip_bcs_left:
lda var_n lda var_n
eor scroll_nmt eor scroll_nmt
beq @hide_player_left bne @hide_player_left
jmp :++ jmp :++
: :
; if nothing, nametable bits must be same to continue ; if nothing, nametable bits must be same to continue
lda var_n lda var_n
eor scroll_nmt eor scroll_nmt
bne @hide_player_left beq @hide_player_left
: :
jmp @end_hide_player_left jmp @end_hide_player_left
@@ -656,7 +660,6 @@ init_objects:
sta player_vel_y sta player_vel_y
sta player_status sta player_status
sta scroll_nmt sta scroll_nmt
lda #1
sta player_nmt_x sta player_nmt_x
lda #%00101000 lda #%00101000
@@ -997,6 +1000,7 @@ setup_background:
tax tax
lda level, X lda level, X
and #%01111111
ldx #5 ldx #5
jsr mul_x jsr mul_x
tax tax
@@ -1027,6 +1031,7 @@ setup_background:
tax tax
lda level, X lda level, X
and #%01111111
ldx #5 ldx #5
jsr mul_x jsr mul_x
tax tax
@@ -1088,30 +1093,36 @@ setup_background:
tax tax
lda level, X lda level, X
and #%01111111
tay tay
lda #5 lda #5
jsr mul_y jsr mul_y
tay tay
lda metatiles+4, Y lda metatiles+4, Y
and #%00000011
sta temp_x sta temp_x
lda level+1, X lda level+1, X
and #%01111111
tay tay
lda #5 lda #5
jsr mul_y jsr mul_y
tay tay
lda metatiles+4, Y lda metatiles+4, Y
and #%00000011
asl asl
asl asl
adc temp_x adc temp_x
sta temp_x sta temp_x
lda level+16, X lda level+16, X
and #%01111111
tay tay
lda #5 lda #5
jsr mul_y jsr mul_y
tay tay
lda metatiles+4, Y lda metatiles+4, Y
and #%00000011
asl asl
asl asl
asl asl
@@ -1120,11 +1131,13 @@ setup_background:
sta temp_x sta temp_x
lda level+17, X lda level+17, X
and #%01111111
tay tay
lda #5 lda #5
jsr mul_y jsr mul_y
tay tay
lda metatiles+4, Y lda metatiles+4, Y
and #%00000011
asl asl
asl asl
asl asl
@@ -1146,13 +1159,17 @@ setup_background:
tay tay
inx inx
cpx #8 cpx #8
bne :- beq @left_jump
jmp :-
@left_jump:
pla pla
tay tay
iny iny
cpy #8 cpy #8
bne :-- beq :+
jmp :--
:
; ---------------- End nametable 1: Level ; ---------------- End nametable 1: Level
; ---------------- Begin nametable 2: Level 2 ; ---------------- Begin nametable 2: Level 2
lda $2002 lda $2002
@@ -1176,6 +1193,7 @@ setup_background:
tax tax
lda level2, X lda level2, X
and #%01111111
ldx #5 ldx #5
jsr mul_x jsr mul_x
tax tax
@@ -1206,6 +1224,7 @@ setup_background:
tax tax
lda level2, X lda level2, X
and #%01111111
ldx #5 ldx #5
jsr mul_x jsr mul_x
tax tax
@@ -1267,30 +1286,36 @@ setup_background:
tax tax
lda level2, X lda level2, X
and #%01111111
tay tay
lda #5 lda #5
jsr mul_y jsr mul_y
tay tay
lda metatiles+4, Y lda metatiles+4, Y
and #%00000011
sta temp_x sta temp_x
lda level2+1, X lda level2+1, X
and #%01111111
tay tay
lda #5 lda #5
jsr mul_y jsr mul_y
tay tay
lda metatiles+4, Y lda metatiles+4, Y
and #%00000011
asl asl
asl asl
adc temp_x adc temp_x
sta temp_x sta temp_x
lda level2+16, X lda level2+16, X
and #%01111111
tay tay
lda #5 lda #5
jsr mul_y jsr mul_y
tay tay
lda metatiles+4, Y lda metatiles+4, Y
and #%00000011
asl asl
asl asl
asl asl
@@ -1299,11 +1324,13 @@ setup_background:
sta temp_x sta temp_x
lda level2+17, X lda level2+17, X
and #%01111111
tay tay
lda #5 lda #5
jsr mul_y jsr mul_y
tay tay
lda metatiles+4, Y lda metatiles+4, Y
and #%00000011
asl asl
asl asl
asl asl
@@ -1325,13 +1352,17 @@ setup_background:
tay tay
inx inx
cpx #8 cpx #8
bne :- beq @right_jump
jmp :-
@right_jump:
pla pla
tay tay
iny iny
cpy #8 cpy #8
bne :-- beq :+
jmp :--
:
rts rts
@@ -1513,7 +1544,15 @@ downward_collision_check:
jsr mul_y jsr mul_y
adc temp_x adc temp_x
tax tax
lda level, X lda player_nmt_x
cmp #0
beq :+
lda level2, X
jmp :++
:
lda level, X
:
and #%10000000
cmp #0 cmp #0
beq :+ beq :+
tya tya
@@ -1582,7 +1621,15 @@ upward_collision_check:
jsr mul_y jsr mul_y
adc temp_x adc temp_x
tax tax
lda level, X lda player_nmt_x
cmp #0
beq :+
lda level2, X
jmp :++
:
lda level, X
:
and #%10000000
cmp #0 cmp #0
beq :+ beq :+
iny iny
@@ -1652,7 +1699,15 @@ right_collision_check:
jsr mul_y jsr mul_y
adc temp_x adc temp_x
tax tax
lda level, X lda player_nmt_x
cmp #0
beq :+
lda level2, X
jmp :++
:
lda level, X
:
and #%10000000
cmp #0 cmp #0
beq :+ beq :+
lda temp_x lda temp_x
@@ -1721,7 +1776,15 @@ left_collision_check:
jsr mul_y jsr mul_y
adc temp_x adc temp_x
tax tax
lda level, X lda player_nmt_x
cmp #0
beq :+
lda level2, X
jmp :++
:
lda level, X
:
and #%10000000
cmp #0 cmp #0
beq :+ beq :+
lda temp_x lda temp_x
@@ -1747,3 +1810,4 @@ left_collision_check:
beq @begin_check beq @begin_check
rts rts