;ò DÄFc@s4dZdkZdkZdkZdkZdklZdk l Z dk l Z dk l Z dk lZdklZlZdkZdkZdklZdkZed „Zd efd „ƒYZd eifd „ƒYZedjoBeei ƒdjo!eei!i"ei dƒƒq0eƒndS(s»ThudBoard - The Discworld Boardgame without rules Version 1.8 Copyright 2003, 2004, 2005, 2006, 2007 by Marc Boeren More information ---------------- Read the docs (index.html, howto.html, download.html and about.html) for more information about ThudBoard and how to use ThudBoard. TODO ---- skins (partially done) web-save option keyboard-bindings two-player internet-connection game cleanup of code file > print? rules-plugin AI-plugin N(sfixed_askyesno(s showwarning(saskopenfilename(sasksaveasfilename(s askdirectory(sThudMoves ThudBattle(sopencCsvtƒ}|oX|ii|ƒo.|i|ƒ|iƒt|_|i ƒqht t i t i ƒn|iƒdS(N(sAppsappsfilenamesbattlesloadsnew_mrus UpdateBattlesTruessavedsupdate_infoimgs showwarningstextsswarningLoadFailedTitleswarningLoadFailedMessagesmainloop(sfilenamesapp((s//mnt/gmirror/ports/games/thudboard/work/thud.pysmain*s    sSizecBs tZdZd„Zd„ZRS(sASize is a placeholder for items that have x, y, dx and dy values.cCs(||_||_||_||_dS(N(sxsselfsysdxsdy(sselfsxsysdxsdy((s//mnt/gmirror/ports/games/thudboard/work/thud.pys__init__:s   cCsf|i|jo|i|ijno(|i|jo|i|ijnotSntSdS(s@Return True is x, y is inside this Size, treated as a rectangle.N(sselfsxsdxsysdysTruesFalse(sselfsxsy((s//mnt/gmirror/ports/games/thudboard/work/thud.pysinside?sV(s__name__s __module__s__doc__s__init__sinside(((s//mnt/gmirror/ports/games/thudboard/work/thud.pysSize8s  sAppcBsÈtZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z d „Z d „Z d „Z d „Z d „Zd„Zd„Zd„Zeddddƒd„Zd„Zed„Zed„Zed„Zed„Zed„Zed„Zed„Zed„Zed„Zed„Zed„Z ed„Z!ed „Z"ed!„Z#eddddƒd"„Z$eddddƒd#„Z%ed$„Z&ed%„Z'ed&„Z(ed'„Z)eddddƒd(„Z*ed)„Z+ed*„Z,ed+„Z-eddddƒd,„Z.eddddƒd-„Z/eddddƒd.„Z0eddddƒd/„Z1eddddƒd0„Z2d1„Z3d2„Z4d3„Z5d4„Z6d5„Z7ed6„Z8d7„Z9d8„Z:d9„Z;d:„Z<d;„Z=d<„Z>d=„Z?d>„Z@d?„ZAeeed@„ZBdA„ZCdB„ZDdC„ZEdD„ZFdE„ZGdF„ZHdG„ZIdH„ZJdI„ZKedJ„ZLdK„ZMdL„ZNdM„ZOdN„ZPdO„ZQdP„ZRdQ„ZSRS(RNcCsTt|_tii|ƒtiƒ|_|i d|ii dƒ|i dƒy|i dƒWnnX|i ddƒ|iddƒ|idƒ|ittƒ|iƒ|idƒ}yti}d|f|_Wnd |f|_nXt|_t|_t|_t|_t|_t|_t|_d |_d |_ t!|_"d |_#d |_$d |_%d d f|_&h|_'d|_(d g|i(|_)t*i+ƒ|_,t*i-i.t*i+ƒdƒ|_/t*i-i0|i/ƒ oœt*i-i.t*i-i1dƒdƒ}t*i-i.|dƒ}yt*i2|ƒWnnXt*i-i0|ƒo||_,||_/q~yt*i2|i/ƒWq~q~Xn|i3t*i-i.|i,dƒƒ|iodpd|_4t5ddddƒ|_6t5ddddƒ|_7t5ddddƒ|_8t5ddddƒ|_9|i:ƒ|i;ƒt|_<t|_|i=ƒt|_dS(Ns backgrounds ThudBoardsthud.icoiis 790x540+0+0f10.699999999999999smicrosoft sans serifs helveticassmovingidiisbattless~s .thudboards thudboard.cfgiiiWisi«i iiiüi$(>sTruesselfsstartupstksTks__init__sskinssinitsskins configurescolorswm_titles wm_iconbitmaps wm_minsizes wm_maxsizes wm_geometrys wm_resizablesFalses focus_forcescalc_pointsizes pointsizessysswinversfontstoggle_boardmapstoggle_highlights toggle_scorestoggle_commentssubmenusskip_next_clickssaveds start_coords drag_coordsNoneshighlight_areas move_stagesscrollersensitivitys scrolleridsmotionpositionspiecess mru_countsmrusossgetcwds configdirspathsjoins battledirsisdirs expandusersmakedirss load_optionss listlinessSizessize_battlenames size_lists size_thudurlstilesDrawInitializesEventInitializesbackground_disabledsfile_new(sselfswinvers battledirs pointsizes configdir((s//mnt/gmirror/ports/games/thudboard/work/thud.pys__init__Is‚                    !       cCs|id|iƒ|id|iƒ|iid|iƒ|iid|iƒ|iid|iƒ|iid|i ƒ|i id|i ƒ|i id|i ƒ|i id|i ƒ|id|iƒ|id|iƒ|iid |iƒdS( NsWM_DELETE_WINDOWs sss ss s s (sselfsprotocols file_quitsbindsfocus_inscanvasspiece_highlights drag_startsdragscanvas_mouserelease_dispatchs backgroundsbackground_area_clicksbackground_scrollerssbackground_motionscmd_copys cmd_pastes commentsboxsupdate_comment(sself((s//mnt/gmirror/ports/games/thudboard/work/thud.pysEventInitialize’scCsHy|iƒ|iƒd}Wn dSnXd||}t|ƒSdS(Nf25.399999999999999if72.0(sselfswinfo_screenheightswinfo_screenmmheightsdpiys pixelapproxs pointsizesint(sselfs pixelapproxs pointsizesdpiy((s//mnt/gmirror/ports/games/thudboard/work/thud.pyscalc_pointsize¡s cCs¸|iidtiƒiƒ}|idjo||ii |iijo#||ii |i_t |_ nG|idjo||iijo#||i_t |_ |i ƒndS(Ns1.0iiÿÿÿÿ( sselfs commentsboxsgetstksENDsstripscomments battle_indexsbattlesmovessFalsessavedsupdate_infoimg(sselfseventscomment((s//mnt/gmirror/ports/games/thudboard/work/thud.pysupdate_commentªs- #  cCs|i og|idjoI|ii|i|iƒ\}}|i||i i||i iƒqr|i ƒnt |_dS(Ni( sselfsstartups battle_indexsbattlesget_offset_and_heights list_offsetsdyshs MoveHighlights size_listsMoveHighlightBattlenamesFalse(sselfseventshsdy((s//mnt/gmirror/ports/games/thudboard/work/thud.pysfocus_in´s  !(cCs+|iiƒ|itƒ|i|ƒdS(N(sselfs backgrounds focus_setsupdate_commentsNonescmd_copysevent(sselfsevent((s//mnt/gmirror/ports/games/thudboard/work/thud.pyscmd_copy_click½s  cCs|iiƒ|ijodSn|iidjodSngi}|iiƒi ƒD]}||i ƒƒqY~}di |ƒiddƒ}|ii|iii ƒ}|oKddi |idƒƒ}||idƒdjodpd|7}n|iƒ|i|ƒdS(Nis s~ ss# s # s (sselfs backgrounds focus_gets commentsboxsbattlesindexsappends_[1]stxt_battle_moves splitlinesslinesstripstxtsjoinsreplacesmovess battle_indexscommentssplitsfindsclipboard_clearsclipboard_append(sselfseventscomments_[1]slinestxt((s//mnt/gmirror/ports/games/thudboard/work/thud.pyscmd_copyÂs</ cCs|iƒ|i|ƒdS(N(sselfstemp_disable_background_clicks cmd_pastesevent(sselfsevent((s//mnt/gmirror/ports/games/thudboard/work/thud.pyscmd_paste_clickÎs cCs.|iiƒ|ijodSny|iddƒ}Wn d}nX|oÜ|idƒ}|diƒ}d}t |ƒdjo>di gi }|dD]}||iƒƒqž~ƒ}ndi |iƒƒiddƒ}td ddgƒ}|i||ƒt|_||_|iƒndS( Ns selections CLIPBOARDss#iis s iÿÿÿÿ(sselfs backgrounds focus_gets commentsboxs selection_getstxtssplitspartssstripscommentslensjoinsappends_[1]sps splitlinessreplacesThudMovestestsload_strsTruesmovingsmovesend_move(sselfseventscomments_[1]spspartssteststxt((s//mnt/gmirror/ports/games/thudboard/work/thud.pys cmd_pasteÒs$ >!  cCs3|i|ƒ|i|ƒ|i|if|_dS(N(sselfspiece_highlight_offseventsmotion_highlight_areasxsysmotionposition(sselfsevent((s//mnt/gmirror/ports/games/thudboard/work/thud.pysbackground_motionås  cCstƒ}ttiddtiddƒttiddtiddƒttiddtiddƒttiddtiddƒtddddƒtddddƒg|td|_|ii|iƒ|iƒ|iƒ|iƒdS(Niÿÿÿÿ(sselfs battle_indexsbattles get_positionsMoveHighlightBattlenames DrawPiecess show_comment(sselfseventsarea((s//mnt/gmirror/ports/games/thudboard/work/thud.pysbattlename_click)s    cCsÅ|i|ii|ii}|ii||iƒ}|djodSn||_ |ii |i ƒ}|ii |i |iƒ\}}|iƒ|i||ii||iiƒ|iƒdS(Ni(seventsysselfs size_listsdysbattles get_indexs list_offsetsis battle_indexs get_positionspositionsget_offset_and_heightshs DrawPiecess MoveHighlights show_comment(sselfseventsareasishsdysposition((s//mnt/gmirror/ports/games/thudboard/work/thud.pys list_click0s  ! $cCs|idƒdS(Niÿÿÿÿ(sselfs UpdateScroll(sselfseventsarea((s//mnt/gmirror/ports/games/thudboard/work/thud.pysscrollup_click;scCs|idƒdS(Ni(sselfs UpdateScroll(sselfseventsarea((s//mnt/gmirror/ports/games/thudboard/work/thud.pysscrolldown_click>scCstdƒdS(Nshttp://www.thudgame.com(swebbrowser_open(sselfseventsarea((s//mnt/gmirror/ports/games/thudboard/work/thud.pys thudurl_clickAsc CsÄ|iidƒ||d|ijo|i|ij o„|ii|i i |i i ||i i |i i |i i ||ddd|i idd|i idƒ|ii|i i |i i |||i i |i i d|i i ||d|i idddƒ|ii|i i |i i d |i i |d |i id tiddƒ|_|ii|id |iƒ|i|i i |i i d |i i |ƒ|iiddƒndS(Nsmovei stagsoutlines backgroundsfillistextisimagesanchors ismovetxt(sselfs backgroundsdeletesdyshs listliness battle_indexs list_offsetscreate_rectangles size_listsxsysdxsskinscolors create_lines create_imagescopystksNWscopyiconstag_bindscmd_copy_clicks update_pastes tag_lower(sselfsdysh((s//mnt/gmirror/ports/games/thudboard/work/thud.pys MoveHighlightEs*, $   .c Cs/|iidƒ|ii|ii|ii|ii|ii|ii|iiddd|i i dd|i i dƒ|ii |ii|ii|ii|ii|iid|ii|iid|i i dddƒ|i |ii|iid|iiƒ|ii dd ƒ|iƒdS( Nsmovestagsoutlines backgroundsfillistextis battlename(sselfs backgroundsdeletescreate_rectanglessize_battlenamesxsysdxsdysskinscolors create_lines update_pastes tag_lowers show_comment(sself((s//mnt/gmirror/ports/games/thudboard/work/thud.pysMoveHighlightBattlename\s  $ *c Cs“y|iddƒ} Wn d} nX|ii}| oö| idƒ}|diƒ} d}t |ƒdjo>di gi }|dD]}||iƒƒq‰~ƒ}ndi | iƒƒiddƒ} td ddgƒ}|i| |ƒo3|ii}|ii|ƒo|ii}q+q/n|ii||d |d tid d ƒ|_||iijo |ii|id|i ƒndS(Ns selections CLIPBOARDss#iis s iÿÿÿÿsimagesanchorstagsmoves (!sselfs selection_getstxtsskinsnoclipspasteimgssplitspartssstripscommentslensjoinsappends_[1]sps splitlinessreplacesThudMovestestsload_strsnopastesbattles check_movespastes backgrounds create_imagesxsystksNWs pasteiconstag_bindscmd_paste_click( sselfsxsyscommentstestspasteimgs_[1]spspartsstxt((s//mnt/gmirror/ports/games/thudboard/work/thud.pys update_pastens(  >! -c Csð|iidƒ|iƒ}d}d}|ii } |i dd}x¤|D]œ} | |ii |ii }|ii||i ƒ}||iij}| iddƒiddƒ} |o| iƒd d jo8|ii|ii| d dd |iid tiƒn| iƒidƒp| iƒidƒo]|d7}|ii|ii|| dd|d|id|iidd dd tiƒn|ii|ii|| d| d|id|iidd dd tiƒ| |7} qLWdS(Nsmovetxti iiis>>> ss~ isxstagsimagesanchorsdsRstexts%d.sfontsfill( sselfs backgroundsdeletesmovetxts splitliness move_linesshsdxs size_listsys list_offsetsmovenoslinesdysbattles get_indexsis saved_indexslockedsreplacesstrips create_imagesxsskinslockstksNWs startswiths create_textsfontscolorsNE( sselfsmovetxtsmovenoslockeds move_linessishsdxsdysysline((s//mnt/gmirror/ports/games/thudboard/work/thud.pys WriteMoves„s6  , cCs@|iƒ|ii|_|ii|id|iiƒ|i d|iiƒ|ii|_ |i g}di |ii ||iddƒƒ}|d|_ |i o|i|ƒn|ii|iƒ}|ii|i|i ƒ\}}|i||ii||iiƒ|iƒ|iƒ|iƒ|iƒdS(NstextsThudBoard [%s]s s history_linesi i(sselfsDrawCommentboxsbattlesindexs battle_indexs backgrounds itemconfigures text_gamenamesnameswm_titles list_offsetsmutable_offsetsjoinstxt_battle_movess listlinessmovetxtsstartups WriteMovess get_positionspositionsget_offset_and_heightsdyshs MoveHighlights size_lists DrawPiecess init_moves show_commentsupdate_infoimg(sselfsmutable_offsetshsmovetxtsdysposition((s//mnt/gmirror/ports/games/thudboard/work/thud.pys UpdateBattle s"  '  !$   cCs0|iidddƒ|iidddƒdS(Ns highlightsstateshiddensstageimg(sselfscanvass itemconfigure(sselfsevent((s//mnt/gmirror/ports/games/thudboard/work/thud.pyspiece_highlight_offµscCsK|i|ii|i|iif\}}|ii||ii}|ii||ii}|ii||ii}|ii||ii}y"d|i i |d|f}Wn d}nX|ii|7_|ii|7_|i i d||ƒ|i i d||ƒ||i ijoò|i i|id|ƒ|io*|i idddƒ|i idƒn|id jo‘|i idddƒ|i idƒ||i ijo|i i|iƒq||ijo|i i|iƒq|i iddd ƒqGn-|i iddd ƒ|i iddd ƒdS( Ns%s%diss highlightsstageimgstextsstatesnormals capturingshidden(seventsxsselfstilesysdiffxsdiffysdxsdysbattlesremapxspositionscanvassmovesvalid_positions itemconfigureshighlight_tooltipstoggle_highlightslifts move_stagesto_possmoveimgspiecess captureimg(sselfseventsdiffxsdiffyspositionsysx((s//mnt/gmirror/ports/games/thudboard/work/thud.pyspiece_highlight¹s8,"  c Csi|iidƒ|i odSn||iijo/|i|ƒ\}}|ii ||||i i ||i i ddddd|iidƒ|ii ||i i d||i i d||i i ||i i ddd|iidd |iidƒ|ii||i i d ||i i d |d |id |iid ddd tiƒ|_ndS(Nsdrag_highlightstagswidthisoutlines backgroundiisfillistextsfontsanchor(sselfscanvassdeletestoggle_highlightspositionsbattlesvalid_positionsGetPositionOriginsxsyscreate_rectanglestilesdxsdysskinscolors create_textsfontstksSEsdrag_highlight_tooltip(sselfspositionsysx((s//mnt/gmirror/ports/games/thudboard/work/thud.pysdrag_highlightÙs*     $ cCs¤|iiƒ|iidƒ|i|ii|i|ii f\}}y"d|i i |d|f}Wn d}nX||i joò||_|_||iijo d|_|id|iƒn~|iidjo|id|iddƒnN|id jo|i|ƒn-|iƒ|id|iddƒd|_|id jo|ii|i |iƒq n$|iƒd|_d|_|_dS( Nssubmenus%s%dissmovingsto_poss??sfrom_poss capturing(sselfs backgrounds focus_setsdeleteseventsxstilesdxsysdysbattlesremapxspositionspiecess startpositions dragpositionsmovesto_poss move_stages update_movesfrom_poss hide_piecesend_movescanvasslift(sselfseventsysxsposition((s//mnt/gmirror/ports/games/thudboard/work/thud.pys drag_startñs0 ,"    "  cCsK|i odSn|idjodSn|i|ii|i|iif\}}y"d|i i |d|f}Wn d}nX|i |ƒ||i i jož|i i|d|i i|id|ii}t|dƒt|idƒ|ii}|ii|i|i||ƒ||_|id|iƒndS(Ns capturings%s%disisto_pos(sselfs dragpositions move_stageseventsxstilesdxsysdysbattlesremapxspositionsdrag_highlightsvalid_positionsmapxsdiffxsintsdiffyscanvassmovespiecess startpositions update_move(sselfseventsdiffyspositionsysxsdiffx((s//mnt/gmirror/ports/games/thudboard/work/thud.pysdrags  ,"  3+  cCs5|io|i|ƒd|_n|i|ƒdS(Ns capturing(sselfs dragpositions drag_stopsevents move_stagespiece_highlight(sselfsevent((s//mnt/gmirror/ports/games/thudboard/work/thud.pyscanvas_mouserelease_dispatch s   cCs`|i odSn|idjodSn|i|ii|i|iif\}}y"d|i i |d|f}Wn d}nX||i i jo |i}n||i jo†|id|ƒ||ijo>|id|gƒ|ii|i|ddƒ|i|=n|i|i |i|<|i|i =nd|_ |_|id ƒdS( Ns capturings%s%dissto_possthud_list_appendsstateshiddensA1(sselfs dragpositions move_stageseventsxstilesdxsysdysbattlesremapxspositionsvalid_positions startpositions update_movespiecesscanvass itemconfiguresdrag_highlight(sselfseventsysxsposition((s//mnt/gmirror/ports/games/thudboard/work/thud.pys drag_stop(s, ,"   cCs°|i|ii|i|iif\}}y"d|ii|d|f}Wn d}nX||i jo>|i d|gƒ|i i |i |ddƒ|i |=ndS(Ns%s%dissthud_list_appendsstateshidden(seventsxsselfstilesdxsysdysbattlesremapxspositionspiecess update_movescanvass itemconfigure(sselfseventsysxsposition((s//mnt/gmirror/ports/games/thudboard/work/thud.pys hide_piece?s," cCs+tdddgttƒ|_t|_dS(Niÿÿÿÿs??(sThudMovesTruesFalsesselfsmovesmoving(sself((s//mnt/gmirror/ports/games/thudboard/work/thud.pys init_moveKscCs5tdddgttƒ|_t|_|iƒdS(Niÿÿÿÿs??(sThudMovesTruesFalsesselfsmovesmovings show_move(sself((s//mnt/gmirror/ports/games/thudboard/work/thud.pys start_moveOs cCsŸ|i o|iƒn|tj o(||i_|ii|ƒ|i_n|tj o||i_ n|tj o|ii |7_ n|i ƒdS(N( sselfsmovings start_movesfrom_possNonesmovesbattlespiece_onspiecesto_possthud_list_appends thud_lists show_move(sselfsfrom_possto_possthud_list_append((s//mnt/gmirror/ports/games/thudboard/work/thud.pys update_moveTs  cCs³|i o|iƒdSn|iidjp|iidjo&|iƒ|iƒ|iƒdSn|ii |iƒot |_ |ii |_ n8|iƒ|i |iijottitiƒn|ii|i ƒ}|ii|i |iƒ\}}|ig}di|ii||iƒƒ}|d|_|i|ƒ|iƒ|i ||i!i||i!iƒ|iƒ|iƒ|i"ƒ|i#ƒ|i$ƒdS(Ns??s i(%sselfsmovings show_movesmovesfrom_possto_poss DrawPiecess init_movesbattles add_thudmovesFalsessavedsindexs battle_indexsbells saved_indexs showwarningstextsswarningLockedMoveTitleswarningLockedMoveMessages get_positionspositionsget_offset_and_heights list_offsetsdyshsmutable_offsetsjoinstxt_battle_movess listlinessmovetxts WriteMovess MoveHighlights size_listsDrawCommentboxs show_commentsupdate_infoimg(sselfshsmutable_offsetsdyspositionsmovetxt((s//mnt/gmirror/ports/games/thudboard/work/thud.pysend_move`s8  &      ! !   $    c Cs‡|i o(|iidƒ|iidƒdSn|iidjoddf\}}n%|ii|ii|i ƒ\}}|||i i}|i i ƒ|i i}||d|i job|idƒ|ii|ii|i ƒ\}}|||i i}|i i ƒ|i i}n|iidƒ|ii|i i|i i|d|i iƒd|id|iidd dd tiƒ|_|iidƒ|ii|i i|i i||i i|i i|i i||d dd |iid d|iid ƒ|ii|i i|i i||i i|i id|i i|d|iidd dƒ|iiddƒdS( Ns movingtxtsmovingiÿÿÿÿii stextsfontsfillstagsanchorsoutlines background(sselfsmovings backgroundsdeletesbattlesindexsdyshsget_offset_and_heights list_offsets size_listsmoves get_heights listliness UpdateScrolls create_textsxsystxt_movesfontsskinscolorstksNWscurrent_movetxtscreate_rectanglesdxs create_lines tag_lower(sselfshsdy((s//mnt/gmirror/ports/games/thudboard/work/thud.pys show_movesF $ $   $   cCsJ|ii|d}t|dƒd}||ii||ii fSdS(Nii( sselfsbattlesmapxspositionsposxsintsposystilesdxsdy(sselfspositionsposxsposy((s//mnt/gmirror/ports/games/thudboard/work/thud.pysGetPositionOrigin¨sc CsUti|ddddddd|iidd dƒ|_|iiƒ|iƒdS( Nswidthisheightis borderwidthisbgs backgroundshighlightthickness(stksCanvassselfsskinscolors backgroundspacks RedrawBoard(sself((s//mnt/gmirror/ports/games/thudboard/work/thud.pysDrawInitialize­s% c Cs?|iiƒx[tdƒD]M}xDtdƒD]6}|ii|d|dd|iidt i ƒq-WqWt i |iddd dd d d |ii d dd ƒ|_ |io |iip |ii}|i id d d|dt i ƒ|_|iid d d|i dt i ƒ|iidd d|iidt i ƒdddf}|iiddddd|d|ii dƒ|_|iiddddd|d|ii dƒ|_|iiddd|iidt i ƒ|iiddd|iidt i ƒ|iiddd|iidt i ƒ|iiddd|iidt i ƒ|iidd d|iidt i ƒ|iitid dd!d|idtid|ii ddt i ƒ|_!|iiti"d dd!d|idti#d|ii ddt i ƒ|_$|iiti%d dd!d|idti&d|ii ddt i ƒ|_'|iiti(d dd!d|idti)d|ii ddt i ƒ|_*|iid"d#d|idti+d|ii dd$d%ƒ|_,|iid"d&d|id|ii ddd'ƒ|_-|ii|i.i|i.idti/d|id|ii dd$d(dt i ƒ|_0|i i1|i2i|i2i|i2i|i2i3|i2i|i2i4d$d)dd*d+|ii d ƒ|i i1|i2i|i2i3d,|i2i|i2i4d|i2i|i2i3|i2i|i2i4d$d)d+|ii d d|ii d ƒ|i i|i2i|i2i3d-|i2i|i2i4dd.d|id|ii dd$d)dt i5ƒ|_6|i i7d)d/d0ƒ|i i|i2id1|i2id1d|ii8dt i d$d2d/d0ƒ|_9|i i|i2id1|i2id1d|ii:dt i d$d2d/d0ƒ|_;|iid3d4d|ii<dt i d$d5d/d0ƒ|_=|iid3d6d|ii>dt i d$d7d/d0ƒ|_?t i@|id d1d |ii dd8|ii dƒ|_A|iBƒdS(9NiiiÈi‚simagesanchorswidthisheights borderwidthisbgs backgroundshighlightthicknessswindowsarialisboldi0i†stexts0sfontsfillsscoreišiNi iHikiŽi÷iVi­iystags battlenameishttp://www.thudgame.comsmovetxts highlightisoutlineiisH8sstateshiddenisstageimgiWi™sdownimgissinfoimgs foreground(Csselfs backgroundsdeletesrangesxsys create_imagesskinsbcktilestksNWsCanvasscolorscanvasstoggle_boardmaps boardgridsboardsimgsboardimgs create_windowsscores scorefonts create_texts score_dwarfs score_trolls thudtitlesbannersliststextssmenuFile_xpos_widthsfontsmenuFilesWs menu_filesmenuQuicksave_xpos_widths menuQuicksaves menu_savesmenuOptions_xpos_widths menuOptionss menu_optssmenuHelp_xpos_widthsmenuHelps menu_helpsanonymousBattles text_gamenames text_abouts size_liststext_mini_howtosmovetxtscreate_rectanglestilesdxsdysSEshighlight_tooltips itemconfigurescaptures captureimgsmovesmoveimgsdownsdownimgsinfosinfoimgsTexts commentsboxsDrawCommentbox(sselfsimgs scorefontsysx((s//mnt/gmirror/ports/games/thudboard/work/thud.pys RedrawBoard´sx    %#'%((((((NNNN@(    $ MM99;cs³‡d†}x'ˆiiƒD]}ˆii|ƒqWhˆ_ˆiiˆii ƒ}xKˆii ˆii ˆii fD](}x||D]}|||ƒqŠWqyWˆiƒdS(Nc s'|ˆiiˆiiˆiifjodSnˆii|d}t |dƒd}|ˆiijo ˆi ip*|ˆiijo ˆi ip ˆi i}|ˆiijodp|ˆiijodpd}ˆii|ˆii|ˆiid|d|dtiƒˆi|}|i i||d |iid tid dƒ|d7}qãWd d|}xLt|ƒD]>}|i i||d |ii d tid dƒ|d7}q@WdS( Ni istexts%dscapturesiiai simagesanchorstagi(sselfsbattles get_positionsindexspositionslensdwarfsdscdstrollstscts toggle_scores backgrounds itemconfigures score_dwarfs score_trollsdeletesxsysrangesis create_imagesskinstksNW( sselfsdsiscdstsxsyspositionsct((s//mnt/gmirror/ports/games/thudboard/work/thud.pys DrawScores*     . .cCs-|iidƒ|iidƒt|_dS(Nssubmenushighlight_area(sselfs backgroundsdeletesFalsessubmenu(sself((s//mnt/gmirror/ports/games/thudboard/work/thud.pys RemoveSubmenu'sc Csò||_|ii||d|iidddt i ƒ|d7}d}g|_ xmt t|ƒƒD]Y}t}t||ƒdjo||d}d}n||did ƒo||d tjo™d } |i i|ii||d|iidddt i ƒƒ|i i|ii|||d ddd dd|iid dt id|iƒƒnOd} |i i|ii||d|iidddt i ƒƒ|oT|ii|d|d d|dddt i ƒ}|ii|d||d ƒn|i i|ii|||d ddd ||dd|iid dt id|iƒƒ|ii|i d|d||d ƒ|ii|i d|d d||d ƒ|| 7}qcW|ii||d|iidddt i ƒdS(Nsimagestagssubmenusanchoriiiis__iiistextssfillsfontis ( sidsselfssubmenus backgrounds create_imagesxsysskins submenutopstksNWsdxssubmenussrangeslensitemssisFalsesimgs startswithsNoneshsappends submenuseps create_textscolorsWsfonts submenuitems checkboximgstag_binds submenubottom( sselfsidsxsysitemssimgsis checkboximgsdxsh((s//mnt/gmirror/ports/games/thudboard/work/thud.pys HandleSubmenu,s2 .   -:Y:2"])-cCså|ii|ƒ ottitiƒdSn|i|i_ t |_ |i |p |ii ƒƒ|ig}di|ii||iƒƒ}|d|_|i|ƒ|ii|id|iiƒ|id|iiƒdS(Ns istextsThudBoard [%s](sselfsbattlessavesfilenames showwarningstextsswarningSaveFailedTitleswarningSaveFailedMessages battle_indexs saved_indexsTruessavedsnew_mrus get_filenames list_offsetsmutable_offsetsjoinstxt_battle_movess listlinessmovetxts WriteMovess backgrounds itemconfigures text_gamenamesnameswm_title(sselfsfilenamesmutable_offsetsmovetxt((s//mnt/gmirror/ports/games/thudboard/work/thud.pysSaveGameHs    !  cCsõ|i|7_|idjo d|_n|it|iiƒjot|iiƒd|_n|ig}di|ii||i ƒƒ}|d|_|i |ƒ|ii |i |iƒ\}}|i||ii||iiƒdS(Niis (sselfs list_offsets directionslensbattlesmovessmutable_offsetsjoinstxt_battle_movess listlinessmovetxts WriteMovessget_offset_and_heights battle_indexsdyshs MoveHighlights size_list(sselfs directionsmutable_offsetshsmovetxtsdy((s//mnt/gmirror/ports/games/thudboard/work/thud.pys UpdateScrollWs  !  !cCsTtiƒ}|i|ƒ|idƒ o|idƒn|idƒ o|idƒnyÏ|idd|iƒ|idd|i ƒ|idd|i ƒ|idd|i ƒxJt t |iƒ|id|i!ƒD]#\}}|idd||ƒqÞWt|d ƒ}|i|ƒ|iƒWn!ttitii|ƒnXdS( Nsoptionssmrusboardmaps highlightsscorescommentismru%dsw+b(s ConfigParsersconfigsreadsfilenames has_sections add_sectionssetsselfstoggle_boardmapstoggle_highlights toggle_scorestoggle_commentszipsranges mru_countsmrusindexsvaluesopensfpswritescloses showwarningstextsswarningSaveOptionsFailedTitleswarningSaveOptionsFailed(sselfsfilenamesfpsindexsvaluesconfig((s//mnt/gmirror/ports/games/thudboard/work/thud.pys save_optionses(  &   cCs.tiƒ}|i|ƒyÀ|iddƒ|_|iddƒ|_|iddƒ|_|iddƒ|_ gi }|i dƒD]}||ƒq‡~}|iƒgi }|D]}||dƒq¸~|_WnnX|id|i!|_x.t|iƒ|ijo|ii d ƒqüWdS( Nsoptionssboardmaps highlightsscorescommentsmruiis(s ConfigParsersconfigsreadsfilenames getbooleansselfstoggle_boardmapstoggle_highlights toggle_scorestoggle_commentsappends_[1]sitemssitemsmruitemsssortsmrus mru_countslen(sselfsfilenames_[1]sitemsmruitemssconfig((s//mnt/gmirror/ports/games/thudboard/work/thud.pys load_options{s   0 2cCsˆy|ii|ƒWntj onXx.t|iƒ|ijo|iidƒq-W|iid|ƒ|id|i!|_dS(Nsi( sselfsmrusremovesfilenames ValueErrorslens mru_countsappendsinsert(sselfsfilename((s//mnt/gmirror/ports/games/thudboard/work/thud.pysnew_mrusc Csÿ|iodSn|ioU|iiƒ|iiddddddddƒ|iid d d ƒd |_nD|ii ƒ|ii ƒ|iid d d ƒd|_|i ƒ|i g}di|ii||iƒƒ}|d|_ |i|ƒdS(NsxiWsyi£swidthi¬sheightiFsdownimgsstatesnormalishiddenis i(sselfsstartupstoggle_comments commentsboxspacksplace_configures backgrounds itemconfigures listliness place_forgets pack_forgetsupdate_infoimgs list_offsetsmutable_offsetsjoinsbattlestxt_battle_movessmovetxts WriteMoves(sselfsmovetxtsmutable_offset((s//mnt/gmirror/ports/games/thudboard/work/thud.pysDrawCommentbox”s    %      ! cCsš|idjo@|iidtiƒ|iiti|ii|ii ƒnG|idjo6|iidtiƒ|iiti|ii ƒndS(Nis1.0iÿÿÿÿ( sselfs battle_indexs commentsboxsdeletestksENDsinsertsbattlesmovesscomment(sself((s//mnt/gmirror/ports/games/thudboard/work/thud.pys show_comment¦s *cCsD|iiƒo|iidddƒn|iidddƒdS(Nsinfoimgsstatesnormalshidden(sselfsbattles has_commentss backgrounds itemconfigure(sself((s//mnt/gmirror/ports/games/thudboard/work/thud.pysupdate_infoimg°s(Ts__name__s __module__s__init__sEventInitializescalc_pointsizesupdate_commentsfocus_inscmd_copy_clickscmd_copyscmd_paste_clicks cmd_pastesbackground_motionsmotion_highlight_areasbackground_scrollerss pollscrollerstemp_disable_background_clicksenable_background_clicksbackground_area_clicksSizesmenu_file_clicksfile_mrusNones file_mru0s file_mru1s file_mru2s file_mru3s file_mru4s file_mru5s file_mru6s file_mru7sfile_news file_opens file_save_assfile_save_snapshots file_quits file_skinssmenu_save_clicksmenu_opts_clicks opts_boardmapsopts_highlights opts_scores opts_commentsmenu_help_clicks help_contentss help_howtos help_aboutsbattlename_clicks list_clicksscrollup_clicksscrolldown_clicks thudurl_clicks MoveHighlightsMoveHighlightBattlenames update_pastes WriteMovess UpdateBattlespiece_highlight_offspiece_highlightsdrag_highlights drag_startsdragscanvas_mouserelease_dispatchs drag_stops hide_pieces init_moves start_moves update_movesend_moves show_movesGetPositionOriginsDrawInitializes RedrawBoards DrawPiecess DrawScores RemoveSubmenus HandleSubmenusSaveGames UpdateScrolls save_optionss load_optionssnew_mrusDrawCommentboxs show_commentsupdate_infoimg(((s//mnt/gmirror/ports/games/thudboard/work/thud.pysAppHs  I      6     !                                 ! '   G           s__main__i(#s__doc__ssyssosscopysTkinterstksbugfix_askyesnosfixed_askyesnosaskyesnos tkMessageBoxs showwarnings tkFileDialogsaskopenfilenamesasksaveasfilenames askdirectorysbattlesThudMoves ThudBattlesskinsstextss webbrowsersopenswebbrowser_opens ConfigParsersNonesmainsobjectsSizesTksApps__name__slensargvspathsabspath(sThudMovesskinsstextss ThudBattleswebbrowser_opensaskyesnos showwarningstksmainssyssasksaveasfilenamescopys ConfigParsers askdirectorysAppsaskopenfilenamesossSize((s//mnt/gmirror/ports/games/thudboard/work/thud.pys?s2              ÿÿÿÿu !