From 0a2151772177f460c12eb395d985f45d8dec9755 Mon Sep 17 00:00:00 2001 From: RochesterX Date: Sat, 21 Feb 2026 20:35:58 -0500 Subject: [PATCH] Nametable two collision; collision flag --- plat.nes | Bin 40976 -> 40976 bytes plat.s | 188 +++++++++++++++++++++++++++++++++++++------------------ 2 files changed, 126 insertions(+), 62 deletions(-) diff --git a/plat.nes b/plat.nes index 56e6e43aca13bac00d46a5ecea811d4da993cf07..0b2ffa3fca1c68564a3b426b202d2e50c7f0f7b3 100644 GIT binary patch delta 1356 zcmb7COK1~87@keCn`FDqCMMnHL6bqmwp7H6RMCS6#Ud*z1w9G56k7#B@S>tg+Ri3T zTP)1ML#dC*)@(o&i;o@xxm4O)6xyTIgHjJdL<$O`{`+dv#47#+ll@*Z^Uq|e;+U#9 zo*rcOvg0$zwYG|<*73Db{3Wd&AtBPHArdDE{C4=U1FP}y5JTeloq}uh0<*_2WtULR zt^FcFc{+nzv-BZzimwXt=ZxBNjH}Tf%uyX48djq^JmDyHkru6s?0{8+$z%axtgqlz z1KuBi+3`aD=#TlH6$3n<^GNSYrvn_n8{S9RvaidcO>18hgXzGhKlAyu58&v!eCR9FtF9{BPScn@vYB!@Kw(|y!<*oCqG=&a7XO=lXS zK{nQ}8yk9i-9T9_EH}}Xu+kvty@}9KP_cUx6`JB^8JX^OC!~r3@1(ZqPhVablW%18 zH%rr#?s)KC68;KNm7k5SqAGXb6DvQXx0)mGt%&MQFn8&K8+Uf)!b4p6qB)Aj18>=+ zFK2G@(@4ZUxbyZu5>KqeInPeVbdtXDw5Kx29B6n18I?f-Pza3@3tGD9Gj#!U0X{9f zk+*d_znyNbV&`QW+QeV*M0QKr8`=rc2Mr}s6MESk{CWjJsK=lR+#hxG1~&874QzN} zL;I2p4)CT06u_b{W!phA2pgLKW~*#$^aKaAah;xrs`rmWnK;xYwWClthETW-MNkY$ gQG_DVb`+!6`Hqk-Ge*Tg0|mz19e(}l9G~X!Z@TxAGynhq delta 1190 zcmbVKO=uHA6rM@4KiLgt)3h-SG#SK$qNubNMNkWhqN|Nw6l*aaf{E=x#FG`%zuBaL z*1#YLB1mLHHngA=1P_t)ptL807eOyMc!&oj3Oy7=o!M+{8fa19E|2-X_q{jo@g`Ss zKuYch|?AA7ShO@K`+v1D6L!JQgw-_ouIK5%0D=pCOe|Q6BlOt{9)udtUuHASqP*jx83XMG0bsx79FpX04T}J{ zc@Rp>n6of|mYnl0Sr)8R(y#6pAUAgEP4Nkp^|C~5=2RM+j#w^W_%qtPyAx5 lIspIHn7V0aNB_UG&aS|ANZu;F3tj5UZ4y=QEhu9m`VA~8UxNSu diff --git a/plat.s b/plat.s index e2b4ac2..534ca81 100644 --- a/plat.s +++ b/plat.s @@ -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 level, X + 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 level, X + 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 level, X + 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 level, X + 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 +