
    UHj)                       U d Z ddlmZ ddlZddlZddlZddlmZ ddlm	Z	m
Z
mZ ddlmZmZ  ee      j!                         j"                  d   Zedz  Zd	Zi Zd
ed<   g dg dg dg dg dddgg dg dg dg dg dg ddZddddddddd d!d"d#dZi Zd$ed%<   i Zd&ed'<   i Zd(ed)<   i Zd*ed+<   dad,ed-<   dd.gZd8d9d/Zd:d0Z d;d1Z!d<d=d2Z"d>d?d3Z#d@d4Z$d>dAd5Z%dBd6Z&e'd7k(  r e&        yy)CzCExport decompressed CNS map layouts as a browser-loadable JS asset.    )annotationsN)Path)decompress_cnsindices_to_rgbparse_image)read_sectionsva_to_offset   zHwanse2.exeiN zdict[str, list[str]]LAYER_TILESET_OVERRIDES)map_b1map_b2map_b3)map_f1map_f2map_f3)map_d1map_d2map_d3)map_h1map_h2map_h3)map_i1map_i2map_i3map_l1map_l2)map_n1map_n2map_n3)map_o1map_o2map_o3)map_q1map_q2map_q3)map_e1map_e2map_e3)map1_01amap1_02bmap3_09amap5_07hmap5_38imap2_03lmap4_08nmap7_02fmap7_03hmap8_18omap8_32qmap9_01ei  i  i5  iF  ie  i	  i>  i  i  i  i  i  zdict[str, list[int]]PASSABLE_TILE_OVERRIDESzdict[str, list[dict]]TRANSITION_OVERRIDESzdict[str, dict]TILESET_LAYOUT_OVERRIDESz!dict[tuple[Path, str], list[int]]TERRAIN_BLOCKED_TILE_CACHEzdict[int, str] | NoneLOCATION_LABEL_CACHE   c                L   t        ||      }|yt               }t        |t        t	        |       ||z               D ]K  }| |   }|dk(  r n?|dk(  r'|dz   t	        |       k  rd| |dz      cxk  rdk  rn n n|j                  |       M t        |      j                  dd      S )N r   @   r
   cp949replace)errors)r	   	bytearrayrangeminlenappendbytesdecode)exesectionsvalimitoffsetrawindexbytes           */home/exedev/hwanse/tools/export_map_js.pycp949_text_atomrQ   >   s    (B'F~
+Cvs3s8Ve^<= 5z194<EAIC0Q#eai.5O45O

4 :WY77    c                    t         t         S i } t        j                         s| a | S t        j                         }t	        |      }t        |t              }|| a | S t        j                  d||dz         d   }t        |      D ]5  }t        j                  d||dz   |dz  z         d   }t        |||      | |<   7 | a | S )Nz<I   r      )r9   EXEexists
read_bytesr   r	   LOCATION_SELECTOR_TABLE_VAstructunpack_fromrB   rQ   )labelsrH   rI   rL   countrN   pointers          rP   location_labelsr_   M   s    '##F::<%
..
CS!H($>?F~%tS&1*5a8Eu @$$T3
UQY0FGJ'Xw?u@ "MrR   c                j   | |f}|t         v r	t         |   S | | dz  }t        |j                               }t        |      \  }}}}}	t	        |||||	      }
d}||z  }||z  }|
d d }g }t        ||z        D ]  }|}||z  |z  }||z  |z  }g }t        |      D ]B  }t        |      D ]2  }||z   |z  |z   |z   dz  }|
||dz    }||k7  s"|j                  |       4 D |s|j                  |       {t        d |D              t        |      z  }|dk  s|j                  |        |t         |<   |S )Nz.cns      c              3  8   K   | ]  }t        |      d z    yw)rb   N)sum).0colors     rP   	<genexpr>z(terrain_blocked_tiles.<locals>.<genexpr>   s     =EUa=s   -   )	r8   r   rX   r   r   rB   rE   rd   rD   )src_dirtileset_namekeysrcdecodedwidthheightpalettepixelsbpprgb	tile_sizecolumnsrowstransparentblockedtile_idrN   src_xsrc_yvisibleyxrL   rf   
brightnesss                             rP   terrain_blocked_tilesr   c   s   L
!C
(()#..
|nD)
)CS^^-.G*5g*>'E67FC

=CIy GYDbq'KG4( $I-'!Y.y! 	*A9% * 19-59Q>FVaZ0K'NN5)	*	* NN7#=W==GL
?NN7#!$$ '.s#NrR   c                   t        | j                               }t        |      dk  rt        |  d      d}t        j                  |dd d      }t        j                  |dd d      }||z  }d|dz  z   }t        |      |k7  rAt        |      dk\  r3|d   }	|d   }
|	|
z  }d|dz  z   }|	r|
rt        |      |k(  r
d}|	}|
}|}|}t        |      |k7  r"t        |  dt        |       d| d	| d
| 	      t        |t        |      d      D cg c]  }t        j                  |||dz    d        }}|d | ||d  g}|xs | j                  }|dd  j                         r|d   nd}|rd| dnd}|rd| dn|}|xs i }|j                  d      xs g }t        j                  |||g      }|xs t        j                  ||      }|g|j                  d      xs g }g }|D ]F  }t        |      }|s||D ch c]  }t        |       c}vs-|j                  t        |             H |j                  dt        j                  |            }t!        |t              r|dz	  nd }t#               }||j                  |d      nd}i d|d|d   d|d|d|d|d|j                  d      d|j                  d      d|d|d|rd ndd!|j                  d"      d#|d$t$        j                  |      d%t'        | j(                  |d         d&t*        d't,        j                  |g       ||d(d|d)} | j/                  t0        j                  |d*d+i             | S c c}w c c}w ),NrT   z is too shortr   r:   littler
   z decoded size z does not match r~   z two-layer map size r<   map_1map_a12tilesetstilesetVariantssceneIdrU   nametilesetlayerTilesetssceneTilesetsobservedSceneTilesets
sceneIdHexsceneRecordVarecordValocationIndexlocationLabellocationLabelSourcezsceneIdHighByte->0x004ebc14sceneVariantCountvariantCountsceneTilesetVariantspassableTilesterrainBlockedTilesemptyLayer1Tilestransitionsra   )rn   ro   tileSizetileIndexOffsetlayerstilesetColumns(   )r   rX   rD   
ValueErrorint
from_bytesrB   stemisalphagetr   SCENE_TILESET_OVERRIDEStuplerE   listSCENE_ID_OVERRIDES
isinstancer_   r5   r   parentEMPTY_LAYER1_TILESr6   updater7   )!rl   r   metadatarm   data_offsetrn   ro   
tile_countexpectedcompact_widthcompact_heightcompact_tile_countcompact_expectedicell_valuesr   map_namesuffixdefault_tilesetdefault_second_tilesetmetadata_tilesetslayer_tilesetsobserved_scene_tilesetsvariant_candidatesscene_tileset_variantsvariantrk   itemscene_idlocation_indexlabel_tablelocation_labelresults!                                    rP   	parse_mapr      se   S^^-.G
7|aC5.//KNN71Q<2E^^GAaL(3FJ:>!H
7|xCLA$5
 *^;1A55^G@P0PK!E#F+J'H
7|xe>#g,/?gQvh28*>
 	
 {CL!4 	wq1q5)84K  	KZ JK F
 sxxH%bc]224Xb\"F*0VHA&hO17tF81-_~2H Z06B,00	01N 0h3J3N3NxYg3h
,,(
)
/R  % 9Gn37MNtuT{NN"))$w-89 ||I'9'='=h'GHH&03&?X]TN!#K<J<V[__^R8\^N>!$ 	 		
 	 !8 	8 	hll<0 	j1 	 	 	<TV 	X\\.9 	 6 	044X> 	4SZZPQARS  	.!" 	+//"=#$ -F0 MM $$ "	
 MG: Os   #M%:M*c                   |xs i }| D ci c]3  }|j                   t        ||j                  |j                               5 }}|j                  j	                  dd       |j                  dt        j                  |dd      z   dz   d	
       t        dt        |       d|        |j                         D ]%  \  }}t        d| d|d    d|d    d|d           ' y c c}w )Nr   Tparentsexist_okzwindow.HWANSE_MAPS = F,:ensure_ascii
separators;
utf-8encodingwrote z	 maps -> z  z: rn   r~   ro   z
, tileset=r   )r   r   r   r   mkdir
write_textjsondumpsprintrD   items)srcsdstmetadata_by_maprl   mapsr   infos          rP   export_mapsr      s   %+O  	)C/*=*=chh*GHHD  JJTD1NN
**T*
E	F
	 	   
F3t9+Yse
,-jjl X
d4&4=/4>*:*T)_DUVWXs   8C$c                    | j                         D ci c]  \  }}|dvr|| c}}dt        | j                  d      xs g       iz  S c c}}w )N>   r   r   r   r   
layerCountr   )r   rD   r   )r   rk   values      rP   map_index_entryr      s]     **,CWW 	U
 
s488H-345	6 6 s   A
c           
        |xs i }| D ci c]3  }|j                   t        ||j                  |j                               5 }}|j                  j	                  dd       |j	                  dd       |j                  d      D ]  }|j                           |j                         D ci c]  \  }}|t        |       }	}}|j                  dt        j                  |	dd      z   d	z   d
       |j                         D ]Q  \  }}|| dz  j                  dt        j                  |       dt        j                  |dd      z   d	z   d
       S t        dt        |       d|        t        d|        y c c}w c c}}w )Nr   Tr   z*.jszHwindow.HWANSE_MAPS = window.HWANSE_MAPS || {};window.HWANSE_MAP_INDEX = Fr   r   r   r   r   z.jszAwindow.HWANSE_MAPS = window.HWANSE_MAPS || {};window.HWANSE_MAPS[z] = r   z runtime map chunks -> zwrote runtime map index -> )r   r   r   r   r   globunlinkr   r   r   r   r   r   rD   )
r   	index_dst	chunk_dirr   rl   r   oldr   r   rN   s
             rP   export_map_chunksr     s   %+O  	)C/*=*=chh*GHHD  4$7OOD4O0~~f% 

 <@::<HZT4T?4((HEH	%
**U:
F	G 	    jjl 

d	vS\	!--""&**T"2!349jjEjIJ   	. 	

 
F3t9+4YK
@A	'	{
345 Is   8F.Fc                     t        j                  t              } | j                  ddt               | j                  dt               | j                         }t        |j                  |j                         y )N)descriptionrl   +)nargstyper   )r   )	argparseArgumentParser__doc__add_argumentr   
parse_argsr   rl   r   )parserargss     rP   mainr   "  sZ    $$9F
St4
D)D$((#rR   __main__)`   )
rH   rF   rI   z
list[dict]rJ   r   rK   r   returnstr)r  zdict[int, str])ri   r   rj   r  r  z	list[int])NN)rl   r   r   z
str | Noner   zdict | Noner  dict)N)r   
list[Path]r   r   r   dict[str, dict] | Noner  None)r   r  r  r  )
r   r  r   r   r   r   r   r  r  r  )r  r  )(r   
__future__r   r   r   rZ   pathlibr   
decode_cnsr   r   r   probe_exe_scene_tablesr   r	   __file__resolver   ROOTrV   rY   r   __annotations__r   r   r5   r6   r7   r8   r9   r   rQ   r_   r   r   r   r   r   r   __name__ rR   rP   <module>r     sC   I "     B B > H~''*
]' 02 - 2 /....8$......     13 - 2.0 + 0,. / .@B = B.2 + 2V 8,"H_DX$65>$ zF rR   