
    Ii                         S r SSKrSSKJrJr  SSKJr  SSKJrJr  SSK	J
r
  SS	KJr  SS
KJrJr  SSKJrJrJr  SSKJr  SSKJr  \ " S S\5      5       r\\
 " S S\5      5       5       rg)a  
Chaos Bear - A chase game where players run from a bear.

Players roll dice to move forward. When on multiples of 5, they can draw
cards for special effects. The bear chases from behind, catching players
who fall too far back. Last player standing (or furthest distance) wins!
    N)	dataclassfield)datetime   )GamePlayer)register_game   )	BotHelper)
GameResultPlayerResult)Action	ActionSet
Visibility)KeybindState)Localizationc                   6    \ rS rSr% SrSr\\S'   Sr\	\S'   Sr
g)	ChaosBearPlayer   zPlayer state for Chaos Bear.r   positionTalive N)__name__
__module____qualname____firstlineno____doc__r   int__annotations__r   bool__static_attributes__r       :c:\Users\dbart\PlayPalace11\server\games\chaosbear\game.pyr   r      s    &HcE4r"   r   c            	         ^  \ rS rSr% Sr\" \S9r\\   \	S'   Sr
\\	S'   Sr\\	S'   Sr\\	S	'   Sr\\	S
'   \S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       r\S\4S j5       rS;S\S\S\S\4S jjrS\S\4S jrS<U 4S jjrS\S\S-  4S jrS\S\4S jrS\S\S-  4S jrS\S\4S jr S\S\S-  4S jr!S\S\4S jr"S\S \#SS4S! jr$S \#SS4S" jr%S<S# jr&S<S$ jr'S<U 4S% jjr(S\S\S-  4S& jr)S=S>S' jjr*S<S( jr+S<S) jr,S<S* jr-S\4S+ jr.S,\SS4S- jr/S.\SS4S/ jr0S\14S0 jr2S1\1S2\S\\   4S3 jr3S\S4\SS4S5 jr4S\S4\SS4S6 jr5S\S4\SS4S7 jr6S\\7\\4      4S8 jr8S\4S9 jr9S:r:U =r;$ )?ChaosBearGame   z
Chaos Bear - run from the bear!

Players start 30 squares ahead of the bear and must keep moving forward.
Roll dice to advance, draw cards on multiples of 5 for bonuses/penalties.
If the bear catches you, you're out! Last player alive wins.
)default_factoryplayersr   bear_position   bear_energyround_numberplayers_moved_this_roundreturnc                     g)Nz
Chaos Bearr   clss    r#   get_nameChaosBearGame.get_name1   s    r"   c                     g)N	chaosbearr   r0   s    r#   get_typeChaosBearGame.get_type5   s    r"   c                     g)Nzcategory-rb-play-centerr   r0   s    r#   get_categoryChaosBearGame.get_category9   s    (r"   c                     g)Nr   r   r0   s    r#   get_min_playersChaosBearGame.get_min_players=       r"   c                     g)N   r   r0   s    r#   get_max_playersChaosBearGame.get_max_playersA   r>   r"   	player_idnameis_botc                     [        XUS9$ )zCreate a new player.)idrD   rE   )r   )selfrC   rD   rE   s       r#   create_playerChaosBearGame.create_playerE   s    )vFFr"   playerc           
         [        SS9nU R                  U5      nU(       a  UR                  OSnUR                  [	        S[
        R                  " US5      SSSS	95        UR                  [	        S
[
        R                  " US5      SSSS	95        UR                  [	        S[
        R                  " US5      SSSS	95        U$ )z(Create the turn action set for a player.turn)rD   en	roll_dicezchaosbear-roll-dice_action_roll_dice_is_roll_dice_enabled_is_roll_dice_hidden)rG   labelhandler
is_enabled	is_hidden	draw_cardzchaosbear-draw-card_action_draw_card_is_draw_card_enabled_is_draw_card_hiddencheck_statuszchaosbear-check-status_action_check_status_is_check_status_enabled_is_check_status_hidden)r   get_userlocaleaddr   r   get)rH   rK   
action_setuserr`   s        r#   create_turn_action_set$ChaosBearGame.create_turn_action_setM   s    F+
}}V$ $$"&&v/DE+20	
 	"&&v/DE+20	
 	!"&&v/GH.53	
 r"   Nc                    > [         TU ]  5         U R                  SSS/[        R                  S9  U R                  SSS/[        R                  S9  U R                  SS	S
/[        R                  SS9  g)z!Define all keybinds for the game.rz	Roll dicerO   )statedz	Draw cardrW   czCheck statusr[   T)ri   include_spectatorsN)supersetup_keybindsdefine_keybindr   ACTIVErH   	__class__s    r#   rn   ChaosBearGame.setup_keybindss   s     M%%	 	 	
 	M%%	 	 	
 	%%# 	 	
r"   c                     U R                   S:w  a  gU R                  (       a  gU R                  U:w  a  gUnUR                  (       d  gg)z%Check if roll dice action is enabled.playingaction-not-playingaction-game-in-progressaction-not-your-turnchaosbear-you-are-caughtN)statusis_animatingcurrent_playerr   rH   rK   	cb_players      r#   rQ   #ChaosBearGame._is_roll_dice_enabled   s@    ;;)#',&()%+	-r"   c                     U R                   S:w  a  [        R                  $ U R                  U:w  a  [        R                  $ UnUR                  (       d  [        R                  $ [        R
                  $ )zCheck if roll dice is hidden.ru   )rz   r   HIDDENr|   r   VISIBLEr}   s      r#   rR   "ChaosBearGame._is_roll_dice_hidden   sX    ;;)#$$$&($$$%+	$$$!!!r"   c                     U R                   S:w  a  gU R                  (       a  gU R                  U:w  a  gUnUR                  (       d  gUR                  S-  S:H  =(       a    UR                  S:  nU(       d  gg	)
z%Check if draw card action is enabled.ru   rv   rw   rx   ry      r   zchaosbear-not-on-multipleN)rz   r{   r|   r   r   rH   rK   r~   can_draws       r#   rY   #ChaosBearGame._is_draw_card_enabled   sk    ;;)#',&()%+	-%%)Q.I93E3E3I.r"   c                 f   U R                   S:w  a  [        R                  $ U R                  U:w  a  [        R                  $ UnUR                  (       d  [        R                  $ UR
                  S-  S:H  =(       a    UR
                  S:  nU(       d  [        R                  $ [        R                  $ )zCheck if draw card is hidden.ru   r   r   )rz   r   r   r|   r   r   r   r   s       r#   rZ   "ChaosBearGame._is_draw_card_hidden   s    ;;)#$$$&($$$%+	$$$%%)Q.I93E3E3I$$$!!!r"   c                 &    U R                   S:w  a  gg)z(Check if check status action is enabled.ru   rv   N)rz   rH   rK   s     r#   r]   &ChaosBearGame._is_check_status_enabled   s    ;;)#'r"   c                 b    U R                   S:w  a  [        R                  $ [        R                  $ )z+Check status is visible to all during play.ru   )rz   r   r   r   r   s     r#   r^   %ChaosBearGame._is_check_status_hidden   s&    ;;)#$$$!!!r"   
event_typedatac                    UR                  S5      nU(       a  U R                  U5      OSnUS:X  a  U R                  SUS   US   S9  gUS:X  a8  U(       a0  US	   Ul        U R                  S
UR                  UR                  S9  ggUS:X  a  U R                  5         gUS:X  a  U R                  SUS   US   US   S9  gUS:X  a%  US   U l        U R                  SU R                  S9  gUS:X  a%  US	   U l        U R                  SU R                  S9  gUS:X  a*  U(       a"  SUl        U R                  SUR                  S9  ggUS:X  a'  US   U l        US   (       a  U R                  S 5        ggUS!:X  a  U R                  5         gUS":X  a  U R                  S#US   S9  gUS$:X  a  U R                  S%5        gUS&:X  a  U R                  U5        gg)'zHandle a scheduled game event.rC   Nplayer_rollzchaosbear-rollrD   roll)rK   r   player_positionnew_positionzchaosbear-positionrK   r   end_player_turn	bear_rollzchaosbear-bear-rolldieenergytotal)r   r   r   bear_energy_up
new_energyzchaosbear-bear-energy-upr   r)   zchaosbear-bear-positionr   player_caughtFzchaosbear-player-caught)rK   
bear_feastenergy_changedzchaosbear-bear-feastend_bear_turndraw_announcezchaosbear-draws-cardcard_random_gift_announcezchaosbear-card-random-giftcard_effect)rb   get_player_by_idbroadcast_lr   rD   _handle_end_player_turnr+   r)   r   _handle_end_bear_turn_apply_card_effect)rH   r   r   rC   rK   s        r#   on_game_eventChaosBearGame.on_game_event   s   HH[)	5>&&y1D&-d6lfV,,"&~"6  (!;;#__ !   ,,((*;&%%[H~7m	   ++#L1D7@P@PQ?*!%n!5D6ASAST?*$  !:6;; O  <'#L1D$%  !78 & ?*&&(?*3DLI669:=(##D) )r"   c                 ~   US   nUR                  S5      (       a  U R                  US   5      OSnUS:X  a8  U(       a0  US   Ul        U R                  SUR                  UR                  S9  ggUS:X  a8  U(       a0  US   Ul        U R                  S	UR                  UR                  S9  ggUS
:X  a%  US   U l        U R                  SU R
                  S9  gUS:X  a%  US   U l        U R                  SU R
                  S9  gUS:X  a8  U(       a0  US   Ul        U R                  SUR                  UR                  S9  ggUS:X  a8  U(       a0  US   Ul        U R                  SUR                  UR                  S9  ggUS:X  a8  U(       a0  US   Ul        U R                  SUR                  UR                  S9  ggg)z#Apply a pre-calculated card effect.effectrC   N	impulsionr   zchaosbear-card-impulsionr   super_impulsionzchaosbear-card-super-impulsion	tirednessr   zchaosbear-card-tirednessr   hungerzchaosbear-card-hungerbackwardzchaosbear-card-backward	gift_backzchaosbear-gift-backgift_forwardzchaosbear-gift-forward)rb   r   r   r   rD   r+   )rH   r   r   rK   s       r#   r    ChaosBearGame._apply_card_effect  s   h=AXXk=R=R&&tK'89X\[ "&~"6  .!;;#__ !   (("&~"6  4!;;#__ !   {"#L1D7@P@PQx#L1D4T=M=MNz!"&~"6  -!;;#__ !   {""&~"6  )!;;#__ !   ~%"&~"6  ,!;;#__ !   &r"   c                 D   SU l         SU l        SU l        SU l        SU l        SU l        U R                  5        H  nSUl        SUl        M     U R                  5       nU R                  U5        U R                  S5        U R                  S5        U R                  S5        U R                  S	5        U R                  S
5        U R                  S5        U R                  5         U R                  5         [         R"                  " U [$        R&                  " SS5      S9  g)zCalled when the game starts.ru   Tr*   r   r&   zgame_chaosbear/music.oggzgame_chaosbear/amloop.oggzgame_3cardpoker/roundstart.oggzchaosbear-intro-1zchaosbear-intro-2zchaosbear-intro-3<   ticksN)rz   game_activer,   r-   r)   r+   get_active_playersr   r   set_turn_players
play_musicplay_ambience
play_soundr   rebuild_all_menus_announce_turnr   	jolt_botsrandomrandint)rH   rK   alive_playerss      r#   on_startChaosBearGame.on_startO  s   ()% --/F FOFL 0
 //1m, 	236789 	,-,-,- 	  	Dr2(>?r"   c                     U R                   nU(       d  gUR                  (       d(  U R                  U5      nU(       a  UR                  SSS9  U R	                  SUR
                  UR                  S9  g)zAnnounce whose turn it is.Nzgame_squares/begin turn.ogg2   )volumezchaosbear-turnr   )r|   rE   r_   r   r   rD   r   )rH   rK   rd   s      r#   r   ChaosBearGame._announce_turns  s\    $$ }}==(D =bI)&++Xr"   c                    > [         TU ]  5         U R                  5         U R                  S:w  a  g[        R                  " U 5        g)zCalled every game tick.ru   N)rm   on_tickprocess_scheduled_eventsrz   r   rq   s    r#   r   ChaosBearGame.on_tick  s8    %%';;)# 	$r"   c                 p    UR                   (       d  gUR                  S-  S:X  a  UR                  S:  a  gg)z(Determine what action a bot should take.Nr   r   rW   rO   )r   r   r   s     r#   	bot_thinkChaosBearGame.bot_think  s2    || ??Q!#!(; r"   c                 h   SU l         U R                  5         U R                  nUb'  U R                  USS9  X:w  a  U R                  U5        O;U R                   H+  nX2:X  a  U R                  USS9  M  U R                  U5        M-     [
        R                  " U [        R                  " SS5      S9  g)a   Start the next player's turn with menu rebuild and bot jolt.

Args:
    previous_player: The player whose turn just ended. Only that player
        and the new current player need menu rebuilds (their turn actions
        changed). Pass None to rebuild all players (e.g. on round start).
FNr*   r   r&   r   r   )	r{   r   r|   rebuild_player_menur(   r   r   r   r   )rH   previous_playercurrentps       r#   _start_next_turnChaosBearGame._start_next_turn  s     "%%& $$Wq$9)((9 \\<,,Q,;,,Q/	 " 	Dr2(>?r"   c                    U =R                   S-  sl         U R                   Vs/ s H*  oR                  (       d  M  UR                  (       a  M(  UPM,     nnU R                   [	        U5      :  a  U R                  5         gU R                  nU R                  U R                  -   [	        U R                  5      -  U l        U R                  US9  gs  snf )z8Handle end of a player's turn (called from event queue).r*   N)r   )r-   r(   r   is_spectatorlen_start_bear_turnr|   
turn_indexturn_directionturn_player_idsr   )rH   r   r   previouss       r#   r   %ChaosBearGame._handle_end_player_turn  s    %%*%$(LLSLqGGANNLS ((C,>>!!# &&??T-@-@@CH\H\D]]h7 Ts   CCCc                 R   SU l         U =R                  S-  sl        U R                  5       (       a  SU l        gU R                   Vs/ s H*  oR
                  (       d  M  UR                  (       a  M(  UPM,     nnU(       a  U R                  U5        U R                  5         gs  snf )z8Handle end of the bear's turn (called from event queue).r   r*   FN)	r-   r,   _check_for_winnerr{   r(   r   r   r   r   )rH   r   r   s      r#   r   #ChaosBearGame._handle_end_bear_turn  s    ()%Q !!## %D %)LLSLqGGANNLS!!-0 	 Ts   B$ B$3B$c                 d   U R                    Hr  nUR                  (       d  M  UR                  (       a  M)  UR                  U R                  -
  S::  d  MH  U R                  S[        R                  " SS5       S35          O   U R                  SSS9  U R                  S[        R                  " SS	5       S3S
S9  [        R                  " SS	5      nU R                  nX#-   nUS	:H  nU(       a  US-   nUS-  nOUnU R                  U-   nUS	-  nX(-   n	/ n
U R                    HU  nUR                  (       d  M  UR                  (       a  M)  X{R                  :  d  M:  U
R                  UR                  5        MW     [        U
5      nUnUS:  a  [        SUS	-
  5      nSnU R                  SUUX#-   S.US9  US-  nU(       aA  U R                  S[        R                  " SS5       S3SS9  U R                  SSU0US9  US-  nSn[        U	5       H2  nU R                  S[        R                  " SS5       S3UUS-  -   S9  M4     U[        SU	S-
  5      S-  -   n[        UUS-   5      nU R                  SSU0US9  US-  nU
(       a  U
 Hs  nU R                  S[        R                  " SS5       S3US9  U R                  SSU0US-   S9  U R                  S[        R                  " SS	5       S3US-   S9  US-  nMu     U R                  S UX:g  S!.US9  US"-  nU R                  S#0 US-   S9  g$)%z2Pre-calculate bear turn outcomes and queue events.
   zgame_chaosbear/bearwarnr*   r   .oggzgame_chaosbear/beardice0.oggdelay_tickszgame_chaosbear/beardicer
      r   r   r   )r   r   r      game_chaosbear/energyup   r   r   #   zgame_chaosbear/bearstepr   r@   r)   r   zgame_chaosbear/playerdier   rC   game_chaosbear/energydown(   r   r   )r   r      r   N)r(   r   r   r   r)   r   r   r   schedule_soundr+   appendrG   r   maxschedule_eventrange)rH   rK   bear_dieoriginal_energymove_distanceenergy_gainedr   new_bear_positionbonus_steps	num_steps
caught_idsr   killsenergy_after_feastdelay	step_baseilast_step_delaypids                      r#   r   ChaosBearGame._start_bear_turn  s    llF|||F$7$7$7??T%7%772=OO1&..A2F1GtL  # 	:K%fnnQ&:%;4@ 	 	
 >>!Q'** 2 A(1,JQM(J ..> !Ao*	 
Awwwq~~~$

2%%add+  J'19!$Q
Q!7  	)!3
  	 	
 	
 )&..A*>)?tD      * "    QJE 	y!A)&..A*>)?tD%A-    " $c!Y]&;a&??E?Q./ 	 1  	 	
 	
 !##.v~~a/C.DDI % $  ####S !&	 $  ##/q!0D/ETJ %
 $  ! "& "4&8&F "    QJE 	ORUQYGr"   c                 @   U R                    Vs/ s H*  oR                  (       d  M  UR                  (       a  M(  UPM,     nn[        U5      S:X  a  US   nU R	                  U5        g[        U5      S:X  a  U R                    Vs/ s H  oR                  (       a  M  UPM     nn[        S U 5       5      nU Vs/ s H  oR                  U:X  d  M  UPM     nn[        U5      S:  a  U R                  U5        gU R	                  US   5        ggs  snf s  snf s  snf )zCheck if there's a winner.r*   r   Tc              3   8   #    U  H  oR                   v   M     g 7fNr   ).0r   s     r#   	<genexpr>2ChaosBearGame._check_for_winner.<locals>.<genexpr>m  s     :k**ks   F)r(   r   r   r   	_end_gamer   r   _end_game_tie)rH   r   r   winnerall_playersmax_poswinnerss          r#   r   ChaosBearGame._check_for_winnera  s    $(LLSLqGGANNLS}""1%FNN6"1$&*llIl..1lKI:k::G"-G+Qw1Fq+GG7|a""7+  wqz*% T JGs'   DDDDD;DDr  c                     UR                   U l        UR                  U l        SU l        U R                  SSS9  U R                  SUR                   UR                  S9  U R                  5         g)zEnd the game with a winner.Fzgame_pig/win.oggr   r   zchaosbear-winnerr   N)rD   _winner_namer   _winner_position_is_tier   r   finish_game)rH   r  s     r#   r  ChaosBearGame._end_gamew  s_    "KK &.A>+FKK&//Zr"   r   c                 l    SU l         Xl        SU l        U R                  SUS9  U R	                  5         g)zEnd the game with a tie.NTzchaosbear-tier   )r  r  r  r   r  )rH   r   s     r#   r  ChaosBearGame._end_game_tie  s6      (8<r"   c                    U R                    Vs/ s H/  n[        U[        5      (       d  M  UR                  (       a  M-  UPM1     nn[	        US SS9n0 n0 nU H3  nUR
                  XAR                  '   UR                  XQR                  '   M5     [        U SS5      n[        U SS5      n[        U SS	5      n[        U R                  5       [        R                  " 5       R                  5       U R                  U Vs/ s H8  n[        UR                   UR                  UR"                  [        US
S	5      S9PM:     snUUUUUU R$                  U R&                  S.S9$ s  snf s  snf )z3Build the game result with ChaosBear-specific data.c                     U R                   $ r  r   )r   s    r#   <lambda>1ChaosBearGame.build_game_result.<locals>.<lambda>  s    1::r"   Tkeyreverser  Nr  r   r  Fis_virtual_bot)rC   player_namerE   r'  )winner_namewinner_positionis_tiefinal_positionsalive_statusr)   rounds_played)	game_type	timestampduration_ticksplayer_resultscustom_data)r(   
isinstancer   r   sortedr   rD   r   getattrr   r6   r   now	isoformatsound_scheduler_tickr   rG   rE   r)   r,   )	rH   r   r  sorted_playersr,  r-  r)  r*  r+  s	            r#   build_game_resultChaosBearGame.build_game_result  sT    ||
#!z!_'EAannA| 	 
  1EtT A&'jjOFF##$77L    dND9!$(:A>y%0mmolln..044 ( (A dd !88#*1.>#F	 (  +#2 #2 ,!%!3!3!%!2!2
 	
!
(s   EEE<?E"resultr`   c           
      `   [         R                  " US5      /nUR                  R                  S0 5      nUR                  R                  S0 5      n[        UR	                  5       S5       H?  u  nu  pxUR                  US5      (       a  SOSn	UR                  U SU S	U S
U	 35        MA     U$ )z)Format the end screen for ChaosBear game.zgame-final-scoresr,  r-  r*   T z	 (caught). : z squares)r   rb   r3  	enumerateitemsr   )
rH   r=  r`   linesr,  r-  r  rD   r   rz   s
             r#   format_end_screenChaosBearGame.format_end_screen  s    !!&*=>? ,,001BBG))--nbA#,_-B-B-Da#HA'++D$77R[FLLA3bb
(6(CD $I r"   	action_idc                 .   [        U[        5      (       d  gU R                  U:w  d  UR                  (       d  gSU l        U R                  S5        [        R                  " SS5      nUR                  U-   nU R                  SUR                  US.SS	9  [        U5       H2  nU R                  S
[        R                  " SS5       S3SUS-  -   S	9  M4     SUS-
  S-  -   S-   nU R                  SUR                  US.US	9  U R                  S0 US-   S	9  g)zRoll dice to move forward.NTzgame_pig/roll.oggr*   r   r   )rD   r   r   r   zgame_chaosbear/playerstepr   r   r@   r   )rC   r   r   )r4  r   r|   r   r{   r   r   r   r   r   rD   r   r   rG   )rH   rK   rG  r   r   r  position_delays          r#   rP   ChaosBearGame._action_roll_dice  s3   &/22&(  	+, ~~a#- 	  	 	
 tA+FNN1a,@+AFAI     dQh!^+a/#YY , ' 	 	
 	-r~PQ?QRr"   c                    [        U[        5      (       d  gU R                  U:w  d  UR                  (       d  gUR                  S-  S:w  d  UR                  S:X  a  gSU l        U R                  S[        R                  " SS5       S35        S	nU R                  S
SUR                  0US9  US	-  n[        R                  " SS5      nUS:X  a^  UR                  S-   nU R                  S[        R                  " SS5       S3US9  US	-  nU R                  SSUR                  US.US9  GOUS:X  a^  UR                  S-   nU R                  S[        R                  " SS5       S3US9  US	-  nU R                  SSUR                  US.US9  GO^US:X  a  [        SU R                  S-
  5      nU R                  S[        R                  " SS5       S3US9  US	-  nU R                  SSUS.US9  U R                  S[        R                  " SS5       S3US-   S9  GOUS:X  a  U R                  S-   nU R                  S[        R                  " SS5       S3US9  US	-  nU R                  SSUS.US9  U R                  S[        R                  " SS5       S3US-   S9  GOJUS:X  aN  [        SUR                  S-
  5      nU R                  SUS9  US	-  nU R                  SSUR                  US.US9  O[        R                  " SS	5      n[        R                  " 5       S:  nU R                  S0 US9  US-  nU(       aN  [        SUR                  U-
  5      nU R                  SUS9  US	-  nU R                  SS UR                  US.US9  O\UR                  U-   nU R                  S[        R                  " SS5       S3US9  US	-  nU R                  SS!UR                  US.US9  US	-  nU R                  S"0 US9  g)#z!Draw a card for a special effect.Nr   r   Tzgame_chaosbear/drawr*   r   r   r   r   rD   r   r
   zgame_chaosbear/impulsionr   r   )r   rC   r   r   zgame_chaosbear/tirednessr   )r   r   r   r   zgame_chaosbear/hungerr   r   r@   zgame_chaosbear/backpush.oggr   g      ?r   r   r   r   )r4  r   r|   r   r   r{   r   r   r   r   rD   r   rG   r   r+   )	rH   rK   rG  r  cardnew_posr   amountis_backs	            r#   rX   ChaosBearGame._action_draw_card  s   &/22&(??Q!#v!';  	-fnnQ.B-C4HI   	 	
 	
 ~~a#19oo)G*6>>!Q+?*@E!    QJE)!'$+
 "    QYoo)G*6>>!Q+?*@E!    QJE/!'$+
 "    QYQ 0 01 45J*6>>!Q+?*@E!    QJE)", "    +FNN1a,@+AF!AI   
 QY))A-J'q!(<'=TB!    QJE&", "    )&..A*>)?tD!AI   
 QY!V__q01G-!    QJE(!'$+
 "    ^^Aq)Fmmo+G ;RUSQJEa6!9:##1 % $  
##!"-%+YY(/
 !& $  !//F2##.v~~a/C.DDI % $  
##!"0%+YY(/
 !& $  	
-ruEr"   c                    [        U[        5      (       d  gU R                  U5      nU(       d  gU R                   Hs  nUR                  (       a  M  UR
                  (       a'  UR                  SUR                  UR                  S9  MN  UR                  SUR                  UR                  S9  Mu     UR                  SU R                  U R                  S9  g)zCheck the current game status.Nzchaosbear-status-player-aliver   zchaosbear-status-player-caughtzchaosbear-status-bear)r   r   )r4  r   r_   r(   r   r   speak_lrD   r   r)   r+   )rH   rK   rG  rd   r   s        r#   r\   "ChaosBearGame._action_check_status  s    &/22}}V$ A>>>77LL7 vv!" !  LL8 vv!" !    	#''## 	 	
r"   c                     / nU R                    H=  nUR                  (       a  M  UR                  UR                  UR                  45        M?     [        US SS9$ )z&Get player scores (distance traveled).c                     U S   $ )Nr*   r   )xs    r#   r"  *ChaosBearGame.get_scores.<locals>.<lambda>  s    AaDr"   Tr$  )r(   r   r   rD   r   r5  )rH   scoresrK   s      r#   
get_scoresChaosBearGame.get_scores  sK    llF&&&v{{FOO<= # f.$??r"   c                    / n[        U R                  5       S5       HR  u  nu  p4U R                  U5      nU(       a  UR                  (       d  SOSnUR	                  U SU SU SU S35        MT     SR                  U5      $ )	zFormat the final standings.r*   caughtsurvivedr@  rA  z
 squares ()
)rB  rY  get_player_by_namer   r   join)rH   rD  r  rD   distancerK   rz   s          r#   format_standingsChaosBearGame.format_standings  s}    #,T__->#BA,,T2F"(XJFLLA3bb
*VHAFG $C yyr"   )r  r  r  r+   r)   r   r{   r-   r,   rz   r   )F)r.   Nr  )r   zChaosPlayer | Noner.   N)<r   r   r   r   r   r   listr(   r   r   r)   r   r+   r,   r-   classmethodstrr2   r6   r9   r<   rA   r    rI   r   re   rn   r   rQ   r   rR   rY   rZ   r]   r^   dictr   r   r   r   r   r   r   r   r   r   r   r  r  r   r;  rE  rP   rX   r\   tuplerY  rc  r!   __classcell__)rr   s   @r#   r%   r%      s    &+4%@GT/"@ M3KL#$%c%      )S ) )      Gs G# Gt GP_ G$_ $ $L
<F sTz 	"6 	"j 	"F sTz  "6 "j "v #* "f " "8* 8*4 8*D 8*t8t 8 8|"@HY	 
 
C$J 
@<8$ $EHN4 ,	 	D 	c d (
: (
T
 C DI "-S -S3 -S4 -S^gF gF3 gF4 gFR
6 
c 
d 
H@DsCx1 @ #    r"   r%   )r   r   dataclassesr   r   r   baser   r   registryr	   game_utils.bot_helperr   game_utils.game_resultr   r   game_utils.actionsr   r   r   server.core.ui.keybindsr   messages.localizationr   r   r%   r   r"   r#   <module>rs     sn     (   $ . > ? ? 0 1 f   r D r   r r"   