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.

180
plat.s
View File

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