From 8cc2052c99ab6f42657509821238364259fc0191 Mon Sep 17 00:00:00 2001 From: RochesterX Date: Sat, 21 Feb 2026 16:01:27 -0500 Subject: [PATCH] Drawing player across two nametables complete --- plat.nes | Bin 40976 -> 40976 bytes plat.s | 127 ++++++++++++++++++++++++++++++++++++++++--------------- 2 files changed, 94 insertions(+), 33 deletions(-) diff --git a/plat.nes b/plat.nes index 9c9c72f43616632cfbbd307ef4c4cefcb735271c..af23c2dea62806b6f46de5824cc89ce907b9e524 100644 GIT binary patch delta 834 zcma)&!Hd&C6vmTjnzre(Np>x!)V5CrK@r-6$m(SaWwl~N>>nT=T(o-7gD7~}rgqY8 zAXu2Qixfwif>2yo@DM1%9(s|2hZPU9mxX$=3L@@7oTO1(L6CuA-tT?yn~&G(qgEgF z&hVEmT2DA(v=IvCuz!aOZjd|-|dS**@L+$wJA5>f+1)B+{8KP9b~q9 zf*nD&jF`V2LUtVK#o7e>m52R48>zBzVP{1z*GL!ve~%nPrTj~Cz>Q;6ja9L#zwv%u z!)luY>~W>d(*-Ou_yemnjk92p4RroQ@e!4^ih^aP5%U6Ds0^+*Fi#H+_;J+vjuj@) zfJ@}iRfOu~PUv!SV8Yu5JZ!+>hJLip?w}lyozRtH+0<4OT{pMh4#O$4>&liL0ax+v zo88f_GTdo%R>@2_3j8fqed&TlZVM-ix%G|{W|GdUMGGg~{8TAPs|kjdXHWnOQ;@tD z&i=}iZT@$j-_n^p+2%|hm@0#>b2BJ_`6y delta 767 zcmbPmfN8=3rVW;i^&dLtGO)aOpfKU9!joo&j}0pwT7_FhRx-58w#q5!HLYb*SSl-# z$=E8ZAljx7-K3Dxs8H4jROjQ-xRgaAli?^!E6WD9rEH#zt!xQPxh$Tt9Oe4Jw1IOe zw=3I+V4n$%AjSo+r92id8GAXHdU=>EUJCRwF!i!9Efv&coUFnmX>z?0tg)Awsh1ll z&C$!w)XUH0^P+L(FNhYn`i7GX7g$%i`h0JkoWP{OC^@;2$-^ML?Igno&ZUB!4XuJc z#Z5qC>stjEF(_z(#03^HE){C!2MYdc6kV)mEJYg4FbSCDU4IM(KKq8Ug+ zxp|X~SOT5Dw@RdnuG)L0eG#j|&DK?Ww{-ThE9~70A~ROKcpz}$`XYudk2cYj0t)C# zw}F*z@0@&$MaTI{`-+vUKqV`7?&xe4-Fp>@%f*!{3KV*RA_NtDiX=E$kxglGII9HA zO-DM2b`xAFikpsfpt$KM5*KRy6%-+;;8i3+pqoxGHcx)VCeQJ`6%tUB1=$TWZnsHf zvPfh>V5=x7sc^u!E5Km|Rh-H0AnDvLk;#Tt_7G5Z4ldcv(j4#0Cr{vt-ptj&rT_pE CSTySZ diff --git a/plat.s b/plat.s index a639ff6..9e65f34 100644 --- a/plat.s +++ b/plat.s @@ -413,9 +413,9 @@ main: jmp @loop move_camera: - lda scroll_x + lda #%1 clc - adc #0 + adc scroll_x cmp scroll_x sta scroll_x bcs :+ @@ -426,26 +426,6 @@ move_camera: rts draw_player: - ; see if we can skip drawing the player because it's off screen - lda player_pos_x - sec - sbc scroll_x - cmp player_pos_x ; if underflow, nametable bits must be different to continue - beq @skip_bcs - bcs :+ - @skip_bcs: - lda player_nmt_x - eor scroll_nmt - beq @hide_player - jmp :++ - : - ; if nothing, nametable bits must be same to continue - lda player_nmt_x - eor scroll_nmt - bne @hide_player - : - - lda player_pos_y sec sbc #1 @@ -456,6 +436,98 @@ draw_player: sta oam + (4 * 0) + 0 sta oam + (4 * 1) + 0 + + ; RIGHT HALF LOGIC + ; see if we can skip drawing the player because it's off screen + lda player_pos_x + sec + sbc scroll_x + cmp player_pos_x ; if underflow, nametable bits must be different to continue + beq @skip_bcs_right + bcs :+ + @skip_bcs_right: + lda player_nmt_x + eor scroll_nmt + beq @hide_player_right + jmp :++ + : + ; if nothing, nametable bits must be same to continue + lda player_nmt_x + eor scroll_nmt + bne @hide_player_right + : + jmp @end_hide_player_right + + @hide_player_right: + lda player_status + and #%00000001 + cmp #0 + bne :+ + lda #250 + sta oam + (4 * 1) + 0 + sta oam + (4 * 3) + 0 + jmp :++ + : + lda #250 + sta oam + (4 * 0) + 0 + sta oam + (4 * 2) + 0 + : + + @end_hide_player_right: + + ; LEFT HALF LOGIC + ; store what nametable the player's left half is on in var_n + ; store what position the player's left half is at in var_p + lda player_pos_x + sec + sbc #8 + sta var_p + bcs :+ + lda player_nmt_x + eor #%00000001 + sta var_n + jmp :++ + : + lda player_nmt_x + sta var_n + : + + lda var_p + sec + sbc scroll_x + cmp var_p ; if underflow, nametable bits must be different to continue + beq @skip_bcs_left + bcs :+ + @skip_bcs_left: + lda var_n + eor scroll_nmt + beq @hide_player_left + jmp :++ + : + ; if nothing, nametable bits must be same to continue + lda var_n + eor scroll_nmt + bne @hide_player_left + : + jmp @end_hide_player_left + + @hide_player_left: + lda player_status + and #%00000001 + cmp #0 + bne :+ + lda #250 + sta oam + (4 * 0) + 0 + sta oam + (4 * 2) + 0 + jmp :++ + : + lda #250 + sta oam + (4 * 1) + 0 + sta oam + (4 * 3) + 0 + : + + @end_hide_player_left: + lda player_status and #%00000001 cmp #0 @@ -481,17 +553,6 @@ draw_player: sta oam + (4 * 1) + 3 sta oam + (4 * 3) + 3 : - jmp @end_hide_player - - @hide_player: - - lda #250 - sta oam + (4 * 2) + 0 - sta oam + (4 * 3) + 0 - sta oam + (4 * 0) + 0 - sta oam + (4 * 1) + 0 - - @end_hide_player: lda player_status and #%10000000