
    Ah                        S SK r S SKrS SKrSSKJr  SSKJr  \" S5       r\R                  " \5      r
SSS5        \
S   r\
S   r\\-  rSrS	rS rSr/ S
Qr\R&                  S4S\R&                  S4S\R(                  S4S\R(                  S4S\R&                  S4S\R&                  S4S\R(                  S4S\R(                  S4S0r " S S5      rg! , (       d  f       N= f)    N   )Cart)PPUzconfig.jsonscalepscale      )@)   r
   r
   )r   =      )r         )D   r      )   r   ^   )   r   (   )      r   )      r   )\   /   r   )   E   r   )   J   r   )r   G   .   )r   A   f   )r   r   r   r   r   r   r#   )r   r   r   )r   w      )!   U   r%   )   7      )   r      )r%   )   P   )r%   "   r   )   2   r   )   b   r   )5   r
   r   )r      r   )r      r'   )r         )r&   r&   r&   	   r:   r:   r9   r%   r%   r%   )      r%   )i      r%   )   r
   r%   )r%   r      )r%   a      )r%      3   )r%      r   )r*          )         )+   r	   r4   )   r	      )r      r%   )r   r   r      rQ   rQ   rP   r;   )r      r%   )      r%   )      r+   )r%         )r%   rV   rS   )r%      r   )r%      r   )r%      rF   )r=         )r         )r?      rU   )r7   r%   rR   )   ra   ra      rc   rc   rb   i    )r      rd      i (  i $  )rd   re   r   rd   i ,  c                       \ rS rSrS rSS\4S jjrS\4S jrS rS r	SS jr
S	 rS\4S
 jrS\4S jrS rS rS\4S jrSrg)Frame4   c                     [         R                  R                  [        [        -  [
        [        -  45      U l        [         R                  " [        [
        45      U l        Xl	        0 U l
        SU l        g )Nr   )pygamedisplayset_modeWIDTHXSCALEHEIGHTwindowSurfacebufferpalettecachescanline)selfrs   s     ;C:\Users\trevor\Downloads\nes_v0.5\nes_v0.5\engine\frame.py__init__Frame.__init__6   sL    ..))56>6F?*KLDK..%1DKLDJDM    ppuc                     X R                   :X  a  g U(       a  SU l         U R                  US5        US:  aA  U R                  R                  SUSSU-
  45      R	                  5       nUR                  S5        UR                  nUR                  n[        UR                  UR                  5       4   nUR                  US   US    n	UR                  US   US    n
[        U R                   U5      nU R                  XXgSS4U* U* U5        US:  a  U R                  XSSUS4SU-
  SU5        O"US:  a  U R                  XSSSU4SSU-
  U5        U R                  US5        X l         US:  a  U R                  R                  WSU45        g g )Nr   r   r	   r   r   r   r   r         )ru   render_spritesrr   
subsurfacecopyfillscrl_scroll_xscrl_scroll_yPS_NAMETABLEmirroring_typectrl_nametable_addrvramrangerender_name_tableblit)rv   r{   ru   cycle	new_frame	lower_scrscroll_xscroll_y	ntbl_addrp_ntbls_ntbl
scan_ranges               rw   renderFrame.render>   s   == dm
#q! #~++((!XsC(N)KLQQSinn\"   H  H S//1H1H1JJKIXXil9Q<0FXXil9Q<0Ft}}h/J 		3$i(	 !|
	
Axh	 
A
	
AsH	3>	 	QM#~
kky1h-0 rz   c                    UR                  5       nUSS n[        S5       Hb  n	U	S-	  n
U
S-  U-   U;  a    g U	S-  nX)   nX|S-  -  nU R                  UR                  XS-    U R	                  XX5      US-  U
S-  X4UU5        Md     g )Ni  rd   r   r         r   )ctrl_bknd_pattern_addrr   render_nt_tilechr_rom
bg_palette)rv   r{   	nametableviewportshift_xshift_yr   bankattribute_tableitile_rowtile_coltile_idxtile_mems                 rw   r   Frame.render_name_tablet   s    %%'De,O6]ah!mw&*4ZhhQ'h
H"}-hAAx1}7 rz   c	                     X5S   S-
  :  d  X5S   :  a  g XES   S-
  :  d  XES   :  a  g U R                  XX6-   XG-   U5        g )Nr      r~   r   r   )	blit_tile)	rv   tilers   x_posy_posr   r   r   r   s	            rw   r   Frame.render_nt_tile   sN    {Q{QNN4%/5?HMrz   c                    [        S[        UR                  5      S5       H  nUR                  US-     nUS-  S-	  U:w  a  M#  UR                  US-     nUR                  5       US-  -   nU R	                  UR
                  XfS-    U R                  XS-  5      UR                  US-     UR                  U   UUS	-  S:g  US
-  S:g  45        M     g )Nr   r   r~   rH   r   r   r   r   @   r
   )r   lenoam_datactrl_sprt_pattern_addrr   r   sprite_palette)rv   r{   priorityr   attrr   tile_poss          rw   r   Frame.render_sprites   s    4S\\*D1\\!a% d

	!X	-a!e$h ++-Q?h
nnH"}-C
!23QUS\\!_h	
	a	
!2a!78	 2rz   c                 j    U R                  XXV5      nUc  g U R                  R                  XU45        g N)cache_return_tilerr   r   )rv   r   rs   r   r   r   flips          rw   r   Frame.blit_tile   s2    !!$@D|KKT5>*rz   c                 L   [        X2U45      nXPR                  ;   a  U R                  U   $ U(       d  S U R                  U'   g [        S5      n[        S5       H  nXS-      S-  nX   n	[        S5       Hk  n
US-  U	S-  -  nUS-  nU	S-  n	US   (       a  U
OSU
-
  nUS-  U-  S-  nUS:X  a  / SQXmUS	-   & ME  [	        U R
                  X+   S
-     5      S/-   XmUS	-   & Mm     M     [        R                  R                  [        U5      SSUS   5      nX`R                  U'   U$ )Nr   r   r   r~   r      r   r}   r   ?   r%   )r   r   RGBA)
hashrt   	bytearrayr   listrs   rj   image	frombytesbytes)rv   r   rs   r   r   nameimgyupperlowerxvaluepxpis                 rw   r   Frame.cache_return_tile   s6   D)*DzzZZdjj
C.C1Xq5kQegeQx!uqy)!!q'Qq1uAvm!A:'#a.
dll7>D+@ABcUJrAv   ,,
 
 sVVT!W
ECJJtJrz   c                     SUS-  -   nUR                   S   UR                   U   UR                   US-      UR                   US-      4$ )Nrc   r~   r   r   rs   )rv   r{   palette_idxpalette_starts       rw   r   Frame.sprite_palette   sT    K1,-M	kk!n	kk- 	kk-!#$	kk-!#$	 rz   c                     SX$S-  S-  US-	  -      US-  S-  US-  -  -	  S-  S-  -   nUR                   S   UR                   U   UR                   US-      UR                   US-      4$ )Nr   x   r~   r   r   r   )rv   r{   
attr_tabler   r   r   s         rw   r   Frame.bg_palette   s    :1}y'@XQR]&ST[cfj[jopZpu}  AE  vE  ZF  G  KO  O  TU  U  VM 
kk!n	kk- 	kk-!#$	kk-!#$	 rz   c                 P    U R                   R                  X4[        U5      5        g r   )rp   set_attuple)rv   r   r   rgbas       rw   	set_pixelFrame.set_pixel   s    KKvuT{+rz   c           
         [         S:X  a  U R                  nOB[        R                  R	                  U R                  [
        [         -  [        [         -  45      n[        S:X  a  U$ [        [        S[        R                  " [        R                  " [        5      5      5      5       H"  n[        R                  R                  U5      nM$     [        R                  R	                  U[
        [        -  [        [        -  45      nU$ )Nr   r   )PSCALErr   rj   	transformr   rm   ro   SCALEr   maxmathceillog2scale2xrn   )rv   surfacer   s      rw   fancyscale_bufferFrame.fancyscale_buffer   s    {g  &&t{{UV^Vf_4UVgzn3q$))DIIe$4567  ((1g 8 $$Wuv~v.OPGNrz   c                    SU l         U R                  R                  U R                  5       S5        [        R
                  R                  5         U R                  R                  U R                  UR                  S      5        g )Nr   r   r   )
ru   rp   r   r   rj   rk   r   rr   r   rs   )rv   r{   s     rw   updateFrame.update   sY    DMKKT++-v6
NNKKT\\#++a.12rz   )rr   rt   rs   ru   rp   N)i  r   F)r   )__name__
__module____qualname____firstlineno__rx   r   r   r   r   r   r   r   r   r   r   r   r   __static_attributes__ rz   rw   rg   rg   4   sc    21 21l3 0N(+8 C ,
$3 3rz   rg   )rj   r   jsoncartr   r{   r   openfloadconfigr   r   rn   rm   ro   SPRITE_MODEBG_MODESYSTEM_PALETTEMIRROR_VERTICALMIRROR_HORIZONTALr   rg   r   rz   rw   <module>r     s       	-A99Q<&  	w				
(  $@ $@6"$@6"$@ $@ $@6"$@6"$@
O3 O3[ s   C
C"