From c61bd8acc710d1ec086246b61a545291b2d66ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nguy=E1=BB=85n=20Gia=20Phong?= Date: Fri, 24 Jul 2020 21:52:46 +0700 Subject: [PATCH] Update documentation pointers --- README.rst | 67 +++++++++++------------ brutalmaze/game.py | 2 +- docs/source/conf.py | 2 +- docs/source/{credits.rst => copying.rst} | 6 +- docs/source/images/screenshot.png | Bin 23 -> 7507 bytes docs/source/index.rst | 13 ++--- screenshot.png | Bin 7507 -> 0 bytes 7 files changed, 44 insertions(+), 46 deletions(-) rename docs/source/{credits.rst => copying.rst} (98%) mode change 120000 => 100644 docs/source/images/screenshot.png delete mode 100644 screenshot.png diff --git a/README.rst b/README.rst index 7203aaa..9a6b11a 100644 --- a/README.rst +++ b/README.rst @@ -3,14 +3,14 @@ Brutal Maze Brutal Maze is a thrilling shoot 'em up game with minimalist art style. -.. image:: https://raw.githubusercontent.com/McSinyx/brutalmaze/master/screenshot.png - :target: https://McSinyx.github.io/brutalmaze/ +.. image:: https://brutalmaze.rtfd.io/_images/screenshot.png + :target: https://brutalmaze.rtfd.io/recplayer.html -The game features a trigon trapped in an infinite maze. As our hero tries to -escape, the maze's border turns into aggressive squares trying to stop him. -Your job is to help the trigon fight against those evil squares and find a way -out (if there is any). Be aware that the more get killed, the more will show up -and our hero will get weaker when wounded. +The game features a trigon trapped in an infinite maze. As our hero tries +to escape, the maze's border turns into aggressive squares trying to stop per. +Your job is to help the trigon fight against those evil squares and find +a way out (if there is any). Be aware that the more get killed, +the more will show up and our hero will get weaker when wounded. Brutal Maze has a few notable features: @@ -30,17 +30,14 @@ Installation Brutal Maze is written in Python and is compatible version 3.6 and above. The installation procedure should be as simple as follows: -* Install Python and `pip `_. Make sure the - directory for `Python scripts `_ +* Install Python and pip_. Make sure the directory for `Python scripts`_ is in your ``$PATH``. * Open Terminal or Command Prompt and run ``pip install --user brutalmaze``. -For more information, see -`Installation `_ -page from Brutal Maze wiki. +For more information, see Installation_ page from the documentation. After installation, you can launch the game by running the command -``brutalmaze``. Below are the default bindings, which can be configured as +``brutalmaze``. Below are the default bindings, which can be configured as shown in the next section: F2 @@ -62,9 +59,9 @@ Left Mouse Right Mouse Close-range attack, also dodge from bullets. -Additionally, Brutal Maze also supports touch-friendly control. In this mode, -touches on different grid (empty, wall, enemy, hero) send different signals (to -guide the hero to either move or attack, or start new game). Albeit it is +Additionally, Brutal Maze also supports touch-friendly control. In this mode, +touches on different grid (empty, wall, enemy, hero) send different signals +(to guide the hero to either move or attack, or start new game). Albeit it is implemented using *mouse button up* event, touch control is not a solution for mouse-only input, but an attempt to support mobile GNU/Linux distribution such as postmarketOS, i.e. it's meant to be played using two thumbs :-) @@ -90,21 +87,18 @@ Later-read preferences will override previous ones. Remote control -------------- -If you enable the socket server [4]_, Brutal Maze will no longer accept direct -input from your mouse or keyboard, but wait for a client to connect. Details -about I/O format are explained carefully in -`Remote control `_ -wiki page. +If you enable the socket server [4]_, Brutal Maze will no longer accept +direct input from your mouse or keyboard, but wait for a client to connect. +The I/O format is explained in details in the `Remote Control`_ page. Game recording -------------- Either game played by human or client script can be recorded to JSON format. This can be enabled by setting the output directory to a non-empty string [5]_. -Recordings can be played on the repo's Github Page which the above screenshot -is linked to. +Recordings can be played using Brutal Maze `HTML5 record player`_. -License +Copying ------- Brutal Maze's source code and its icon are released under GNU Affero General @@ -114,19 +108,24 @@ allow them to download the source code corresponding to the modified version running there. This project also uses Tango color palette and several sound effects, whose -authors and licenses are listed in -`Credits `_ wiki page. +authors and licenses are listed in the Copying_ page in our documentation. -.. [0] Broken on vanilla pygame on GNU/Linux. For workarounds, see issue - `#11 `_. +.. [0] Broken on vanilla pygame on GNU/Linux. For workarounds, see issue + `#3 `_. .. [1] This can be copied to desired location by ``brutalmaze --write-config - PATH``. ``brutalmaze --write-config`` alone will print the file to stdout. + PATH``. ``brutalmaze --write-config`` alone will print the file to stdout. .. [2] These will be listed as fallback config in the help message - (``brutalmaze --help``). See `wiki `_ - for more info. + (``brutalmaze --help``). See the Configuration_ documentation for more info. .. [3] If specified by ``brutalmaze --config PATH``. .. [4] This can be done by either editing option *Enable* in section *Server* - in the configuration file, or launching Brutal Maze using ``brutalmaze - --server``. -.. [5] ``brutalmaze --record-dir DIR``. Navigate to `wiki `_ + in the configuration file or launching the game via ``brutalmaze --server``. +.. [5] ``brutalmaze --record-dir DIR``. Navigate to Configuration_ to see more options. + +.. _pip: https://pip.pypa.io/en/latest/ +.. _Python scripts: https://docs.python.org/3/install/index.html#alternate-installation-the-user-scheme +.. _Installation: https://brutalmaze.rtfd.io/install.html +.. _Remote Control: https://brutalmaze.rtfd.io/remote.html +.. _HTML5 record player: https://brutalmaze.rtfd.io/recplayer.html +.. _Copying: https://brutalmaze.rtfd.io/copying.html +.. _Configuration: https://brutalmaze.rtfd.io/config.html diff --git a/brutalmaze/game.py b/brutalmaze/game.py index fef7494..ecf23d6 100644 --- a/brutalmaze/game.py +++ b/brutalmaze/game.py @@ -16,7 +16,7 @@ # You should have received a copy of the GNU Affero General Public License # along with Brutal Maze. If not, see . -__version__ = '0.9.2' +__version__ = '0.9.3' import re from argparse import ArgumentParser, FileType, RawTextHelpFormatter diff --git a/docs/source/conf.py b/docs/source/conf.py index f8f1a8e..c94e002 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -22,7 +22,7 @@ copyright = '2017-2020, Nguyễn Gia Phong' author = 'Nguyễn Gia Phong' # The full version, including alpha/beta/rc tags -release = '0.9.2' +release = '0.9.3' # -- General configuration --------------------------------------------------- diff --git a/docs/source/credits.rst b/docs/source/copying.rst similarity index 98% rename from docs/source/credits.rst rename to docs/source/copying.rst index f4ec6a7..2e8be16 100644 --- a/docs/source/credits.rst +++ b/docs/source/copying.rst @@ -1,4 +1,4 @@ -Credits +Copying ======= This listing is our best-faith, hard-work effort at accurate attribution, @@ -21,8 +21,8 @@ running there. Other creative works retain their original licenses as listed below. -Tango Color Palette -------------------- +Color Palette +------------- Brutal Maze uses the Tango color palette by `the Tango desktop project`_ to draw all of its graphics. The palette is released to the Public Domain. diff --git a/docs/source/images/screenshot.png b/docs/source/images/screenshot.png deleted file mode 120000 index ad2460b..0000000 --- a/docs/source/images/screenshot.png +++ /dev/null @@ -1 +0,0 @@ -../../../screenshot.png \ No newline at end of file diff --git a/docs/source/images/screenshot.png b/docs/source/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..48d5f88103b0607c6d0830f7657dfb5983c8c6db GIT binary patch literal 7507 zcmchccRZZiy2mFZq=`hLL{F1M35i}uqDS3ZCxZk*Frq~_M6i*Ns8I${BFyM*8-pN> zE_$>XCAt|i2*xmTU;Etq+4r8Z&pG$rbN-mmd_M2H-nE|ftl#rIYkgOgfu07_Y0lFi z5Qs@jQ}t&Mi2fJ|M5lF<4tNrD47m&ZoqDcm?g;{&xp?$D21?7|03I@WY3Zsl&Ye7Q z1|%x&;r9dt;@;F!y>H|@fuHsZobrb6k;nq#T4|o~QX1*odP7nTj<*#JVn-mNqw^p5 zPovgQh^u#g?V2n8#Qid(#dgHobPTiq9Ktu#9DOS%{yL_ikW`9$5YGXp9yttpFXW+{u=P@;q&1*B^8l=0HW^4CD?XAsCi^+)=4khQs zo{|zmBel^zi~D%!EDUIl=Yc2x;h>KELjT7(9eD$A%4efz+0oI_#E)acMwWM#+oMvFEFPqd zh(5A8wF1pny?Oz=JvwS4#Lyw5s2BuTMq%bId*vlD~UhTm_pthzDeNuAbE9r(D^b}y0-cJJ( z+M1Q93G*Y*uj*WHNyknNK5GMAE^)gy zqobqKL-K@#Fn+Ugm+_%=sc@2gN>Wl1rhA7l$=6P-^IS#M2gqNH5{oD`!~W{mU1KCD zNl1u^i9sL)eWdZH=DRZ`ofp5(7+3}baI|uz+`-l%Zl~(RQocJ4oqjsji!JvokVk-T z-@Z*^y4NcxRABia?L@#X{inwpC_(X&aNUOZc@lky{(@~zgC$X@V~5kma+M?Ky_x(ALdC1{o%Lz1)q`Hk8egUJATd@a z{(m-C{iU^knCxs=Bn|EdH;RBjhPo1*ZzkwK++)kj%Mc%$Lf-78&wABtxrOBb{-?!%Y4~4B&nv7AI}z!pH@8|j z;3+9!=cm2cAPP_*g8bFaA9r=dKR%l!?f})+-WmX+2{t`2Rp+_54xPBzp28D{IVvX> z7A+iBrk0ZfA237 zQgXNHiTgIphFz1Z7T8+i%s1=X9l8)$SFCi;vr2A>^I|t1J*WC*p${r#D;+G`hDj4? zJ8^f$DJ|ChOzPlDE6jY-(SZ^UbOcdmK+Xp3WFg%$HzD*F|-^qVRI$L~3J`o}!n zFSV=_2jBF*${tL~Sd3rp7_nT8d+lGsAv&LBX#&#WC6mdfu-Qsm`dchf!y|pjTcWiY z!cqmqWfA8Zc8t2-K`lDiWO78vXMtxUQaw8~={VoM0&uXO#Qq?*pfNAc_XPxw zx3Ajm0ej7&TOY%c(HR2>Q@kAJ$`*IrR!c|~YUW^zO3K+~Z0_WCpCJyv-WeSiNs(ID zA8OhN>$q$T4{EJTM@75x0-`VDKY7O=hoj-^@5rp2I;Y?Js5Et)+L<5lQX-SE@YXLD z*JT3An{O1jxs*j)iTBCatw|C8GFy0gb-U|}LyF{r&KJ_hjZB|CZ*j$25r8u^h1n=m z1xmqvYu3B>mShwpFBacgYk1aH;wW}EGF@rlCx7cLFW4DJejB>)OH0;U;r;NS#mn>e zdVxM2)Tv)pPkjBTO2Saf9B;AiSps=`#RSmYe6=aOW@nhhxeQFl6Q|BqE9n{V=8%%or5ihPZlm%N!&_)gI zT^>*d(F#zg)tYp-Pu68NftWi*)w*1f%U}U%8W= z%|S0*oD$(&T9R?s_F$tjXW#}?43&t{P0n!N+190ew$*N`cxw5H5xpzm3EsDB{SZoG zUf@3|)d!Z$6RmG3wGHr05Q<`;yEi!(vAXf<&;g}o zjw-gu$J1H2z8mAS!xnK@;bsRJk?#;ul`0bH^DKLN%Zx)TQ_s9^?n~TDuq?1@j`*O~XLzG@nylbSi~2L$FUxYX%G5eBP6>vS3*=r+lE}={qts zGz|59&Pz$D`VqZ-xY6}rpKcv&;1PbZD%2n!e0Rp@#0BripF7XIoC({YP-?R%qY^Ny z$bzSD1~k8q@_5QcK4BM?d(P5y7)w8bb1AA;*Ne@fKXx-<_g#V~S>ui_45XH+s8HRK z0ItCJ?DV0XCZ~qA6^z$2TZi1RN@F`;l|LVs_)6bI#?z*}eVi>V_rVkop#PLfW+RyU zR?EAAi;B4I=Fv?dX;IBL6WllZZ6ANu;^gHG-X>xAf(}R>#qaz)mogh4Pp@!|ia5KR zed)zL)bM0{5T~#`*)wf*AG*5ATJNv!As_h!9ySpB!OY=aGDma`^P=}THAchKL+0Vt z_{&2v)|<|a=TzB(ykXO7m3+|)uemAl`Y#fLcUDr)>i|i%Y<;@cZKE-W_Tz98fhZa+ zhIsBrFcp-T!&BJjLUmKAiP>YLRasW4zU6UN2j2z@SZ<_J3M|dXeD_~g-`owzdIa!*!MEaijrOQs!%Dc1rHG0@A=YhtYG^TwHj+S&e`&lu(W2cHB0qn6$a# z$bTs;ER2~(c*o^d_rrAqO^lDTqFUpc4nK?czg_~*{1znlykrscia%~(rh=+bS0=yNXS}sQPj9VlZHp#uIBZ`9SZ1<#!G+`&+ky6m|+j zJI>bL1`3hiIUXesOdJ6{ui?`^Z@;E*S?_*``cVLvaVYv3d5AdatV3Ij(r?wXw#ekum>M!!$xa5|tdHo*87rr+^&>zHJ zc@Nyc#U9Vr`}D`gZ56QplnHx)MR$tFl`SYcrln=H%q$=3c9$$^c_ycOB>7Abfg+{HgUzNu-Ms;Ip0=c@2FysNt#iYBaXVfT}#9*Gvy0b4~$U_*t* zf8^4KH0-OeH_#?&JJp7!r8O4;i_M{aw)0I>9)=J+ji*GmzJ$=eRze+Q2ZMJY;Q*0% zYuqO{pCk>T@qWb zD`TMZ?ey^Qkb;`Q9^jl97+y%@%kS#7INEu^F!uvGit5h^f$l->rJ~mg!1C|3q2nl# zq=(}iz`_ZW=IaT(yu3<;HYr!^6H{Q{UZJ6(feC9m#Jh{`V01Z80#WjUJPY^Xq0ki? zJzJ}BWjg^B1H=Ik*Le9CJo9w*={wuZzCW0bgzLEk0V|qZ_q%sqEMlyketbSk)r+O7K9i^HR;N>-} z7s7t=V67=A7b(m;xV@O1>=sM`yI!_=m}+ifY|JuxrP?xXos*Nd!mj;8XpPJCqyGX@ zI7(=Y>t)b;7loUg{}3tThh%UugT|3);o35OC#mO6<7;b-YYBD=WL?9jJ`gUPrS^ zq^k=3F}v4WeaN7G#M%Q+>W5P3gnQXoeC6PF^k#cLlQtLEDtk|VXQz|%#;;@{Yd&u7 zip#(dDaz~#OV5p%AbH_KDc#aD6(HmVOzwHy_3Svrr5C93s3ZTl?GkfK+mrNd6`-dqjsxA z(hh3-8Yt%u)-x$CPTXo58Y&9UMHeK%Aep;xI0R7G*Pvan5k%545Uu>Wd_4QE5-}!#?^7|n&VOXnSSaO?hyml**MD=hVM}vZBr~r< z;Mnx8g&GI?&e^{$p3mRs6**CvGb=V+Jq*Ut zy3|*=Mj+q;w8_!v;Wxi1GO7M^p;!c;g6}d0T-S{!=?e-9V#zz6Dx6jjNKgOx?8e#}WyhzHtNr`Jn>P+{a@Sk7%nv>$?=lX}bgzX9@phDrV&(YK*f z6A~0`Ne9@wYnyFb_d}7;Q_?;JZfy<(s;G;_>Ju7$5I`driwUG8C7W-Y`5k}%WNdzU z@HYa^izq1QXL3+7BNheUUE@=l}zZ zjlPJ?*6kX#9Zdk40R@c7eqO*B3e4Q>WWs!!;|aEw@AYi{b^>^&VH}PRyIn$n3h_G6 zEQj0>o0XH313+k9EN=asL0XU+U@@RV9lY65QvF_iK*$XT1w#cyxIKxwsJ>gL$3Ji z*%9NUX+=eP`afM5G~hq3L8J!@^YeRI+U1Bn%|z&XQpKR=`RgnnrY`p(3!U8D_#O%X zmkVls2Wg^Kv#57^M~M8&G*cos?>V>quLgtB7~rsntqBSc2ws>C8ZS5NVZGMNz{vQU zb5)@4`^AI&!-dq-!bx#DvAtXWqm2K{oRkx#dR0_ZG;bwJHHFpFB{w&h2M)i&)F0Ef zx%s3a=8X}HuzC3( DFy{w~ literal 0 HcmV?d00001 diff --git a/docs/source/index.rst b/docs/source/index.rst index 9fd2712..cb67b83 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -4,7 +4,6 @@ Overview Brutal Maze is a thrilling shoot 'em up game with minimalist art style. .. image:: images/screenshot.png - :target: recplayer.html Notable features: @@ -28,11 +27,11 @@ Table of Contents config gameplay remote - credits + copying -Indices and tables ------------------- +Record Player +------------- -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` +.. raw:: html + + diff --git a/screenshot.png b/screenshot.png deleted file mode 100644 index 48d5f88103b0607c6d0830f7657dfb5983c8c6db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7507 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 DFy{w~