§
    ýÓÀjB  ã                  ó  — U d Z ddlmZ ddlZddlmZ ddlmZmZm	Z	m
Z
  edd¬¦  «         G d„ d	¦  «        ¦   «         Z ed
dddddddddddddd¬¦  «         edddddddddddd d!dd"¬¦  «         ed#d$d%d&dd'ddd(d"d"d)d*dd"¬¦  «         ed+d,d-d.d/d0d1d(d2d3d"d4d5dd3¬¦  «         ed6d7d8d9d:d;d<d=d>d3d3d?d@dd3¬¦  «         edAdBdCdDdEdFdGd&dHdId3dJdKddI¬¦  «         edLdMdNddOdPdQdRdSdTdIdUdVdd¬¦  «        dWœZdXedY<   	 	 	 	 dgdhdb„Z	 	 didjdf„ZdS )kzâ
FreeExile Map Progression Scaler & Labyrinth Dimension Architecture.
Computes authoritative world map dimensions, room counts, secret chambers,
and maze complexity strictly proportional to quest milestones and endgame tiers.
é    )ÚannotationsN)Ú	dataclass)ÚDictÚOptionalÚTupleÚAnyT)ÚslotsÚfrozenc                  ó¾   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   edd„¦   «         ZdS )ÚMapScaleProfileÚstrÚstage_idÚstage_name_viÚstage_name_enÚintÚ	level_minÚ	level_maxÚ
grid_widthÚgrid_heightÚ	min_roomsÚ	max_roomsÚsecret_chambersÚpillar_totemsÚfloatÚbranching_factorÚboss_distance_minÚboolÚis_labyrinthÚcontent_mechanics_countÚreturnc                ó    — | j         | j        z  S )N)r   r   )Úselfs    ú<C:\Projects\FreeExile\server\world\map_progression_scaler.pyÚtotal_tileszMapScaleProfile.total_tiles   s   € àŒ Ô!1Ñ1Ð1ó    N)r    r   )Ú__name__Ú
__module__Ú__qualname__Ú__annotations__Úpropertyr$   © r%   r#   r   r      sÖ   € € € € € € à€M€M�MØÐÐÑØÐÐÑØ€N€N�NØ€N€N�NØ€O€O�OØÐÐÑØ€N€N�NØ€N€N�NØÐÐÑØÐÐÑØÐÐÑØÐÐÑØÐÐÑØ Ð Ð Ñ àð2ð 2ð 2ñ „Xð2ð 2ð 2r%   r   ÚACT_I_ONBOARDINGu$   Há»“i I: TÃ¢n Thá»§ Báº¿n LÆ°u Ä�Ã yzAct I: Outcast Onboardingé   é
   é<   é-   é   é   gš™™™™™ñ?g      @@F)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ÚACT_II_EXPLORATIONu"   Há»“i II: Ä�áº§m Láº§y BÃ¹n Nhá»¥czAct II: Miasma Swampsé   é   éT   é@   é   é   gffffffö?g     €K@é   ÚACT_III_SANDSTORMu   Há»“i III: Sa Máº¡c BÃ£o CÃ¡tzAct III: Crucible Sandstormé   ép   é   gÍÌÌÌÌÌü?g      T@ÚACT_IV_V_CRUCIBLEu"   Há»“i IV-V: Tráº£m ThÃº Vá»±c SÃ¢uzAct IV-V: Titan Depthsé.   éF   é”   én   é   é   gš™™™™™@g     À\@ÚENDGAME_WHITE_ATLASu   TÃ n Ä�á»“ SÆ¡ Ká»³ (Tier 1-5)zEndgame White Atlas (T1-5)éG   éM   é°   é„   é   é   g      @g      b@ÚENDGAME_YELLOW_RED_ATLASu%   TÃ n Ä�á»“ Trung Cao Ká»³ (Tier 6-15)z Endgame Yellow/Red Atlas (T6-15)éN   éS   éÐ   éœ   é"   é   g333333@g     €f@ÚENDGAME_PINNACLE_LABYRINTHu&   Ä�áº¡i MÃª Cung Ä�á»‰nh Cao (Tier 16+)u   Pinnacle Ãœber Labyrinth (T16+)éd   éð   é´   é    é*   é   g      @g     €k@)r,   r3   r;   r?   rF   rM   rT   zDict[str, MapScaleProfile]ÚPROGRESSION_PROFILESÚlevelr   Úact_idúOptional[str]Úmap_tierúOptional[int]Úzone_idr    c                ó*  — |�9|dk    r3|dk    rt           d         S |dk    rt           d         S t           d         S |rX|                     ¦   «         }d|v sd	|v rt           d
         S d|v rt           d         S d|v rt           d         S t           d         S | dk    rt           d         S | dk    rt           d         S | dk    rt           d         S | dk    rt           d
         S | dk    rt           d         S | dk    rt           d         S t           d         S )zSAuthoritatively computes the map scaling profile strictly proportional to progress.Nr   é   rT   rZ   rM   rF   ÚACT_VÚACT_IVr?   ÚACT_IIIr;   ÚACT_IIr3   r,   r6   rN   rG   r@   r<   r4   )r[   Úupper)r\   r]   r_   ra   Ú	act_uppers        r#   Úcalculate_map_scale_profilerj   Ÿ   sB  € ð Ð ¨1¢ Ø�rŠ>ˆ>Ý'Ð(DÔEÐEØ�qŠ=ˆ=Ý'Ð(BÔCÐCÝ#Ð$9Ô:Ð:àð 8Ø—L’L‘N”Nˆ	Ø�iÐÐ 8¨yÐ#8Ð#8Ý'Ð(;Ô<Ð<Ø˜	Ð!Ð!Ý'Ð(;Ô<Ð<Ø�yÐ Ð Ý'Ð(<Ô=Ð=Ý#Ð$6Ô7Ð7à�‚{€{Ý#Ð$@ÔAÐAØ�‚{€{Ý#Ð$>Ô?Ð?Ø�‚{€{Ý#Ð$9Ô:Ð:Ø�‚{€{Ý#Ð$7Ô8Ð8Ø�‚{€{Ý#Ð$7Ô8Ð8Ø�‚{€{Ý#Ð$8Ô9Ð9åÐ 2Ô3Ð3r%   r   Úplayer_levelúTuple[int, int, bool]c                óN   — t          ||| ¬¦  «        }|j        |j        |j        fS )zKReturns (width, height, is_labyrinth) for any zone given progression level.)r\   r_   ra   )rj   r   r   r   )ra   rk   r_   Úprofiles       r#   Úget_zone_scaled_dimensionsro   Ç   s/   € õ *°ÀxÐY`ÐaÑaÔa€GØÔ˜wÔ2°GÔ4HÐHÐHr%   )r-   NNN)
r\   r   r]   r^   r_   r`   ra   r^   r    r   )r-   N)ra   r   rk   r   r_   r`   r    rl   )Ú__doc__Ú
__future__r   ÚmathÚdataclassesr   Útypingr   r   r   r   r   r[   r)   rj   ro   r+   r%   r#   ú<module>ru      s  ððð ð ð #Ð "Ð "Ð "Ð "Ð "Ø €€€Ø !Ð !Ð !Ð !Ð !Ð !Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ð -ð €�˜dÐ#Ñ#Ô#ð2ð 2ð 2ð 2ð 2ñ 2ô 2ñ $Ô#ð2ð. (˜Ø#Ø<Ø1ØØØØØØØØØØØØ !ðñ ô ð" *˜/Ø%Ø:Ø-ØØØØØØØØØØØØ !ðñ ô ð" )˜Ø$Ø5Ø3ØØØØØØØØØØØØ !ðñ ô ð" )˜Ø$Ø:Ø.ØØØØØØØØØØØØ !ðñ ô ð" +˜?Ø&Ø6Ø2ØØØØØØØØØØØØ !ðñ ô ð" !0 Ø+Ø=Ø8ØØØØØØØØØØØØ !ð!ñ !ô !ð" #2 /Ø-Ø>Ø7ØØØØØØØØØØØØ !ð#ñ #ô #ðOx4ð x4Ð ð xð xð xñ xðx Ø Ø"Ø!ð	%4ð %4ð %4ð %4ð %4ðT Ø"ðIð Ið Ið Ið Ið Ið Ir%   