
    ԌJjn*                        d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	  ee
      j                         j                  d   Zedz  Zdd	Zdd
ZddZddZddZddZedk(  r e e             y)zDClassify CNS frame rects against the EXE surface-wrapper draw model.    )annotationsN)Counter)Path)Any   outc                Z    t        j                  t        | z  j                  d            S )Nutf-8encoding)jsonloadsOUT	read_text)names    -tools/build_surface_wrapper_catalog_review.py	load_jsonr      s#    ::sTz,,g,>??    c                Z   t        | D ch c]t  }t        |j                  dd            dkD  rTt        |j                  dd            dkD  r6t        |j                  dd            t        |j                  dd            fv c}      }|D cg c]
  \  }}||d c}}S c c}w c c}}w )Nwr   h)r   r   )sortedintget)rectsrectsizesr   r   s        r   
rect_sizesr      s     	
488C#$q(S#q1A-BQ-F #q!"Ca(8$9:	
E *//A!!//	
 0s   A9B"B'c                b   g }| j                  d      xs g D ]  }|j                  |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      d
        |S )NtablestableStartVaHex
frameCountschemastride
fieldLabelfieldPlus4Bound
hasOffset2boundaryKind)r!   r"   r#   r$   r%   r&   r'   r(   )r   append)rowr    tables      r   compact_tablesr,      s    F"(b 
#(99->#?#ii5))H-))H-#ii5#(99->#?#ii5 %		. 9		

 Mr   c                   | j                  d      }|xs i j                  d      xs g }t        |      }t        |      dkD  }|dk(  }|dk(  }|dk(  }|dk(  }	|r%|s| j                  d      r	d	}
d
}d}d}nHd}
d}d}d}n?|rd}
d}| j                  d      dk(  rdnd}d}n|r	d}
d}d}d}n|	r	d}
d}d}d }nd}
d}d}d }|xs i j                  d      xs i }|j                  d      xs i }i d| j                  d      d| j                  d      d | j                  d       d!| j                  d!      d|d| j                  d      d"| j                  d"      d#| j                  d#      d$| j                  d$      d| j                  d      d%|xs i j                  d      d&|xs i j                  d'      d(t        |      d)t        |      d*|d d+ d,|d-|
|||t        |       |r|j                  d.      |j                  d/      |j                  d0      |j                  d"      |j                  d      |j                  d1      |j                  d2      |j                  d3      d4d5S d d5S )6Nmoder   r   $descriptor-plus4-source-rect-catalogfixed-grid-sheetwindow-template-region-catalogno-precut-evidencer'   zsurface-slot-plus-dispatchzframe id must resolve through the descriptor +4 source-rect table; uniform wrapper cell width/height/columns cannot explain this asset alonehighFz,surface-slot-with-uniform-looking-descriptorzRdescriptor +4 table is still the grounded source; its rects happen to use one sizemediumzgrid-sheet-consumerzTfixed grid sheet; wrapper-style cell width/height/columns is a compatible draw modelstatuszconfirmed-gridTzwindow-template-systemzWwindow.cns uses reusable template/region records, not a descriptor +4 source-rect tableznot-bound-in-precut-catalogz>no descriptor +4/fixed-grid binding is promoted for this assetunknownzunclassified rowlowsourcer+   assetcnscategorycategoryLabelr"   
tableCountbestTableStartVaHexrectReviewStatus
rectSourceselectedRectSource	rectCountuniqueSizeCountuniqueSizes   variableSizeswrapperRoler!   r#   r$   r%   r&   r(   )r!   r#   r$   r"   r'   r%   r&   r(   )wrapperGridSufficient
confidence
conclusiondescriptorTablesrectTableFromReview)r   r   lenr,   )precutr   r.   r   r   variable_sizes
descriptor
fixed_gridwindow_template	no_precutwrapper_rolerJ   rI   grid_sufficientr8   r+   s                   r   classify_rowrV   0   s2   ::fDZRW%+EuEZ!^N??J++J>>O,,IVZZ57L\   J#OILd  "J#O	,k
%zz(37GGVX
	/n

	4U

 '

jbh'-2FJJw%2E"G$"vzz% " 	FJJz*" 	O4	"
 	" 	&**X&" 	fjj." 	fjj." 	vzz*?@" 	fjj." 	TZR,,X6" 	tzr&&';<" 	SZ" 	3u:" 	uSbz"  	!"" 	|#"$ "1  *62   %yy):;ii)ii)))L1))L1))L1$yy):;!IIn5	 
-" "B C" "r   c                    t        d      } t        d      }|j                  d      xs g D ci c]  }|j                  d      | }}| j                  d      xs g D cg c],  }t        ||j                  |j                  d                  . }}t        d |D              }t        d |D              }t        d |D              }|D cg c]  }|d   d	k(  s| }}|D cg c]  }|d
   s|d   s| }	}|D cg c]  }|d   dk(  s| }
}|D cg c]
  }|d   s	| }}ddg ddddddddt	        |      t	        |      t	        |      t	        |	      t	        |
      |j                  dd      |j                  dd      t        |      t        |      t        |      dddddd d!d"d#d d!d$d%d&d!d'd(d)d!gd*|
D cg c]  }|d   	 c}d+d,d-t	        |      d.d,d/d0gd1d,d2|D cg c]  }|d   dk(  s|d    c}d3d,g|d4d5d6d7d8d6d9d:d6gd;S c c}w c c}w c c}w c c}w c c}w c c}w c c}w c c}w )<Nzcns_precut_catalog_review.jsonzcns_rect_review_data.jsonrowsr9   c              3  &   K   | ]	  }|d      yw)r.   N .0r*   s     r   	<genexpr>zbuild_report.<locals>.<genexpr>   s     6##f+6   c              3  &   K   | ]	  }|d      yw)rG   NrZ   r[   s     r   r]   zbuild_report.<locals>.<genexpr>   s     =#m,=r^   c              3  &   K   | ]	  }|d      yw)rI   NrZ   r[   s     r   r]   zbuild_report.<locals>.<genexpr>   s     BcL 1Br^   r.   r/   rF   r'   r0   rB   z%hwanse-surface-wrapper-catalog-reviewz-wrapper-grid-vs-descriptor-catalog-classified)z"out/cns_precut_catalog_review.jsonzout/cns_rect_review_data.jsonz%out/render_pipeline_model_review.jsonz(docs/map3_active_object_overlay_notes.mdzdocs/DIRECTDRAW_NOTES.md
0x0055abd8zobject+0x28zcell/source widthzcell/source heightcolumnszgroup table candidate)z+0x2ez+0x30z+0x32z+0x34r1   r   r2   FzThe surface-wrapper path is grounded as a slot/grid draw mechanism, but most actor/monster/effect CNS assets are grounded by descriptor +4 source-rect catalogs.  The wrapper grid fields should not replace those variable source-rect tables.)surfaceWrapperTableobjectDrawSourceFieldwrapperFieldOffsets	assetRowsjoinedRectRowsdescriptorPlus4Assets%descriptorPlus4VariableOrOffsetAssetsfixedGridAssetswindowTemplateAssetsnoPrecutEvidenceAssets
modeCountswrapperRoleCountsconfidenceCounts*wrapperGridFullyExplainsDescriptorCatalogscoreConclusion
0x004175d3zcgeneric draw wrapper stores packed draw source into temporary object +0x28 and x/y into +0x1c/+0x20zgrounded-consumer)vaHexmeaningclassification
0x0041747bz[draw dispatcher extracts object+0x28 high word and indexes 0x0055abd8 surface wrapper table
0x004199a0z\low-word frame/tile index is converted by wrapper +0x2e/+0x30/+0x32 in the uniform-grid pathzgrounded-grid-converter
0x00416ce2zQactive object path also consumes object+0x28 for source selector and surface slotzgrounded-active-object-consumerzfixed-grid sheetszHcell-grid rendering is sufficient for these confirmed/review grid sheets)areaassetsrJ   zdescriptor +4 catalogsz^source rects come from CNS descriptor +4-bound tables; many have variable sizes and/or offset2z
window.cnswindowzVuses template/region records; keep separate from wrapper-grid and descriptor +4 modelszfull-screen/no-precut assetszQnot explained by promoted wrapper/precut evidence; do not fabricate rect catalogszruntime wrapper memory dumpzjstatic evidence proves the consumer fields, but not each loaded slot's live +0x2e/+0x30/+0x32/+0x34 values)ry   reasonzobject+0x2c / BltFast flagszbneeded to separate source-color-key copy, opaque copy, draw priority, and palette/context behaviorzdescriptor table producerz}descriptor +4 tables are grounded; the loader that binds CNS descriptors to these tables remains useful for future automation)kindr5   r8   summaryconsumerEvidencemodelBoundariesrX   nextFrontier)r   r   rV   r   rM   dict)rN   rect_reviewr*   rect_by_assetrX   mode_countsrole_countsconfidence_countsdescriptor_rowsvariable_descriptor_rows
fixed_rowsjoineds               r   build_reportr      s   78F78K6Aoof6M6SQSTsSWWW%s*TMTNTjjY_N`NfdfgsLm//0@ABgDg666K===KBTBB&*dsc&k=c.csdOd/>l#oBVZ]^jZkll!%K#V8J)J#KJK!6cS%5c6F6 8A
 $0%2,-"0	$ T!&k%(%9589Q5R":$/OO4TVW$X&1oo6JA&N{+!%k!2 $%6 7:?/+
8 & A"5 &x"5 &y"; &n"C!
0 ,3=>C3w<>h 1o.~ %#*v 737_C3v;J^;^3w<_q!
,  6 G
 6~
 4 Z
c_ _ Ug
 elK6~ ? `sM   H 1H H%H%%H*5H*?H/H/
H4"H4H9/H>=H>c                    t         j                  d       t               } t         dz  j                  t	        j
                  | dd      dz   d	       t        d
       t        t	        j
                  | d   dd             y)NT)exist_okz#surface_wrapper_catalog_review.jsonF   )ensure_asciiindent
r
   r   z!surface_wrapper_catalog_review okr~   r   )r   mkdirr   
write_textr   dumpsprint)reports    r   mainr      sp    IItI^F00<<

6a84? =  

-.	$**VI&U1
EFr   __main__)r   strreturndict[str, Any])r   list[dict[str, Any]]r   zlist[dict[str, int]])r*   r   r   r   )rN   r   r   zdict[str, Any] | Noner   r   )r   r   )r   r   )__doc__
__future__r   r   collectionsr   pathlibr   typingr   __file__resolveparentsROOTr   r   r   r,   rV   r   r   __name__
SystemExitrZ   r   r   <module>r      s~    J "     H~''*
Ul@0$Slm`	 z
TV
 r   