Compare commits
2003 Commits
6.99
...
6.99.12.2003
| Author | SHA1 | Date | |
|---|---|---|---|
| db593d0614 | |||
| d7979ff798 | |||
| d619bfa49f | |||
| b322666935 | |||
| 6157d3fc5d | |||
| 5571b28eae | |||
| ce81d2c30e | |||
| 13dd720358 | |||
| 09b1707af5 | |||
| 92f17e7906 | |||
| b42d3d51b9 | |||
| ac0d2a2d28 | |||
| ac9c8c9bb5 | |||
| b805b0b526 | |||
| 4585246ad8 | |||
| 3b35174ff5 | |||
| 7d732781e0 | |||
| b16caee9ea | |||
| 37049fecf3 | |||
| 75ec77ab64 | |||
| 87feeb5e51 | |||
| 48bcf1bbf0 | |||
| 1579e3cbc7 | |||
| a7d19a2932 | |||
| 83595e6dc9 | |||
| c9bcd34cd5 | |||
| 14807d120e | |||
| 1263765cb7 | |||
| 9bc13f9f74 | |||
| 8fead122b6 | |||
| cdd7b175fe | |||
| 1e56de4aed | |||
| b68455b391 | |||
| e4079bbceb | |||
| 43123177ab | |||
| 48c281bb1a | |||
| e5501d2aec | |||
| 9168b380a8 | |||
| 75625abaf5 | |||
| 5c1c882222 | |||
| 39c3a39d6a | |||
| 7a45089b69 | |||
| c323080002 | |||
| 27a7ce745c | |||
| 2ebf885caf | |||
| fe8786782d | |||
| 67cfaef550 | |||
| 2ee8202c94 | |||
| 54edc4fa73 | |||
| ed313eb3bb | |||
| 52d7309d6d | |||
| 05e2521c66 | |||
| 2723f8d348 | |||
| ea26518809 | |||
| 1194379c99 | |||
| 7e409222f2 | |||
| 293cd92687 | |||
| 1748c52d44 | |||
| a24f9d0a27 | |||
| 74a22c8a97 | |||
| caf83facf7 | |||
| 170457f25a | |||
| aeb27db6d1 | |||
| 9d4f0b3a1e | |||
| f002bd6142 | |||
| da696761ee | |||
| f93f7a604c | |||
| ca24ee64de | |||
| b5e008b028 | |||
| 280cd624ea | |||
| 4b8eb3eae1 | |||
| 4659bcbbe8 | |||
| 6f262eaeb7 | |||
| 38c1897c67 | |||
| bb688a6eba | |||
| f13437a0a4 | |||
| 521fb426c1 | |||
| b8f4e05929 | |||
| f1c40a7b1d | |||
| 4805d4edd7 | |||
| 5710f4ce68 | |||
| dcd0f44f7c | |||
| 29c18d4f2c | |||
| 22dcfdaed6 | |||
| f364524241 | |||
| 9ca789e62c | |||
| 5a265030df | |||
| bd15baa2e5 | |||
| ef7c4b5280 | |||
| 63e381db92 | |||
| 5d6635d642 | |||
| 55e146b18e | |||
| ec981da41d | |||
| 1dd6df55b9 | |||
| 33c5948763 | |||
| ec696a728d | |||
| 2bf37063f5 | |||
| 92f6db7ba3 | |||
| 912444f107 | |||
| f1d7d3e59b | |||
| 1a7d06ae0f | |||
| 3764b128fe | |||
| c6fe17446d | |||
| b35fbb7ac1 | |||
| ee619f2eef | |||
| da7d7d1060 | |||
| 246a146218 | |||
| b5b3caa599 | |||
| 2d10bb0ff6 | |||
| 2de85f1341 | |||
| cf9bf04d39 | |||
| 3b21ab2650 | |||
| 31557de26f | |||
| 92f51c12d9 | |||
| e0e08285f9 | |||
| 0b2f8e8799 | |||
| b9c6bc1417 | |||
| af579bf593 | |||
| 8a3d4f8554 | |||
| 678d08c165 | |||
| d6560bc4bb | |||
| dd27ab0f73 | |||
| faf9a6d364 | |||
| 3681d4d306 | |||
| 9198d5a7c5 | |||
| dda5d1a4e5 | |||
| 1f90221770 | |||
| d375359a6b | |||
| 01a30059e8 | |||
| cd7aadfb23 | |||
| 59efb70c9b | |||
| 1cf1f7269c | |||
| 0c9a4f579e | |||
| 043f24d0dc | |||
| 2cbf4689c8 | |||
| 02412a4217 | |||
| 1cfa873734 | |||
| b7b2f36b04 | |||
| 20f157e875 | |||
| bb7160f278 | |||
| 10dd1549a1 | |||
| 8f0e19dcb3 | |||
| bf517e73fb | |||
| 939530525a | |||
| 5b562b8a25 | |||
| aa81539448 | |||
| c4c4e09858 | |||
| 2623276132 | |||
| e3e0301544 | |||
| e1ccfee28f | |||
| 52b61f9cc6 | |||
| a67727a6fb | |||
| 135304e5e6 | |||
| 6f243367c0 | |||
| d43ae24dfa | |||
| 1bba35e970 | |||
| 63477b8f06 | |||
| 962697a55e | |||
| 53ce99e95e | |||
| 29c797141c | |||
| fa34fae53d | |||
| 9c8521b18a | |||
| 9f8cdc6f6a | |||
| 4311ef6c40 | |||
| 8c6b0faac0 | |||
| e583e00626 | |||
| 8c697def79 | |||
| 9564402416 | |||
| dbeb0c1646 | |||
| 963bf51f12 | |||
| 192bda6a49 | |||
| 8943820914 | |||
| 7362bbfb31 | |||
| cef08c6b47 | |||
| 14e2435229 | |||
| 638ef01636 | |||
| fbe53dc7ef | |||
| 4b8f659566 | |||
| 481cf69bb2 | |||
| 9522de1849 | |||
| f7f273a1e9 | |||
| 984d103159 | |||
| 685c7399a2 | |||
| 5755aaa6d8 | |||
| 22f1f057c8 | |||
| fc0d7b77f9 | |||
| 5139f03c76 | |||
| 87f7115844 | |||
| 3a8500a926 | |||
| 8663926ac3 | |||
| 2f9474e30a | |||
| 039602fdc5 | |||
| 46a9bf6c6b | |||
| 1627b5e12c | |||
| 6db08cce5a | |||
| 281ee47f04 | |||
| 51a97b477c | |||
| a4670979e7 | |||
| 2b494f2871 | |||
| 875be1c525 | |||
| a00673811a | |||
| 84f27b15b4 | |||
| 485adab9dd | |||
| 9d6328be13 | |||
| fac336ef53 | |||
| c17731637d | |||
| c8d09c80ba | |||
| 19f6dac811 | |||
| 39ee421538 | |||
| ec079b6999 | |||
| 713d6d9b87 | |||
| 55211b89c9 | |||
| 94ecd36445 | |||
| e346ef6d3e | |||
| 732e3a1b01 | |||
| 3c448d18bc | |||
| f6dd6fae20 | |||
| 623b3f0435 | |||
| 998f90ad34 | |||
| 8c9d700d68 | |||
| 58ffc877c8 | |||
| 83fef5bdeb | |||
| 1feecac9f1 | |||
| a194bb0469 | |||
| 034f5bc814 | |||
| 12eb226234 | |||
| dbf16eb950 | |||
| d7fce4d212 | |||
| ba5a6c6db3 | |||
| a1a08c4575 | |||
| 052b6a3bff | |||
| 01049f1452 | |||
| 65a27c89e4 | |||
| 27f955fd1b | |||
| 3b5e7c821a | |||
| fdba290547 | |||
| a4b99d733c | |||
| efc490ec5a | |||
| 2673fbb133 | |||
| 9c13539d0e | |||
| a4a52b3e6f | |||
| c02f4b0615 | |||
| a366f0bee0 | |||
| 5ef4833cd7 | |||
| f8644ab49e | |||
| 39fcba0473 | |||
| 626c5c688f | |||
| 26cc433a66 | |||
| 8714d9564d | |||
| fb171044eb | |||
| 13b251e915 | |||
| f3bc6ac027 | |||
| 53cbf69b08 | |||
| 7b3a2675c4 | |||
| f89f1dfd07 | |||
| d39b332835 | |||
| 845d9c9dd1 | |||
| e9fba23377 | |||
| d0e67c5da9 | |||
| c5dc1003a4 | |||
| bcf456c697 | |||
| 68a15d4efb | |||
| 1b300d4fcf | |||
| dc7dbcb469 | |||
| 750fe6fb64 | |||
| 6d3d4bb3d3 | |||
| 91bc0b6bf9 | |||
| d15512416d | |||
| d9472f60f8 | |||
| f6e63a96d8 | |||
| 6563cd1a42 | |||
| 6064314d23 | |||
| 67a624129b | |||
| 3d8c4d06da | |||
| 47a75797c7 | |||
| 23a8ceb3d2 | |||
| 586d799c41 | |||
| ba0e4cf35b | |||
| da785836a5 | |||
| 47f4687f56 | |||
| 64542b7780 | |||
| 9194d2ca59 | |||
| 31af3e89de | |||
| bde35e378d | |||
| af32cd000f | |||
| 2418ca6612 | |||
| 708b6af21c | |||
| 9b7a1d0314 | |||
| 195bd1535d | |||
| 8256204f6c | |||
| e55e559b3a | |||
| 3aeffad8de | |||
| 51455a1e0e | |||
| 7681561199 | |||
| d7d2fa362a | |||
| d7d1b4c04c | |||
| 770d0899bf | |||
| 76d584b8b1 | |||
| 1b86849a4d | |||
| 608b125083 | |||
| aa53c8bc10 | |||
| d94305dde1 | |||
| b7f934770c | |||
| 8fdd1c3efc | |||
| e6f2da4ece | |||
| 0b4cf8103e | |||
| 54343c9347 | |||
| fdca1af62d | |||
| 1f7c73dae8 | |||
| 8659951686 | |||
| dee8550dcb | |||
| abf58f9a2a | |||
| c70a284bf9 | |||
| 88e49c064c | |||
| db0ca085b7 | |||
| 72c896e354 | |||
| 67532aff52 | |||
| 94a99659c5 | |||
| 722550efee | |||
| a8fb72125c | |||
| ad722ac54d | |||
| b1bc7bc18d | |||
| d36284f402 | |||
| 95ecb5b03d | |||
| 5613b388c1 | |||
| f7ead1fbc3 | |||
| af5c0f8929 | |||
| 0a1439a1a5 | |||
| bad2746607 | |||
| bce2d01682 | |||
| 91ed7c7669 | |||
| 2a305e21dc | |||
| 97e80244c7 | |||
| c328b264e4 | |||
| 22952accf4 | |||
| c1624f5ecf | |||
| 770e9e6b60 | |||
| eb17eae932 | |||
| 45469aea5d | |||
| 126b8ba885 | |||
| 03962c47ba | |||
| e2129e0205 | |||
| f420612789 | |||
| 340e33cac8 | |||
| ecd7227324 | |||
| 4ae4c33756 | |||
| 65b867293c | |||
| 6c0a2aaf24 | |||
| d9153573f4 | |||
| 6134fe7480 | |||
| 5c5477b0d8 | |||
| 3ca2bba366 | |||
| 9dedc4f57f | |||
| c8ea170574 | |||
| 3af27d9eee | |||
| 710833d338 | |||
| 0fd7e50c38 | |||
| 8297d91663 | |||
| 1d90a270fa | |||
| 854ba0d757 | |||
| c2dc788a6d | |||
| 1f0e77076b | |||
| 8ac18d8bd0 | |||
| 9d265be059 | |||
| 7df5f290da | |||
| 10588b38c7 | |||
| 00ea08752d | |||
| 2eb0280fed | |||
| edadec0949 | |||
| 6e7de6dde5 | |||
| b54520b9b8 | |||
| 665a18f21f | |||
| 86af944033 | |||
| b3dfb133ba | |||
| 73c704451d | |||
| e197c696b3 | |||
| 48c061cedb | |||
| c746b76825 | |||
| 09ee9080a7 | |||
| ac35102123 | |||
| d57aeeeb70 | |||
| 8d5dd2d564 | |||
| 49ae0099c8 | |||
| 4c75ac36d6 | |||
| 09c9d0997c | |||
| 8d9b2b64ee | |||
| fc75f5c9d8 | |||
| c8045248ee | |||
| 8a491b10e8 | |||
| 5f3f7d5997 | |||
| 11cabb3dd8 | |||
| 3b12051ece | |||
| fca81066bb | |||
| 014012fc83 | |||
| b2ba5066ec | |||
| b91b4ce212 | |||
| ad3a2f90cd | |||
| 2e626fabdd | |||
| 1c480dbbf1 | |||
| ecbf844ffb | |||
| 71d955527b | |||
| 0a8b3d4f11 | |||
| 82c775aa4c | |||
| e7a9757010 | |||
| fa80c1dc0f | |||
| 3d5c03932d | |||
| 636896efec | |||
| a51f12a77b | |||
| 5d216076a1 | |||
| d912be444c | |||
| debe837246 | |||
| e172098561 | |||
| 32d18d9e2d | |||
| 0378d602bd | |||
| 431375ef66 | |||
| f56b7df318 | |||
| 70118ef88d | |||
| e153f3adc9 | |||
| 646b152d73 | |||
| b22edb09dd | |||
| 05ecf7a410 | |||
| dcf69973bd | |||
| 439aabde01 | |||
| c0cd0d30fd | |||
| 6128306470 | |||
| abb7b47dcd | |||
| 8eb91fda15 | |||
| a85a606654 | |||
| c55a5c13ef | |||
| 6b27fec833 | |||
| d793ba337c | |||
| 839d646d79 | |||
| 8743e1c9d3 | |||
| cf019e28db | |||
| 9cf6365532 | |||
| 0b265c6888 | |||
| cb8817bb30 | |||
| f968130ca4 | |||
| cb366b7fe5 | |||
| 137aba5596 | |||
| a5d025d6db | |||
| 86c5a24b20 | |||
| e7c786d61b | |||
| d0b33e3d3e | |||
| 0f2da9a6e4 | |||
| 122a10ea94 | |||
| 5a1740d348 | |||
| 3113041d13 | |||
| 634d5bd8b1 | |||
| 2d6031df83 | |||
| 2435b09e47 | |||
| 058d8aa808 | |||
| d634e24a3d | |||
| 21a8a568ce | |||
| 9396690668 | |||
| 1a2c83dcdf | |||
| c5a3f8eea6 | |||
| 0a7804a45a | |||
| b6cb41fb40 | |||
| be75dc3c50 | |||
| f3cf0ca3e2 | |||
| 7a6ab7a786 | |||
| 7fa9f29e52 | |||
| 0c443e296f | |||
| b0658b49e7 | |||
| 5a03d5d484 | |||
| e999652608 | |||
| 44ce212081 | |||
| a78d11bb96 | |||
| 685bb97e8d | |||
| 39fa3ae6b8 | |||
| b1281ed0e9 | |||
| 29af9f909a | |||
| bda9b0dbed | |||
| 47ac00b6c5 | |||
| fce5166464 | |||
| 2974539340 | |||
| 4999c3fbda | |||
| ead671d113 | |||
| 908f354bae | |||
| 2dcf361c28 | |||
| 506d1fa3b9 | |||
| f45eb36bd8 | |||
| 26fdefdc6b | |||
| 836301f586 | |||
| 7a98db0d37 | |||
| 1a4840a74a | |||
| 438347569c | |||
| 7520e35f2f | |||
| 9909df9a63 | |||
| d1c68deff1 | |||
| cf9cbee8be | |||
| 4c6eccd590 | |||
| 96e6e01060 | |||
| f397e7f1cc | |||
| f24ac6ef44 | |||
| 1f2a6521af | |||
| 5dc85919c0 | |||
| 8f50094b22 | |||
| 0ae0d848c5 | |||
| a44f505856 | |||
| 25f28d1201 | |||
| 996ad58a6b | |||
| 8f381f54b8 | |||
| bdcb02c4c9 | |||
| 8ecc1b62f8 | |||
| 32e91674da | |||
| 7781b977c1 | |||
| c1d5286139 | |||
| 1b9872a158 | |||
| c55bd6efca | |||
| e07b361415 | |||
| e4acf2683d | |||
| 9b7b88af17 | |||
| 07fb9df08b | |||
| 7a12bc6d55 | |||
| 3f0e01530d | |||
| 6b5c02bbc0 | |||
| 723d248f42 | |||
| cb25514f81 | |||
| 57ef911f0c | |||
| 6a0896b08b | |||
| 8d97001197 | |||
| ab064fbe0a | |||
| b310c9f51c | |||
| bc9a8cbb00 | |||
| 7b30c04c4d | |||
| 29a124a152 | |||
| 5bbd752f0f | |||
| b41a188a63 | |||
| 4b06e96d28 | |||
| 3e37a02781 | |||
| 2fa21e09a0 | |||
| 211abebb3d | |||
| b90b3db579 | |||
| 0555149891 | |||
| ad2ff1e446 | |||
| 4580da346d | |||
| 55ceca13b2 | |||
| 6ff21da818 | |||
| a4f050cd86 | |||
| ff130134ac | |||
| 5d3b6365bc | |||
| 3938c6ca94 | |||
| 4ffcd5861a | |||
| c7716deb46 | |||
| 486f935769 | |||
| fb190105da | |||
| 059f5a92ac | |||
| 990a76e529 | |||
| bf7a4945bc | |||
| b217362484 | |||
| eb1b7bbedf | |||
| 9dc65f19bb | |||
| 679f4ec4f1 | |||
| bab7caec95 | |||
| afd0685302 | |||
| 93a55fcc86 | |||
| 4c966b4789 | |||
| 14ef634f8a | |||
| 1789403654 | |||
| df79b06aba | |||
| 1b8d1be10d | |||
| d91a52b0da | |||
| 510615c9c5 | |||
| 174738696e | |||
| 30076846c0 | |||
| de200d995d | |||
| bbc0f70f19 | |||
| 25d515ac6e | |||
| 6f4b2eb99b | |||
| 74be547f7a | |||
| dee47412df | |||
| 742f9b229a | |||
| 264c5fba80 | |||
| 271a6259a5 | |||
| 83612fdce7 | |||
| 873c91bfdb | |||
| 748fbaba23 | |||
| ecc6afb3fb | |||
| e35b962fbf | |||
| b806818f6b | |||
| b2e3326748 | |||
| 4192e9d3e9 | |||
| 6d772c6065 | |||
| 4ac8c46073 | |||
| 50b480fd82 | |||
| db6ce95bc7 | |||
| 82b4d18b02 | |||
| 35e1f72d67 | |||
| c0a40ec51f | |||
| f0b219624b | |||
| ef70b36a95 | |||
| 96565accd9 | |||
| 17d893b4b0 | |||
| 6a66d51f20 | |||
| a855d9153e | |||
| 8489affbca | |||
| 6fda701cf3 | |||
| 3a47c23ab7 | |||
| 89c6369435 | |||
| 4d35917b84 | |||
| 0ac147914e | |||
| 17b1fa020e | |||
| c1f05b09a4 | |||
| 3278c51ac7 | |||
| eb6bd19290 | |||
| c7913ca1c3 | |||
| 9319366992 | |||
| f4c619908c | |||
| f332f614b4 | |||
| bf52cd2120 | |||
| 82d9ef8d32 | |||
| 8554201acb | |||
| 007894c2be | |||
| 4faa887174 | |||
| a0f23025dc | |||
| 4726fd648f | |||
| 2af73eb0bc | |||
| 49e3b4dc7a | |||
| 4ddcb3e49c | |||
| b0dec2047b | |||
| c48ef7132e | |||
| 2c086aaaf1 | |||
| 5c19936d5f | |||
| 8ad3365f42 | |||
| a88b61d98a | |||
| 45fc56aae3 | |||
| 4775799268 | |||
| b6b086f963 | |||
| 46a237a3ba | |||
| 9f9fe980a9 | |||
| 2fb5820f2d | |||
| e6e656f8d0 | |||
| c264025f1c | |||
| c7d69778d5 | |||
| 8f7218f46e | |||
| 7426bbcc62 | |||
| 1556c3f7a2 | |||
| 2b5816abc1 | |||
| 86497f01d1 | |||
| 9dde07217b | |||
| 3f2bac0a0e | |||
| a38d921d82 | |||
| e5edf19226 | |||
| d2aa858927 | |||
| cce4afef66 | |||
| 0624bfcbb7 | |||
| 8851102e26 | |||
| b033bf0877 | |||
| 62facbbe4f | |||
| 957eba4e82 | |||
| 8449464d7a | |||
| eac29c4878 | |||
| dd17c3145d | |||
| 1333114ea5 | |||
| b52445a297 | |||
| 175433c32a | |||
| b6a23e897b | |||
| 6bb5902eab | |||
| dce2b86206 | |||
| 18335c2e17 | |||
| 0218270b0d | |||
| 839e1584c3 | |||
| 93263d4a26 | |||
| 5540612998 | |||
| 40f09f6082 | |||
| 54a6545dfa | |||
| d77925cc9a | |||
| 498ff4b398 | |||
| 405158010c | |||
| 49820ee286 | |||
| cda4c52383 | |||
| 1e5d56329a | |||
| 47ce5f8725 | |||
| 11e6a98307 | |||
| 66cc0518fd | |||
| 2af80160d5 | |||
| 63dee62959 | |||
| 2613451a46 | |||
| 96da230234 | |||
| 739af5df85 | |||
| 0007af39a0 | |||
| 76a534d3a4 | |||
| 84176f4fab | |||
| 256976b7e5 | |||
| 099983a33f | |||
| 8d4293cf50 | |||
| f62f813de8 | |||
| 57bbc231ee | |||
| 8412a6b11c | |||
| c0352d953b | |||
| 9e9e2ae6b9 | |||
| 7131959726 | |||
| 67b011d140 | |||
| aefa6cc1b1 | |||
| 64c553354e | |||
| 3c9f85aa73 | |||
| f9195f2550 | |||
| da2cf5b34d | |||
| 2ca535335e | |||
| 04cf8137bb | |||
| 2bbba39efd | |||
| 1c42f7ed69 | |||
| 675f6b93cc | |||
| 5e9eb01ec8 | |||
| d7bce32eb3 | |||
| 2fbc2ea49c | |||
| 3e4f49671a | |||
| 30434c0c15 | |||
| 4d67a5b43f | |||
| 220c256418 | |||
| 47d0c17451 | |||
| 2538d85604 | |||
| 6b69bb507c | |||
| fc2a191bb3 | |||
| a4c99336c3 | |||
| 970efedd9c | |||
| 705d444522 | |||
| b5666983a8 | |||
| f6abb1f02e | |||
| 28ca4672aa | |||
| 4c4019aa0a | |||
| 870447df9d | |||
| 02fdd9e9cc | |||
| 6b0ae68b0c | |||
| 581dad016f | |||
| 406641790d | |||
| 6e493ee3bf | |||
| e7fdbf8bf4 | |||
| edee377f2a | |||
| c875bdb7bc | |||
| 1666469e11 | |||
| 4133841acc | |||
| da69add0e5 | |||
| 3bdd4a32ab | |||
| 1aad764708 | |||
| 150b78f4ae | |||
| 9bf4c09a53 | |||
| 14c415b9fd | |||
| 1d08c8182b | |||
| c95718410f | |||
| 6e85050ca8 | |||
| f7db343b46 | |||
| d1ce0b3d13 | |||
| a99afa3f8f | |||
| bb23ce3aaf | |||
| 5385b1cad2 | |||
| d3110ba922 | |||
| 1ceb3cf0fd | |||
| e8143c7b06 | |||
| 9c156bff8f | |||
| 26388b7c3b | |||
| 27e02046e8 | |||
| b17bc2776e | |||
| f8a10b9d8a | |||
| 22d581085c | |||
| 118d39d83b | |||
| 61fcb278b7 | |||
| 5a9b244a58 | |||
| f9a15b5092 | |||
| cfb93e7b84 | |||
| 074d34773f | |||
| a968a4ee71 | |||
| d9a7998d90 | |||
| 5bdb6901a1 | |||
| 114b5a0919 | |||
| c46942606c | |||
| 0245953746 | |||
| 4b71bd4cdf | |||
| 0ca1c108fe | |||
| 6dd0d1015f | |||
| dcd5f18e30 | |||
| 82a180d209 | |||
| 1884b6d4fc | |||
| 6324c2b25c | |||
| 2e1a839c96 | |||
| 9cb85414e3 | |||
| 92978ef5ee | |||
| 193a6e80ad | |||
| 7f8e8389ab | |||
| 34705d7620 | |||
| be23649bba | |||
| afbacf6007 | |||
| 0b6b601109 | |||
| 48a87e8aa4 | |||
| ba09ba402a | |||
| 0c8b02024f | |||
| 8d5932ad56 | |||
| 84f98da817 | |||
| 113616101a | |||
| 0a8f12801c | |||
| fce1d8ccbc | |||
| 82b2070fb4 | |||
| 5e98cf8433 | |||
| 1c2552b53a | |||
| 42bbb8a4e7 | |||
| e9cbfb9700 | |||
| c9411a23c6 | |||
| 9991674815 | |||
| aaff672927 | |||
| ede7cca0fa | |||
| 1571351e7d | |||
| 7be87c570e | |||
| d7a682ec44 | |||
| ffe455e55a | |||
| d74e8c388e | |||
| 5ab212439b | |||
| 2fdc3697c0 | |||
| 8cb5446bc0 | |||
| 0b46157f6d | |||
| 1082344eaf | |||
| aafd7d90f2 | |||
| c3979d3092 | |||
| 0e7d1300df | |||
| 8d3f774d0a | |||
| 679f9e31e6 | |||
| 2aea72eaf2 | |||
| 60a6804021 | |||
| c094c315e3 | |||
| 2d3d7b73d6 | |||
| f973448aa5 | |||
| ed09741ca0 | |||
| 9edc45aff8 | |||
| c00933ac86 | |||
| ff40cc8a2c | |||
| 0c3996dbbb | |||
| e163a56cca | |||
| 3929511af6 | |||
| f7bbceaaf5 | |||
| 0d779002bc | |||
| 0638d31cfc | |||
| 0fb53ebb42 | |||
| 3c8722c775 | |||
| eae7026ba9 | |||
| 3de4713ef2 | |||
| e71c98af15 | |||
| a5f0ec40b1 | |||
| 2291fe7722 | |||
| 34fe9e0aed | |||
| 64c2c24258 | |||
| b523d7105a | |||
| 1972760e16 | |||
| 48fe0f12b4 | |||
| 974071a790 | |||
| 511dd74b5c | |||
| 7a7c57c43f | |||
| a2d21e924b | |||
| ffdbcd2550 | |||
| 66331a1d6c | |||
| 79ebca6ec2 | |||
| bc6996c90e | |||
| 1e4bf112e7 | |||
| 6934d06296 | |||
| 48aea15e59 | |||
| c23f248fac | |||
| 92bd264543 | |||
| caae39a989 | |||
| f24864b9f2 | |||
| 2abee24ad6 | |||
| 68b8211892 | |||
| 505149777f | |||
| c424bd39a4 | |||
| 01996eff67 | |||
| 2d8c03b5f8 | |||
| 0956099f5e | |||
| e89739329f | |||
| e866c8c475 | |||
| b642a2f980 | |||
| d337744c10 | |||
| faafcc9daf | |||
| 638ceae6c2 | |||
| d795660faf | |||
| a8314e599c | |||
| f5866a5722 | |||
| 64a14c7f50 | |||
| 32860cd594 | |||
| fe4409d23a | |||
| d3998e0268 | |||
| 4e61f0fc2d | |||
| 344e61dfcf | |||
| d193fcafa2 | |||
| d2e0ead025 | |||
| ceeebe783e | |||
| a3180ab96d | |||
| 5d6bd2dd69 | |||
| a61b06ecdc | |||
| ffd1bb68b1 | |||
| 5770915e5f | |||
| d6924b9cc0 | |||
| 159717a1fc | |||
| 22a75a3ae2 | |||
| f6daad68ac | |||
| 5276d0de10 | |||
| 16f57a6861 | |||
| f84c9351d7 | |||
| 6336812237 | |||
| 0876a46d4b | |||
| e297aec8f0 | |||
| 854126dea7 | |||
| 52d55134ed | |||
| 7ea2084e3e | |||
| c6275388da | |||
| 4414c997f3 | |||
| 8942d96cc1 | |||
| 6668810820 | |||
| f034050b24 | |||
| 6b52614bfb | |||
| a3a4a24a0c | |||
| 3d56b2cb63 | |||
| f456b2f96a | |||
| e36b26d393 | |||
| 1bb2bdae3c | |||
| 7fa95e4c5b | |||
| dd468810a9 | |||
| 973847f448 | |||
| bb32202520 | |||
| 185dd0b110 | |||
| 3de9f15ce6 | |||
| a11957f782 | |||
| a6d7ab053b | |||
| 965959bf68 | |||
| f2a38ce2c9 | |||
| cebc553ea0 | |||
| 4556235c46 | |||
| ce75ca9074 | |||
| 0fe9a20243 | |||
| b42535db5a | |||
| ce633f41fa | |||
| c3e464311e | |||
| e7fd5c6ab5 | |||
| 69329aebd8 | |||
| f86a580f90 | |||
| 6f478be10f | |||
| 9ccc39cc59 | |||
| 689a9aa1c6 | |||
| 15dbff0270 | |||
| e78582fa01 | |||
| 4f45fe24e3 | |||
| a028d11296 | |||
| bd404febe4 | |||
| ac11d53ebc | |||
| e1ab60028a | |||
| 06301a98a2 | |||
| 6ffffaa1cc | |||
| 1ed8557069 | |||
| f5e7c7ec4e | |||
| 8d1f1925c0 | |||
| cd8f87f739 | |||
| 64d9ef3763 | |||
| 38cd5ef4d5 | |||
| 03c9cd8448 | |||
| 6ec62402f3 | |||
| 753a579085 | |||
| 58960441fd | |||
| 56fcc4b53e | |||
| f599f91a2e | |||
| eef1cdabaf | |||
| 144266cae1 | |||
| f7e647db77 | |||
| d2f1e1c842 | |||
| 4aac7ca5a5 | |||
| 2bd34c10ac | |||
| 3977b5326e | |||
| c734c2fcc0 | |||
| 5416666f80 | |||
| 8d3dc4aa44 | |||
| 594e6690f9 | |||
| 10a4d767f5 | |||
| ff06416e79 | |||
| cf0f1f3e07 | |||
| 3eff5aee93 | |||
| 8b25847234 | |||
| c0bcc6f905 | |||
| 48690da89e | |||
| 9cb83a6f69 | |||
| c271ae6fb4 | |||
| b3fe929760 | |||
| 004a278898 | |||
| 86ed69408b | |||
| 407b838a60 | |||
| 8f3ae7474d | |||
| 3951fae2c1 | |||
| 934fc3a4a9 | |||
| 5108a0fd93 | |||
| 542008cf7a | |||
| b7afdd6ff3 | |||
| a709c077a2 | |||
| 1a1f93e55d | |||
| 4bccd49a3f | |||
| 156378fb0d | |||
| 8d80d4f535 | |||
| b57dfddabc | |||
| a24566a120 | |||
| fa07ff4e61 | |||
| 1d2763e2e7 | |||
| 847350000f | |||
| 76695fb97b | |||
| 34d6494a51 | |||
| 459c5bc142 | |||
| d57b3f50bf | |||
| 0ada23c1a8 | |||
| b75399e620 | |||
| 57cea7f37b | |||
| 22f6016e31 | |||
| 1f26a9b443 | |||
| 9176f8d125 | |||
| 4c5bfef65a | |||
| fe9e0ca6e2 | |||
| cb3af6ae2e | |||
| 049be8b751 | |||
| 178fcc0c21 | |||
| 782b1f2dbb | |||
| 39717b42e3 | |||
| ca06bf994f | |||
| fc4ded5edf | |||
| c61cf81d79 | |||
| 25614c5a7c | |||
| a22fea8dd2 | |||
| e680702e87 | |||
| f0ea180ab8 | |||
| f7422bbb26 | |||
| 2d26a7519a | |||
| 69e308d24f | |||
| 1812c062da | |||
| ecd36ecfed | |||
| 5ec293eec0 | |||
| c851a95cdd | |||
| 23d64a01e7 | |||
| 1da4ecb5c9 | |||
| 08e674e76a | |||
| 382b648c14 | |||
| 8ed7178cd2 | |||
| 3426657df9 | |||
| 01ba61df2e | |||
| ada76f677f | |||
| ec6c041f19 | |||
| f72801a4f6 | |||
| 768f63ba64 | |||
| 29588c84c8 | |||
| 4623a49a6d | |||
| 4fe1dc6a57 | |||
| daaea0e597 | |||
| f2d4cd349e | |||
| f0f8ffebc0 | |||
| 5f60c65331 | |||
| ad054a9ef6 | |||
| 1e54c27750 | |||
| d79313e4ed | |||
| 34bf2d9b9b | |||
| bcdfe1beaf | |||
| 6dfc43c601 | |||
| 40806a164b | |||
| 6fbfc49fe8 | |||
| f09ed13bae | |||
| b4e67cd89f | |||
| 96fd83a68e | |||
| 2b6e6f1c4c | |||
| 1b8c44e9e8 | |||
| 91e48fa575 | |||
| 628a3da3ce | |||
| e1c7bdcee1 | |||
| 82214456fb | |||
| 50eb09fd81 | |||
| 4d175cc14e | |||
| a6022f6ab6 | |||
| cbbfe499b2 | |||
| 173005eb5c | |||
| a9e56b0884 | |||
| fbc635fdde | |||
| 19242a53cf | |||
| 766084c716 | |||
| 9235058e0d | |||
| ca8b5fba84 | |||
| 6aa5ad03c9 | |||
| a92f7e25c3 | |||
| 0ed97b043f | |||
| 3eec8290dc | |||
| bc0024c687 | |||
| 28a062ac9d | |||
| 3259198e81 | |||
| b924996681 | |||
| 150ac90e80 | |||
| 1b5a906d22 | |||
| 50ad3bc1f8 | |||
| 6708c643b2 | |||
| 36ec5640c9 | |||
| db5968724e | |||
| 888db7bbe3 | |||
| 2f3cb995a1 | |||
| 09059b78c8 | |||
| 5c1f020786 | |||
| d3dbc5b076 | |||
| 99ddc07103 | |||
| dd2f3203dd | |||
| a7c4a74cfc | |||
| 118c7528a2 | |||
| c29e8c314f | |||
| da021a3808 | |||
| d64d5a60ca | |||
| 0836a54114 | |||
| 623ceda92b | |||
| f3bb6e66df | |||
| 7c3101cb1c | |||
| 734c0507f4 | |||
| 25a4284a12 | |||
| f7a0087995 | |||
| 8074fc825a | |||
| dfe8c3e395 | |||
| cc74793542 | |||
| baa6cc3c59 | |||
| b9176185f1 | |||
| f96bedb510 | |||
| 4c8078b4d7 | |||
| 383bc6af46 | |||
| 71fc31c1cb | |||
| ea3a9d7e21 | |||
| 4222ae2e49 | |||
| 9c4f7f0851 | |||
| 90473bdda2 | |||
| bb9b6ca08a | |||
| 55400c17a8 | |||
| 256f3173da | |||
| 179cd2ed6c | |||
| ec3be878a8 | |||
| cd328876d1 | |||
| df16435ae4 | |||
| 5d108094a5 | |||
| daf3f34705 | |||
| 0ba1eeb9be | |||
| 3c613a8157 | |||
| 75e4cc0bb7 | |||
| 17f722fc0b | |||
| 2563a8dbcb | |||
| 794932f82e | |||
| 2b9ebc974c | |||
| 1ca9a696e2 | |||
| 02a9d4721c | |||
| 3a583da12d | |||
| acd7f792ab | |||
| d42ffed1e7 | |||
| 17f8e56b70 | |||
| d1f3c9dc8a | |||
| d3db4b099b | |||
| adc2c96e71 | |||
| a1b572da61 | |||
| ed653831a0 | |||
| 8d6ec39c33 | |||
| d83d2045b3 | |||
| 229df03363 | |||
| 4d141b7bc2 | |||
| 219fccf588 | |||
| 5c92d6cfb7 | |||
| 9b77cba97e | |||
| b3545fbce4 | |||
| c055d253c4 | |||
| c9a35bd23f | |||
| a0e7ab2b2b | |||
| 194a79069b | |||
| 936a0bf1e5 | |||
| a0ab3c845f | |||
| d61e4adef7 | |||
| a244516b81 | |||
| 717b133a0e | |||
| be288feb13 | |||
| 1df06a92b5 | |||
| daee66a17e | |||
| 7ccc26276a | |||
| d7c3aadf62 | |||
| 9831b68ac9 | |||
| bec4cabf8d | |||
| f64e050f9b | |||
| 33fda314a0 | |||
| a4b8da9119 | |||
| 6b1bb396f7 | |||
| 1bb51d6953 | |||
| 5fd7282fdd | |||
| 27f8f5092f | |||
| 6d8562cf97 | |||
| 8cfe83eab6 | |||
| c87b4087b1 | |||
| f0258aa269 | |||
| ed871863df | |||
| 31de7c5ef0 | |||
| b1f59d9eaa | |||
| 20c71c6312 | |||
| b781769a0a | |||
| d75417d081 | |||
| 2a90549cb9 | |||
| 158d798bb8 | |||
| a46ee80ec6 | |||
| 093dc4e79c | |||
| 8a8240e2a0 | |||
| 8e5fbb2ef5 | |||
| eb3a203fdc | |||
| 6ac39d096f | |||
| ae6060b31a | |||
| c08acaef56 | |||
| e8f98816ab | |||
| 7be67acb0c | |||
| 03043c1250 | |||
| a5375963a9 | |||
| e18f96b827 | |||
| 7b8fbf2e49 | |||
| d641bb1f54 | |||
| 91c46dab72 | |||
| e7cd340ec7 | |||
| 345276cacc | |||
| 089a6bccf2 | |||
| ddd9a702e5 | |||
| 4dceccc491 | |||
| 04c17a71a3 | |||
| 4e381dcc22 | |||
| 3f14961d0d | |||
| 4b867d4220 | |||
| cd9bac3052 | |||
| dec43b1f81 | |||
| e408f297d9 | |||
| f0b90920bf | |||
| fc7eccef70 | |||
| 879fc8814c | |||
| 8a188c9c3f | |||
| 45e860458d | |||
| f22af1d7dc | |||
| 60371bead8 | |||
| 89050fbac7 | |||
| 7ddb4bf602 | |||
| 6fc1227cd3 | |||
| 49e544c5f1 | |||
| 5505cc53f0 | |||
| 147b6c26de | |||
| 984c0fcc29 | |||
| 8e1abf2b49 | |||
| 76eb82f50b | |||
| 6ed3affddf | |||
| 8a32179792 | |||
| b65c5de62d | |||
| 8ec6174dc2 | |||
| 61dc7a33fa | |||
| 14c7a7d416 | |||
| 906e4de0a5 | |||
| 44ef126806 | |||
| 41a35618f4 | |||
| d296d5c17c | |||
| 21b9fc1453 | |||
| 70bc84b394 | |||
| 04449bb37b | |||
| e1bb500e00 | |||
| c54f3d4ce1 | |||
| a397f653d7 | |||
| 0f8c0d30fd | |||
| b77c540235 | |||
| e68986d59d | |||
| 7541bc6f51 | |||
| c6d003486c | |||
| 08f8df326a | |||
| 702a4a8463 | |||
| c77b0933c8 | |||
| 46bdc6c703 | |||
| 4db4bc1836 | |||
| 9e7e78ac79 | |||
| 671a76c184 | |||
| b2eb4d0783 | |||
| e0a7728f62 | |||
| 6bcca2e39c | |||
| 1fdce5897c | |||
| a4bfc86668 | |||
| 91e3f05093 | |||
| b095378f71 | |||
| 7ca8e480e0 | |||
| 28e645720f | |||
| 40de88d213 | |||
| a4d54abf7c | |||
| 36b7d7813f | |||
| 826cc817c8 | |||
| 7ad0c85681 | |||
| 122c974d95 | |||
| 4ce304afb6 | |||
| 166929aaff | |||
| a6f97435a9 | |||
| 82afa0aa13 | |||
| 3a4f4e6ebd | |||
| b6a420ed52 | |||
| af6991ab0f | |||
| 6d6261fced | |||
| 7462532a77 | |||
| 52776d93b1 | |||
| 9723153455 | |||
| 6cc4ac5d8c | |||
| 75d9cdfc5d | |||
| 43abcd902d | |||
| e93e58c0df | |||
| a52135893c | |||
| 1e0a10a852 | |||
| 35eb168c41 | |||
| f53461c207 | |||
| 35806f1897 | |||
| 0dd0f37ebd | |||
| 52a0b874a3 | |||
| 0d98166503 | |||
| 112eeb00fd | |||
| 424e90eeeb | |||
| 1c2b5f3361 | |||
| a38a6c8c1f | |||
| 060ac47872 | |||
| a7ebac3006 | |||
| e256c168f9 | |||
| af04859f97 | |||
| 18a06e88db | |||
| 46798413ed | |||
| feec3f0dbb | |||
| 3b3c691a23 | |||
| 5a3de5660a | |||
| 59a1ca923d | |||
| 04942b371b | |||
| db6918927c | |||
| c235f2b598 | |||
| dc834779fb | |||
| 3386e9f0aa | |||
| 9ad4b3b0a9 | |||
| 3a179cca2c | |||
| 0d8f470af6 | |||
| 01c7d1d328 | |||
| b63078f414 | |||
| 27aaa0aab9 | |||
| 6bd1ab30e8 | |||
| 2fae816769 | |||
| b03201a7e2 | |||
| 1cfb2a2cd8 | |||
| 5854ca77d7 | |||
| 657fdd5efd | |||
| c1ed41f82d | |||
| b331e6f61b | |||
| 21fe9c1094 | |||
| 56bb1c8f15 | |||
| 02a6fa0c0f | |||
| 48f1e1e9c8 | |||
| 0eddb65538 | |||
| cdbac9af62 | |||
| 22a1bc60de | |||
| 53af0a28ee | |||
| 7e5078996a | |||
| bafc714076 | |||
| acd7de7524 | |||
| dc73a22849 | |||
| bf8b7fece6 | |||
| eb3c2f541d | |||
| 73f0a85f70 | |||
| 8a16e1b018 | |||
| 9c65db7e6d | |||
| 3cd3f8ceee | |||
| 5d3d3506be | |||
| 1349ab7ad9 | |||
| 849c1eca2c | |||
| ed0e68c7e1 | |||
| 9198f4a610 | |||
| 1ebbcb32ef | |||
| 31384e8b7f | |||
| 00efc0086f | |||
| c6c1f45e0a | |||
| 610565756a | |||
| 7e2df8223b | |||
| 749e99e0f3 | |||
| 274d8cfc35 | |||
| c1d3418a1b | |||
| e0dfd732af | |||
| 00e4d7d30e | |||
| d685425752 | |||
| 3b7c797e11 | |||
| a8a809702d | |||
| 081c604d88 | |||
| 1553c90e41 | |||
| 3298cdd5fe | |||
| 1a61d24568 | |||
| 4aeae19752 | |||
| 7bf315db29 | |||
| 1b4044e2f9 | |||
| 0f5eb2e4ac | |||
| 5835888c04 | |||
| e18af36f20 | |||
| daecfc8d27 | |||
| 4784deb4a4 | |||
| b5a97a75e1 | |||
| 6206427e1a | |||
| 03eee36de1 | |||
| dd1ca318e0 | |||
| 691cdc0a7f | |||
| 8d59605aa9 | |||
| c48baeb6a4 | |||
| ddc1c490db | |||
| f7914576aa | |||
| 27eb710a7c | |||
| 8c37a1e7d5 | |||
| a9d67162e8 | |||
| a5c815f889 | |||
| ac272df001 | |||
| 89b344fb70 | |||
| 77bf797d18 | |||
| 4887b172f6 | |||
| 10674b0426 | |||
| d253606562 | |||
| 5da52a7ad2 | |||
| af5c549bff | |||
| a6959a3743 | |||
| 8774e58b10 | |||
| d111e05674 | |||
| 531f39d516 | |||
| 58ddd537aa | |||
| 203b0f9710 | |||
| 71a2961ab3 | |||
| c553d7206d | |||
| fdcb2142d6 | |||
| 562651371d | |||
| be7ed3fb7e | |||
| 8ff7e6d6df | |||
| 859a4f316e | |||
| 7102e8788c | |||
| 8909283061 | |||
| 3215946b58 | |||
| 6b4df749d2 | |||
| 8caf6db689 | |||
| 598ae2b07b | |||
| af8aaf176b | |||
| 01c0dcf7c5 | |||
| 3c19c4d866 | |||
| 5855c622a4 | |||
| 77b6e739a2 | |||
| 2e963045b4 | |||
| 3e7476020f | |||
| b1d84e3d51 | |||
| 35b22b1eee | |||
| 52f6d70cf3 | |||
| 0ec79a2388 | |||
| c0ce6df88b | |||
| 9c33391720 | |||
| 47a6e827e2 | |||
| 4b09cf1828 | |||
| 89e8d79b63 | |||
| 3024d49a57 | |||
| 275e6ddf8c | |||
| 9436cb8386 | |||
| 593a37af83 | |||
| abca0c4083 | |||
| 5d70224fa7 | |||
| e3e0e9338d | |||
| cbbd1b58c0 | |||
| e3509f1368 | |||
| 097d3973a0 | |||
| 8048c7d94a | |||
| a26a5bd42f | |||
| a9ca5b03de | |||
| 7de4bb96cd | |||
| 0484e3f091 | |||
| e2ace16bfc | |||
| b93a106c1c | |||
| b42a0a3b7a | |||
| 29e4fe5616 | |||
| 70d2778754 | |||
| 893a27fca4 | |||
| 8ec1a6e17f | |||
| 979ae96475 | |||
| e035918f04 | |||
| b5eab3f362 | |||
| 3a41ad4469 | |||
| e93a8a594b | |||
| 16750f2437 | |||
| dc2ba0eb7f | |||
| 707de937a2 | |||
| e407b8a59e | |||
| 57e73ebc6e | |||
| 5259f93472 | |||
| 218bb0a42b | |||
| 290cab6832 | |||
| 9d98e8541e | |||
| e2ff897bb7 | |||
| ae4e58c657 | |||
| a0e7822635 | |||
| e211f07d26 | |||
| 4a264851ea | |||
| 5833e8d010 | |||
| ba36763539 | |||
| 36e09691dc | |||
| 445f048ba8 | |||
| f4bac1768f | |||
| caaf1e6a05 | |||
| f6c8ed43e5 | |||
| ed7546507d | |||
| 97ddbf8e49 | |||
| c4a134b432 | |||
| 327482f9d1 | |||
| 729ce82bae | |||
| 0b450d9ace | |||
| 5736ce1a16 | |||
| 74c840b8c6 | |||
| 06d371209c | |||
| d2cbfd2a35 | |||
| 57f4fe43be | |||
| ce8f837aee | |||
| ab45fc780d | |||
| 64be59df5a | |||
| ccbe692e69 | |||
| 4cd51dffc3 | |||
| 2260874891 | |||
| a1abfb9c1a | |||
| fd6af5655a | |||
| 9aa08acb92 | |||
| 0e255aca7f | |||
| c3a54e3854 | |||
| f24821d53b | |||
| 3d768959c6 | |||
| 03fcefe1a7 | |||
| 24037ed374 | |||
| 1fe8615fdf | |||
| 9030483ff6 | |||
| 43980d614f | |||
| f3e306d987 | |||
| 736d5b5749 | |||
| e6f192523d | |||
| 52dbf270bf | |||
| de2b243690 | |||
| 3e52e4d8d2 | |||
| 243a4fe816 | |||
| c687a1f522 | |||
| 634ec1d217 | |||
| 9c922dea02 | |||
| 80924ee921 | |||
| c6ab27ab2a | |||
| b9f83c1502 | |||
| 68c1fbf0d2 | |||
| e2e165ce4b | |||
| 442cf570f9 | |||
| d81ea29ed8 | |||
| 67d72bd1da | |||
| d0286a0c33 | |||
| 372c302d37 | |||
| c5a9d011cc | |||
| bb33778aba | |||
| a41c83fc3a | |||
| 3f3b46c109 | |||
| 838cbb2720 | |||
| 7f15147bf7 | |||
| e232bab6f8 | |||
| ecadc55616 | |||
| 68962de022 | |||
| 41d601a391 | |||
| 53a4ad89bb | |||
| 31dc28ee51 | |||
| 3be1a2b6c1 | |||
| 8ad4a8ed1c | |||
| 5319072cf6 | |||
| c4c82ff525 | |||
| 90be953e7a | |||
| 2409f7ceb8 | |||
| e1c3e55198 | |||
| 2899f79c8a | |||
| e586410e78 | |||
| 7192bcd164 | |||
| c08848b7c5 | |||
| 161533860a | |||
| c041eeed26 | |||
| 6ab1b3af74 | |||
| 82f7673f56 | |||
| ab952ffefb | |||
| c6c551c7f5 | |||
| a947e784a2 | |||
| 192f3a702b | |||
| b2c8ce8df3 | |||
| 416d872a40 | |||
| 7be1916b85 | |||
| 6e46743d53 | |||
| 2b0ede0a12 | |||
| c211788e1c | |||
| 0ebecfc6c0 | |||
| 5c7474f2bf | |||
| 0eafdf6fc3 | |||
| e29877b5ea | |||
| a815bfbceb | |||
| 03c394ae99 | |||
| 70d81a2b92 | |||
| 7884b49c9e | |||
| 3b0f430344 | |||
| df792b05c7 | |||
| 903dfaaf0c | |||
| a127504d38 | |||
| d8154ea196 | |||
| d1492e110e | |||
| 5d5b159ca6 | |||
| f771ff18be | |||
| 6a2f062ed8 | |||
| 991d8a7683 | |||
| 52068c32c9 | |||
| 2ceb298434 | |||
| 59709e1bac | |||
| 161eaa27c2 | |||
| 55e8088c3c | |||
| 0e667b3188 | |||
| 24339e7a64 | |||
| 8d1142e0dc | |||
| 43b4309aec | |||
| 52ba2f1b8b | |||
| 81284dcee5 | |||
| 0004954f4d | |||
| 10616d9fed | |||
| 2bf3049c23 | |||
| c30afc791b | |||
| edda89750e | |||
| b70a004f09 | |||
| e1ad973475 | |||
| bd082ea55e | |||
| 7639325203 | |||
| 6ce7f2c62d | |||
| 64bc5f02db | |||
| e2b27696a9 | |||
| 7e463c3356 | |||
| 9ee8e5573e | |||
| 77c2178462 | |||
| 84156d2a3d | |||
| 63f1f6c0bc | |||
| 4857cb789c | |||
| 40805225bd | |||
| 3773624ab0 | |||
| b2a02aa982 | |||
| 010b3a3d2f | |||
| 9cb9d7c210 | |||
| 46afd62be7 | |||
| eac9ee5b02 | |||
| f316315456 | |||
| efb62b030a | |||
| 6ea65debb6 | |||
| 5823474904 | |||
| e4bd06f4e0 | |||
| 9c569a8716 | |||
| 3a35aca5ef | |||
| a25c578b5f | |||
| 6e01fbc52e | |||
| 571cd76f21 | |||
| afa272bac3 | |||
| 59e021d1d8 | |||
| a0af700b43 | |||
| c3d035a5ae | |||
| 791e35d8fb | |||
| 2ab145ac19 | |||
| 51ba6d932b | |||
| 9fd33a16ac | |||
| 41bd5fa920 | |||
| df9e305639 | |||
| 6a54f8576c | |||
| 9658283e58 | |||
| 689d33760f | |||
| 9011554540 | |||
| 6ec7ccbe6b | |||
| 94ba4e62e1 | |||
| 9a3bc75241 | |||
| 3a27dfec9d | |||
| 00ee5d8eb3 | |||
| ce4086d58e | |||
| 815a297ae2 | |||
| 712306ffc3 | |||
| 33b802e749 | |||
| b26ea78a4b | |||
| e9343befc0 | |||
| d59dd71602 | |||
| b99e9d3afa | |||
| d5ee62fa13 | |||
| b8e1d39e49 | |||
| 868d0afb60 | |||
| b52a3ab75c | |||
| 7d5ca94f4a | |||
| 7cce474ca8 | |||
| 4a8c87f019 | |||
| 0cd3553099 | |||
| f929d3fa3d | |||
| 7f21671fc3 | |||
| 354862ba65 | |||
| 9e51fc584c | |||
| 54f9cd752a | |||
| 3614d6659f | |||
| 2bc3929540 | |||
| c050a2dbd7 | |||
| 00c55c31a7 | |||
| f1cd67446b | |||
| 22f95f7d83 | |||
| 8b6026cf7f | |||
| d18232093d | |||
| ce1bcb3535 | |||
| fc8fd41e90 | |||
| 3f23fa3606 | |||
| 023a8b9b47 | |||
| 04ed3ff098 | |||
| 36a3ecbbd3 | |||
| 66fc3c47ae | |||
| 6a730bbffc | |||
| 0b91488206 | |||
| ea8c3a69fb | |||
| 324d637607 | |||
| daf7619e52 | |||
| 1914c1b6fe | |||
| 4f9eabeb28 | |||
| 80158aa151 | |||
| 907fc3f29e | |||
| b65089fbed | |||
| c334aeece2 | |||
| b7be16b987 | |||
| c2f07ca7ca | |||
| 9b1c9ff25d | |||
| f89191bbf9 | |||
| 98120814da | |||
| 6af546147a | |||
| ff177be12c | |||
| 3e6ddc46b6 | |||
| 1094f693f0 | |||
| f0efeede9a | |||
| ecbe84ad39 | |||
| 302fa846ca | |||
| 511d48f067 | |||
| 5b0a6ede56 | |||
| cec6ebd9df | |||
| cd3b7c1239 | |||
| 86f759c80f | |||
| 7ce97dbaeb | |||
| 0b317c4c24 | |||
| 4c6fd3c8fa | |||
| f5cc5e5829 | |||
| f284d82f9d | |||
| 8c1f6c7701 | |||
| 82d40f75f5 | |||
| a755b04ab1 | |||
| 8c5fcc9a95 | |||
| 6625a46dcb | |||
| c7b7e26c33 | |||
| 45c61c4972 | |||
| b944591ec7 | |||
| 3c3c8c7933 | |||
| e0207369c3 | |||
| 40de615c66 | |||
| 53c50b1e00 | |||
| 95f39c725f | |||
| 0e251e1bf4 | |||
| cd136bc6a0 | |||
| b66ede5e19 | |||
| ba7d4e6582 | |||
| bda9f96f28 | |||
| 2f77e1fd4a | |||
| 3d4ef2df96 | |||
| 2b20ef7834 | |||
| e4fe7f3586 | |||
| 7cfc6ad1ba | |||
| 57c27cfde4 | |||
| 3ceec0b62d | |||
| fe1d1e5499 | |||
| ca944b5089 | |||
| 92163cd704 | |||
| edfd705a52 | |||
| 4a1557edf3 | |||
| 4c55cab9fc | |||
| 8a9eb86bac | |||
| 077c7818ec | |||
| 136db345c9 | |||
| 31b711b672 | |||
| 7aeed18720 | |||
| 7da86f27e9 | |||
| e851096b77 | |||
| 91cdebd401 | |||
| 0fbdd3b68f | |||
| 939034a481 | |||
| 4ae3092877 | |||
| db23bd0f91 | |||
| 5e0de94e9a | |||
| cdfbfcd481 | |||
| 5d49b6b75b | |||
| f9a7b7dc21 | |||
| 61b7550157 | |||
| fc7fcc8db9 | |||
| 2cdb8adb64 | |||
| a22b406f46 | |||
| cff0b43f96 | |||
| 0a2bee8a78 | |||
| 0e53af427f | |||
| 3120b5e438 | |||
| 01689fc02a | |||
| afc9a2d97c | |||
| df5d891ee7 | |||
| d7ba76f44f | |||
| 10cda2103f | |||
| 616cdbd218 | |||
| 2199a4db1c | |||
| c4b673099f | |||
| c61b01ee0c | |||
| 24f26acea4 | |||
| f4e5e0f297 | |||
| a78d9bbccf | |||
| 89ec94a72b | |||
| cf495ac494 | |||
| 0eb54ef113 | |||
| 3043543901 | |||
| 6f56cbb12e | |||
| a7542015ab | |||
| 3e20a92c80 | |||
| 93812b4a1b | |||
| 4f3a0c546f | |||
| 097978b044 | |||
| da041e5170 | |||
| 9b626fe039 | |||
| c51db4ce64 | |||
| 01b66c6197 | |||
| 2a31925ef7 | |||
| 9480b544fb | |||
| 8c989bb684 | |||
| d9dd895775 | |||
| a149858701 | |||
| 3a1105935c | |||
| c5fa5ca98b | |||
| e40e780834 | |||
| 5f23501413 | |||
| 0631221d98 | |||
| 87fc8b0468 | |||
| b6d16ef601 | |||
| 72704eb945 | |||
| 23c202e25f | |||
| 253cf2a5c7 | |||
| dfce28b881 | |||
| 013cfdadea | |||
| 71545e6d3a | |||
| 8282084f48 | |||
| 5d53028f62 | |||
| c43f364eab | |||
| 93b25e9627 | |||
| 3051687b4c | |||
| 94cca9458b | |||
| c63e58f170 | |||
| 3aa40537e9 | |||
| 495fa5512c | |||
| f561b1ce04 | |||
| 7def90322f | |||
| 75c8861de9 | |||
| 9b5de49aae | |||
| 3e5197f909 | |||
| 152ba2d7e5 | |||
| 1d4d093a88 | |||
| 955e02ce26 | |||
| b499d95390 | |||
| df36d206d3 | |||
| 9af5e19054 | |||
| 8492045273 | |||
| 49a3b15816 | |||
| f015bb7b81 | |||
| 44aa9c6fc8 | |||
| d4eebdff49 | |||
| f42572c1f8 | |||
| 356c6e346a | |||
| 22eb62afff | |||
| 7d17c87ed0 | |||
| 7c8e93a046 | |||
| 86d250079b | |||
| b2cb51a61b | |||
| 4cfe681d00 | |||
| c670a25f8b | |||
| db5ee1e91f | |||
| ca1f1f1032 | |||
| 32800f1c48 | |||
| 66544cd4b2 | |||
| 94df2f93b7 | |||
| 4c1269c62e | |||
| a94989eb06 | |||
| 0cc2df8800 | |||
| d62f28d849 | |||
| 31de055d6f | |||
| a3daed1409 | |||
| d7ccd581ae | |||
| f559367d6a | |||
| 064d24e838 | |||
| ec894fc458 | |||
| 845f802a59 | |||
| 6680a16db6 | |||
| d838a3d07a | |||
| 1e35f405fb | |||
| 9900bf6ecc | |||
| ab36e3d59a | |||
| d370760071 | |||
| 0310e60b1c | |||
| 54614e2b83 | |||
| 92032f123b | |||
| f799dfcb31 | |||
| 99698fdd06 | |||
| 4bf0b7ca67 | |||
| 685fd09a75 | |||
| 75825e7c2c | |||
| 052ec96f54 | |||
| a4ab8fa083 | |||
| 75e5a29470 | |||
| 04db67cad7 | |||
| 0550a85716 | |||
| 91d5f6cc21 | |||
| 82433d3dc0 | |||
| 663cac933f | |||
| 520ff08595 | |||
| 95e12cab07 | |||
| 52093520fd | |||
| f92e459801 | |||
| b8d08dda5a | |||
| f8453fc4fd | |||
| c5c3a57f9d | |||
| 83245c7432 | |||
| 5715bdec00 | |||
| c57253cfce | |||
| 85fa790711 | |||
| c379dd6bc3 | |||
| e42d04ad9e | |||
| f361f7d0ef | |||
| 69bd85f98f | |||
| b4cee2db25 | |||
| b16e7ebf8e | |||
| 4f9dcd4fdc | |||
| 3dc33d4238 | |||
| aa16b64225 | |||
| f93d3b9fc9 | |||
| 250103bf4e | |||
| bc6767bdf4 | |||
| 15a6b39a40 | |||
| 83352e3e29 | |||
| c8c52477c9 | |||
| 042ae30b62 | |||
| b9f3bbe950 | |||
| 2fd1416ce4 | |||
| 722c99ed04 | |||
| b59c94ad7f | |||
| 547a504f7b | |||
| 51a168c12f | |||
| 3573a42ef7 | |||
| 23d69c7c8e | |||
| 77e44a5ab5 | |||
| b892ca4791 | |||
| 4775d4f082 | |||
| 2148a68df8 | |||
| 52a8fd1b63 | |||
| 422db61d71 | |||
| 749462beec | |||
| 8726c6d50b | |||
| 6ae531e893 | |||
| dc117ffbe1 | |||
| 40e3eaaf64 | |||
| 72e4607e82 | |||
| cfdaa95bea | |||
| 2be0638602 | |||
| 6ec5a0c122 | |||
| fd1902ecd2 | |||
| ec77844b1a | |||
| 8c238ae4ff | |||
| 4c909922d4 | |||
| 8358539667 | |||
| 5c87617652 | |||
| a102a7dca9 | |||
| a2e8758965 | |||
| 5914e9317c | |||
| 094dbe7386 | |||
| 84debf31c7 | |||
| 5afacd4dec | |||
| 4221eb049f | |||
| 4971ff139f | |||
| e5a50b4b4d | |||
| 5222a47b9d | |||
| 98afd6402c | |||
| 24fdc18a47 | |||
| e5632b27b2 | |||
| 14db5d588f | |||
| dbb990c0f7 | |||
| a34bed7e11 | |||
| 7c61befcb0 | |||
| 9381c7399b | |||
| 439365977f | |||
| 5b3a7bf02e | |||
| 1be45fb2d4 | |||
| a327517cf8 | |||
| f9204ad5a0 | |||
| 5b5a7ab907 | |||
| 634bb3ad64 | |||
| 329d8d3ee1 | |||
| 24c7e845c3 | |||
| 3f01f49da3 | |||
| 6d7c28560c | |||
| 23931a5676 | |||
| b4dd9f6878 | |||
| 2903b81360 | |||
| 942cf82354 | |||
| 4dcdd1ad65 | |||
| a2a3c284a3 | |||
| 4497d5e30f | |||
| 9c5e037db6 | |||
| 2b6c7941d6 | |||
| 4e11d77258 | |||
| 9791e379e3 | |||
| b59dc7906c | |||
| 253726c433 | |||
| 06e3a75515 | |||
| 2925e1e64f | |||
| ead574ae6b | |||
| 1f4d4cd974 | |||
| 2deaf3689a | |||
| 2847f42707 | |||
| 28872407c3 | |||
| ab7adb8b3a | |||
| e70be78e65 | |||
| cd95838191 |
+13
@@ -0,0 +1,13 @@
|
||||
[run]
|
||||
plugins = renpycoverage
|
||||
|
||||
[report]
|
||||
omit =
|
||||
keywords.py
|
||||
style.pxd
|
||||
*pygame_sdl2*
|
||||
*.rpyc
|
||||
*/game/*
|
||||
*style_*_functions.pyx
|
||||
renpy/gl/gl.pyx
|
||||
renpy/gl/gl1.pyx
|
||||
+27
-5
@@ -10,13 +10,16 @@
|
||||
saves
|
||||
tmp
|
||||
cache
|
||||
env
|
||||
|
||||
log.txt
|
||||
/errors.txt
|
||||
/traceback.txt
|
||||
errors.txt
|
||||
traceback.txt
|
||||
|
||||
styles.txt
|
||||
|
||||
/gui/game/gui
|
||||
|
||||
/android
|
||||
/build
|
||||
/dist
|
||||
@@ -34,6 +37,7 @@ styles.txt
|
||||
/.pydevproject
|
||||
/.pydevproject.bak
|
||||
/.project
|
||||
/.cproject
|
||||
/.settings
|
||||
/LICENSE.txt
|
||||
/templates/english/README.html
|
||||
@@ -43,12 +47,30 @@ styles.txt
|
||||
/renpy/angle/*.pxd
|
||||
/renpy-ppc.zip
|
||||
/module/build
|
||||
/module/gen
|
||||
/module/gen*
|
||||
/editra
|
||||
/launcher/game/theme
|
||||
/launcher/game/script_version.rpy
|
||||
|
||||
dl
|
||||
/dl
|
||||
renpy/vc_version.py
|
||||
.externalToolBuilders
|
||||
rapt
|
||||
/rapt
|
||||
/evil
|
||||
/iaptest
|
||||
/pygame_sdl2
|
||||
/renios
|
||||
/steam_appid.txt
|
||||
/.coverage
|
||||
/id
|
||||
/interface_7
|
||||
/htmlcov
|
||||
/the_question/.android.json
|
||||
/WINDOWS.rst
|
||||
|
||||
/*-all/
|
||||
/*-win/
|
||||
/*-mac/
|
||||
/*-linux*/
|
||||
/*-dists/
|
||||
doc-web
|
||||
|
||||
+25
-10
@@ -49,30 +49,45 @@ Building the modules requires you have the many dependencies installed on
|
||||
your system. On Ubuntu and Debian, these dependencies can be installed with
|
||||
the command::
|
||||
|
||||
apt-get install python-dev python-pygame libavcodec-dev libavformat-dev \
|
||||
libavresample-dev libfreetype6-dev libglew1.6-dev libsdl1.2-dev \
|
||||
libsdl-image1.2-dev libfribidi-dev libswscale-dev libesd0-dev libpulse-dev
|
||||
|
||||
Other platforms may have an equivalent command. Otherwise, you'll need to
|
||||
build `renpy-deps <https://github.com/renpy/renpy-deps>`_.
|
||||
apt-get install virtualenvwrapper python-dev libavcodec-dev libavformat-dev \
|
||||
libavresample-dev libswresample-dev libswscale-dev libfreetype6-dev libglew1.6-dev \
|
||||
libfribidi-dev libsdl2-dev libsdl2-image-dev libsdl2-gfx-dev \
|
||||
libsdl2-mixer-dev libsdl2-ttf-dev libjpeg-turbo8-dev
|
||||
|
||||
We strongly suggest installing the Ren'Py modules into a Python
|
||||
virtualenv. `This page <http://dabapps.com/blog/introduction-to-pip-and-virtualenv-python/>`_
|
||||
describes how to install pip and the virtualenv tool, and set up a new virtualenv.
|
||||
virtualenv. To create a new virtualenv, open a new terminal and run::
|
||||
|
||||
mkvirtualenv renpy
|
||||
|
||||
To return to this virtualenv later, run::
|
||||
|
||||
workon renpy
|
||||
|
||||
After activating the virtualenv, install cython::
|
||||
|
||||
pip install -U cython
|
||||
|
||||
Then, install pygame_sdl2 by running the following commands::
|
||||
|
||||
git clone https://www.github.com/renpy/pygame_sdl2
|
||||
pushd pygame_sdl2
|
||||
python fix_virtualenv.py $VIRTUAL_ENV
|
||||
python setup.py install
|
||||
python setup.py install_headers
|
||||
popd
|
||||
|
||||
Next, set RENPY_DEPS_INSTALL To a \::-separated list of paths containing the
|
||||
dependencies, and RENPY_CYTHON to the name of the cython command::
|
||||
|
||||
export RENPY_DEPS_INSTALL=/usr::/usr/lib/x86_64-linux-gnu/
|
||||
export RENPY_DEPS_INSTALL="/usr::/usr/lib/x86_64-linux-gnu/"
|
||||
export RENPY_CYTHON=cython
|
||||
|
||||
Finally, change into the `modules` directory, and run::
|
||||
Finally, use setup.py in the Ren'Py ``module`` directory to compile and
|
||||
install the modules that support Ren'Py::
|
||||
|
||||
pushd module
|
||||
python setup.py install
|
||||
popd
|
||||
|
||||
Ren'Py will be installed into the activated virtualenv. It can then be run
|
||||
using the command::
|
||||
|
||||
@@ -1,15 +1,25 @@
|
||||
#!/usr/bin/env python
|
||||
#!/usr/bin/env python2
|
||||
from __future__ import print_function
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
from renpy import version_tuple #@UnresolvedImport
|
||||
from renpy import version_tuple # @UnresolvedImport
|
||||
|
||||
SOURCE = [
|
||||
"/home/tom/ab/renpy",
|
||||
"/home/tom/ab/android/",
|
||||
"/home/tom/ab/android/python-for-android",
|
||||
"/home/tom/ab/ripe/renios",
|
||||
"/home/tom/ab/renpy-deps",
|
||||
"/home/tom/ab/pygame_sdl2",
|
||||
]
|
||||
|
||||
version = ".".join(str(i) for i in version_tuple)
|
||||
short_version = ".".join(str(i) for i in version_tuple[:3])
|
||||
print "Version", version
|
||||
print("Version", version)
|
||||
|
||||
ap = argparse.ArgumentParser()
|
||||
|
||||
@@ -17,9 +27,39 @@ ap.add_argument("--release", action="store_true")
|
||||
ap.add_argument("--prerelease", action="store_true")
|
||||
ap.add_argument("--experimental", action="store_true")
|
||||
ap.add_argument("--no-tag", "-n", action="store_true")
|
||||
ap.add_argument("--push-tags", action="store_true")
|
||||
ap.add_argument("--delete-tag")
|
||||
|
||||
args = ap.parse_args()
|
||||
|
||||
if args.release:
|
||||
subprocess.check_call([ "/home/tom/ab/renpy/scripts/checksums.py", "/home/tom/ab/renpy/dl/" + short_version ])
|
||||
|
||||
if args.delete_tag:
|
||||
for i in SOURCE:
|
||||
|
||||
os.chdir(i)
|
||||
|
||||
if i == SOURCE[0]:
|
||||
tag = args.delete_tag
|
||||
else:
|
||||
tag = "renpy-" + args.delete_tag
|
||||
|
||||
subprocess.call([ "git", "tag", "-d", tag, ])
|
||||
|
||||
sys.exit(0)
|
||||
|
||||
if args.push_tags:
|
||||
for i in SOURCE:
|
||||
os.chdir(i)
|
||||
|
||||
if subprocess.call([ "git", "push", "--tags" ]):
|
||||
print("Tags not pushed: {}".format(os.getcwd()))
|
||||
sys.exit(1)
|
||||
|
||||
print("Pushed tags.")
|
||||
sys.exit(0)
|
||||
|
||||
if args.release:
|
||||
links = [ "release", "prerelease", "experimental" ]
|
||||
tag = True
|
||||
@@ -33,23 +73,28 @@ else:
|
||||
links = [ ]
|
||||
tag = False
|
||||
|
||||
if args.no_tag:
|
||||
tag = False
|
||||
|
||||
def check_dirty():
|
||||
if args.no_tag:
|
||||
return
|
||||
if tag:
|
||||
for i in SOURCE:
|
||||
os.chdir(i)
|
||||
|
||||
if subprocess.check_call([ "git", "diff", "--quiet", "HEAD" ]):
|
||||
print "Directory not checked in: {}".format(os.getcwd())
|
||||
sys.exit(1)
|
||||
if subprocess.call([ "git", "diff", "--quiet", "HEAD" ]):
|
||||
print("Directory not checked in: {}".format(os.getcwd()))
|
||||
sys.exit(1)
|
||||
|
||||
os.chdir("/home/tom/ab/renpy")
|
||||
check_dirty()
|
||||
for i in SOURCE:
|
||||
|
||||
os.chdir("/home/tom/ab/renpy/android")
|
||||
check_dirty()
|
||||
os.chdir(i)
|
||||
|
||||
if i == SOURCE[0]:
|
||||
tag = version
|
||||
else:
|
||||
tag = "renpy-" + version
|
||||
|
||||
subprocess.check_call([ "git", "tag", "-a", tag, "-m", "Tagging Ren'Py + " + version + " release." ])
|
||||
|
||||
if not args.no_tag:
|
||||
subprocess.check_call([ "git", "tag", "-a", "rapt-" + version, "-m", "Tagging RAPT release." ])
|
||||
|
||||
os.chdir("/home/tom/ab/renpy/dl")
|
||||
|
||||
@@ -58,11 +103,7 @@ for i in links:
|
||||
os.unlink(i)
|
||||
os.symlink(short_version, i)
|
||||
|
||||
os.chdir("/home/tom/ab/renpy")
|
||||
|
||||
if tag and not args.no_tag:
|
||||
cmd = [ "git", "tag", "-a", version, "-m", "Ren'Py " + version ]
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
os.chdir("/home/tom/ab/website")
|
||||
subprocess.check_call("./upload.sh")
|
||||
|
||||
print("Version", version)
|
||||
|
||||
+1
-1
@@ -1,2 +1,2 @@
|
||||
lib\windows-i686\python.exe -OO renpy.py
|
||||
lib\windows-i686\python.exe -OO renpy.py tutorial
|
||||
pause
|
||||
|
||||
Executable
+11
@@ -0,0 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
if [ -z "$RENPY_COVERAGE" ]; then
|
||||
echo "$0 needs to be run with RENPY_COVERAGE set, probably in a virtualenv."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
./run.sh --build || exit 1
|
||||
coverage run renpy.py "$@"
|
||||
coverage html
|
||||
xdg-open htmlcov/index.html
|
||||
@@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
# This builds out of date modules using the default C compiler, and then
|
||||
# runs them.
|
||||
|
||||
|
||||
ROOT="$(dirname $(realpath $0))"
|
||||
|
||||
|
||||
export RENPY_GDB="gdb --args"
|
||||
. "$ROOT/run.sh" "$@"
|
||||
+59
-46
@@ -1,6 +1,7 @@
|
||||
#!/home/tom/bin/renpython -O
|
||||
#!/home/tom/ab/renpy/lib/linux-x86_64/python -O
|
||||
|
||||
# Builds a distribution of Ren'Py.
|
||||
from __future__ import print_function
|
||||
|
||||
import sys
|
||||
import os
|
||||
@@ -8,10 +9,13 @@ import compileall
|
||||
import shutil
|
||||
import subprocess
|
||||
import argparse
|
||||
import glob
|
||||
|
||||
if not sys.flags.optimize:
|
||||
raise Exception("Optimization disabled.")
|
||||
|
||||
ROOT = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
|
||||
def copy_tutorial_file(src, dest):
|
||||
"""
|
||||
Copies a file from src to dst. Lines between "# tutorial-only" and
|
||||
@@ -45,9 +49,16 @@ def main():
|
||||
ap = argparse.ArgumentParser()
|
||||
ap.add_argument("version")
|
||||
ap.add_argument("--fast", action="store_true")
|
||||
ap.add_argument("--pygame", action="store", default=None)
|
||||
ap.add_argument("--no-rapt", action="store_true")
|
||||
ap.add_argument("--variant", action="store")
|
||||
ap.add_argument("--sign", action="store_true")
|
||||
|
||||
args = ap.parse_args()
|
||||
|
||||
if args.sign:
|
||||
os.environ["RENPY_MAC_IDENTITY"] = "Developer ID Application: Tom Rothamel (XHTE5H7Z79)"
|
||||
|
||||
# Revision updating is done early, so we can do it even if the rest
|
||||
# of the program fails.
|
||||
|
||||
@@ -55,16 +66,15 @@ def main():
|
||||
# file has changed, bump it by 1.
|
||||
import renpy
|
||||
|
||||
match_version = ".".join(str(i) for i in renpy.version_tuple[:2]) #@UndefinedVariable
|
||||
zip_version = ".".join(str(i) for i in renpy.version_tuple[:3]) #@UndefinedVariable
|
||||
match_version = ".".join(str(i) for i in renpy.version_tuple[:2]) # @UndefinedVariable
|
||||
|
||||
s = subprocess.check_output([ "git", "describe", "--tags", "--dirty", "--match", match_version ])
|
||||
s = subprocess.check_output([ "git", "describe", "--tags", "--dirty", "--match", "start-" + match_version ])
|
||||
parts = s.strip().split("-")
|
||||
|
||||
if len(parts) <= 2:
|
||||
if len(parts) <= 3:
|
||||
vc_version = 0
|
||||
else:
|
||||
vc_version = int(parts[1])
|
||||
vc_version = int(parts[2])
|
||||
|
||||
if parts[-1] == "dirty":
|
||||
vc_version += 1
|
||||
@@ -73,24 +83,27 @@ def main():
|
||||
f.write("vc_version = {}".format(vc_version))
|
||||
|
||||
try:
|
||||
reload(sys.modules['renpy.vc_version']) #@UndefinedVariable
|
||||
reload(sys.modules['renpy.vc_version']) # @UndefinedVariable
|
||||
except:
|
||||
import renpy.vc_version # @UnusedImport
|
||||
import renpy.vc_version # @UnusedImport
|
||||
|
||||
reload(sys.modules['renpy'])
|
||||
|
||||
# Check that the versions match.
|
||||
full_version = ".".join(str(i) for i in renpy.version_tuple) #@UndefinedVariable
|
||||
if args.version != "renpy-experimental" \
|
||||
and not args.version.startswith("renpy-nightly-") \
|
||||
and not full_version.startswith(args.version):
|
||||
|
||||
full_version = renpy.version_only # @UndefinedVariable
|
||||
if "-" not in args.version \
|
||||
and not full_version.startswith(args.version):
|
||||
raise Exception("The command-line and Ren'Py versions do not match.")
|
||||
|
||||
os.environ['RENPY_BUILD_VERSION'] = args.version
|
||||
|
||||
# The destination directory.
|
||||
destination = os.path.join("dl", args.version)
|
||||
|
||||
print "Version {} ({})".format(args.version, full_version)
|
||||
if args.variant:
|
||||
destination += "-" + args.variant
|
||||
|
||||
print("Version {} ({})".format(args.version, full_version))
|
||||
|
||||
# Perhaps autobuild.
|
||||
if "RENPY_BUILD_ALL" in os.environ:
|
||||
@@ -103,42 +116,29 @@ def main():
|
||||
# Compile all the python files.
|
||||
compileall.compile_dir("renpy/", ddir="renpy/", force=1, quiet=1)
|
||||
|
||||
# Generate launcher/game/script_version.rpy
|
||||
with open("launcher/game/script_version.rpy", "w") as f:
|
||||
f.write("init -999 python:\n")
|
||||
f.write(" config.script_version = {!r}\n".format(renpy.version_tuple[:3])) # @UndefinedVariable
|
||||
|
||||
# Compile the various games.
|
||||
if not args.fast:
|
||||
for i in [ 'tutorial', 'launcher', 'the_question' ] + glob.glob("templates/*"):
|
||||
print "Compiling", i
|
||||
for i in [ 'tutorial', 'launcher', 'the_question' ]:
|
||||
print("Compiling", i)
|
||||
subprocess.check_call(["./renpy.sh", i, "quit" ])
|
||||
|
||||
|
||||
# Kick off the rapt build.
|
||||
if not args.fast:
|
||||
out = open("/tmp/rapt_build.txt", "wb")
|
||||
|
||||
print("Building RAPT.")
|
||||
print("Cleaning RAPT.")
|
||||
|
||||
android = os.path.abspath("android")
|
||||
sys.path.insert(0, os.path.join(ROOT, "rapt", "buildlib"))
|
||||
|
||||
rapt_build = subprocess.Popen([
|
||||
os.path.join(android, "build_renpy.sh"),
|
||||
"renpy",
|
||||
ROOT,
|
||||
],
|
||||
cwd = android,
|
||||
stdout=out,
|
||||
stderr=out)
|
||||
import rapt.interface # @UnresolvedImport
|
||||
import rapt.build # @UnresolvedImport
|
||||
|
||||
code = rapt_build.wait()
|
||||
interface = rapt.interface.Interface()
|
||||
rapt.build.distclean(interface)
|
||||
|
||||
if code:
|
||||
print "RAPT build failed. The output is in /tmp/rapt_build.txt."
|
||||
sys.exit(1)
|
||||
else:
|
||||
print "RAPT build succeeded."
|
||||
print("Compiling RAPT and renios.")
|
||||
|
||||
compileall.compile_dir("rapt/buildlib/", ddir="rapt/buildlib/", quiet=1)
|
||||
compileall.compile_dir("renios/buildlib/", ddir="renios/buildlib/", quiet=1)
|
||||
|
||||
if not os.path.exists(destination):
|
||||
os.makedirs(destination)
|
||||
@@ -167,7 +167,7 @@ def main():
|
||||
destination,
|
||||
]
|
||||
|
||||
print
|
||||
print()
|
||||
subprocess.check_call(cmd)
|
||||
|
||||
# Sign the update.
|
||||
@@ -178,12 +178,21 @@ def main():
|
||||
os.path.join(destination, "updates.json"),
|
||||
])
|
||||
|
||||
# Package pygame_sdl2.
|
||||
if not args.fast:
|
||||
subprocess.check_call([
|
||||
"pygame_sdl2/setup.py",
|
||||
"-q",
|
||||
"egg_info",
|
||||
"--tag-build",
|
||||
"-for-renpy-" + args.version,
|
||||
"sdist",
|
||||
"-d",
|
||||
os.path.abspath(destination)
|
||||
])
|
||||
|
||||
# Write 7z.exe.
|
||||
sdk = "renpy-{}-sdk".format(zip_version)
|
||||
|
||||
if args.version.startswith("renpy-nightly-"):
|
||||
sdk = args.version + "-sdk"
|
||||
sdk = "renpy-{}-sdk".format(args.version)
|
||||
|
||||
if not args.fast:
|
||||
|
||||
@@ -231,7 +240,11 @@ def main():
|
||||
if os.path.exists(sdk + ".7z.exe"):
|
||||
os.unlink(sdk + ".7z.exe")
|
||||
|
||||
print
|
||||
print()
|
||||
|
||||
if not (args.fast or args.sign):
|
||||
print("For a final-ish release, remember to use --sign so we're signed on the mac.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -0,0 +1,467 @@
|
||||
################################################################################
|
||||
## Initialization
|
||||
################################################################################
|
||||
|
||||
## The init offset statement causes the init code in this file to run before
|
||||
## init code in any other file.
|
||||
init offset = -2
|
||||
|
||||
## Calling gui.init resets the styles to sensible default values, and sets the
|
||||
## width and height of the game.
|
||||
init python:
|
||||
gui.init(1280, 720)
|
||||
|
||||
|
||||
|
||||
################################################################################
|
||||
## GUI Configuration Variables
|
||||
################################################################################
|
||||
|
||||
|
||||
## Colors ######################################################################
|
||||
##
|
||||
## The colors of text in the interface.
|
||||
|
||||
## An accent color used throughout the interface to label and highlight
|
||||
## text.
|
||||
define gui.accent_color = "#00b8c3"
|
||||
|
||||
## The color used for a text button when it is neither selected nor hovered.
|
||||
define gui.idle_color = "#555555"
|
||||
|
||||
## The small color is used for small text, which needs to be
|
||||
## brighter/darker to achieve the same effect.
|
||||
define gui.idle_small_color = "#aaaaaa"
|
||||
|
||||
## The color that is used for buttons and bars that are hovered.
|
||||
define gui.hover_color = Color(gui.accent_color).tint(.6)
|
||||
|
||||
## The color used for a text button when it is selected but not focused.
|
||||
## A button is selected if it is the current screen or preference value.
|
||||
define gui.selected_color = "#ffffff"
|
||||
|
||||
## The color used for a text button when it cannot be selected.
|
||||
define gui.insensitive_color = "#55555580"
|
||||
|
||||
## Colors used for the portions of bars that are not filled in. These are
|
||||
## not used directly, but are used when re-generating bar image files.
|
||||
define gui.muted_color = "#004e49"
|
||||
define gui.hover_muted_color = "#006e75"
|
||||
|
||||
## The colors used for dialogue and menu choice text.
|
||||
define gui.text_color = "#ffffff"
|
||||
define gui.interface_text_color = "#ffffff"
|
||||
|
||||
|
||||
## Fonts and Font Sizes ########################################################
|
||||
|
||||
## The font used for in-game text.
|
||||
define gui.default_font = "DejaVuSans.ttf"
|
||||
|
||||
## The font used for character names.
|
||||
define gui.name_font = "DejaVuSans.ttf"
|
||||
|
||||
## The font used for out-of-game text.
|
||||
define gui.interface_font = "DejaVuSans.ttf"
|
||||
|
||||
## The size of normal dialogue text.
|
||||
define gui.text_size = gui.scale(22)
|
||||
|
||||
## The size of character names.
|
||||
define gui.name_text_size = gui.scale(30)
|
||||
|
||||
## The size of text in the game's user interface.
|
||||
define gui.interface_text_size = gui.scale(24)
|
||||
|
||||
## The size of labels in the game's user interface.
|
||||
define gui.label_text_size = gui.scale(28)
|
||||
|
||||
## The size of text on the notify screen.
|
||||
define gui.notify_text_size = gui.scale(16)
|
||||
|
||||
## The size of the game's title.
|
||||
define gui.title_text_size = gui.scale(50)
|
||||
|
||||
|
||||
## Main and Game Menus #########################################################
|
||||
|
||||
## The images used for the main and game menus.
|
||||
define gui.main_menu_background = "gui/main_menu.png"
|
||||
define gui.game_menu_background = "gui/game_menu.png"
|
||||
|
||||
## Should we show the name and version of the game?
|
||||
define gui.show_name = True
|
||||
|
||||
|
||||
## Dialogue ####################################################################
|
||||
##
|
||||
## These variables control how dialogue is displayed on the screen one line
|
||||
## at a time.
|
||||
|
||||
## The height of the textbox containing dialogue.
|
||||
define gui.textbox_height = gui.scale(185)
|
||||
|
||||
## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is
|
||||
## center, and 1.0 is the bottom.
|
||||
define gui.textbox_yalign = 1.0
|
||||
|
||||
|
||||
## The placement of the speaking character's name, relative to the textbox.
|
||||
## These can be a whole number of pixels from the left or top, or 0.5 to center.
|
||||
define gui.name_xpos = gui.scale(240)
|
||||
define gui.name_ypos = gui.scale(0)
|
||||
|
||||
## The horizontal alignment of the character's name. This can be 0.0 for
|
||||
## left-aligned, 0.5 for centered, and 1.0 for right-aligned.
|
||||
define gui.name_xalign = 0.0
|
||||
|
||||
## The width, height, and borders of the box containing the character's
|
||||
## name, or None to automatically size it.
|
||||
define gui.namebox_width = None
|
||||
define gui.namebox_height = None
|
||||
|
||||
## The borders of the box containing the character's name, in left, top,
|
||||
## right, bottom order.
|
||||
define gui.namebox_borders = Borders(5, 5, 5, 5)
|
||||
|
||||
## If True, the background of the namebox will be tiled, if False, the background
|
||||
## if the namebox will be scaled.
|
||||
define gui.namebox_tile = False
|
||||
|
||||
|
||||
## The placement of dialogue relative to the textbox. These can be a whole
|
||||
## number of pixels relative to the left or top side of the textbox, or 0.5
|
||||
## to center.
|
||||
define gui.text_xpos = gui.scale(268)
|
||||
define gui.text_ypos = gui.scale(50)
|
||||
|
||||
## The maximum width of dialogue text, in pixels.
|
||||
define gui.text_width = gui.scale(744)
|
||||
|
||||
## The horizontal alignment of the dialogue text. This can be 0.0 for
|
||||
## left-aligned, 0.5 for centered, and 1.0 for right-aligned.
|
||||
define gui.text_xalign = 0.0
|
||||
|
||||
|
||||
## Buttons #####################################################################
|
||||
##
|
||||
## These variables, along with the image files in gui/button, control aspects
|
||||
## of how buttons are displayed.
|
||||
|
||||
## The width and height of a button, in pixels. If None, Ren'Py computes a size.
|
||||
define gui.button_width = None
|
||||
define gui.button_height = gui.scale(36)
|
||||
|
||||
## The borders on each side of the button, in left, top, right, bottom order.
|
||||
define gui.button_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
|
||||
## If True, the background image will be tiled. If False, the background image
|
||||
## will be linearly scaled.
|
||||
define gui.button_tile = False
|
||||
|
||||
## The font used by the button.
|
||||
define gui.button_text_font = gui.interface_font
|
||||
|
||||
## The size of the text used by the button.
|
||||
define gui.button_text_size = gui.interface_text_size
|
||||
|
||||
## The color of button text in various states.
|
||||
define gui.button_text_idle_color = gui.idle_color
|
||||
define gui.button_text_hover_color = gui.hover_color
|
||||
define gui.button_text_selected_color = gui.selected_color
|
||||
define gui.button_text_insensitive_color = gui.insensitive_color
|
||||
|
||||
## The horizontal alignment of the button text. (0.0 is left, 0.5 is center,
|
||||
## 1.0 is right).
|
||||
define gui.button_text_xalign = 0.0
|
||||
|
||||
|
||||
## These variables override settings for different kinds of buttons. Please
|
||||
## see the gui documentation for the kinds of buttons available, and what
|
||||
## each is used for.
|
||||
##
|
||||
## These customizations are used by the default interface:
|
||||
|
||||
define gui.radio_button_borders = Borders(gui.scale(25), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
|
||||
define gui.check_button_borders = Borders(gui.scale(25), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
|
||||
define gui.confirm_button_text_xalign = 0.5
|
||||
|
||||
define gui.page_button_borders = Borders(gui.scale(10), gui.scale(4), gui.scale(10), gui.scale(4))
|
||||
|
||||
define gui.quick_button_borders = Borders(gui.scale(10), gui.scale(4), gui.scale(10), gui.scale(0))
|
||||
define gui.quick_button_text_size = gui.scale(14)
|
||||
define gui.quick_button_text_idle_color = gui.idle_small_color
|
||||
define gui.quick_button_text_selected_color = gui.accent_color
|
||||
|
||||
## You can also add your own customizations, by adding properly-named variables.
|
||||
## For example, you can uncomment the following line to set the width of a
|
||||
## navigation button.
|
||||
|
||||
# define gui.navigation_button_width = 250
|
||||
|
||||
|
||||
## Choice Buttons ##############################################################
|
||||
##
|
||||
## Choice buttons are used in the in-game menus.
|
||||
|
||||
define gui.choice_button_width = gui.scale(790)
|
||||
define gui.choice_button_height = None
|
||||
define gui.choice_button_tile = False
|
||||
define gui.choice_button_borders = Borders(gui.scale(100), gui.scale(5), gui.scale(100), gui.scale(5))
|
||||
define gui.choice_button_text_font = gui.default_font
|
||||
define gui.choice_button_text_size = gui.text_size
|
||||
define gui.choice_button_text_xalign = 0.5
|
||||
define gui.choice_button_text_idle_color = "#cccccc"
|
||||
define gui.choice_button_text_hover_color = "#ffffff"
|
||||
|
||||
|
||||
## File Slot Buttons ###########################################################
|
||||
##
|
||||
## A file slot button is a special kind of button. It contains a thumbnail
|
||||
## image, and text describing the contents of the save slot. A save slot
|
||||
## uses image files in gui/button, like the other kinds of buttons.
|
||||
|
||||
## The save slot button.
|
||||
define gui.slot_button_width = gui.scale(276)
|
||||
define gui.slot_button_height = gui.scale(206)
|
||||
define gui.slot_button_borders = Borders(gui.scale(10), gui.scale(10), gui.scale(10), gui.scale(10))
|
||||
define gui.slot_button_text_size = gui.scale(14)
|
||||
define gui.slot_button_text_xalign = 0.5
|
||||
define gui.slot_button_text_idle_color = gui.idle_small_color
|
||||
|
||||
## The width and height of thumbnails used by the save slots.
|
||||
define config.thumbnail_width = gui.scale(256)
|
||||
define config.thumbnail_height = gui.scale(144)
|
||||
|
||||
## The number of columns and rows in the grid of save slots.
|
||||
define gui.file_slot_cols = 3
|
||||
define gui.file_slot_rows = 2
|
||||
|
||||
|
||||
## Positioning and Spacing #####################################################
|
||||
##
|
||||
## These variables control the positioning and spacing of various user interface
|
||||
## elements.
|
||||
|
||||
## The position of the left side of the navigation buttons, relative
|
||||
## to the left side of the screen.
|
||||
define gui.navigation_xpos = gui.scale(40)
|
||||
|
||||
## The vertical position of the skip indicator.
|
||||
define gui.skip_ypos = gui.scale(10)
|
||||
|
||||
## The vertical position of the notify screen.
|
||||
define gui.notify_ypos = gui.scale(45)
|
||||
|
||||
## The spacing between menu choices.
|
||||
define gui.choice_spacing = gui.scale(22)
|
||||
|
||||
## Buttons in the navigation section of the main and game menus.
|
||||
define gui.navigation_spacing = gui.scale(4)
|
||||
|
||||
## Controls the amount of spacing between preferences.
|
||||
define gui.pref_spacing = gui.scale(10)
|
||||
|
||||
## Controls the amount of spacing between preference buttons.
|
||||
define gui.pref_button_spacing = gui.scale(0)
|
||||
|
||||
## The spacing between file page buttons.
|
||||
define gui.page_spacing = gui.scale(0)
|
||||
|
||||
## The spacing between file slots.
|
||||
define gui.slot_spacing = gui.scale(10)
|
||||
|
||||
|
||||
## Frames ######################################################################
|
||||
##
|
||||
## These variables control the look of frames that can contain user interface
|
||||
## components when an overlay or window is not present.
|
||||
|
||||
## Generic frames that are introduced by player code.
|
||||
define gui.frame_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
|
||||
## The frame that is used as part of the confirm screen.
|
||||
define gui.confirm_frame_borders = Borders(gui.scale(40), gui.scale(40), gui.scale(40), gui.scale(40))
|
||||
|
||||
## The frame that is used as part of the skip screen.
|
||||
define gui.skip_frame_borders = Borders(gui.scale(16), gui.scale(5), gui.scale(50), gui.scale(5))
|
||||
|
||||
## The frame that is used as part of the notify screen.
|
||||
define gui.notify_frame_borders = Borders(gui.scale(16), gui.scale(5), gui.scale(40), gui.scale(5))
|
||||
|
||||
## Should frame backgrounds be tiled?
|
||||
define gui.frame_tile = False
|
||||
|
||||
|
||||
## Bars, Scrollbars, and Sliders ###############################################
|
||||
##
|
||||
## These control the look and size of bars, scrollbars, and sliders.
|
||||
##
|
||||
## The default GUI only uses sliders and vertical scrollbars.
|
||||
## All of the other bars are only used in creator-written code.
|
||||
|
||||
## The height of horizontal bars, scrollbars, and sliders. The width of
|
||||
## vertical bars, scrollbars, and sliders.
|
||||
define gui.bar_size = gui.scale(36)
|
||||
define gui.scrollbar_size = gui.scale(12)
|
||||
define gui.slider_size = gui.scale(30)
|
||||
|
||||
## True if bar images should be tiled. False if they should be linearly scaled.
|
||||
define gui.bar_tile = False
|
||||
define gui.scrollbar_tile = False
|
||||
define gui.slider_tile = False
|
||||
|
||||
## Horizontal borders.
|
||||
define gui.bar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
define gui.scrollbar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
define gui.slider_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
|
||||
## Vertical borders.
|
||||
define gui.vbar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
define gui.vscrollbar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
define gui.vslider_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.scale(4))
|
||||
|
||||
## What to do with unscrollable scrollbars in the gui. "hide" hides them, while
|
||||
## None shows them.
|
||||
define gui.unscrollable = "hide"
|
||||
|
||||
|
||||
## History #####################################################################
|
||||
##
|
||||
## The history screen displays dialogue that the player has already dismissed.
|
||||
|
||||
## The number of blocks of dialogue history Ren'Py will keep.
|
||||
define config.history_length = 250
|
||||
|
||||
## The height of a history screen entry, or None to make the height variable
|
||||
## at the cost of performance.
|
||||
define gui.history_height = gui.scale(140)
|
||||
|
||||
## The position, width, and alignment of the label giving the name of the
|
||||
## speaking character.
|
||||
define gui.history_name_xpos = 150
|
||||
define gui.history_name_ypos = 0
|
||||
define gui.history_name_width = gui.scale(150)
|
||||
define gui.history_name_xalign = 1.0
|
||||
|
||||
## The position, width, and alignment of the dialogue text.
|
||||
define gui.history_text_xpos = gui.scale(170)
|
||||
define gui.history_text_ypos = gui.scale(5)
|
||||
define gui.history_text_width = gui.scale(740)
|
||||
define gui.history_text_xalign = 0.0
|
||||
|
||||
|
||||
## NVL-Mode ###################################################################
|
||||
##
|
||||
## The NVL-mode screen displays the dialogue spoken by NVL-mode characters.
|
||||
|
||||
## The borders of the background of the NVL-mode background window.
|
||||
define gui.nvl_borders = Borders(0, gui.scale(10), 0, gui.scale(20))
|
||||
|
||||
## The height of an NVL-mode entry. Set this to None to have the entries
|
||||
## dynamically adjust height.
|
||||
define gui.nvl_height = gui.scale(115)
|
||||
|
||||
## The spacing between NVL-mode entries when gui.nvl_height is None, and
|
||||
## between NVL-mode entries and an NVL-mode menu.
|
||||
define gui.nvl_spacing = gui.scale(10)
|
||||
|
||||
## The position, width, and alignment of the label giving the name of the
|
||||
## speaking character.
|
||||
define gui.nvl_name_xpos = gui.scale(430)
|
||||
define gui.nvl_name_ypos = 0
|
||||
define gui.nvl_name_width = gui.scale(150)
|
||||
define gui.nvl_name_xalign = 1.0
|
||||
|
||||
## The position, width, and alignment of the dialogue text.
|
||||
define gui.nvl_text_xpos = gui.scale(450)
|
||||
define gui.nvl_text_ypos = gui.scale(8)
|
||||
define gui.nvl_text_width = gui.scale(590)
|
||||
define gui.nvl_text_xalign = 0.0
|
||||
|
||||
## The position, width, and alignment of nvl_thought text (the text said by
|
||||
## the nvl_narrator character.)
|
||||
define gui.nvl_thought_xpos = gui.scale(240)
|
||||
define gui.nvl_thought_ypos = gui.scale(0)
|
||||
define gui.nvl_thought_width = gui.scale(780)
|
||||
define gui.nvl_thought_xalign = 0.0
|
||||
|
||||
## The position of nvl menu_buttons.
|
||||
define gui.nvl_button_xpos = gui.scale(450)
|
||||
define gui.nvl_button_xalign = 0.0
|
||||
|
||||
## Localization ################################################################
|
||||
|
||||
## This controls where a line break is permitted. The default is suitable for
|
||||
## most languages. A list of available values can be found at
|
||||
## https://www.renpy.org/doc/html/style_properties.html#style-property-language
|
||||
|
||||
define gui.language = "unicode"
|
||||
|
||||
|
||||
################################################################################
|
||||
## Mobile devices
|
||||
################################################################################
|
||||
|
||||
init python:
|
||||
|
||||
## This increases the size of the quick buttons to make them easier to
|
||||
## touch on tablets and phones.
|
||||
if renpy.variant("touch"):
|
||||
|
||||
gui.quick_button_borders = Borders(gui.scale(40), gui.scale(14), gui.scale(40), gui.scale(0))
|
||||
|
||||
## This changes the size and spacing of various GUI elements to ensure
|
||||
## they are easily visible on phones.
|
||||
if renpy.variant("small"):
|
||||
|
||||
## Font sizes.
|
||||
gui.text_size = gui.scale(30)
|
||||
gui.name_text_size = gui.scale(36)
|
||||
gui.notify_text_size = gui.scale(25)
|
||||
gui.interface_text_size = gui.scale(36)
|
||||
gui.button_text_size = gui.scale(34)
|
||||
gui.label_text_size = gui.scale(36)
|
||||
|
||||
## Adjust the location of the textbox.
|
||||
gui.textbox_height = gui.scale(240)
|
||||
gui.name_xpos = gui.scale(80)
|
||||
gui.text_xpos = gui.scale(90)
|
||||
gui.text_width = gui.scale(1100)
|
||||
|
||||
## Change the size and spacing of items in the game menu.
|
||||
gui.choice_button_width = gui.scale(1240)
|
||||
|
||||
gui.navigation_spacing = gui.scale(20)
|
||||
gui.pref_button_spacing = gui.scale(10)
|
||||
|
||||
gui.history_height = gui.scale(190)
|
||||
gui.history_text_width = gui.scale(690)
|
||||
|
||||
## File button layout.
|
||||
gui.file_slot_cols = 2
|
||||
gui.file_slot_rows = 2
|
||||
|
||||
## NVL-mode.
|
||||
gui.nvl_height = gui.scale(170)
|
||||
|
||||
gui.nvl_name_width = gui.scale(305)
|
||||
gui.nvl_name_xpos = gui.scale(325)
|
||||
|
||||
gui.nvl_text_width = gui.scale(915)
|
||||
gui.nvl_text_xpos = gui.scale(345)
|
||||
gui.nvl_text_ypos = gui.scale(5)
|
||||
|
||||
gui.nvl_thought_width = gui.scale(1240)
|
||||
gui.nvl_thought_xpos = gui.scale(20)
|
||||
|
||||
gui.nvl_button_width = gui.scale(1240)
|
||||
gui.nvl_button_xpos = gui.scale(20)
|
||||
|
||||
## Quick buttons.
|
||||
gui.quick_button_text_size = gui.scale(20)
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
init -100 python in gui:
|
||||
|
||||
def scale(n):
|
||||
return int(n)
|
||||
|
||||
init 100 python in gui:
|
||||
|
||||
if not renpy.mobile:
|
||||
from store import config
|
||||
|
||||
import sys
|
||||
import os
|
||||
sys.path.insert(0, os.path.join(config.renpy_base, "launcher", "game"))
|
||||
|
||||
from gui7.parameters import GuiParameters
|
||||
from gui7.images import ImageGenerator
|
||||
from gui7 import generate_gui
|
||||
|
||||
p = GuiParameters(
|
||||
config.gamedir, config.gamedir,
|
||||
config.screen_width, config.screen_height,
|
||||
accent_color, "#000000", False, None,
|
||||
True, False, False, "gui")
|
||||
|
||||
p.skip_backup = True
|
||||
|
||||
generate_gui(p)
|
||||
|
||||
_skip_backup = True
|
||||
_gui_images()
|
||||
@@ -0,0 +1,206 @@
|
||||
## This file contains options that can be changed to customize your
|
||||
## game.
|
||||
##
|
||||
## Lines beginning with two '#' marks are comments, and you shouldn't
|
||||
## uncomment them. Lines beginning with a single '#' mark are
|
||||
## commented-out code, and you may want to uncomment them when
|
||||
## appropriate.
|
||||
|
||||
|
||||
## Basics ######################################################################
|
||||
|
||||
## A human-readable name of the game. This is used to set the default
|
||||
## window title, and shows up in the interface and error reports.
|
||||
##
|
||||
## The _() surrounding the string marks it as eligible for translation.
|
||||
|
||||
define config.name = _("Ren'Py 7 Default GUI")
|
||||
|
||||
|
||||
## Determines if the title given above is shown on the main menu
|
||||
## screen. Set this to False to hide the title.
|
||||
|
||||
define gui.show_name = True
|
||||
|
||||
|
||||
## The version of the game.
|
||||
|
||||
define config.version = "1.0"
|
||||
|
||||
|
||||
## Text that is placed on the game's about screen. To insert a blank line
|
||||
## between paragraphs, write \n\n.
|
||||
|
||||
define gui.about = _("")
|
||||
|
||||
|
||||
## A short name for the game used for executables and directories in the
|
||||
## built distribution. This must be ASCII-only, and must not contain
|
||||
## spaces, colons, or semicolons.
|
||||
|
||||
define build.name = "gui"
|
||||
|
||||
|
||||
## Sounds and music ############################################################
|
||||
|
||||
## These three variables control which mixers are shown to the player
|
||||
## by default. Setting one of these to False will hide the appropriate
|
||||
## mixer.
|
||||
|
||||
define config.has_sound = True
|
||||
define config.has_music = True
|
||||
define config.has_voice = True
|
||||
|
||||
|
||||
## To allow the user to play a test sound on the sound or voice channel,
|
||||
## uncomment a line below and use it to set a sample sound to play.
|
||||
|
||||
# define config.sample_sound = "sample-sound.ogg"
|
||||
# define config.sample_voice = "sample-voice.ogg"
|
||||
|
||||
|
||||
## Uncomment the following line to set an audio file that will be played
|
||||
## while the player is at the main menu. This file will continue playing
|
||||
## into the game, until it is stopped or another file is played.
|
||||
|
||||
# define config.main_menu_music = "main-menu-theme.ogg"
|
||||
|
||||
|
||||
## Transitions #################################################################
|
||||
##
|
||||
## These variables set transitions that are used when certain events occur.
|
||||
## Each variable should be set to a transition, or None to indicate that
|
||||
## no transition should be used.
|
||||
|
||||
## Entering or exiting the game menu.
|
||||
|
||||
define config.enter_transition = dissolve
|
||||
define config.exit_transition = dissolve
|
||||
|
||||
|
||||
## A transition that is used after a game has been loaded.
|
||||
|
||||
define config.after_load_transition = None
|
||||
|
||||
|
||||
## Used when entering the main menu after the game has ended.
|
||||
|
||||
define config.end_game_transition = None
|
||||
|
||||
|
||||
## A variable to set the transition used when the game starts
|
||||
## does not exist. Instead, use a with statement after showing
|
||||
## the initial scene.
|
||||
|
||||
|
||||
## Window management ###########################################################
|
||||
##
|
||||
## This controls when the dialogue window is displayed. If "show", it is always
|
||||
## displayed. If "hide", it is only displayed when dialogue is present. If
|
||||
## "auto", the window is hidden before scene statements and shown again
|
||||
## once dialogue is displayed.
|
||||
##
|
||||
## After the game has started, this can be changed with the "window show",
|
||||
## "window hide", and "window auto" statements.
|
||||
|
||||
define config.window = "auto"
|
||||
|
||||
|
||||
## Transitions used to show and hide the dialogue window
|
||||
|
||||
define config.window_show_transition = Dissolve(.2)
|
||||
define config.window_hide_transition = Dissolve(.2)
|
||||
|
||||
|
||||
## Preference defaults #########################################################
|
||||
|
||||
## Controls the default text speed. The default, 0, is infinite, while any
|
||||
## other number is the number of characters per second to type out.
|
||||
|
||||
default preferences.text_cps = 0
|
||||
|
||||
|
||||
## The default auto-forward delay. Larger numbers lead to longer waits,
|
||||
## with 0 to 30 being the valid range.
|
||||
|
||||
default preferences.afm_time = 15
|
||||
|
||||
|
||||
## Save directory ##############################################################
|
||||
##
|
||||
## Controls the platform-specific place Ren'Py will place the save
|
||||
## files for this game. The save files will be placed in:
|
||||
##
|
||||
## Windows: %APPDATA\RenPy\<config.save_directory>
|
||||
##
|
||||
## Macintosh: $HOME/Library/RenPy/<config.save_directory>
|
||||
##
|
||||
## Linux: $HOME/.renpy/<config.save_directory>
|
||||
##
|
||||
## This generally should not be changed, and if it is, should always be a
|
||||
## literal string, not an expression.
|
||||
|
||||
define config.save_directory = "gui-7"
|
||||
|
||||
|
||||
## Icon ########################################################################
|
||||
##
|
||||
## The icon displayed on the taskbar or dock.
|
||||
|
||||
define config.window_icon = "gui/window_icon.png"
|
||||
|
||||
|
||||
## Build configuration #########################################################
|
||||
##
|
||||
## This section controls how Ren'Py turns your project into distribution
|
||||
## files.
|
||||
|
||||
init python:
|
||||
|
||||
## The following functions take file patterns. File patterns are case-
|
||||
## insensitive, and matched against the path relative to the base
|
||||
## directory, with and without a leading /. If multiple patterns match,
|
||||
## the first is used.
|
||||
##
|
||||
## In a pattern:
|
||||
##
|
||||
## / is the directory separator.
|
||||
##
|
||||
## * matches all characters, except the directory separator.
|
||||
##
|
||||
## ** matches all characters, including the directory separator.
|
||||
##
|
||||
## For example, "*.txt" matches txt files in the base directory, "game/**.ogg"
|
||||
## matches ogg files in the game directory or any of its subdirectories, and
|
||||
## "**.psd" matches psd files anywhere in the project.
|
||||
|
||||
## Classify files as None to exclude them from the built distributions.
|
||||
|
||||
build.classify('**~', None)
|
||||
build.classify('**.bak', None)
|
||||
build.classify('**/.**', None)
|
||||
build.classify('**/#**', None)
|
||||
build.classify('**/thumbs.db', None)
|
||||
|
||||
## To archive files, classify them as 'archive'.
|
||||
|
||||
# build.classify('game/**.png', 'archive')
|
||||
# build.classify('game/**.jpg', 'archive')
|
||||
|
||||
## Files matching documentation patterns are duplicated in a mac app
|
||||
## build, so they appear in both the app and the zip file.
|
||||
|
||||
build.documentation('*.html')
|
||||
build.documentation('*.txt')
|
||||
|
||||
## A Google Play license key is required to download expansion files and
|
||||
## perform in-app purchases. It can be found on the "Services & APIs" page
|
||||
## of the Google Play developer console.
|
||||
|
||||
# define build.google_play_key = "..."
|
||||
|
||||
|
||||
## The username and project name associated with an itch.io project,
|
||||
## separated by a slash.
|
||||
|
||||
# define build.itch_project = "renpytom/test-project"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,35 @@
|
||||
# The script of the game goes in this file.
|
||||
|
||||
# Declare characters used by this game. The color argument colorizes the
|
||||
# name of the character.
|
||||
|
||||
define e = Character("Eileen")
|
||||
|
||||
|
||||
# The game starts here.
|
||||
|
||||
label start:
|
||||
|
||||
# Show a background. This uses a placeholder by default, but you can
|
||||
# add a file (named either "bg room.png" or "bg room.jpg") to the
|
||||
# images directory to show it.
|
||||
|
||||
scene bg room
|
||||
|
||||
# This shows a character sprite. A placeholder is used, but you can
|
||||
# replace it by adding a file named "eileen happy.png" to the images
|
||||
# directory.
|
||||
|
||||
show eileen happy
|
||||
|
||||
# These display lines of dialogue.
|
||||
|
||||
"Hello, world."
|
||||
|
||||
e "You've created a new Ren'Py game."
|
||||
|
||||
e "Once you add a story, pictures, and music, you can release it to the world!"
|
||||
|
||||
# This ends the game.
|
||||
|
||||
return
|
||||
@@ -0,0 +1,14 @@
|
||||
testcase default:
|
||||
|
||||
"Start"
|
||||
pause .6
|
||||
|
||||
# Test rollback
|
||||
"Hello, World."
|
||||
"Back"
|
||||
|
||||
# Test history.
|
||||
click
|
||||
click
|
||||
"History"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
{ "type" : "hidden" }
|
||||
@@ -2,131 +2,177 @@
|
||||
<head>
|
||||
<title>README</title>
|
||||
<style>
|
||||
|
||||
BODY {
|
||||
background: #fff;
|
||||
color: #444;
|
||||
padding-left: 20%;
|
||||
padding-top: 1em;
|
||||
padding-bottom: 1em;
|
||||
padding-right: 20%;
|
||||
font-family: sans-serif;
|
||||
line-height: 1.6em;
|
||||
background: #fff;
|
||||
color: #444;
|
||||
padding-left: 20%;
|
||||
padding-top: 1em;
|
||||
padding-bottom: 1em;
|
||||
padding-right: 20%;
|
||||
font-family: sans-serif;
|
||||
line-height: 1.6em;
|
||||
}
|
||||
|
||||
DT {
|
||||
font-weight: bold;
|
||||
margin-top: .33em;
|
||||
font-weight: bold;
|
||||
margin-top: .33em;
|
||||
}
|
||||
|
||||
H2 {
|
||||
color: #000;
|
||||
margin-left: -2.5em;
|
||||
color: #000;
|
||||
margin-left: -2.5em;
|
||||
}
|
||||
|
||||
H3 {
|
||||
color: #000;
|
||||
margin-left: -1.5em;
|
||||
color: #000;
|
||||
margin-left: -1.5em;
|
||||
}
|
||||
|
||||
.editsection {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="renpy_help"></div>
|
||||
<h2>Basic Help</h2>
|
||||
<p>
|
||||
To advance through the game, <tt>left-click</tt> or press the <tt>space</tt> or <tt>enter</tt> keys. When at a menu,
|
||||
<tt>left-click</tt> to make a choice, or use the arrow keys to select a choice and <tt>enter</tt> to activate it.
|
||||
</p>
|
||||
|
||||
<h3>Game Menu</h3>
|
||||
<p>
|
||||
When playing a game, <tt>right-click</tt> or press the <tt>escape</tt> key to enter the game menu. The game menu
|
||||
gives the following choices:
|
||||
</p>
|
||||
|
||||
<dl>
|
||||
<dt>Return</dt>
|
||||
<dd>Returns to the game.</dd>
|
||||
<dt>Save Game</dt>
|
||||
<dd>Allows you to save a game by clicking on a save slot.</dd>
|
||||
<dt>Load Game</dt>
|
||||
<dd>Allows you to load a game by clicking on a save slot. Clicking on "Auto" accesses the automatic save slots.</dd>
|
||||
<dt>Preferences</dt>
|
||||
<dd>
|
||||
Changes the game preferences (options/configuration):
|
||||
<dl>
|
||||
<dt>Display</dt>
|
||||
<dd>Switches between fullscreen and windowed mode.</dd>
|
||||
<dt>Transitions</dt>
|
||||
<dd>Controls the display of transitions between game screens.</dd>
|
||||
<dt>Text Speed</dt>
|
||||
<dd>Controls the rate at which text displays. The further to the right this slider is, the faster the text
|
||||
will display. All the way to the right causes text to be shown instantly.</dd>
|
||||
<dt>Joystick</dt>
|
||||
<dd>Lets you control the game using a joystick.</dd>
|
||||
<dt>Skip</dt>
|
||||
<dd>Chooses between skipping messages that have been already seen (in any play through the game), and
|
||||
skipping all messages.</dd>
|
||||
<dt>Begin Skipping</dt>
|
||||
<dd>Returns to the game, while skipping.</dd>
|
||||
<dt>After Choices</dt>
|
||||
<dd>Controls if skipping stops upon reaching a menu.</dd>
|
||||
<dt>Auto-Forward Time</dt>
|
||||
<dd>Controls automatic advance. The further to the left this slider is, the shorter the amount of time
|
||||
before the game advances. All the way to the right means text will never auto-forward.</dd>
|
||||
<dt>Music, Sound, and Voice Volume</dt>
|
||||
<dd>Controls the volume of the Music, Sound effect, and Voice channels, respectively. The further to the
|
||||
right these are, the louder the volume.</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
<dt>Main Menu</dt>
|
||||
<dd>Returns to the main menu, ending the current game.</dd>
|
||||
<dt>Help</dt>
|
||||
<dd>Shows this help screen.</dd>
|
||||
<dt>Quit</dt>
|
||||
<dd>Exits the game; the game will be closed and ended.</dd>
|
||||
</dl>
|
||||
|
||||
<h3>Key and Mouse Bindings</h3>
|
||||
<dl>
|
||||
<dt>Left-click, Enter</dt>
|
||||
<dd>Advances through the game, activates menu choices, buttons, and sliders.</dd>
|
||||
<dt>Space</dt>
|
||||
<dd>Advances through the game, but does not activate choices.</dd>
|
||||
<dt>Arrow Keys</dt>
|
||||
<dd>Navigates between menu choices, buttons, and sliders.</dd>
|
||||
<dt>Ctrl</dt>
|
||||
<dd>Causes skipping to occur while the ctrl key is held down.</dd>
|
||||
<dt>Tab</dt>
|
||||
<dd>Toggles skipping, causing it to occur until tab is pressed again.</dd>
|
||||
<dt>Mousewheel-Up, PageUp</dt>
|
||||
<dd>Causes rollback to occur. Rollback reverses the game back in time, showing prior text and even allowing
|
||||
menu choices to be changed.</dd>
|
||||
<dt>Mousewheel-Down, PageDown</dt>
|
||||
<dd>Causes rollforward to occur, canceling out a previous rollback.</dd>
|
||||
<dt>Right-click, Escape</dt>
|
||||
<dd>Enters the game menu. When in the game menu, returns to the game.</dd>
|
||||
<dt>Middle-click, H</dt>
|
||||
<dd>Hides the text window and other transient displays.</dd>
|
||||
<dt>F</dt>
|
||||
<dd>Toggles fullscreen mode</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Takes a screenshot, saving it in a file named screenshotxxxx.png, where xxxx is a serial number.</dd>
|
||||
<dt>Alt-M, Command-H</dt>
|
||||
<dd>Hides (iconifies) the window.</dd>
|
||||
<dt>Alt-F4, Command-Q</dt>
|
||||
<dd>Quits the game.</dd>
|
||||
<dt>Delete</dt>
|
||||
<dd>When a save slot is selected, deletes that save slot.</dd>
|
||||
<dt>v</dt>
|
||||
<dd>
|
||||
Toggles self-voicing mode, which reads text to the user using an os-supplied speech synthesizer. For more
|
||||
information, please read the <a href="http://www.renpy.org/doc/html/self_voicing.html">self-voicing</a>
|
||||
documentation.
|
||||
</dd>
|
||||
<dt>Shift+C</dt>
|
||||
<dd>Toggles clipboard-voicing mode, which copies text to the clipboard so it can be read by a screen reader.</dd>
|
||||
</dl>
|
||||
|
||||
<p><a name="Basic_Help" id="Basic_Help"></a></p>
|
||||
<h2><span class="editsection">[<a href="/w/index.php?title=renpy/Help&action=edit&section=1" title="Edit section: Basic Help">edit</a>]</span> <span class="mw-headline">Basic Help</span></h2>
|
||||
<p>To advance through the game, <tt>left-click</tt> or press the <tt>space</tt> or <tt>enter</tt> keys. When at a menu, <tt>left-click</tt> to make a choice, or use the arrow keys to select a choice and <tt>enter</tt> to activate it.</p>
|
||||
<p><a name="Game_Menu" id="Game_Menu"></a></p>
|
||||
<h3><span class="editsection">[<a href="/w/index.php?title=renpy/Help&action=edit&section=2" title="Edit section: Game Menu">edit</a>]</span> <span class="mw-headline">Game Menu</span></h3>
|
||||
<p>When playing a game, <tt>right-click</tt> or press the <tt>escape</tt> key to enter the game menu. The game menu gives the following choices:</p>
|
||||
<dl>
|
||||
<dt>Return</dt>
|
||||
<dd>Returns to the game.</dd>
|
||||
<dt>Save Game</dt>
|
||||
<dd>Allows you to save a game by clicking on a save slot.</dd>
|
||||
<dt>Load Game</dt>
|
||||
<dd>Allows you to load a game by clicking on a save slot. Clicking on "Auto" accesses the automatic save slots.</dd>
|
||||
<dt>Preferences</dt>
|
||||
<dd>Changes the game preferences (options/configuration):
|
||||
<dl>
|
||||
<dt>Display</dt>
|
||||
<dd>Switches between fullscreen and windowed mode.</dd>
|
||||
<dt>Transitions</dt>
|
||||
<dd>Controls the display of transitions between game screens.</dd>
|
||||
<dt>Text Speed</dt>
|
||||
<dd>Controls the rate at which text displays. The further to the right this slider is, the faster the text will display. All the way to the right causes text to be shown instantly.</dd>
|
||||
<dt>Joystick</dt>
|
||||
<dd>Lets you control the game using a joystick.</dd>
|
||||
<dt>Skip</dt>
|
||||
<dd>Chooses between skipping messages that have been already seen (in any play through the game), and skipping all messages.</dd>
|
||||
<dt>Begin Skipping</dt>
|
||||
<dd>Returns to the game, while skipping.</dd>
|
||||
<dt>After Choices</dt>
|
||||
<dd>Controls if skipping stops upon reaching a menu.</dd>
|
||||
<dt>Auto-Forward Time</dt>
|
||||
<dd>Controls automatic advance. The further to the left this slider is, the shorter the amount of time before the game advances. All the way to the right means text will never auto-forward.</dd>
|
||||
<dt>Music, Sound, and Voice Volume</dt>
|
||||
<dd>Controls the volume of the Music, Sound effect, and Voice channels, respectively. The further to the right these are, the louder the volume.</dd>
|
||||
</dl>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl>
|
||||
<dt>Main Menu</dt>
|
||||
<dd>Returns to the main menu, ending the current game.</dd>
|
||||
<dt>Help</dt>
|
||||
<dd>Shows this help screen.</dd>
|
||||
<dt>Quit</dt>
|
||||
<dd>Exits the game; the game will be closed and ended.</dd>
|
||||
</dl>
|
||||
<p><a name="Key_and_Mouse_Bindings" id="Key_and_Mouse_Bindings"></a></p>
|
||||
<h3><span class="editsection">[<a href="/w/index.php?title=renpy/Help&action=edit&section=3" title="Edit section: Key and Mouse Bindings">edit</a>]</span> <span class="mw-headline">Key and Mouse Bindings</span></h3>
|
||||
<dl>
|
||||
<dt>Left-click, Enter</dt>
|
||||
<dd>Advances through the game, activates menu choices, buttons, and sliders.</dd>
|
||||
<dt>Space</dt>
|
||||
<dd>Advances through the game, but does not activate choices.</dd>
|
||||
<dt>Arrow Keys</dt>
|
||||
<dd>Selects menu choices, buttons, and sliders.</dd>
|
||||
<dt>Ctrl</dt>
|
||||
<dd>Causes skipping to occur while the ctrl key is held down.</dd>
|
||||
<dt>Tab</dt>
|
||||
<dd>Toggles skipping, causing it to occur until tab is pressed again.</dd>
|
||||
<dt>Mousewheel-Up, PageUp</dt>
|
||||
<dd>Causes rollback to occur. Rollback reverses the game back in time, showing prior text and even allowing menu choices to be changed.</dd>
|
||||
<dt>Mousewheel-Down, PageDown</dt>
|
||||
<dd>Causes rollforward to occur, cancelling out a previous rollback.</dd>
|
||||
<dt>Right-click, Escape</dt>
|
||||
<dd>Enters the game menu. When in the game menu, returns to the game.</dd>
|
||||
<dt>Middle-click, H</dt>
|
||||
<dd>Hides the text window and other transient displays.</dd>
|
||||
<dt>F</dt>
|
||||
<dd>Toggles fullscreen mode</dd>
|
||||
<dt>S</dt>
|
||||
<dd>Takes a screenshot, saving it in a file named screenshotxxxx.png, where xxxx is a serial number.</dd>
|
||||
<dt>Alt-M, Command-H</dt>
|
||||
<dd>Hides (iconifies) the window.</dd>
|
||||
<dt>Alt-F4, Command-Q</dt>
|
||||
<dd>Quits the game.</dd>
|
||||
<dt>Delete</dt>
|
||||
<dd>When a save slot is selected, deletes that save slot.</dd>
|
||||
<dt>v</dt>
|
||||
<dd>Toggles self-voicing mode, which reads text to the user using an os-supplied
|
||||
speech synthesizer. For more information, please read the <a href="http://www.renpy.org/dev-doc/html/self_voicing.html">self-voicing</a>
|
||||
documentation.</dd>
|
||||
</dl>
|
||||
<p><a name="Legal_Notice" id="Legal_Notice"></a></p>
|
||||
<h2><span class="editsection">[<a href="/w/index.php?title=renpy/Help&action=edit&section=4" title="Edit section: Legal Notice">edit</a>]</span> <span class="mw-headline">Legal Notice</span></h2>
|
||||
<p>This game uses source code from a number of open source projects. For a list, and a location where the source code can be downloaded from, please view the LICENSE.txt file in the renpy directory, or visit <a href="http://www.renpy.org/wiki/renpy/License" class="external free" title="http://www.renpy.org/wiki/renpy/License" rel="nofollow">http://www.renpy.org/wiki/renpy/License</a> .</p>
|
||||
<h3>Controller Support and Bindings</h3>
|
||||
|
||||
<p>
|
||||
This game should automatically detect and use game controllers supported by
|
||||
SDL2. Other controllers can be configured using third-party configuration tools
|
||||
like the <a href="http://www.generalarcade.com/gamepadtool/">SDL2 Gampad Tool</a>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
A small number of systems may have problems using detected game controllers. Should
|
||||
that happen, hold down shift as the game starts, and disable the controller support.
|
||||
</p>
|
||||
|
||||
<p>The following bindings are used:</p>
|
||||
|
||||
<dl>
|
||||
<dt>Right Trigger, A (Bottom Button)</dt>
|
||||
<dd>Advances through the game, activates menu choices, buttons, and sliders.</dd>
|
||||
|
||||
<dt>Guide, Start</dt>
|
||||
<dd>Enters the game menu. When in the game menu, returns to the game.</dd>
|
||||
|
||||
<dt>Directional Pad, Analog Sticks</dt>
|
||||
<dd>Navigates between menu choices, buttons, and sliders.</dd>
|
||||
|
||||
<dt>Left Trigger, Left Shoulder, Back</dt>
|
||||
<dd>Causes rollback to occur. Rollback reverses the game back in time, showing prior text and even allowing
|
||||
menu choices to be changed.</dd>
|
||||
|
||||
<dt>Right Shoulder</dt>
|
||||
<dd>Causes rollforward to occur, canceling out a previous rollback.</dd>
|
||||
|
||||
<dt>Y (Top Button)</dt>
|
||||
<dd>Hides the text window and other transient displays.</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
<h2>Legal Notice</h2>
|
||||
<p>
|
||||
This program contains free software licensed under a number of licenses, including the GNU Lesser Public License. A
|
||||
complete list of software is available at <a href="http://www.renpy.org/doc/html/license.html">http://www.renpy.org/doc/html/license.html</a>.
|
||||
</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -20,6 +20,7 @@ Based upon STDWIN dialogs with the same names and functions.
|
||||
"""
|
||||
|
||||
from __future__ import division
|
||||
from __future__ import print_function
|
||||
|
||||
import os
|
||||
|
||||
@@ -1029,7 +1030,7 @@ def test():
|
||||
argv = GetArgv(optionlist=optionlist, commandlist=commandlist, addoldfile=0)
|
||||
Message("Command line: %s"%' '.join(argv))
|
||||
for i in range(len(argv)):
|
||||
print 'arg[%d] = %r' % (i, argv[i])
|
||||
print(('arg[%d] = %r' % (i, argv[i])))
|
||||
ok = AskYesNoCancel("Do you want to proceed?")
|
||||
ok = AskYesNoCancel("Do you want to identify?", yes="Identify", no="No")
|
||||
if ok > 0:
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -42,7 +42,7 @@ screen about:
|
||||
|
||||
textbutton _("View license") action interface.OpenLicense() xalign 0.5
|
||||
|
||||
textbutton _("Back") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
|
||||
label about:
|
||||
call screen about
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
+111
-217
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -43,15 +43,18 @@ init python:
|
||||
PLAY_KEYS_TEXT = _("Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details.")
|
||||
BUILD_TEXT = _("Builds the Android package.")
|
||||
BUILD_AND_INSTALL_TEXT = _("Builds the Android package, and installs it on an Android device connected to your computer.")
|
||||
BUILD_INSTALL_AND_LAUNCH_TEXT = _("Builds the Android package, installs it on an Android device connected to your computer, then launches the app on your device.")
|
||||
|
||||
CONNECT_TEXT = _("Connects to an Android device running ADB in TCP/IP mode.")
|
||||
DISCONNECT_TEXT = _("Disconnects from an Android device running ADB in TCP/IP mode.")
|
||||
LOGCAT_TEXT = _("Retrieves the log from the Android device and writes it to a file.")
|
||||
|
||||
|
||||
import subprocess
|
||||
import re
|
||||
import os
|
||||
import json
|
||||
import glob
|
||||
|
||||
def find_rapt():
|
||||
|
||||
@@ -61,12 +64,11 @@ init python:
|
||||
|
||||
RAPT_PATH = os.path.join(config.renpy_base, "rapt")
|
||||
|
||||
if os.path.isdir(RAPT_PATH):
|
||||
if os.path.isdir(RAPT_PATH) and check_hash_txt("rapt"):
|
||||
import sys
|
||||
sys.path.insert(0, os.path.join(RAPT_PATH, "buildlib"))
|
||||
else:
|
||||
RAPT_PATH = None
|
||||
RAPT_PATH is None
|
||||
|
||||
find_rapt()
|
||||
|
||||
@@ -79,6 +81,8 @@ init python:
|
||||
import rapt.install_sdk
|
||||
import rapt.plat
|
||||
import rapt.interface
|
||||
|
||||
rapt.plat.renpy = True
|
||||
else:
|
||||
rapt = None
|
||||
|
||||
@@ -91,7 +95,7 @@ init python:
|
||||
return ANDROID_NO_RAPT
|
||||
if renpy.windows and not "JAVA_HOME" in os.environ:
|
||||
return ANDROID_NO_JDK
|
||||
if not os.path.exists(rapt.plat.path("android-sdk/extras/google/play_licensing")):
|
||||
if not os.path.exists(rapt.plat.path("android-sdk/platforms/" + rapt.plat.target)):
|
||||
return ANDROID_NO_SDK
|
||||
if not os.path.exists(rapt.plat.path("android.keystore")):
|
||||
return ANDROID_NO_KEY
|
||||
@@ -131,184 +135,6 @@ init python:
|
||||
else:
|
||||
return None
|
||||
|
||||
class AndroidInterface(object):
|
||||
|
||||
def __init__(self):
|
||||
self.process = None
|
||||
self.filename = project.current.temp_filename("android.txt")
|
||||
|
||||
self.info_msg = ""
|
||||
|
||||
with open(self.filename, "w"):
|
||||
pass
|
||||
|
||||
def log(self, msg):
|
||||
with open(self.filename, "a") as f:
|
||||
f.write("\n")
|
||||
f.write(msg)
|
||||
f.write("\n")
|
||||
|
||||
def info(self, prompt):
|
||||
self.info_msg = prompt
|
||||
interface.processing(prompt, pause=False)
|
||||
self.log(prompt)
|
||||
|
||||
def yesno(self, prompt, submessage=None):
|
||||
return interface.yesno(prompt, submessage=submessage)
|
||||
|
||||
def yesno_choice(self, prompt, default=None):
|
||||
choices = [ (True, "Yes"), (False, "No") ]
|
||||
return interface.choice(prompt, choices, default)
|
||||
|
||||
def terms(self, url, prompt):
|
||||
submessage = _("{a=%s}%s{/a}") % (url, url)
|
||||
|
||||
if not interface.yesno(prompt, submessage=submessage):
|
||||
self.fail("You must accept the terms and conditions to proceed.", edit=False)
|
||||
|
||||
|
||||
def input(self, prompt, empty=None):
|
||||
|
||||
if empty is None:
|
||||
empty = ''
|
||||
|
||||
while True:
|
||||
rv = interface.input(_("QUESTION"), prompt, default=empty, cancel=Jump("android"))
|
||||
|
||||
rv = rv.strip()
|
||||
|
||||
if rv:
|
||||
return rv
|
||||
|
||||
def choice(self, prompt, choices, default):
|
||||
return interface.choice(prompt, choices, default, cancel=Jump("android"))
|
||||
|
||||
def fail(self, prompt, edit=True):
|
||||
self.log(prompt)
|
||||
prompt = re.sub(r'(http://\S+)', r'{a=\1}\1{/a}', prompt)
|
||||
|
||||
# Open android.txt in the editor.
|
||||
if edit:
|
||||
editor.EditAbsolute(self.filename)()
|
||||
|
||||
interface.error(prompt, label="android")
|
||||
|
||||
def success(self, prompt):
|
||||
self.log(prompt)
|
||||
interface.info(prompt, pause=False)
|
||||
|
||||
def final_success(self, prompt):
|
||||
self.log(prompt)
|
||||
interface.info(prompt, label="android")
|
||||
|
||||
def run_yes_thread(self):
|
||||
import time
|
||||
|
||||
try:
|
||||
while self.run_yes:
|
||||
self.process.stdin.write('y\n')
|
||||
self.process.stdin.flush()
|
||||
time.sleep(.2)
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
def call(self, cmd, cancel=False, use_path=False, yes=False):
|
||||
|
||||
print
|
||||
print " ".join(cmd)
|
||||
|
||||
self.cmd = cmd
|
||||
|
||||
f = open(self.filename, "a")
|
||||
|
||||
f.write("\n\n\n")
|
||||
|
||||
if cancel:
|
||||
cancel_action = self.cancel
|
||||
else:
|
||||
cancel_action = None
|
||||
|
||||
startupinfo = None
|
||||
if renpy.windows:
|
||||
startupinfo = subprocess.STARTUPINFO()
|
||||
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
|
||||
self.yes_thread = None
|
||||
|
||||
try:
|
||||
interface.processing(self.info_msg, show_screen=True, cancel=cancel_action)
|
||||
|
||||
kwargs = { }
|
||||
if yes:
|
||||
kwargs["stdin"] = subprocess.PIPE
|
||||
|
||||
try:
|
||||
self.process = subprocess.Popen(cmd, cwd=RAPT_PATH, stdout=f, stderr=f, startupinfo=startupinfo, **kwargs)
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc(file=f)
|
||||
raise
|
||||
|
||||
if yes:
|
||||
import threading
|
||||
self.run_yes = True
|
||||
self.yes_thread = threading.Thread(target=self.run_yes_thread)
|
||||
self.yes_thread.daemon = True
|
||||
self.yes_thread.start()
|
||||
|
||||
renpy.call_screen("android_process", interface=self)
|
||||
finally:
|
||||
f.close()
|
||||
interface.hide_screen()
|
||||
|
||||
if yes and self.yes_thread:
|
||||
self.run_yes = False
|
||||
self.yes_thread.join()
|
||||
|
||||
self.process = None
|
||||
self.yes_thread = None
|
||||
|
||||
def check_process(self):
|
||||
rv = self.process.poll()
|
||||
|
||||
if rv is not None:
|
||||
if rv:
|
||||
raise subprocess.CalledProcessError(rv, self.cmd)
|
||||
else:
|
||||
return True
|
||||
|
||||
def download(self, url, dest):
|
||||
try:
|
||||
d = Downloader(url, dest)
|
||||
cancel_action = [ d.cancel, Jump("android") ]
|
||||
interface.processing(self.info_msg, show_screen=True, cancel=cancel_action, bar_value=DownloaderValue(d))
|
||||
ui.timer(.1, action=d.check, repeat=True)
|
||||
ui.interact()
|
||||
finally:
|
||||
interface.hide_screen()
|
||||
|
||||
def background(self, f):
|
||||
try:
|
||||
t = threading.Thread(target=f)
|
||||
t.start()
|
||||
|
||||
interface.processing(self.info_msg, show_screen=True)
|
||||
|
||||
while t.is_alive():
|
||||
renpy.pause(0)
|
||||
t.join(0.25)
|
||||
|
||||
finally:
|
||||
interface.hide_screen()
|
||||
|
||||
|
||||
def cancel(self):
|
||||
if self.process:
|
||||
self.process.terminate()
|
||||
|
||||
renpy.jump("android")
|
||||
|
||||
|
||||
class AndroidBuild(Action):
|
||||
"""
|
||||
@@ -321,22 +147,6 @@ init python:
|
||||
def __call__(self):
|
||||
renpy.jump(self.label)
|
||||
|
||||
class LaunchEmulator(Action):
|
||||
|
||||
def __init__(self, emulator, variants):
|
||||
self.emulator = emulator
|
||||
self.variants = variants
|
||||
|
||||
def __call__(self):
|
||||
|
||||
env = {
|
||||
"RENPY_EMULATOR" : self.emulator,
|
||||
"RENPY_VARIANT" : self.variants,
|
||||
}
|
||||
|
||||
p = project.current
|
||||
p.launch(env=env)
|
||||
|
||||
def update_android_json(p, gui):
|
||||
"""
|
||||
Updates .android.json to include the google play information.
|
||||
@@ -372,7 +182,7 @@ init python:
|
||||
with open(filename, "w") as f:
|
||||
json.dump(android_json, f)
|
||||
|
||||
def android_build(command, p=None, gui=True):
|
||||
def android_build(command, p=None, gui=True, launch=False, destination=None, opendir=False):
|
||||
"""
|
||||
This actually builds the package.
|
||||
"""
|
||||
@@ -389,7 +199,7 @@ init python:
|
||||
|
||||
if gui:
|
||||
reporter = distribute.GuiReporter()
|
||||
rapt_interface = AndroidInterface()
|
||||
rapt_interface = MobileInterface("android")
|
||||
else:
|
||||
reporter = distribute.TextReporter()
|
||||
rapt_interface = rapt.interface.Interface()
|
||||
@@ -403,8 +213,57 @@ init python:
|
||||
report_success=False,
|
||||
)
|
||||
|
||||
def finished(files, destination=destination):
|
||||
|
||||
source_dir = rapt.plat.path("bin")
|
||||
|
||||
try:
|
||||
|
||||
destination_dir = destination
|
||||
|
||||
# Use default destination if not configured
|
||||
if gui and destination is None:
|
||||
build = p.dump['build']
|
||||
destination = build["destination"]
|
||||
|
||||
if destination != "-dists":
|
||||
parent = os.path.dirname(p.path)
|
||||
destination_dir = os.path.join(parent, destination)
|
||||
|
||||
except:
|
||||
destination_dir = None
|
||||
|
||||
dir_to_open = source_dir
|
||||
|
||||
if destination_dir is not None:
|
||||
|
||||
reporter.info(_("Copying Android files to distributions directory."))
|
||||
|
||||
try:
|
||||
os.makedirs(destination_dir)
|
||||
except:
|
||||
pass
|
||||
|
||||
try:
|
||||
|
||||
for i in files:
|
||||
shutil.copy(i, renpy.fsencode(destination_dir))
|
||||
|
||||
dir_to_open = destination_dir
|
||||
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
pass
|
||||
|
||||
if opendir:
|
||||
store.OpenDirectory(dir_to_open)()
|
||||
|
||||
|
||||
with interface.nolinks():
|
||||
rapt.build.build(rapt_interface, dist, command)
|
||||
rapt.build.build(rapt_interface, dist, command, launch=launch, finished=finished)
|
||||
|
||||
|
||||
|
||||
# The android support can stick unicode into os.environ. Fix that.
|
||||
init 100 python:
|
||||
@@ -421,7 +280,7 @@ screen android_process(interface):
|
||||
text "[ft.text!q]":
|
||||
size 14
|
||||
color TEXT
|
||||
font "Roboto-Light.ttf"
|
||||
font gui.LIGHT_FONT
|
||||
xpos 75
|
||||
ypos 350
|
||||
|
||||
@@ -468,18 +327,19 @@ screen android:
|
||||
|
||||
frame style "l_indent":
|
||||
|
||||
has vbox
|
||||
has hbox:
|
||||
spacing 15
|
||||
|
||||
textbutton _("Phone"):
|
||||
action LaunchEmulator("touch", "small phone touch android")
|
||||
action LaunchEmulator("touch", "small phone touch android mobile")
|
||||
hovered tt.Action(PHONE_TEXT)
|
||||
|
||||
textbutton _("Tablet"):
|
||||
action LaunchEmulator("touch", "medium tablet touch android")
|
||||
action LaunchEmulator("touch", "medium tablet touch android mobile")
|
||||
hovered tt.Action(TABLET_TEXT)
|
||||
|
||||
textbutton _("Television / OUYA"):
|
||||
action LaunchEmulator("tv", "small tv ouya android")
|
||||
textbutton _("Television"):
|
||||
action LaunchEmulator("tv", "small tv android mobile")
|
||||
hovered tt.Action(OUYA_TEXT)
|
||||
|
||||
|
||||
@@ -514,6 +374,10 @@ screen android:
|
||||
action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build_and_install"))
|
||||
hovered tt.Action(BUILD_AND_INSTALL_TEXT)
|
||||
|
||||
textbutton _("Build, Install & Launch"):
|
||||
action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build_install_and_launch"))
|
||||
hovered tt.Action(BUILD_INSTALL_AND_LAUNCH_TEXT)
|
||||
|
||||
add SPACER
|
||||
add SEPARATOR2
|
||||
|
||||
@@ -537,6 +401,10 @@ screen android:
|
||||
action AndroidIfState(state, ANDROID_OK, Jump("android_disconnect"))
|
||||
hovered tt.Action(DISCONNECT_TEXT)
|
||||
|
||||
textbutton _("Logcat"):
|
||||
action AndroidIfState(state, ANDROID_NO_KEY, Jump("logcat"))
|
||||
hovered tt.Action(LOGCAT_TEXT)
|
||||
|
||||
|
||||
# Right side.
|
||||
frame:
|
||||
@@ -560,7 +428,7 @@ screen android:
|
||||
text AndroidStateText(state)
|
||||
|
||||
|
||||
textbutton _("Back") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
|
||||
|
||||
label android:
|
||||
@@ -576,7 +444,7 @@ label android_installsdk:
|
||||
|
||||
python:
|
||||
with interface.nolinks():
|
||||
rapt.install_sdk.install_sdk(AndroidInterface())
|
||||
rapt.install_sdk.install_sdk(MobileInterface("android"))
|
||||
|
||||
jump android
|
||||
|
||||
@@ -584,14 +452,20 @@ label android_installsdk:
|
||||
label android_configure:
|
||||
|
||||
python:
|
||||
rapt.configure.configure(AndroidInterface(), project.current.path)
|
||||
project.current.update_dump(force=True)
|
||||
|
||||
rapt.configure.configure(
|
||||
MobileInterface("android", edit=False),
|
||||
project.current.path,
|
||||
default_name=project.current.dump.get("name", None),
|
||||
default_version=project.current.dump.get("version", None))
|
||||
|
||||
jump android
|
||||
|
||||
|
||||
label android_build:
|
||||
|
||||
$ android_build([ 'release' ])
|
||||
$ android_build([ 'release' ], opendir=True)
|
||||
|
||||
jump android
|
||||
|
||||
@@ -602,6 +476,13 @@ label android_build_and_install:
|
||||
|
||||
jump android
|
||||
|
||||
label android_build_install_and_launch:
|
||||
|
||||
$ android_build([ 'release', 'install' ], launch=True)
|
||||
|
||||
jump android
|
||||
|
||||
|
||||
label android_connect:
|
||||
|
||||
python hide:
|
||||
@@ -641,7 +522,7 @@ label android_connect:
|
||||
|
||||
persistent.connect_address = address
|
||||
|
||||
rapt_interface = AndroidInterface()
|
||||
rapt_interface = MobileInterface("android")
|
||||
rapt.build.connect(rapt_interface, address)
|
||||
|
||||
jump android
|
||||
@@ -650,23 +531,36 @@ label android_disconnect:
|
||||
|
||||
python hide:
|
||||
|
||||
rapt_interface = AndroidInterface()
|
||||
rapt_interface = MobileInterface("android")
|
||||
rapt.build.disconnect(rapt_interface)
|
||||
|
||||
jump android
|
||||
|
||||
label logcat:
|
||||
|
||||
python hide:
|
||||
|
||||
interface = MobileInterface("android", filename="logcat.txt")
|
||||
interface.info(_("Retrieving logcat information from device."))
|
||||
interface.call([ rapt.plat.adb, "logcat", "-d" ], cancel=True)
|
||||
interface.open_editor()
|
||||
|
||||
jump android
|
||||
|
||||
init python:
|
||||
|
||||
def android_build_command():
|
||||
ap = renpy.arguments.ArgumentParser()
|
||||
ap.add_argument("project", help="The path to the project directory.")
|
||||
ap.add_argument("command", help="Commands to pass to ant. (Try 'release' 'install'.)", nargs='+')
|
||||
ap.add_argument("android_project", help="The path to the project directory.")
|
||||
ap.add_argument("ant_commands", help="Commands to pass to ant. (Try 'release' 'install'.)", nargs='+')
|
||||
ap.add_argument("--launch", action="store_true", help="Launches the app after build and install compete.")
|
||||
ap.add_argument("--destination", "--dest", default=None, action="store", help="The directory where the packaged files should be placed.")
|
||||
|
||||
args = ap.parse_args()
|
||||
|
||||
p = project.Project(args.project)
|
||||
p = project.Project(args.android_project)
|
||||
|
||||
android_build(args.command, p=p, gui=False)
|
||||
android_build(args.ant_commands, p=p, gui=False, launch=args.launch, destination=args.destination)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -48,7 +48,7 @@ init python in archiver:
|
||||
# A fixed key minimizes difference between archive versions.
|
||||
self.key = 0x42424242
|
||||
|
||||
padding = "RPA-3.0 XXXXXXXXXXXXXXXX XXXXXXXX\n"
|
||||
padding = b"RPA-3.0 XXXXXXXXXXXXXXXX XXXXXXXX\n"
|
||||
self.f.write(padding)
|
||||
|
||||
def add(self, name, path):
|
||||
@@ -63,14 +63,14 @@ init python in archiver:
|
||||
dlen = len(data)
|
||||
|
||||
# Pad.
|
||||
padding = "Made with Ren'Py."
|
||||
padding = b"Made with Ren'Py."
|
||||
self.f.write(padding)
|
||||
|
||||
offset = self.f.tell()
|
||||
|
||||
self.f.write(data)
|
||||
|
||||
self.index[name].append((offset ^ self.key, dlen ^ self.key, ""))
|
||||
self.index[name].append((offset ^ self.key, dlen ^ self.key, b""))
|
||||
|
||||
def close(self):
|
||||
|
||||
@@ -79,7 +79,7 @@ init python in archiver:
|
||||
self.f.write(dumps(self.index, HIGHEST_PROTOCOL).encode("zlib"))
|
||||
|
||||
self.f.seek(0)
|
||||
self.f.write("RPA-3.0 %016x %08x\n" % (indexoff, self.key))
|
||||
self.f.write(b"RPA-3.0 %016x %08x\n" % (indexoff, self.key))
|
||||
|
||||
self.f.close()
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -23,13 +23,17 @@
|
||||
# http://www.csn.ul.ie/~caolan/publink/winresdump/winresdump/doc/pefile.html
|
||||
# Contains a reasonable description of the format.
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
import struct
|
||||
import sys
|
||||
import array
|
||||
import pefile # @UnresolvedImport
|
||||
import pefile # @UnresolvedImport
|
||||
|
||||
# This class performs various operations on memory-loaded binary files,
|
||||
# including modifications.
|
||||
|
||||
|
||||
class BinFile(object):
|
||||
|
||||
def set_u32(self, addr, value):
|
||||
@@ -74,11 +78,11 @@ class BinFile(object):
|
||||
def tostring(self):
|
||||
return self.a.tostring()
|
||||
|
||||
def substring(self, start, len): #@ReservedAssignment
|
||||
def substring(self, start, len): # @ReservedAssignment
|
||||
return self.a[start:start+len].tostring()
|
||||
|
||||
def __init__(self, data):
|
||||
self.a = array.array('B')
|
||||
self.a = array.array(b'B')
|
||||
self.a.fromstring(data)
|
||||
|
||||
##############################################################################
|
||||
@@ -89,6 +93,8 @@ class BinFile(object):
|
||||
resource_virtual = 0
|
||||
|
||||
# This parses a data block out of the resources.
|
||||
|
||||
|
||||
def parse_data(bf, offset):
|
||||
bf.seek(offset)
|
||||
data_offset = bf.u32()
|
||||
@@ -102,16 +108,18 @@ def parse_data(bf, offset):
|
||||
for _i in range(data_len):
|
||||
l.append(chr(bf.u8()))
|
||||
|
||||
return (code_page, "".join(l))
|
||||
return (code_page, b"".join(l))
|
||||
|
||||
# This parses a resource directory.
|
||||
|
||||
|
||||
def parse_directory(bf, offset):
|
||||
|
||||
bf.seek(offset)
|
||||
char = bf.u32() #@UnusedVariable
|
||||
timedate = bf.u32() #@UnusedVariable
|
||||
major = bf.u16() #@UnusedVariable
|
||||
minor = bf.u16() #@UnusedVariable
|
||||
char = bf.u32() # @UnusedVariable
|
||||
timedate = bf.u32() # @UnusedVariable
|
||||
major = bf.u16() # @UnusedVariable
|
||||
minor = bf.u16() # @UnusedVariable
|
||||
n_named = bf.u16()
|
||||
n_id = bf.u16()
|
||||
|
||||
@@ -143,32 +151,33 @@ def parse_directory(bf, offset):
|
||||
def show_resources(d, prefix):
|
||||
|
||||
if not isinstance(d, dict):
|
||||
print prefix, "Codepage", d[0], "length", len(d[1])
|
||||
print(prefix, "Codepage", d[0], "length", len(d[1]))
|
||||
return
|
||||
|
||||
for k in d:
|
||||
print prefix, k
|
||||
print(prefix, k)
|
||||
show_resources(d[k], prefix + " ")
|
||||
|
||||
##############################################################################
|
||||
# These functions repack the resources into a new resource segment. Here,
|
||||
# the offset is relative to the start of the resource segment.
|
||||
|
||||
|
||||
class Packer(object):
|
||||
|
||||
def pack(self, d):
|
||||
self.data = ""
|
||||
self.data = b""
|
||||
self.data_offset = 0
|
||||
|
||||
self.entries = ""
|
||||
self.entries = b""
|
||||
self.entries_offset = 0
|
||||
|
||||
head = self.pack_dict(d, 0)
|
||||
|
||||
self.data = ""
|
||||
self.data = b""
|
||||
self.data_offset = len(head) + len(self.entries)
|
||||
|
||||
self.entries = ""
|
||||
self.entries = b""
|
||||
self.entries_offset = len(head)
|
||||
|
||||
return self.pack_dict(d, 0) + self.entries + self.data
|
||||
@@ -178,7 +187,7 @@ class Packer(object):
|
||||
|
||||
l = len(s)
|
||||
s = s.encode("utf-16le")
|
||||
self.data += struct.pack("<H", l) + s + "\0\0"
|
||||
self.data += struct.pack("<H", l) + s + b"\0\0"
|
||||
|
||||
return rv
|
||||
|
||||
@@ -188,7 +197,7 @@ class Packer(object):
|
||||
rv = len(self.entries) + self.entries_offset
|
||||
|
||||
if len(self.data) % 2:
|
||||
self.data += "P"
|
||||
self.data += b"P"
|
||||
|
||||
daddr = len(self.data) + self.data_offset
|
||||
|
||||
@@ -208,7 +217,7 @@ class Packer(object):
|
||||
|
||||
offset += len(rv) + (len(name_entries) + len(id_entries)) * 8
|
||||
|
||||
rest = ""
|
||||
rest = b""
|
||||
|
||||
for (name, value) in name_entries + id_entries:
|
||||
if isinstance(name, unicode):
|
||||
@@ -229,6 +238,8 @@ class Packer(object):
|
||||
##############################################################################
|
||||
# This loads in an icon file, and returns a dictionary that is suitable for
|
||||
# use in the resources of an exe file.
|
||||
|
||||
|
||||
def load_icon(fn):
|
||||
f = BinFile(file(fn, "rb").read())
|
||||
|
||||
@@ -259,7 +270,6 @@ def load_icon(fn):
|
||||
|
||||
rv[3][i + 1] = { 0 : (1252, f.substring(offset, size)) }
|
||||
|
||||
|
||||
group += struct.pack("BBBBHHIH", width, height, colors, reserved,
|
||||
planes, bpp, size, i + 1)
|
||||
|
||||
@@ -279,7 +289,7 @@ def change_icons(oldexe, icofn):
|
||||
pe = pefile.PE(oldexe)
|
||||
|
||||
for s in pe.sections:
|
||||
if s.Name == ".rsrc\0\0\0":
|
||||
if s.Name == b".rsrc\0\0\0":
|
||||
rsrc_section = s
|
||||
break
|
||||
else:
|
||||
@@ -311,7 +321,7 @@ def change_icons(oldexe, icofn):
|
||||
|
||||
if len(rsrc) % alignment:
|
||||
pad = alignment - (len(rsrc) % alignment)
|
||||
padding = "RENPYVNE" * (pad / 8 + 1)
|
||||
padding = b"RENPYVNE" * (pad / 8 + 1)
|
||||
padding = padding[:pad]
|
||||
rsrc += padding
|
||||
|
||||
@@ -346,4 +356,3 @@ if __name__ == "__main__":
|
||||
f = file(sys.argv[3], "wb")
|
||||
f.write(change_icons(sys.argv[1], sys.argv[2]))
|
||||
f.close()
|
||||
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
init python:
|
||||
|
||||
def directory_is_writable(path):
|
||||
test = os.path.join(path, "renpy test do not use")
|
||||
|
||||
try:
|
||||
if os.path.isdir(test):
|
||||
os.rmdir(test)
|
||||
|
||||
os.mkdir(test)
|
||||
os.rmdir(test)
|
||||
|
||||
return True
|
||||
|
||||
except:
|
||||
return False
|
||||
|
||||
def choose_directory(path):
|
||||
"""
|
||||
Pops up a directory chooser.
|
||||
|
||||
`path`
|
||||
The directory that is selected by default. If None, config.renpy_base
|
||||
is selected.
|
||||
|
||||
Returns a (path, is_default) tuple, where path is the chosen directory,
|
||||
and is_default is true if and only if it was chosen by default mechanism
|
||||
rather than user choice.
|
||||
"""
|
||||
|
||||
if path:
|
||||
default_path = path
|
||||
else:
|
||||
try:
|
||||
default_path = os.path.dirname(os.path.abspath(config.renpy_base))
|
||||
except:
|
||||
default_path = os.path.abspath(config.renpy_base)
|
||||
|
||||
if EasyDialogs:
|
||||
|
||||
choice = EasyDialogs.AskFolder(defaultLocation=default_path, wanted=unicode)
|
||||
|
||||
if choice is not None:
|
||||
path = choice
|
||||
else:
|
||||
path = None
|
||||
|
||||
else:
|
||||
|
||||
try:
|
||||
|
||||
cmd = [ "/usr/bin/python", os.path.join(config.gamedir, "tkaskdir.py"), renpy.fsencode(default_path) ]
|
||||
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
||||
choice = p.stdout.read()
|
||||
code = p.wait()
|
||||
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
code = 0
|
||||
choice = ""
|
||||
path = None
|
||||
|
||||
interface.error(_("Ren'Py was unable to run python with tkinter to choose the directory. Please install the python-tk or tkinter package."), label=None)
|
||||
|
||||
if code:
|
||||
interface.error(_("Ren'Py was unable to run python with tkinter to choose the directory. Please install the python-tk or tkinter package."), label=None)
|
||||
|
||||
elif choice:
|
||||
path = choice.decode("utf-8")
|
||||
|
||||
is_default = False
|
||||
|
||||
if path is None:
|
||||
path = default_path
|
||||
is_default = True
|
||||
|
||||
path = renpy.fsdecode(path)
|
||||
|
||||
if (not os.path.isdir(path)) or (not directory_is_writable(path)):
|
||||
interface.error(_("The selected projects directory is not writable."))
|
||||
path = default_path
|
||||
is_default = True
|
||||
|
||||
if is_default and (not directory_is_writable(path)):
|
||||
path = os.path.expanduser("~")
|
||||
|
||||
return path, is_default
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -345,8 +345,7 @@ init python:
|
||||
global style_backup
|
||||
style_backup = renpy.style.backup()
|
||||
|
||||
translate None python:
|
||||
make_style_backup()
|
||||
config.change_language_callbacks.append(make_style_backup)
|
||||
|
||||
screen theme_demo:
|
||||
|
||||
@@ -398,9 +397,23 @@ init -2 python:
|
||||
|
||||
style.soundtest_button.xalign = 1.0
|
||||
|
||||
|
||||
screen choose_theme:
|
||||
|
||||
default scheme_yadjustment = ui.adjustment()
|
||||
default theme_yadjustment = ui.adjustment()
|
||||
|
||||
default first = True
|
||||
|
||||
python:
|
||||
if first:
|
||||
theme_yinitial_value = theme_yinitial()
|
||||
scheme_yinitial_value = scheme_yinitial()
|
||||
else:
|
||||
theme_yinitial_value = None
|
||||
scheme_yinitial_value = None
|
||||
|
||||
first = False
|
||||
|
||||
frame:
|
||||
style_group "l"
|
||||
style "l_root"
|
||||
@@ -426,8 +439,9 @@ screen choose_theme:
|
||||
|
||||
viewport:
|
||||
scrollbars "vertical"
|
||||
yinitial theme_yinitial()
|
||||
mousewheel True
|
||||
yadjustment theme_yadjustment
|
||||
yinitial theme_yinitial_value
|
||||
|
||||
has vbox
|
||||
|
||||
@@ -451,7 +465,8 @@ screen choose_theme:
|
||||
viewport:
|
||||
scrollbars "vertical"
|
||||
mousewheel True
|
||||
yinitial scheme_yinitial()
|
||||
yadjustment scheme_yadjustment
|
||||
yinitial scheme_yinitial_value
|
||||
|
||||
has vbox
|
||||
|
||||
@@ -476,7 +491,7 @@ screen choose_theme:
|
||||
|
||||
use theme_demo
|
||||
|
||||
textbutton _("Back") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Continue") action Return(True) style "l_right_button"
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,84 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
init python:
|
||||
|
||||
class ConsoleCommand():
|
||||
"""
|
||||
This runs a series of console commands in an OS-provided
|
||||
console window. This is done by creating a shell script
|
||||
or batch file as appropriate, then using an OS-approved
|
||||
method to run that file.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
|
||||
if renpy.macintosh:
|
||||
fn = "console.command"
|
||||
nl = "\n"
|
||||
prefix = "#!/bin/bash"
|
||||
elif renpy.windows:
|
||||
fn = "console.bat"
|
||||
nl = "\r\n"
|
||||
prefix = "@echo off"
|
||||
else:
|
||||
fn = "console.sh"
|
||||
nl = "\n"
|
||||
prefix = "#!/bin/bash"
|
||||
|
||||
|
||||
self.fn = project.current.temp_filename(fn)
|
||||
self.f = open(self.fn, "wb")
|
||||
self.nl = nl
|
||||
|
||||
|
||||
self.f.write(renpy.fsencode(prefix) + nl)
|
||||
|
||||
def add(self, *args):
|
||||
"""
|
||||
Adds a command to be run.
|
||||
"""
|
||||
|
||||
args = [ '"{}"'.format(renpy.fsencode(i)) for i in args]
|
||||
self.f.write(" ".join(args) + self.nl)
|
||||
|
||||
def run(self):
|
||||
"""
|
||||
Runs the queued up commands.
|
||||
"""
|
||||
|
||||
if renpy.windows:
|
||||
self.add("pause")
|
||||
elif renpy.linux:
|
||||
self.add("echo", "Press enter to close this window...")
|
||||
self.add("read")
|
||||
|
||||
self.f.close()
|
||||
os.chmod(self.fn, 0o755)
|
||||
|
||||
if renpy.windows:
|
||||
subprocess.Popen([ renpy.fsencode(self.fn) ], console=True)
|
||||
elif renpy.macintosh:
|
||||
subprocess.Popen([ "open", "-a", "Terminal", renpy.fsencode(self.fn) ])
|
||||
else:
|
||||
subprocess.Popen([ "x-terminal-emulator", "-e", renpy.fsencode(self.fn) ])
|
||||
|
||||
interface.interaction(_("INFORMATION"), _("The command is being run in a new operating system console window."), pause=2.5)
|
||||
+577
-113
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -50,6 +50,7 @@ init python in distribute:
|
||||
import re
|
||||
import plistlib
|
||||
import time
|
||||
import shutil
|
||||
|
||||
match_cache = { }
|
||||
|
||||
@@ -111,6 +112,25 @@ init python in distribute:
|
||||
|
||||
return False
|
||||
|
||||
def hash_file(fn):
|
||||
"""
|
||||
Returns the hash of `fn`.
|
||||
"""
|
||||
|
||||
sha = hashlib.sha256()
|
||||
|
||||
with open(renpy.fsencode(fn), "rb") as f:
|
||||
while True:
|
||||
|
||||
data = f.read(8 * 1024 * 1024)
|
||||
|
||||
if not data:
|
||||
break
|
||||
|
||||
sha.update(data)
|
||||
|
||||
return sha.hexdigest()
|
||||
|
||||
class File(object):
|
||||
"""
|
||||
Represents a file that we can distribute.
|
||||
@@ -149,6 +169,31 @@ init python in distribute:
|
||||
def copy(self):
|
||||
return File(self.name, self.path, self.directory, self.executable)
|
||||
|
||||
def hash(self, hash, distributor):
|
||||
"""
|
||||
Update hash with information about this entry.
|
||||
"""
|
||||
|
||||
key = (self.name, self.path, self.directory, self.executable)
|
||||
|
||||
hash.update(repr(key))
|
||||
|
||||
if self.path is None:
|
||||
return
|
||||
|
||||
if self.directory:
|
||||
return
|
||||
|
||||
if self.name == "update/current.json":
|
||||
return
|
||||
|
||||
if self.path in distributor.hash_cache:
|
||||
digest = distributor.hash_cache[self.path]
|
||||
else:
|
||||
digest = hash_file(self.path)
|
||||
distributor.hash_cache[self.path] = digest
|
||||
|
||||
hash.update(digest)
|
||||
|
||||
class FileList(list):
|
||||
"""
|
||||
@@ -261,6 +306,67 @@ init python in distribute:
|
||||
|
||||
return rv
|
||||
|
||||
def mac_lib_transform(self, app, duplicate):
|
||||
"""
|
||||
Moves the mac lib into position. If duplicate is set, the
|
||||
|
||||
Creates a new file list that has lib/darwin-x86_64 and lib/pythonlib2.7
|
||||
copied into the mac app, the latter iff it's not duplicated elsewhere.
|
||||
"""
|
||||
|
||||
for f in list(self):
|
||||
|
||||
if f.name.startswith("lib/darwin-x86_64/lib/python2.7"):
|
||||
name = app + "/Contents/MacOS/lib/darwin-x86_64/Lib" + f.name[31:]
|
||||
|
||||
elif f.name.startswith("lib/pythonlib2.7") and (not duplicate):
|
||||
name = app + "/Contents/MacOS/lib/darwin-x86_64/Lib" + f.name[16:]
|
||||
|
||||
elif f.name.startswith("lib/darwin-x86_64"):
|
||||
name = app + "/Contents/MacOS/" + f.name
|
||||
|
||||
else:
|
||||
continue
|
||||
|
||||
new = f.copy()
|
||||
new.name = name
|
||||
self.append(new)
|
||||
|
||||
if not duplicate:
|
||||
self.remove(f)
|
||||
|
||||
self.sort()
|
||||
|
||||
|
||||
def hash(self, distributor):
|
||||
"""
|
||||
Returns a hex digest representing this file list.
|
||||
"""
|
||||
|
||||
sha = hashlib.sha256()
|
||||
|
||||
for f in sorted(self, key=lambda a : a.name):
|
||||
f.hash(sha, distributor)
|
||||
|
||||
return sha.hexdigest()
|
||||
|
||||
def split_by_prefix(self, prefix):
|
||||
"""
|
||||
Returns two filelists, one that contains all the files starting with prefix,
|
||||
and one tht contains all other files.
|
||||
"""
|
||||
|
||||
yes = FileList()
|
||||
no = FileList()
|
||||
|
||||
for f in self:
|
||||
if f.name.startswith(prefix):
|
||||
yes.append(f)
|
||||
else:
|
||||
no.append(f)
|
||||
|
||||
return yes, no
|
||||
|
||||
|
||||
class Distributor(object):
|
||||
"""
|
||||
@@ -300,6 +406,23 @@ init python in distribute:
|
||||
If true, we report that the build succeeded.
|
||||
"""
|
||||
|
||||
# A map from a package to a unique update version hash.
|
||||
self.update_versions = { }
|
||||
|
||||
# Map from destination file with extension to (that file's hash,
|
||||
# hash of the file list)
|
||||
self.build_cache = { }
|
||||
|
||||
# A map from file to its hash.
|
||||
self.hash_cache = { }
|
||||
|
||||
# A map from a list of file lists and formats to a single integrated
|
||||
# file list with transforms applied.
|
||||
self.file_list_cache = { }
|
||||
|
||||
# Status reporter.
|
||||
self.reporter = reporter
|
||||
|
||||
if packagedest is not None:
|
||||
if packages is None or len(packages) != 1:
|
||||
raise Exception("Packagedest requires a single package be given.")
|
||||
@@ -318,7 +441,9 @@ init python in distribute:
|
||||
# dictionaries.
|
||||
data = project.data
|
||||
|
||||
project.update_dump(force=True, gui=False)
|
||||
self.reporter.info(_("Scanning project files..."))
|
||||
project.update_dump(force=True, gui=False, compile=project.data['force_recompile'])
|
||||
|
||||
if project.dump.get("error", False):
|
||||
raise Exception("Could not get build data from the project. Please ensure the project runs.")
|
||||
|
||||
@@ -350,10 +475,9 @@ init python in distribute:
|
||||
except:
|
||||
pass
|
||||
|
||||
self.packagedest = packagedest
|
||||
self.load_build_cache()
|
||||
|
||||
# Status reporter.
|
||||
self.reporter = reporter
|
||||
self.packagedest = packagedest
|
||||
|
||||
self.include_update = build['include_update']
|
||||
self.build_update = self.include_update and build_update
|
||||
@@ -382,9 +506,6 @@ init python in distribute:
|
||||
self.log.close()
|
||||
return
|
||||
|
||||
# add the game.
|
||||
self.reporter.info(_("Scanning project files..."))
|
||||
|
||||
self.scan_and_classify(project.path, build["base_patterns"])
|
||||
|
||||
if noarchive:
|
||||
@@ -399,13 +520,15 @@ init python in distribute:
|
||||
# Add Python (with the same name as our executables)
|
||||
self.add_python()
|
||||
|
||||
# Build the mac app.
|
||||
# Build the mac app and windows exes.
|
||||
self.add_mac_files()
|
||||
self.add_windows_files()
|
||||
|
||||
# Add generated/special files.
|
||||
if not build['renpy']:
|
||||
self.add_renpy_files()
|
||||
self.add_windows_files()
|
||||
if build['renpy']:
|
||||
self.add_renpy_distro_files()
|
||||
else:
|
||||
self.add_renpy_game_files()
|
||||
|
||||
# Assign the x-bit as necessary.
|
||||
self.mark_executable()
|
||||
@@ -420,6 +543,7 @@ init python in distribute:
|
||||
for p in build_packages:
|
||||
|
||||
for f in p["formats"]:
|
||||
|
||||
self.make_package(
|
||||
p["name"],
|
||||
f,
|
||||
@@ -431,12 +555,14 @@ init python in distribute:
|
||||
p["name"],
|
||||
"update",
|
||||
p["file_lists"],
|
||||
dlc=False)
|
||||
|
||||
dlc=p["dlc"])
|
||||
|
||||
if self.build_update:
|
||||
self.finish_updates(build_packages)
|
||||
|
||||
if not packagedest:
|
||||
self.save_build_cache()
|
||||
|
||||
# Finish up.
|
||||
self.log.close()
|
||||
|
||||
@@ -446,8 +572,6 @@ init python in distribute:
|
||||
if open_directory:
|
||||
store.OpenDirectory(self.destination)()
|
||||
|
||||
|
||||
|
||||
def scan_and_classify(self, directory, patterns):
|
||||
"""
|
||||
Walks through the `directory`, finds files and directories that
|
||||
@@ -464,6 +588,11 @@ init python in distribute:
|
||||
"""
|
||||
|
||||
def walk(name, path):
|
||||
|
||||
# Ignore ASCII control characters, like (Icon\r on the mac).
|
||||
if re.search('[\x00-\x19]', name):
|
||||
return
|
||||
|
||||
is_dir = os.path.isdir(path)
|
||||
|
||||
if is_dir:
|
||||
@@ -500,6 +629,48 @@ init python in distribute:
|
||||
for fn in os.listdir(directory):
|
||||
walk(fn, os.path.join(directory, fn))
|
||||
|
||||
def rescan(self, oldlist, directory):
|
||||
"""
|
||||
Scans `directory`, and produces a filelist from it. Returns the
|
||||
produced filelist.
|
||||
|
||||
`oldlist`
|
||||
Is a filelist. If a file has the xbit set in the oldlist, it
|
||||
has the xbit set in the new list.
|
||||
"""
|
||||
|
||||
executable = set()
|
||||
|
||||
for f in oldlist:
|
||||
if f.executable:
|
||||
executable.add(f.name)
|
||||
|
||||
rv = FileList()
|
||||
|
||||
def walk(name, path):
|
||||
|
||||
# Ignore ASCII control characters, like (Icon\r on the mac).
|
||||
if re.search('[\x00-\x19]', name):
|
||||
return
|
||||
|
||||
is_dir = os.path.isdir(path)
|
||||
|
||||
f = File(name, path, is_dir, name in executable)
|
||||
rv.append(f)
|
||||
|
||||
if is_dir:
|
||||
|
||||
for fn in os.listdir(path):
|
||||
walk(
|
||||
name + "/" + fn,
|
||||
os.path.join(path, fn),
|
||||
)
|
||||
|
||||
for fn in os.listdir(directory):
|
||||
walk(fn, os.path.join(directory, fn))
|
||||
|
||||
return rv
|
||||
|
||||
def temp_filename(self, name):
|
||||
self.project.make_tmp()
|
||||
return os.path.join(self.project.tmp, name)
|
||||
@@ -529,6 +700,20 @@ init python in distribute:
|
||||
for fl in file_list:
|
||||
self.file_lists[fl].append(f)
|
||||
|
||||
def add_directory(self, file_list, name):
|
||||
"""
|
||||
Adds an empty directory to the file lists.
|
||||
"""
|
||||
|
||||
if isinstance(file_list, basestring):
|
||||
file_list = file_list.split()
|
||||
|
||||
f = File(name, None, True, False)
|
||||
|
||||
for fl in file_list:
|
||||
self.file_lists[fl].append(f)
|
||||
|
||||
|
||||
def ignore_archives(self, archives):
|
||||
"""
|
||||
Ignore archiving commands by adding the files that would be in
|
||||
@@ -576,26 +761,58 @@ init python in distribute:
|
||||
|
||||
self.add_file(file_list, "game/" + arcfn, arcpath)
|
||||
|
||||
def add_renpy_files(self):
|
||||
def add_renpy_game_files(self):
|
||||
"""
|
||||
Add Ren'Py-generic files to the project.
|
||||
Add Ren'Py file to the game.
|
||||
"""
|
||||
|
||||
SCRIPT_VERSION_RPY = os.path.join(config.gamedir, "script_version.rpy")
|
||||
SCRIPT_VERSION_RPYC = os.path.join(config.gamedir, "script_version.rpyc")
|
||||
LICENSE_TXT = os.path.join(config.renpy_base, "LICENSE.txt")
|
||||
|
||||
if os.path.exists(SCRIPT_VERSION_RPY):
|
||||
if not os.path.exists(os.path.join(self.project.path, "game", "script_version.rpy")):
|
||||
self.add_file("all", "game/script_version.rpy", SCRIPT_VERSION_RPY)
|
||||
|
||||
if os.path.exists(SCRIPT_VERSION_RPYC):
|
||||
if not os.path.exists(os.path.join(self.project.path, "game", "script_version.rpyc")):
|
||||
self.add_file("all", "game/script_version.rpyc", SCRIPT_VERSION_RPYC)
|
||||
|
||||
if os.path.exists(LICENSE_TXT):
|
||||
self.add_file("renpy", "renpy/LICENSE.txt", LICENSE_TXT)
|
||||
|
||||
if (not os.path.exists(os.path.join(self.project.path, "game", "script_version.rpy"))) and \
|
||||
(not os.path.exists(os.path.join(self.project.path, "game", "script_version.rpyc"))):
|
||||
|
||||
script_version_txt = self.temp_filename("script_version.txt")
|
||||
|
||||
with open(script_version_txt, "w") as f:
|
||||
f.write(repr(renpy.renpy.version_tuple[:-1]))
|
||||
|
||||
self.add_file("all", "game/script_version.txt", script_version_txt)
|
||||
|
||||
def add_file_list_hash(self, list_name):
|
||||
"""
|
||||
Hashes a file list, then adds that file to the Ren'Py distribution.
|
||||
"""
|
||||
|
||||
tfn = self.temp_filename(list_name + "_hash.txt")
|
||||
|
||||
with open(tfn, "w") as tf:
|
||||
tf.write(self.file_lists[list_name].hash(self))
|
||||
|
||||
self.add_file("binary", "launcher/game/" + list_name + "_hash.txt", tfn)
|
||||
self.add_file(list_name, list_name + "/hash.txt", tfn)
|
||||
|
||||
def add_renpy_distro_files(self):
|
||||
"""
|
||||
Add additional files to Ren'Py.
|
||||
"""
|
||||
|
||||
self.add_file_list_hash("rapt")
|
||||
self.add_file_list_hash("renios")
|
||||
|
||||
tmp_fn = self.temp_filename("renpy.py")
|
||||
|
||||
with open(os.path.join(config.renpy_base, "renpy.py"), "rb") as f:
|
||||
data = f.read()
|
||||
|
||||
with open(tmp_fn, "wb") as f:
|
||||
f.write("#!/usr/bin/env python2\n")
|
||||
f.write(data)
|
||||
|
||||
self.add_file("source_only", "renpy.py", tmp_fn, True)
|
||||
|
||||
|
||||
def write_plist(self):
|
||||
|
||||
@@ -630,6 +847,9 @@ init python in distribute:
|
||||
],
|
||||
)
|
||||
|
||||
if self.build.get('allow_integrated_gpu', False):
|
||||
plist["NSSupportsAutomaticGraphicsSwitching"] = True
|
||||
|
||||
rv = self.temp_filename("Info.plist")
|
||||
plistlib.writePlist(plist, rv)
|
||||
return rv
|
||||
@@ -663,10 +883,10 @@ init python in distribute:
|
||||
os.path.join(config.renpy_base, "lib/darwin-x86_64/pythonw"),
|
||||
True)
|
||||
|
||||
self.add_file(
|
||||
windows,
|
||||
"lib/windows-i686/" + self.executable_name + ".exe",
|
||||
os.path.join(config.renpy_base, "lib/windows-i686/pythonw.exe"))
|
||||
# self.add_file(
|
||||
# windows,
|
||||
# "lib/windows-i686/" + self.executable_name + ".exe",
|
||||
# os.path.join(config.renpy_base, "lib/windows-i686/renpy.exe"))
|
||||
|
||||
def add_mac_files(self):
|
||||
"""
|
||||
@@ -680,6 +900,10 @@ init python in distribute:
|
||||
|
||||
contents = self.app + "/Contents"
|
||||
|
||||
self.add_directory(filelist, self.app)
|
||||
self.add_directory(filelist, contents)
|
||||
self.add_directory(filelist, contents + "/MacOS")
|
||||
|
||||
plist_fn = self.write_plist()
|
||||
self.add_file(filelist, contents + "/Info.plist", plist_fn)
|
||||
self.add_file(filelist, contents + "/MacOS/" + self.executable_name, os.path.join(config.renpy_base, "renpy.sh"))
|
||||
@@ -692,27 +916,54 @@ init python in distribute:
|
||||
else:
|
||||
icon_fn = default_fn
|
||||
|
||||
self.add_file(filelist, contents + "/Resources/icon.icns", icon_fn)
|
||||
resources = contents + "/Resources"
|
||||
|
||||
self.add_directory(filelist, resources)
|
||||
self.add_file(filelist, resources + "/icon.icns", icon_fn)
|
||||
|
||||
self.add_directory(filelist, contents + "/MacOS/lib")
|
||||
self.add_directory(filelist, contents + "/MacOS/lib/darwin-x86_64")
|
||||
self.add_directory(filelist, contents + "/MacOS/lib/darwin-x86_64/Lib")
|
||||
self.add_directory(filelist, contents + "/MacOS/lib/darwin-x86_64/Modules")
|
||||
|
||||
sfn = self.temp_filename("Setup")
|
||||
with open(sfn, "wb") as f:
|
||||
pass
|
||||
|
||||
self.add_file(filelist, contents + "/MacOS/lib/darwin-x86_64/Modules/Setup", sfn)
|
||||
|
||||
self.file_lists[filelist].mac_lib_transform(self.app, self.build['renpy'])
|
||||
|
||||
def add_windows_files(self):
|
||||
"""
|
||||
Adds windows-specific files.
|
||||
"""
|
||||
|
||||
if self.build['renpy']:
|
||||
windows = 'binary'
|
||||
else:
|
||||
windows = 'windows'
|
||||
|
||||
icon_fn = os.path.join(self.project.path, "icon.ico")
|
||||
old_exe_fn = os.path.join(config.renpy_base, "renpy.exe")
|
||||
old_main_fn = os.path.join(config.renpy_base, "lib/windows-i686/renpy.exe")
|
||||
|
||||
if os.path.exists(icon_fn):
|
||||
exe_fn = self.temp_filename("renpy.exe")
|
||||
main_fn = self.temp_filename("main.exe")
|
||||
|
||||
with open(exe_fn, "wb") as f:
|
||||
f.write(change_icons(old_exe_fn, icon_fn))
|
||||
|
||||
with open(main_fn, "wb") as f:
|
||||
f.write(change_icons(old_main_fn, icon_fn))
|
||||
|
||||
else:
|
||||
exe_fn = old_exe_fn
|
||||
main_fn = old_main_fn
|
||||
|
||||
self.add_file("windows", "renpy.exe", exe_fn)
|
||||
self.add_file(windows, self.exe, exe_fn)
|
||||
self.add_file(windows, "lib/windows-i686/" + self.exe, main_fn)
|
||||
|
||||
def mark_executable(self):
|
||||
"""
|
||||
@@ -737,9 +988,7 @@ init python in distribute:
|
||||
parts = fn.split('/')
|
||||
p = parts[0]
|
||||
|
||||
if p == "renpy.exe":
|
||||
p = self.exe
|
||||
elif p == "renpy.sh":
|
||||
if p == "renpy.sh":
|
||||
p = self.sh
|
||||
elif p == "renpy.py":
|
||||
p = self.py
|
||||
@@ -751,6 +1000,137 @@ init python in distribute:
|
||||
for f in l:
|
||||
f.name = rename_one(f.name)
|
||||
|
||||
def run(self, message, command, **kwargs):
|
||||
"""
|
||||
Runs a command.
|
||||
"""
|
||||
|
||||
self.reporter.info(message)
|
||||
|
||||
cmd = [ renpy.fsencode(i.format(**kwargs)) for i in command ]
|
||||
|
||||
# print "\"" + "\" \"".join(cmd) + "\""
|
||||
|
||||
try:
|
||||
import sys, os
|
||||
isatty = os.isatty(sys.stdin.fileno())
|
||||
except:
|
||||
isatty = False
|
||||
|
||||
if isatty:
|
||||
subprocess.check_call(cmd)
|
||||
else:
|
||||
subprocess.check_call(cmd, stdout=self.log, stderr=subprocess.STDOUT)
|
||||
|
||||
|
||||
def sign_app(self, fl, appzip):
|
||||
"""
|
||||
Signs the mac app contained in appzip.
|
||||
"""
|
||||
|
||||
identity = self.build.get('mac_identity', None)
|
||||
|
||||
if identity is None:
|
||||
return fl
|
||||
|
||||
# Figure out where it goes.
|
||||
if appzip:
|
||||
dn = "sign.app-standalone"
|
||||
else:
|
||||
dn = "sign.app-crossplatform"
|
||||
|
||||
dn = self.temp_filename(dn)
|
||||
|
||||
if os.path.exists(dn):
|
||||
shutil.rmtree(dn)
|
||||
|
||||
# Unpack the app.
|
||||
pkg = DirectoryPackage(dn)
|
||||
|
||||
for i, f in enumerate(fl):
|
||||
self.reporter.progress(_("Unpacking the Macintosh application for signing..."), i, len(fl))
|
||||
|
||||
if f.directory:
|
||||
pkg.add_directory(f.name, f.path)
|
||||
else:
|
||||
pkg.add_file(f.name, f.path, f.executable)
|
||||
|
||||
pkg.close()
|
||||
|
||||
# Sign the mac app.
|
||||
self.run(
|
||||
_("Signing the Macintosh application...\n(This may take a long time.)"),
|
||||
self.build["mac_codesign_command"],
|
||||
identity=identity,
|
||||
app=os.path.join(dn, self.app),
|
||||
)
|
||||
|
||||
# Rescan the signed app.
|
||||
fl = self.rescan(fl, dn)
|
||||
|
||||
return fl
|
||||
|
||||
def make_dmg(self, volname, sourcedir, dmg):
|
||||
"""
|
||||
Packages `sourcedir` as a dmg.
|
||||
"""
|
||||
|
||||
identity = self.build.get('mac_identity', None)
|
||||
|
||||
if identity is None:
|
||||
raise Exception("Creating an unsigned DMG is not supported. Please set build.mac_identity.")
|
||||
|
||||
self.run(
|
||||
_("Creating the Macintosh DMG..."),
|
||||
self.build["mac_create_dmg_command"],
|
||||
identity=identity,
|
||||
volname=volname,
|
||||
sourcedir=sourcedir,
|
||||
dmg=dmg,
|
||||
)
|
||||
|
||||
self.run(
|
||||
_("Signing the Macintosh DMG..."),
|
||||
self.build["mac_codesign_dmg_command"],
|
||||
identity=identity,
|
||||
volname=volname,
|
||||
sourcedir=sourcedir,
|
||||
dmg=dmg,
|
||||
)
|
||||
|
||||
def prepare_file_list(self, format, file_lists):
|
||||
"""
|
||||
Prepares a master list of files, given the format and file lists.
|
||||
This also takes care of the mac transforms, and signing the app
|
||||
if necessary.
|
||||
"""
|
||||
|
||||
macapp = (format in { "app-zip", "app-directory", "app-dmg" })
|
||||
key = (macapp, tuple(file_lists))
|
||||
|
||||
if key in self.file_list_cache:
|
||||
return self.file_list_cache[key].copy()
|
||||
|
||||
fl = FileList.merge([ self.file_lists[i] for i in file_lists ])
|
||||
fl = fl.copy()
|
||||
fl.sort()
|
||||
|
||||
if self.build.get("exclude_empty_directories", True):
|
||||
fl = fl.filter_empty()
|
||||
|
||||
if macapp:
|
||||
fl = fl.mac_transform(self.app, self.documentation_patterns)
|
||||
|
||||
app, rest = fl.split_by_prefix(self.app)
|
||||
|
||||
if app:
|
||||
app = self.sign_app(app, macapp)
|
||||
|
||||
fl = FileList.merge([ app, rest ])
|
||||
|
||||
self.file_list_cache[key] = fl
|
||||
return fl.copy()
|
||||
|
||||
def make_package(self, variant, format, file_lists, dlc=False):
|
||||
"""
|
||||
Creates a package file in the projects directory.
|
||||
@@ -760,9 +1140,7 @@ init python in distribute:
|
||||
part of the file and directory names.
|
||||
|
||||
`format`
|
||||
The format things will be packaged in. This should be one of "zip", "tar.bz2", or
|
||||
"update".
|
||||
|
||||
The format things will be packaged in. See the table of formats below.
|
||||
`file_lists`
|
||||
A string containing a space-separated list of file_lists to include in this
|
||||
package.
|
||||
@@ -773,15 +1151,42 @@ init python in distribute:
|
||||
filename = self.base_name + "-" + variant
|
||||
path = os.path.join(self.destination, filename)
|
||||
|
||||
|
||||
# A map from the name of the format, to the options that will be
|
||||
# used with it. The fields are:
|
||||
#
|
||||
# - The extension used.
|
||||
# - Is this a directory based format?
|
||||
# - Should the directory be turned into a dmg?
|
||||
# - Should a directory name be prepended?
|
||||
|
||||
FORMATS = {
|
||||
"update" : (".update", False, False, False),
|
||||
|
||||
"tar.bz2" : (".tar.bz2", False, False, True),
|
||||
"zip" : (".zip", False, False, True),
|
||||
"directory" : ("", True, False, False),
|
||||
"dmg" : ("-dmg", True, True, True),
|
||||
|
||||
"app-zip" : (".zip", False, False, False),
|
||||
"app-directory" : ("-app", True, False, False),
|
||||
"app-dmg" : ("-app-dmg", True, True, False),
|
||||
}
|
||||
|
||||
if format not in FORMATS:
|
||||
raise Exception("Format %r is unknown." % format)
|
||||
|
||||
ext, directory, dmg, prepend = FORMATS[format]
|
||||
|
||||
mac_identity = self.build.get('mac_identity', None)
|
||||
|
||||
if dmg and (mac_identity is None):
|
||||
return
|
||||
|
||||
if self.packagedest:
|
||||
path = self.packagedest
|
||||
|
||||
fl = FileList.merge([ self.file_lists[i] for i in file_lists ])
|
||||
fl = fl.copy()
|
||||
fl.sort()
|
||||
|
||||
if self.build.get("exclude_empty_directories", True):
|
||||
fl = fl.filter_empty()
|
||||
fl = self.prepare_file_list(format, file_lists)
|
||||
|
||||
# Write the update information.
|
||||
update_files = [ ]
|
||||
@@ -797,80 +1202,103 @@ init python in distribute:
|
||||
if i.executable:
|
||||
update_xbit.append(i.name)
|
||||
|
||||
update = { variant : { "version" : self.update_version, "pretty_version" : self.pretty_version, "files" : update_files, "directories" : update_directories, "xbit" : update_xbit } }
|
||||
self.update_versions[variant] = fl.hash(self)
|
||||
|
||||
if self.include_update and not dlc:
|
||||
update_fn = os.path.join(self.destination, filename + ".update.json")
|
||||
update = { variant : { "version" : self.update_versions[variant], "files" : update_files, "directories" : update_directories, "xbit" : update_xbit } }
|
||||
|
||||
update_fn = os.path.join(self.destination, filename + ".update.json")
|
||||
|
||||
if self.include_update and (variant not in [ 'ios', 'android', 'source']) and (not format.startswith("app-")):
|
||||
|
||||
with open(update_fn, "wb") as f:
|
||||
json.dump(update, f)
|
||||
json.dump(update, f, indent=2)
|
||||
|
||||
fl.append(File("update", None, True, False))
|
||||
fl.append(File("update/current.json", update_fn, False, False))
|
||||
|
||||
# The mac transform.
|
||||
if format == "app-zip":
|
||||
fl = fl.mac_transform(self.app, self.documentation_patterns)
|
||||
if (not dlc) or (format == "update"):
|
||||
fl.append(File("update", None, True, False))
|
||||
fl.append(File("update/current.json", update_fn, False, False))
|
||||
|
||||
# If we're not an update file, prepend the directory.
|
||||
if (not dlc) and format != "update" and format != "directory":
|
||||
if (not dlc) and prepend:
|
||||
fl.prepend_directory(filename)
|
||||
|
||||
if format == "tar.bz2":
|
||||
path += ".tar.bz2"
|
||||
pkg = TarPackage(path, "w:bz2")
|
||||
elif format == "update":
|
||||
path += ".update"
|
||||
pkg = TarPackage(path, "w", notime=True)
|
||||
elif format == "zip" or format == "app-zip":
|
||||
path += ".zip"
|
||||
pkg = ZipPackage(path)
|
||||
elif format == "directory":
|
||||
pkg = DirectoryPackage(path)
|
||||
# The path to the DMG, if we're going to make one.
|
||||
dmg_path = path + ".dmg"
|
||||
|
||||
for i, f in enumerate(fl):
|
||||
self.reporter.progress(_("Writing the [variant] [format] package."), i, len(fl), variant=variant, format=format)
|
||||
full_filename = filename + ext
|
||||
path += ext
|
||||
|
||||
if f.directory:
|
||||
pkg.add_directory(f.name, f.path)
|
||||
if self.build['renpy']:
|
||||
fl_hash = fl.hash(self)
|
||||
else:
|
||||
fl_hash = '<not building renpy>'
|
||||
|
||||
file_hash, old_fl_hash = self.build_cache.get(full_filename, ("", ""))
|
||||
|
||||
if directory or old_fl_hash != fl_hash:
|
||||
|
||||
if format == "tar.bz2":
|
||||
pkg = TarPackage(path, "w:bz2")
|
||||
elif format == "update":
|
||||
pkg = TarPackage(path, "w", notime=True)
|
||||
elif format == "zip" or format == "app-zip":
|
||||
pkg = ZipPackage(path)
|
||||
elif directory:
|
||||
pkg = DirectoryPackage(path)
|
||||
|
||||
for i, f in enumerate(fl):
|
||||
self.reporter.progress(_("Writing the [variant] [format] package."), i, len(fl), variant=variant, format=format)
|
||||
|
||||
if f.directory:
|
||||
pkg.add_directory(f.name, f.path)
|
||||
else:
|
||||
pkg.add_file(f.name, f.path, f.executable)
|
||||
|
||||
self.reporter.progress_done()
|
||||
pkg.close()
|
||||
|
||||
if format == "update":
|
||||
# Build the zsync file.
|
||||
|
||||
self.reporter.info(_("Making the [variant] update zsync file."), variant=variant)
|
||||
|
||||
cmd = [
|
||||
updater.zsync_path("zsyncmake"),
|
||||
"-z",
|
||||
# -u url to gzipped data - not a local filename!
|
||||
"-u", filename + ".update.gz",
|
||||
"-o", os.path.join(self.destination, filename + ".zsync"),
|
||||
os.path.abspath(path),
|
||||
]
|
||||
|
||||
subprocess.check_call([ renpy.fsencode(i) for i in cmd ])
|
||||
|
||||
# Build the sums file. This is a file with an adler32 hash of each 64k block
|
||||
# of the zsync file. It's used to help us determine how much of the file is
|
||||
# downloaded.
|
||||
with open(path, "rb") as src:
|
||||
with open(renpy.fsencode(os.path.join(self.destination, filename + ".sums")), "wb") as sums:
|
||||
while True:
|
||||
data = src.read(65536)
|
||||
|
||||
if not data:
|
||||
break
|
||||
|
||||
sums.write(struct.pack("<I", zlib.adler32(data) & 0xffffffff))
|
||||
|
||||
if self.include_update and not self.build_update and not dlc:
|
||||
os.unlink(update_fn)
|
||||
|
||||
if not directory:
|
||||
file_hash = hash_file(path)
|
||||
else:
|
||||
pkg.add_file(f.name, f.path, f.executable)
|
||||
file_hash = ""
|
||||
|
||||
self.reporter.progress_done()
|
||||
pkg.close()
|
||||
|
||||
if format == "update":
|
||||
# Build the zsync file.
|
||||
|
||||
self.reporter.info(_("Making the [variant] update zsync file."), variant=variant)
|
||||
|
||||
cmd = [
|
||||
updater.zsync_path("zsyncmake"),
|
||||
"-z",
|
||||
# -u url to gzipped data - not a local filename!
|
||||
"-u", filename + ".update.gz",
|
||||
"-o", os.path.join(self.destination, filename + ".zsync"),
|
||||
os.path.abspath(path),
|
||||
]
|
||||
|
||||
subprocess.check_call([ renpy.fsencode(i) for i in cmd ])
|
||||
|
||||
# Build the sums file. This is a file with an adler32 hash of each 64k block
|
||||
# of the zsync file. It's used to help us determine how much of the file is
|
||||
# downloaded.
|
||||
with open(path, "rb") as src:
|
||||
with open(renpy.fsencode(os.path.join(self.destination, filename + ".sums")), "wb") as sums:
|
||||
while True:
|
||||
data = src.read(65536)
|
||||
|
||||
if not data:
|
||||
break
|
||||
|
||||
sums.write(struct.pack("I", zlib.adler32(data) & 0xffffffff))
|
||||
|
||||
if self.include_update and not self.build_update and not dlc:
|
||||
os.unlink(update_fn)
|
||||
if dmg:
|
||||
self.make_dmg(filename, path, dmg_path)
|
||||
shutil.rmtree(path)
|
||||
|
||||
if file_hash:
|
||||
self.build_cache[full_filename] = (file_hash, fl_hash)
|
||||
|
||||
def finish_updates(self, packages):
|
||||
"""
|
||||
@@ -883,21 +1311,25 @@ init python in distribute:
|
||||
index = { }
|
||||
|
||||
def add_variant(variant):
|
||||
fn = renpy.fsencode(os.path.join(self.destination, self.base_name + "-" + variant + ".update"))
|
||||
|
||||
with open(fn, "rb") as f:
|
||||
digest = hashlib.sha256(f.read()).hexdigest()
|
||||
digest = self.build_cache[self.base_name + "-" + variant + ".update"][0]
|
||||
|
||||
sums_size = os.path.getsize(self.destination + "/" + self.base_name + "-" + variant + ".sums")
|
||||
|
||||
index[variant] = {
|
||||
"version" : self.update_version,
|
||||
"version" : self.update_versions[variant],
|
||||
"pretty_version" : self.pretty_version,
|
||||
"digest" : digest,
|
||||
"zsync_url" : self.base_name + "-" + variant + ".zsync",
|
||||
"sums_url" : self.base_name + "-" + variant + ".sums",
|
||||
"sums_size" : sums_size,
|
||||
"json_url" : self.base_name + "-" + variant + ".update.json",
|
||||
}
|
||||
|
||||
os.unlink(fn)
|
||||
fn = renpy.fsencode(os.path.join(self.destination, self.base_name + "-" + variant + ".update"))
|
||||
|
||||
if os.path.exists(fn):
|
||||
os.unlink(fn)
|
||||
|
||||
for p in packages:
|
||||
if p["update"]:
|
||||
@@ -905,9 +1337,41 @@ init python in distribute:
|
||||
|
||||
fn = renpy.fsencode(os.path.join(self.destination, "updates.json"))
|
||||
with open(fn, "wb") as f:
|
||||
json.dump(index, f)
|
||||
json.dump(index, f, indent=2)
|
||||
|
||||
|
||||
def save_build_cache(self):
|
||||
if not self.build['renpy']:
|
||||
return
|
||||
|
||||
fn = renpy.fsencode(os.path.join(self.destination, ".build_cache"))
|
||||
|
||||
with open(fn, "wb") as f:
|
||||
for k, v in self.build_cache.items():
|
||||
l = "\t".join([k, v[0], v[1]]) + "\n"
|
||||
f.write(l.encode("utf-8"))
|
||||
|
||||
def load_build_cache(self):
|
||||
if not self.build['renpy']:
|
||||
return
|
||||
|
||||
fn = renpy.fsencode(os.path.join(self.destination, ".build_cache"))
|
||||
|
||||
if not os.path.exists(fn):
|
||||
return
|
||||
|
||||
with open(fn, "rb") as f:
|
||||
for l in f:
|
||||
if not l:
|
||||
continue
|
||||
|
||||
l = l.decode("utf-8").rstrip()
|
||||
l = l.split("\t")
|
||||
|
||||
self.build_cache[l[0]] = (l[1], l[2])
|
||||
|
||||
os.unlink(fn)
|
||||
|
||||
def dump(self):
|
||||
for k, v in sorted(self.file_lists.items()):
|
||||
print
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -191,8 +191,12 @@ screen build_distributions:
|
||||
has vbox
|
||||
|
||||
textbutton _("Edit options.rpy") action editor.Edit("game/options.rpy", check=True)
|
||||
textbutton _("Add from clauses to calls, once") action Jump("add_from")
|
||||
textbutton _("Refresh") action Jump("build_distributions")
|
||||
|
||||
add HALF_SPACER
|
||||
|
||||
textbutton _("Upload to itch.io") action Jump("itch")
|
||||
|
||||
# Right side.
|
||||
frame:
|
||||
@@ -219,14 +223,45 @@ screen build_distributions:
|
||||
$ description = pkg["description"]
|
||||
textbutton "[description!q]" action PackageToggle(pkg["name"]) style "l_checkbox"
|
||||
|
||||
add SPACER
|
||||
add SPACER
|
||||
add HALF_SPACER
|
||||
add SEPARATOR2
|
||||
|
||||
frame:
|
||||
style "l_indent"
|
||||
has vbox
|
||||
|
||||
text _("Options:")
|
||||
|
||||
add HALF_SPACER
|
||||
|
||||
if project.current.dump["build"]["include_update"]:
|
||||
textbutton _("Build Updates") action DataToggle("build_update") style "l_checkbox"
|
||||
|
||||
textbutton _("Add from clauses to calls") action DataToggle("add_from") style "l_checkbox"
|
||||
textbutton _("Force Recompile") action DataToggle("force_recompile") style "l_checkbox"
|
||||
|
||||
textbutton _("Back") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Build") action Jump("distribute") style "l_right_button"
|
||||
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Build") action Jump("start_distribute") style "l_right_button"
|
||||
|
||||
label add_from_common:
|
||||
python:
|
||||
interface.processing(_("Adding from clauses to call statements that do not have them."))
|
||||
project.current.launch([ "add_from" ], wait=True)
|
||||
|
||||
return
|
||||
|
||||
label add_from:
|
||||
call add_from_common
|
||||
jump build_distributions
|
||||
|
||||
|
||||
label start_distribute:
|
||||
if project.current.data["add_from"]:
|
||||
call add_from_common
|
||||
|
||||
jump distribute
|
||||
|
||||
label build_update_dump:
|
||||
python:
|
||||
@@ -252,7 +287,12 @@ label build_missing:
|
||||
|
||||
interface.yesno(_("Your project does not contain build information. Would you like to add build information to the end of options.rpy?"), yes=Return(True), no=Jump("front_page"))
|
||||
|
||||
build_info = DEFAULT_BUILD_INFO.replace("PROJECTNAME", project.current.name)
|
||||
project_name = project.current.name
|
||||
project_name = project_name.replace(" ", "_")
|
||||
project_name = project_name.replace(":", "")
|
||||
project_name = project_name.replace(";", "")
|
||||
|
||||
build_info = DEFAULT_BUILD_INFO.replace("PROJECTNAME", project_name)
|
||||
|
||||
with open(os.path.join(project.current.path, "game", "options.rpy"), "a") as f:
|
||||
f.write(build_info)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -238,13 +238,13 @@ init 1 python in editor:
|
||||
if i.name == persistent.editor:
|
||||
if i.installed and i.name in editors:
|
||||
ei = editors[i.name]
|
||||
os.environ["RENPY_EDIT_PY"] = renpy.fsencode(os.path.abspath(ei.filename))
|
||||
os.environ[b"RENPY_EDIT_PY"] = renpy.fsencode(os.path.abspath(ei.filename))
|
||||
error_message = i.error_message
|
||||
break
|
||||
|
||||
else:
|
||||
persistent.editor = None
|
||||
os.environ.pop("RENPY_EDIT_PY", None)
|
||||
os.environ.pop(b"RENPY_EDIT_PY", None)
|
||||
|
||||
renpy.editor.init()
|
||||
|
||||
@@ -297,7 +297,7 @@ init 1 python in editor:
|
||||
if not set_editor:
|
||||
return True
|
||||
|
||||
if persistent.editor:
|
||||
if persistent.editor and persistent.editor != "None":
|
||||
return True
|
||||
|
||||
return renpy.invoke_in_new_context(renpy.call_screen, "editor")
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -88,7 +88,7 @@ screen front_page:
|
||||
has hbox:
|
||||
xfill True
|
||||
|
||||
text "PROJECTS:" style "l_label_text" size 36 yoffset 10
|
||||
text _("PROJECTS:") style "l_label_text" size 36 yoffset 10
|
||||
|
||||
textbutton _("refresh"):
|
||||
xalign 1.0
|
||||
@@ -121,8 +121,6 @@ screen front_page:
|
||||
left_margin (HALF_INDENT)
|
||||
action Jump("new_project")
|
||||
|
||||
|
||||
|
||||
# Project section - on right.
|
||||
|
||||
if project.current is not None:
|
||||
@@ -130,6 +128,7 @@ screen front_page:
|
||||
|
||||
if project.current is not None:
|
||||
textbutton _("Launch Project") action project.Launch() style "l_right_button"
|
||||
key "K_F5" action project.Launch()
|
||||
|
||||
|
||||
|
||||
@@ -195,20 +194,24 @@ screen front_page_project:
|
||||
|
||||
textbutton _("game") action OpenDirectory("game")
|
||||
textbutton _("base") action OpenDirectory(".")
|
||||
# textbutton _("images") action OpenDirectory("game/images") style "l_list"
|
||||
textbutton _("images") action OpenDirectory("game/images")
|
||||
textbutton _("gui") action OpenDirectory("game/gui")
|
||||
# textbutton _("save") action None style "l_list"
|
||||
|
||||
vbox:
|
||||
if persistent.show_edit_funcs:
|
||||
|
||||
label _("Edit File") style "l_label_small"
|
||||
label _("Edit File") style "l_label_small"
|
||||
|
||||
frame style "l_indent":
|
||||
has vbox
|
||||
frame style "l_indent":
|
||||
has vbox
|
||||
|
||||
textbutton "script.rpy" action editor.Edit("game/script.rpy", check=True)
|
||||
textbutton "options.rpy" action editor.Edit("game/options.rpy", check=True)
|
||||
textbutton "screens.rpy" action editor.Edit("game/screens.rpy", check=True)
|
||||
textbutton _("All script files") action editor.EditAll()
|
||||
textbutton "script.rpy" action editor.Edit("game/script.rpy", check=True)
|
||||
textbutton "options.rpy" action editor.Edit("game/options.rpy", check=True)
|
||||
textbutton "gui.rpy" action editor.Edit("game/gui.rpy", check=True)
|
||||
textbutton "screens.rpy" action editor.Edit("game/screens.rpy", check=True)
|
||||
|
||||
textbutton _("All script files") action editor.EditAll()
|
||||
|
||||
add SPACER
|
||||
add SEPARATOR
|
||||
@@ -229,7 +232,13 @@ screen front_page_project:
|
||||
has vbox
|
||||
|
||||
textbutton _("Check Script (Lint)") action Jump("lint")
|
||||
textbutton _("Change Theme") action Jump("choose_theme")
|
||||
|
||||
if project.current.exists("game/gui.rpy"):
|
||||
textbutton _("Change/Update GUI") action Jump("change_gui")
|
||||
else:
|
||||
textbutton _("Change Theme") action Jump("choose_theme")
|
||||
|
||||
|
||||
textbutton _("Delete Persistent") action Jump("rmpersistent")
|
||||
textbutton _("Force Recompile") action Jump("force_recompile")
|
||||
|
||||
@@ -242,6 +251,7 @@ screen front_page_project:
|
||||
textbutton _("Build Distributions") action Jump("build_distributions")
|
||||
|
||||
textbutton _("Android") action Jump("android")
|
||||
textbutton _("iOS") action Jump("ios")
|
||||
textbutton _("Generate Translations") action Jump("translate")
|
||||
textbutton _("Extract Dialogue") action Jump("extract_dialogue")
|
||||
|
||||
|
||||
@@ -0,0 +1,430 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
define gui.project_system_font = None
|
||||
define gui.asian = False
|
||||
|
||||
init -1 python:
|
||||
|
||||
import gui7
|
||||
from gui7 import translate_define, translate_copy, translate_code
|
||||
|
||||
import os
|
||||
|
||||
from store import config
|
||||
|
||||
def translate_font(language, font, path=None):
|
||||
"""
|
||||
Selects the font file that is used when translating `language`.
|
||||
|
||||
`font`
|
||||
Is the name of the font file used for both the launcher and
|
||||
the new GUI template. This should be a string giving the name
|
||||
of the font file.
|
||||
|
||||
`path`
|
||||
The path to the font file, relative to the launcher's game
|
||||
directory. If not given, defaults to fonts.
|
||||
"""
|
||||
|
||||
if path is None:
|
||||
path = "fonts"
|
||||
|
||||
fullfont = path + "/" + font
|
||||
|
||||
def callback():
|
||||
gui.REGULAR_FONT = fullfont
|
||||
gui.LIGHT_FONT = fullfont
|
||||
gui.REGULAR_BOLD = True
|
||||
|
||||
style._default.font = fullfont
|
||||
style.default.font = fullfont
|
||||
|
||||
gui.system_font = fullfont
|
||||
gui.project_system_font = font
|
||||
|
||||
config.language_callbacks[language].append(callback)
|
||||
|
||||
gui7.translate_copy(language, fullfont, font)
|
||||
gui7.translate_define(language, "gui.default_font", repr(font))
|
||||
gui7.translate_define(language, "gui.name_font", repr(font))
|
||||
gui7.translate_define(language, "gui.interface_font", repr(font))
|
||||
|
||||
|
||||
for fn in [ "gui.rpy", "options.rpy", "screens.rpy" ]:
|
||||
fn = os.path.join(config.renpy_base, "gui", "game", fn)
|
||||
if os.path.exists(fn):
|
||||
config.translate_files.append(fn)
|
||||
|
||||
config.translate_comments = config.translate_files
|
||||
|
||||
|
||||
DARK_COLORS = [
|
||||
"#0099cc",
|
||||
"#99ccff",
|
||||
"#66cc00",
|
||||
"#cccc00",
|
||||
"#cc6600",
|
||||
# "#cc3300",
|
||||
|
||||
"#0066cc",
|
||||
"#9933ff",
|
||||
"#00cc99",
|
||||
"#cc0066",
|
||||
"#cc0000",
|
||||
]
|
||||
|
||||
LIGHT_COLORS = [
|
||||
"#003366", # Dark Blue
|
||||
"#0099ff", # Light Blue
|
||||
"#336600", # Green
|
||||
"#000000", # Black
|
||||
"#cc6600", # Orange
|
||||
|
||||
"#000066", # Darkest Blue
|
||||
"#660066", # Purple
|
||||
"#006666", # Dark Green
|
||||
"#cc0066", # Pinkish
|
||||
"#990000", # Red
|
||||
]
|
||||
|
||||
|
||||
# LIGHT_COLORS = DARK_COLORS
|
||||
|
||||
COLOR_OPTIONS = [
|
||||
(i, "#000000", False) for i in DARK_COLORS
|
||||
] + [
|
||||
(i, "#ffffff", True) for i in LIGHT_COLORS
|
||||
]
|
||||
|
||||
|
||||
screen gui_swatches():
|
||||
|
||||
grid 5 4:
|
||||
|
||||
for accent, bg, light in COLOR_OPTIONS:
|
||||
|
||||
frame:
|
||||
style "empty"
|
||||
xysize (85, 60)
|
||||
|
||||
add Color(accent).replace_hsv_saturation(.25).replace_value(.5)
|
||||
|
||||
if light:
|
||||
add Color(bg).opacity(.9)
|
||||
else:
|
||||
add Color(bg).opacity(.8)
|
||||
|
||||
button:
|
||||
style "empty"
|
||||
|
||||
if light:
|
||||
selected_background "#000"
|
||||
else:
|
||||
selected_background "#fff"
|
||||
|
||||
xpadding 3
|
||||
ypadding 3
|
||||
xmargin 10
|
||||
ymargin 10
|
||||
|
||||
action SetVariable("gui_color", (accent, bg, light))
|
||||
|
||||
idle_child Solid(accent)
|
||||
hover_child Solid(Color(accent).tint(.6))
|
||||
|
||||
screen gui_demo(accent, boring, light, display):
|
||||
|
||||
$ p = gui7.GuiParameters(
|
||||
"-",
|
||||
"-",
|
||||
1280,
|
||||
720,
|
||||
accent,
|
||||
boring,
|
||||
light,
|
||||
None,
|
||||
False,
|
||||
False,
|
||||
False,
|
||||
"-"
|
||||
)
|
||||
|
||||
frame:
|
||||
style "empty"
|
||||
|
||||
add p.menu_color
|
||||
|
||||
if light:
|
||||
add Solid(p.boring_color.opacity(.9))
|
||||
else:
|
||||
add Solid(p.boring_color.opacity(.8))
|
||||
|
||||
|
||||
frame:
|
||||
style "empty"
|
||||
|
||||
xpadding 10
|
||||
ypadding 10
|
||||
|
||||
has vbox
|
||||
|
||||
text _("Display"):
|
||||
style "empty"
|
||||
font (gui.system_font or "DejaVuSans.ttf")
|
||||
color p.accent_color
|
||||
size 24
|
||||
|
||||
for i in [ _("Window"), _("Fullscreen"), _("Planetarium") ]:
|
||||
|
||||
textbutton i:
|
||||
action (None if i == "Planetarium" else SetScreenVariable("display", i))
|
||||
style "empty"
|
||||
|
||||
text_style "empty"
|
||||
text_font (gui.system_font or "DejaVuSans.ttf")
|
||||
text_size 24
|
||||
|
||||
text_color p.idle_color
|
||||
text_hover_color p.hover_color
|
||||
text_selected_color p.selected_color
|
||||
text_insensitive_color p.insensitive_color
|
||||
|
||||
xmargin 4
|
||||
ymargin 4
|
||||
left_padding 21
|
||||
|
||||
selected_background Solid(p.accent_color, xsize=5)
|
||||
|
||||
null height 30
|
||||
|
||||
text _("Text Speed"):
|
||||
style "empty"
|
||||
color p.accent_color
|
||||
size 24
|
||||
font (gui.system_font or "DejaVuSans.ttf")
|
||||
|
||||
bar:
|
||||
value ScreenVariableValue("value", 1.0)
|
||||
style "empty"
|
||||
base_bar Solid(p.muted_color)
|
||||
hover_base_bar Solid(p.hover_muted_color)
|
||||
|
||||
thumb Solid(p.accent_color, xsize=10)
|
||||
hover_thumb Solid(p.hover_color, xsize=10)
|
||||
|
||||
ysize 30
|
||||
|
||||
|
||||
screen choose_gui_color():
|
||||
|
||||
default display = "Window"
|
||||
default value = 0.5
|
||||
|
||||
frame:
|
||||
style_group "l"
|
||||
style "l_root"
|
||||
|
||||
window:
|
||||
has vbox
|
||||
|
||||
label _("Select Accent and Background Colors")
|
||||
|
||||
frame:
|
||||
style "l_indent"
|
||||
|
||||
has hbox:
|
||||
yfill True
|
||||
|
||||
frame:
|
||||
style "l_default"
|
||||
xsize 425
|
||||
|
||||
has vbox
|
||||
|
||||
text _("Please click on the color scheme you wish to use, then click Continue. These colors can be changed and customized later.")
|
||||
|
||||
add SPACER
|
||||
|
||||
use gui_swatches()
|
||||
|
||||
|
||||
# Preview
|
||||
frame:
|
||||
xsize 350
|
||||
|
||||
style "l_default"
|
||||
background Frame(PATTERN, 0, 0, tile=True)
|
||||
xpadding 5
|
||||
ypadding 5
|
||||
|
||||
xfill True
|
||||
yfill True
|
||||
xmargin 20
|
||||
bottom_margin 6
|
||||
|
||||
use gui_demo(gui_color[0], gui_color[1], gui_color[2], display)
|
||||
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
|
||||
if gui_color:
|
||||
textbutton _("Continue") action Return(True) style "l_right_button"
|
||||
|
||||
|
||||
label change_gui:
|
||||
|
||||
python:
|
||||
|
||||
gui_new = False
|
||||
gui_replace_images = True
|
||||
gui_update_code = True
|
||||
gui_replace_code = False
|
||||
|
||||
project.current.update_dump(True)
|
||||
gui_size = tuple(project.current.dump["size"])
|
||||
|
||||
project_dir = project.current.path
|
||||
project_name = project.current.name
|
||||
|
||||
mode = interface.choice(
|
||||
_("{b}Warning{/b}\nContinuing will overwrite customized bar, button, save slot, scrollbar, and slider images.\n\nWhat would you like to do?"),
|
||||
[
|
||||
("change", _("Choose new colors, then regenerate image files.")),
|
||||
("regenerate", _("Regenerate the image files using the colors in gui.rpy.")),
|
||||
],
|
||||
None,
|
||||
cancel=Jump("front_page"),
|
||||
)
|
||||
|
||||
if mode == "change":
|
||||
jump gui_project_common
|
||||
else:
|
||||
jump gui_generate_images
|
||||
|
||||
label new_gui_project:
|
||||
|
||||
python:
|
||||
gui_new = True
|
||||
|
||||
project_name = interface.input(
|
||||
_("PROJECT NAME"),
|
||||
_("Please enter the name of your project:"),
|
||||
filename=True,
|
||||
cancel=Jump("front_page"))
|
||||
|
||||
project_name = project_name.strip()
|
||||
if not project_name:
|
||||
interface.error(_("The project name may not be empty."))
|
||||
|
||||
project_dir = os.path.join(persistent.projects_directory, project_name)
|
||||
|
||||
if project.manager.get(project_name) is not None:
|
||||
interface.error(_("[project_name!q] already exists. Please choose a different project name."), project_name=project_name)
|
||||
|
||||
if os.path.exists(project_dir):
|
||||
interface.error(_("[project_dir!q] already exists. Please choose a different project name."), project_dir=project_dir)
|
||||
|
||||
gui_replace_images = True
|
||||
gui_replace_code = True
|
||||
gui_update_code = True
|
||||
|
||||
|
||||
label gui_project_size:
|
||||
|
||||
python:
|
||||
|
||||
gui_size = interface.choice(
|
||||
_("What resolution should the project use? Although Ren'Py can scale the window up and down, this is the initial size of the window, the size at which assets should be drawn, and the size at which the assets will be at their sharpest.\n\nThe default of 1280x720 is a reasonable compromise."),
|
||||
[
|
||||
((1066, 600), "1066x600"),
|
||||
((1280, 720), "1280x720"),
|
||||
((1920, 1080), "1920x1080"),
|
||||
],
|
||||
(1280, 720),
|
||||
cancel=Jump("front_page"),
|
||||
)
|
||||
|
||||
label gui_project_common:
|
||||
|
||||
$ gui_color = (DARK_COLORS[0], "#000000", False)
|
||||
|
||||
call screen choose_gui_color
|
||||
|
||||
python hide:
|
||||
|
||||
width, height = gui_size
|
||||
accent, boring, light = gui_color
|
||||
|
||||
prefix = os.path.join(project_dir, "game")
|
||||
|
||||
if not os.path.isdir(prefix) and not gui_new:
|
||||
interface.error("{} does not appear to be a Ren'Py game.".format(prefix))
|
||||
|
||||
template = os.path.join(config.renpy_base, "gui", "game")
|
||||
|
||||
if not os.path.isdir(template):
|
||||
interface.error("{} does not appear to be a Ren'Py game.".format(template))
|
||||
|
||||
p = gui7.GuiParameters(
|
||||
prefix,
|
||||
template,
|
||||
width,
|
||||
height,
|
||||
accent,
|
||||
boring,
|
||||
light,
|
||||
_preferences.language,
|
||||
gui_replace_images,
|
||||
gui_replace_code,
|
||||
gui_update_code,
|
||||
project_name,
|
||||
)
|
||||
|
||||
if gui_new:
|
||||
interface.processing(_("Creating the new project..."))
|
||||
else:
|
||||
interface.processing(_("Updating the project..."))
|
||||
|
||||
with interface.error_handling("creating a new project"):
|
||||
gui7.generate_gui(p)
|
||||
|
||||
# Activate the project.
|
||||
with interface.error_handling("activating the new project"):
|
||||
project.manager.scan()
|
||||
project.Select(project.manager.get(project_name))()
|
||||
|
||||
if gui_new:
|
||||
call update_renpy_strings
|
||||
|
||||
python hide:
|
||||
if gui.project_system_font:
|
||||
with open(os.path.join(project.current.gamedir, "tl/None/common.rpym"), "ab") as f:
|
||||
f.write("define gui.system_font = {!r}\r\n".format(gui.project_system_font))
|
||||
|
||||
|
||||
label gui_generate_images:
|
||||
|
||||
python:
|
||||
|
||||
interface.processing(_("Updating the project..."))
|
||||
project.current.launch([ 'gui_images' ])
|
||||
|
||||
jump front_page
|
||||
@@ -0,0 +1,97 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from gui7.code import CodeGenerator, translate_define, translate_copy, translate_code
|
||||
from gui7.images import ImageGenerator
|
||||
from gui7.parameters import GuiParameters
|
||||
|
||||
import renpy.arguments
|
||||
import os
|
||||
|
||||
|
||||
def generate_gui(p):
|
||||
|
||||
ImageGenerator(p).generate_all()
|
||||
CodeGenerator(p).generate_gui("gui.rpy", defines=True)
|
||||
CodeGenerator(p).generate_gui("screens.rpy")
|
||||
CodeGenerator(p).generate_code("options.rpy")
|
||||
CodeGenerator(p).copy_script("script.rpy")
|
||||
CodeGenerator(p).copy_files()
|
||||
|
||||
images = os.path.join(p.prefix, "images")
|
||||
|
||||
if not os.path.exists(images):
|
||||
os.mkdir(images)
|
||||
|
||||
|
||||
def generate_gui_command():
|
||||
|
||||
ap = renpy.arguments.ArgumentParser()
|
||||
|
||||
ap.add_argument("target", action="store", help="The game into which the generated gui should be placed.")
|
||||
ap.add_argument("--width", default=1280, action="store", type=int, help="The width of the generated gui.")
|
||||
ap.add_argument("--height", default=720, action="store", type=int, help="The height of the generated gui.")
|
||||
ap.add_argument("--accent", default="#00b8c3", action="store", help="The accent color used throughout the gui.")
|
||||
ap.add_argument("--boring", default="#000000", action="store", help="The boring color used for the gui background.")
|
||||
ap.add_argument("--light", default=False, action="store_true", help="True if this is considered a light theme.")
|
||||
ap.add_argument("--template", default="gui", action="store", help="The template directory containing source code.")
|
||||
ap.add_argument("--language", default=None, action="store", help="The language to translate strings and comments to.")
|
||||
|
||||
ap.add_argument("--start", default=False, action="store_true", help="Starts a new project, replacing images and code.")
|
||||
ap.add_argument("--replace-images", default=False, action="store_true", help="True if existing images should be overwritten.")
|
||||
ap.add_argument("--replace-code", default=False, action="store_true", help="True if an existing gui.rpy file should be overwritten.")
|
||||
ap.add_argument("--update-code", default=False, action="store_true", help="True if an existing gui.rpy file should be update.")
|
||||
|
||||
args = ap.parse_args()
|
||||
|
||||
if args.start:
|
||||
args.replace_images = True
|
||||
args.replace_code = True
|
||||
args.update_code = True
|
||||
|
||||
prefix = os.path.join(args.target, "game")
|
||||
|
||||
if not os.path.isdir(prefix):
|
||||
ap.error("{} does not appear to be a Ren'Py game.".format(prefix))
|
||||
|
||||
template = os.path.join(args.template, "game")
|
||||
|
||||
if not os.path.isdir(template):
|
||||
ap.error("{} does not appear to be a Ren'Py game.".format(template))
|
||||
|
||||
p = GuiParameters(
|
||||
prefix,
|
||||
template,
|
||||
args.width,
|
||||
args.height,
|
||||
args.accent,
|
||||
args.boring,
|
||||
args.light,
|
||||
args.language,
|
||||
args.replace_images,
|
||||
args.replace_code,
|
||||
args.update_code,
|
||||
os.path.basename(args.target),
|
||||
)
|
||||
|
||||
generate_gui(p)
|
||||
|
||||
renpy.arguments.register_command("generate_gui", generate_gui_command)
|
||||
@@ -0,0 +1,425 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
import codecs
|
||||
import re
|
||||
import math
|
||||
import textwrap
|
||||
import collections
|
||||
import shutil
|
||||
|
||||
import renpy
|
||||
|
||||
|
||||
class Define(object):
|
||||
|
||||
def __init__(self, name, value, comment):
|
||||
self.name = name
|
||||
self.value = value
|
||||
self.comment = comment
|
||||
|
||||
# A map from language name to a list of defines.
|
||||
language_defines = collections.defaultdict(list)
|
||||
|
||||
|
||||
def translate_define(language, name, value, comment=None):
|
||||
"""
|
||||
This function should be called to register the value of a define that is
|
||||
set when generating code in `language`.
|
||||
|
||||
`name`
|
||||
A string giving the name of the define.
|
||||
|
||||
`value`
|
||||
A string giving the value of the define. Be sure to quote it properly,
|
||||
or use repr().
|
||||
|
||||
`comment`
|
||||
If not None, a comment that will be generated before the define. The
|
||||
comment will only be generated if the define does not exist in
|
||||
gui.rpy. There is no need to use "## ", as the comment will be
|
||||
added and wrapped automatically.
|
||||
"""
|
||||
|
||||
language_defines[language].append(Define(name, value, comment))
|
||||
|
||||
|
||||
# A map from a language name to a list of (src, dst) pairs. Each represents a
|
||||
# file that is copied into place.
|
||||
language_copies = collections.defaultdict(list)
|
||||
|
||||
|
||||
def translate_copy(language, src, dst):
|
||||
"""
|
||||
This function should be called to copy a file from `src` to `dst`
|
||||
when generating code in `language`.
|
||||
|
||||
`src`
|
||||
A path, relative to the launcher game directory.
|
||||
|
||||
`dst`
|
||||
A path, relative to the game directory of the new game.
|
||||
"""
|
||||
|
||||
language_copies[language].append((src, dst))
|
||||
|
||||
|
||||
# A map from language name and filename to code that should be added to the
|
||||
# end of a newly-generated file.
|
||||
language_code = collections.defaultdict(list)
|
||||
|
||||
|
||||
def translate_code(language, filename, code):
|
||||
"""
|
||||
This function can be called to include a block of code verbatim
|
||||
into `file` when a game is generated in `language`.
|
||||
"""
|
||||
|
||||
language_code[language, filename].extend([''] + code.split("\n"))
|
||||
|
||||
|
||||
class CodeGenerator(object):
|
||||
"""
|
||||
This is used to generate and update the GUI code.
|
||||
"""
|
||||
|
||||
def __init__(self, parameters):
|
||||
"""
|
||||
Generates or updates gui.rpy.
|
||||
"""
|
||||
|
||||
self.p = parameters
|
||||
|
||||
def load_template(self, filename):
|
||||
|
||||
target = os.path.join(self.p.prefix, filename)
|
||||
|
||||
if os.path.exists(target) and not self.p.replace_code:
|
||||
template = target
|
||||
else:
|
||||
template = os.path.join(self.p.template, filename)
|
||||
|
||||
with codecs.open(template, "r", "utf-8") as f:
|
||||
self.lines = [ i.rstrip().replace(u"\ufeff", "") for i in f ]
|
||||
|
||||
def remove_scale(self):
|
||||
|
||||
def scale(m):
|
||||
original = int(m.group(1))
|
||||
scaled = int(math.ceil(original * self.p.scale))
|
||||
return str(scaled)
|
||||
|
||||
lines = [ ]
|
||||
|
||||
for l in self.lines:
|
||||
l = re.sub(r'gui.scale\((.*?)\)', scale, l)
|
||||
lines.append(l)
|
||||
|
||||
self.lines = lines
|
||||
|
||||
def update_size(self):
|
||||
|
||||
gui_init = "gui.init({}, {})".format(self.p.width, self.p.height)
|
||||
|
||||
lines = [ ]
|
||||
|
||||
for l in self.lines:
|
||||
l = re.sub(r'gui.init\(.*?\)', gui_init, l)
|
||||
lines.append(l)
|
||||
|
||||
self.lines = lines
|
||||
|
||||
def update_defines(self, replacements, additions=[]):
|
||||
"""
|
||||
Replaces define statements in gui.rpy.
|
||||
"""
|
||||
|
||||
replacements = dict(replacements)
|
||||
|
||||
for d in additions:
|
||||
replacements[d.name] = d.value
|
||||
|
||||
seen = set()
|
||||
|
||||
lines = [ ]
|
||||
|
||||
for l in self.lines:
|
||||
|
||||
m = re.match('^(\s*)define (.*?) =', l)
|
||||
|
||||
if m:
|
||||
indent = m.group(1)
|
||||
variable = m.group(2)
|
||||
|
||||
if variable in replacements:
|
||||
l = "{}define {} = {}".format(indent, variable, replacements[variable])
|
||||
|
||||
seen.add(variable)
|
||||
|
||||
lines.append(l)
|
||||
|
||||
for d in additions:
|
||||
|
||||
if d.name in seen:
|
||||
continue
|
||||
|
||||
seen.add(d.name)
|
||||
|
||||
lines.append("")
|
||||
|
||||
if d.comment:
|
||||
for s in textwrap.wrap(d.comment):
|
||||
lines.append("## " + s)
|
||||
|
||||
lines.append("define {} = {}".format(d.name, d.value))
|
||||
|
||||
self.lines = lines
|
||||
|
||||
def update_gui_defines(self):
|
||||
"""
|
||||
Replaces define statements in gui.rpy.
|
||||
"""
|
||||
|
||||
replacements = {
|
||||
'gui.accent_color' : repr(self.p.accent_color.hexcode),
|
||||
'gui.selected_color' : repr(self.p.selected_color.hexcode),
|
||||
'gui.hover_color' : repr(self.p.hover_color.hexcode),
|
||||
'gui.muted_color' : repr(self.p.muted_color.hexcode),
|
||||
'gui.hover_muted_color' : repr(self.p.hover_muted_color.hexcode),
|
||||
'gui.title_color' : repr(self.p.title_color.hexcode),
|
||||
'gui.idle_color' : repr(self.p.idle_color.hexcode),
|
||||
'gui.idle_small_color' : repr(self.p.idle_small_color.hexcode),
|
||||
'gui.insensitive_color' : repr(self.p.insensitive_color.hexcode),
|
||||
'gui.text_color' : repr(self.p.text_color.hexcode),
|
||||
'gui.interface_text_color' : repr(self.p.text_color.hexcode),
|
||||
'gui.choice_text_color' : repr(self.p.choice_color.hexcode),
|
||||
}
|
||||
|
||||
self.update_defines(replacements, language_defines[self.p.language])
|
||||
|
||||
def update_options_defines(self):
|
||||
"""
|
||||
Replaces define statements in options.rpy.
|
||||
"""
|
||||
|
||||
def quote(s):
|
||||
s = s.replace("\\", "\\\\")
|
||||
s = s.replace("\"", "\\\"")
|
||||
return '"' + s + '"'
|
||||
|
||||
replacements = {
|
||||
'config.name' : "_({})".format(quote(self.p.name)),
|
||||
'build.name' : quote(self.p.simple_name),
|
||||
'config.save_directory' : quote(self.p.savedir),
|
||||
}
|
||||
|
||||
self.update_defines(replacements)
|
||||
|
||||
def write_target(self, filename):
|
||||
|
||||
target = os.path.join(self.p.prefix, filename)
|
||||
|
||||
if os.path.exists(target):
|
||||
|
||||
backup = 1
|
||||
|
||||
while True:
|
||||
|
||||
bfn = "{}.{}.bak".format(target, backup)
|
||||
|
||||
if not os.path.exists(bfn):
|
||||
break
|
||||
|
||||
backup += 1
|
||||
|
||||
if not self.p.skip_backup:
|
||||
os.rename(target, bfn)
|
||||
|
||||
with codecs.open(target, "w", "utf-8") as f:
|
||||
f.write(u"\ufeff")
|
||||
|
||||
for l in self.lines:
|
||||
f.write(l + "\r\n")
|
||||
|
||||
def translate_strings(self):
|
||||
|
||||
def replace(m):
|
||||
s = eval(m.group(1))
|
||||
s = renpy.translation.translate_string(s, language=self.p.language)
|
||||
s = renpy.translation.quote_unicode(s)
|
||||
|
||||
quote = m.group(1)[0]
|
||||
|
||||
s = u"_({}{}{})".format(quote, s, quote)
|
||||
|
||||
return s
|
||||
|
||||
lines = [ ]
|
||||
|
||||
for l in self.lines:
|
||||
|
||||
l = re.sub(ur'_\((\".*?\")\)', replace, l)
|
||||
l = re.sub(ur'_\((\'.*?\')\)', replace, l)
|
||||
|
||||
lines.append(l)
|
||||
|
||||
self.lines = lines
|
||||
|
||||
def translate_comments(self):
|
||||
|
||||
lines = [ ]
|
||||
|
||||
comment = [ ]
|
||||
indent = ""
|
||||
|
||||
for l in self.lines:
|
||||
|
||||
m = re.match(r'^(\s*## )(.*)', l.rstrip())
|
||||
|
||||
if m:
|
||||
|
||||
indent = m.group(1)
|
||||
c = m.group(2)
|
||||
|
||||
if comment:
|
||||
c = c.strip()
|
||||
|
||||
comment.append(c)
|
||||
|
||||
else:
|
||||
|
||||
if comment:
|
||||
s = "## " + ' '.join(comment)
|
||||
|
||||
if s.endswith("#"):
|
||||
hashpad = True
|
||||
s = s.rstrip('# ')
|
||||
else:
|
||||
hashpad = False
|
||||
|
||||
s = renpy.translation.translate_string(s, language=self.p.language)
|
||||
m = re.match(r'## ([ *]*)(.*)', s)
|
||||
|
||||
prefix = m.group(1)
|
||||
empty = ' ' * len(prefix)
|
||||
rest = m.group(2)
|
||||
|
||||
len_prefix = len(indent) + len(prefix)
|
||||
len_wrap = 80 - len_prefix
|
||||
|
||||
import store.gui
|
||||
|
||||
for i, s in enumerate(renpy.text.extras.textwrap(rest, len_wrap, store.gui.asian)):
|
||||
|
||||
if i == 0:
|
||||
s = indent + prefix + s
|
||||
else:
|
||||
s = indent + empty + s
|
||||
|
||||
if hashpad and len(s) < 79:
|
||||
s = s + " " + "#" * (79 - len(s))
|
||||
|
||||
lines.append(s)
|
||||
|
||||
comment = [ ]
|
||||
|
||||
lines.append(l)
|
||||
|
||||
self.lines = lines
|
||||
|
||||
def copy_files(self):
|
||||
|
||||
for src, dst in language_copies[self.p.language]:
|
||||
src = os.path.join(renpy.config.gamedir, src)
|
||||
dst = os.path.join(self.p.prefix, dst)
|
||||
|
||||
if os.path.exists(dst):
|
||||
continue
|
||||
|
||||
dstdir = os.path.dirname(dst)
|
||||
|
||||
if not os.path.exists(dstdir):
|
||||
os.makedirs(dstdir, 0o777)
|
||||
|
||||
shutil.copy(src, dst)
|
||||
|
||||
def copy_script(self, name):
|
||||
dst = os.path.join(self.p.prefix, name)
|
||||
|
||||
if os.path.exists(dst):
|
||||
return
|
||||
|
||||
language = renpy.store._preferences.language # @UndefinedVariable
|
||||
|
||||
if language is None:
|
||||
language = "None"
|
||||
|
||||
src = os.path.join(renpy.config.gamedir, "tl", language, name + "m")
|
||||
|
||||
if not os.path.exists(src):
|
||||
src = os.path.join(self.p.template, name)
|
||||
|
||||
shutil.copy(src, dst)
|
||||
|
||||
def add_code(self, fn):
|
||||
|
||||
if not self.p.replace_code:
|
||||
return
|
||||
|
||||
self.lines.extend(language_code[self.p.language, fn])
|
||||
|
||||
def generate_gui(self, fn, defines=False):
|
||||
if not self.p.update_code:
|
||||
return
|
||||
|
||||
self.load_template(fn)
|
||||
|
||||
if defines:
|
||||
self.update_gui_defines()
|
||||
|
||||
if self.p.replace_code:
|
||||
self.remove_scale()
|
||||
self.update_size()
|
||||
self.translate_strings()
|
||||
self.translate_comments()
|
||||
self.add_code(fn)
|
||||
|
||||
self.write_target(fn)
|
||||
|
||||
def generate_code(self, fn):
|
||||
|
||||
target = os.path.join(self.p.prefix, fn)
|
||||
|
||||
if os.path.exists(target):
|
||||
return
|
||||
|
||||
self.load_template(fn)
|
||||
|
||||
self.translate_strings()
|
||||
self.translate_comments()
|
||||
self.update_options_defines()
|
||||
|
||||
self.add_code(fn)
|
||||
|
||||
self.write_target(fn)
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 14 KiB |
@@ -0,0 +1,443 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
import pygame_sdl2
|
||||
import os
|
||||
|
||||
from renpy.store import config
|
||||
import renpy.display
|
||||
|
||||
class ImageGenerator(object):
|
||||
|
||||
def __init__(self, parameters):
|
||||
|
||||
pygame_sdl2.image.init()
|
||||
|
||||
self.p = p = parameters
|
||||
|
||||
self.width = p.width
|
||||
self.height = p.height
|
||||
|
||||
self.scale = p.scale
|
||||
|
||||
self.accent_color = p.accent_color
|
||||
self.boring_color = p.boring_color
|
||||
|
||||
self.hover_color = p.hover_color
|
||||
self.muted_color = p.muted_color
|
||||
self.hover_muted_color = p.hover_muted_color
|
||||
|
||||
self.menu_color = p.menu_color
|
||||
|
||||
self.prefix = os.path.join(p.prefix, "gui", "")
|
||||
|
||||
try:
|
||||
os.mkdir(self.prefix, 0o777)
|
||||
except:
|
||||
pass
|
||||
|
||||
self.full_width = self.width / self.scale
|
||||
self.full_height = self.height / self.scale
|
||||
|
||||
self.overwrite = p.replace_images
|
||||
|
||||
def scale_int(self, n):
|
||||
rv = int(n * self.scale)
|
||||
|
||||
if rv < 1:
|
||||
rv = 1
|
||||
|
||||
return rv
|
||||
|
||||
def rescale_template(self, t):
|
||||
|
||||
rv = [ ]
|
||||
|
||||
for pos, opacity in t:
|
||||
rv.append((pos * self.scale, opacity))
|
||||
|
||||
return rv
|
||||
|
||||
def generate_line(self, template):
|
||||
|
||||
size = int(max(i[0] for i in template))
|
||||
|
||||
rv = [ ]
|
||||
|
||||
right_pos, right_value = template[0]
|
||||
|
||||
for i in range(size):
|
||||
|
||||
if i == right_pos:
|
||||
rv.append(right_value)
|
||||
continue
|
||||
|
||||
while i >= right_pos:
|
||||
left_pos = right_pos
|
||||
left_value = right_value
|
||||
|
||||
right_pos, right_value = template.pop(0)
|
||||
|
||||
done = 1.0 * (i - left_pos) / (right_pos - left_pos)
|
||||
rv.append(left_value + done * (right_value - left_value))
|
||||
|
||||
return rv
|
||||
|
||||
def crop_line(self, line, size):
|
||||
"""
|
||||
Crops the center `size` pixels out of `line`.
|
||||
"""
|
||||
|
||||
if len(line) <= size:
|
||||
return line
|
||||
|
||||
start = (len(line) - size) // 2
|
||||
|
||||
return line[start:start + size ]
|
||||
|
||||
def save(self, s, filename, overwrite=True):
|
||||
|
||||
fn = self.prefix + filename + ".png"
|
||||
dn = os.path.dirname(fn)
|
||||
|
||||
try:
|
||||
os.makedirs(dn, 0o777)
|
||||
except:
|
||||
pass
|
||||
|
||||
if os.path.exists(fn):
|
||||
|
||||
if not overwrite:
|
||||
return
|
||||
|
||||
if not self.overwrite:
|
||||
return
|
||||
|
||||
index = 1
|
||||
|
||||
while True:
|
||||
bfn = u"{}.{}.bak".format(fn, index)
|
||||
|
||||
if not os.path.exists(bfn):
|
||||
break
|
||||
|
||||
index += 1
|
||||
|
||||
if not self.p.skip_backup:
|
||||
os.rename(fn, bfn)
|
||||
|
||||
import cStringIO
|
||||
sio = cStringIO.StringIO()
|
||||
renpy.display.module.save_png(s, sio, 3)
|
||||
|
||||
with open(fn, "wb") as f:
|
||||
f.write(sio.getvalue())
|
||||
|
||||
def make_surface(self, width, height):
|
||||
return pygame_sdl2.Surface((width, height), pygame_sdl2.SRCALPHA)
|
||||
|
||||
def generate_image(self, filename, xtmpl, ytmpl, color=(0, 0, 0, 255)):
|
||||
|
||||
r, g, b, a = color
|
||||
|
||||
xtmpl = self.rescale_template(xtmpl)
|
||||
ytmpl = self.rescale_template(ytmpl)
|
||||
|
||||
xline = self.generate_line(xtmpl)
|
||||
yline = self.generate_line(ytmpl)
|
||||
|
||||
xline = self.crop_line(xline, self.width)
|
||||
yline = self.crop_line(yline, self.height)
|
||||
|
||||
s = self.make_surface(len(xline), len(yline))
|
||||
|
||||
for x, xv in enumerate(xline):
|
||||
for y, yv in enumerate(yline):
|
||||
v = xv * yv
|
||||
s.set_at((x, y), (r, g, b, int(a * v)))
|
||||
|
||||
self.save(s, filename)
|
||||
|
||||
def generate_textbox(self):
|
||||
|
||||
XSIZE = self.full_width
|
||||
XINSIDE = (XSIZE - 744) // 2
|
||||
|
||||
YSIZE = 185
|
||||
YBORDER = 5
|
||||
|
||||
X = [
|
||||
(0, 0.0),
|
||||
(XINSIDE, 1.0),
|
||||
(XSIZE - XINSIDE, 1.0),
|
||||
(XSIZE, 0.0),
|
||||
]
|
||||
|
||||
Y = [
|
||||
(0, 0.0),
|
||||
(YBORDER, 1.0),
|
||||
(YSIZE, 1.0),
|
||||
]
|
||||
|
||||
self.generate_image("textbox", X, Y, self.boring_color.opacity(.8))
|
||||
|
||||
|
||||
YSIZE = 240
|
||||
YBORDER = 5
|
||||
|
||||
X = [ (0, 1.0), (self.full_width, 1.0) ]
|
||||
|
||||
Y = [
|
||||
(0, 0.0),
|
||||
(YBORDER, 1.0),
|
||||
(YSIZE, 1.0),
|
||||
]
|
||||
|
||||
self.generate_image("phone/textbox", X, Y, self.boring_color.opacity(.8))
|
||||
|
||||
width = self.scale_int(300)
|
||||
height = self.scale_int(36)
|
||||
|
||||
s = self.make_surface(width, height)
|
||||
self.save(s, "namebox")
|
||||
|
||||
def generate_nvl(self):
|
||||
XSIZE = self.full_width
|
||||
XINSIDE = (XSIZE - 800) // 2
|
||||
|
||||
YSIZE = self.full_height
|
||||
|
||||
X = [
|
||||
(0, 0.0),
|
||||
(XINSIDE, 1.0),
|
||||
(XSIZE - XINSIDE, 1.0),
|
||||
(XSIZE, 0.0),
|
||||
]
|
||||
|
||||
Y = [
|
||||
(0, 1.0),
|
||||
(YSIZE, 1.0),
|
||||
]
|
||||
|
||||
|
||||
self.generate_image("nvl", X, Y, self.boring_color.opacity(.8))
|
||||
|
||||
X = [
|
||||
(0, 1.0),
|
||||
(XSIZE, 1.0),
|
||||
]
|
||||
|
||||
Y = [
|
||||
(0, 1.0),
|
||||
(YSIZE, 1.0),
|
||||
]
|
||||
|
||||
self.generate_image("phone/nvl", X, Y, self.boring_color.opacity(.8))
|
||||
|
||||
|
||||
|
||||
def generate_choice_button(self):
|
||||
XSIZE = 790
|
||||
XINSIDE = 100
|
||||
|
||||
YSIZE = 35
|
||||
YBORDER = 3
|
||||
|
||||
X = [
|
||||
(0, 0.0),
|
||||
(XINSIDE, 1.0),
|
||||
(XSIZE - XINSIDE, 1.0),
|
||||
(XSIZE, 0.0),
|
||||
]
|
||||
|
||||
Y = [
|
||||
(0, 0.0),
|
||||
(YBORDER, 1.0),
|
||||
(YSIZE - YBORDER, 1.0),
|
||||
(YSIZE, 0.0),
|
||||
]
|
||||
|
||||
self.generate_image("button/choice_idle_background", X, Y, self.boring_color.opacity(.8))
|
||||
self.generate_image("button/choice_hover_background", X, Y, self.accent_color.opacity(.95))
|
||||
|
||||
def generate_overlay(self):
|
||||
|
||||
width = self.scale_int(280)
|
||||
phone_width = self.scale_int(340)
|
||||
|
||||
game_y = self.scale_int(120)
|
||||
game_height = self.scale_int(570)
|
||||
|
||||
line_width = self.scale_int(3)
|
||||
|
||||
|
||||
if self.p.light:
|
||||
opacity = 0.9
|
||||
else:
|
||||
opacity = 0.8
|
||||
|
||||
# Main menu.
|
||||
mm = self.make_surface(self.width, self.height)
|
||||
mm.subsurface((0, 0, width, self.height)).fill(self.boring_color.opacity(opacity))
|
||||
mm.subsurface((width - line_width, 0, line_width, self.height)).fill(self.accent_color)
|
||||
self.save(mm, "overlay/main_menu")
|
||||
|
||||
mm = self.make_surface(self.width, self.height)
|
||||
mm.subsurface((0, 0, phone_width, self.height)).fill(self.boring_color.opacity(opacity))
|
||||
mm.subsurface((phone_width - line_width, 0, line_width, self.height)).fill(self.accent_color)
|
||||
self.save(mm, "phone/overlay/main_menu")
|
||||
|
||||
# Game menu.
|
||||
gm = self.make_surface(self.width, self.height)
|
||||
gm.fill(self.boring_color.opacity(opacity))
|
||||
gm.subsurface((width - line_width, game_y, line_width, game_height)).fill(self.accent_color)
|
||||
self.save(gm, "overlay/game_menu")
|
||||
|
||||
gm = self.make_surface(self.width, self.height)
|
||||
gm.fill(self.boring_color.opacity(opacity))
|
||||
gm.subsurface((phone_width - line_width, game_y, line_width, game_height)).fill(self.accent_color)
|
||||
self.save(gm, "phone/overlay/game_menu")
|
||||
|
||||
# Confirm.
|
||||
gm = self.make_surface(self.width, self.height)
|
||||
gm.fill(self.boring_color.opacity(.6))
|
||||
self.save(gm, "overlay/confirm")
|
||||
|
||||
def generate_frame(self):
|
||||
width = self.scale_int(600)
|
||||
height = self.scale_int(250)
|
||||
|
||||
border = self.scale_int(3)
|
||||
|
||||
s = self.make_surface(width, height)
|
||||
s.fill(self.accent_color)
|
||||
s.subsurface((border, border, width - 2 * border, height - 2 * border)).fill(self.boring_color)
|
||||
self.save(s, "frame")
|
||||
|
||||
|
||||
def generate_quick_buttons(self):
|
||||
width = self.scale_int(100)
|
||||
height = self.scale_int(30)
|
||||
|
||||
s = self.make_surface(width, height)
|
||||
self.save(s, "button/quick_idle_background")
|
||||
self.save(s, "button/quick_hover_background")
|
||||
|
||||
def generate_skip(self):
|
||||
XSIZE = 240
|
||||
XRIGHT = 50
|
||||
|
||||
YSIZE = 43
|
||||
|
||||
X = [
|
||||
(0, 1.0),
|
||||
(XSIZE - XRIGHT, 1.0),
|
||||
(XSIZE, 0.0),
|
||||
]
|
||||
|
||||
Y = [
|
||||
(0, 1.0),
|
||||
(YSIZE, 1.0),
|
||||
]
|
||||
|
||||
self.generate_image("skip", X, Y, self.boring_color.opacity(.8))
|
||||
|
||||
def generate_notify(self):
|
||||
XSIZE = 922
|
||||
XRIGHT = 50
|
||||
|
||||
YSIZE = 43
|
||||
|
||||
X = [
|
||||
(0, 1.0),
|
||||
(XSIZE - XRIGHT, 1.0),
|
||||
(XSIZE, 0.0),
|
||||
]
|
||||
|
||||
Y = [
|
||||
(0, 1.0),
|
||||
(YSIZE, 1.0),
|
||||
]
|
||||
|
||||
self.generate_image("notify", X, Y, self.boring_color.opacity(.8))
|
||||
|
||||
|
||||
def generate_icon(self):
|
||||
|
||||
icon_fn = os.path.join(config.renpy_base, "launcher", "game", "gui7", "icon.png")
|
||||
icon = pygame_sdl2.image.load(icon_fn)
|
||||
|
||||
width, height = icon.get_size()
|
||||
surf = pygame_sdl2.Surface((width, height), pygame_sdl2.SRCALPHA)
|
||||
|
||||
ro, go, bo, _ao = tuple(self.accent_color)
|
||||
|
||||
ro -= 23
|
||||
go -= 23
|
||||
bo -= 23
|
||||
|
||||
for y in range(height):
|
||||
for x in range(width):
|
||||
r, g, b, a = icon.get_at((x, y))
|
||||
|
||||
r = max(0, min(r + ro, 255))
|
||||
g = max(0, min(g + go, 255))
|
||||
b = max(0, min(b + bo, 255))
|
||||
|
||||
surf.set_at((x, y), (r, g, b, a))
|
||||
|
||||
self.save(surf, "window_icon", overwrite=False)
|
||||
|
||||
|
||||
def generate_menus(self):
|
||||
s = self.make_surface(self.width, self.height)
|
||||
s.fill(self.menu_color)
|
||||
|
||||
self.save(s, "main_menu", overwrite=False)
|
||||
self.save(s, "game_menu", overwrite=False)
|
||||
|
||||
|
||||
def generate_all(self):
|
||||
self.generate_textbox()
|
||||
self.generate_choice_button()
|
||||
self.generate_overlay()
|
||||
self.generate_frame()
|
||||
self.generate_nvl()
|
||||
self.generate_quick_buttons()
|
||||
self.generate_skip()
|
||||
self.generate_notify()
|
||||
self.generate_menus()
|
||||
self.generate_icon()
|
||||
|
||||
if __name__ == "__main__":
|
||||
import argparse
|
||||
|
||||
ap = argparse.ArgumentParser()
|
||||
|
||||
ap.add_argument("prefix")
|
||||
ap.add_argument("width", type=int)
|
||||
ap.add_argument("height", type=int)
|
||||
|
||||
args = ap.parse_args()
|
||||
|
||||
ImageGenerator(args.prefix, args.width, args.height).generate_all()
|
||||
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
from renpy.store import Color
|
||||
import time
|
||||
|
||||
# The target width used in templates.
|
||||
WIDTH = 1280
|
||||
HEIGHT = 720
|
||||
|
||||
class GuiParameters(object):
|
||||
"""
|
||||
This represents the parameters to the gui. This is used to initialize
|
||||
the ImageGenerator and CodeGenerator objects to a consistent set of
|
||||
parameters.
|
||||
"""
|
||||
|
||||
def __init__(self, prefix, template, width, height, accent, boring, light, language, replace_images, replace_code, update_code, name=None):
|
||||
|
||||
self.prefix = prefix
|
||||
self.template = template
|
||||
|
||||
self.width = width
|
||||
self.height = height
|
||||
|
||||
self.scale = min(1.0 * width / WIDTH, 1.0 * height / HEIGHT)
|
||||
|
||||
self.accent_color = Color(accent)
|
||||
self.boring_color = Color(boring)
|
||||
|
||||
# tint = n * color + (1-n) * white
|
||||
# shade = n * color + (1-n) * black
|
||||
|
||||
self.light = light
|
||||
|
||||
if light:
|
||||
self.hover_color = self.accent_color # .tint(.95)
|
||||
self.muted_color = self.accent_color.tint(.6)
|
||||
self.hover_muted_color = self.accent_color.tint(.4)
|
||||
else:
|
||||
self.hover_color = self.accent_color.tint(.6)
|
||||
self.muted_color = self.accent_color.shade(.4)
|
||||
self.hover_muted_color = self.accent_color.shade(.6)
|
||||
|
||||
self.menu_color = self.accent_color.replace_hsv_saturation(.25).replace_value(.5)
|
||||
self.title_color = self.accent_color.replace_hsv_saturation(.5).replace_value(1.0)
|
||||
|
||||
if light:
|
||||
|
||||
self.selected_color = Color("#555555")
|
||||
self.idle_color = Color("#aaaaaa")
|
||||
self.idle_small_color = Color("#888888")
|
||||
self.text_color = Color("#404040")
|
||||
self.choice_color = Color("#cccccc")
|
||||
|
||||
else:
|
||||
|
||||
self.selected_color = Color("#ffffff")
|
||||
self.idle_color = Color("#555555")
|
||||
self.idle_small_color = Color("#aaaaaa")
|
||||
self.text_color = Color("#ffffff")
|
||||
self.choice_color = Color("#cccccc")
|
||||
|
||||
|
||||
self.insensitive_color = self.idle_color.replace_opacity(.5)
|
||||
|
||||
self.language = language
|
||||
|
||||
if replace_code:
|
||||
update_code = True
|
||||
|
||||
self.replace_images = replace_images
|
||||
self.replace_code = replace_code
|
||||
self.update_code = update_code
|
||||
|
||||
self.skip_backup = False
|
||||
|
||||
name = name or ''
|
||||
|
||||
self.name = name
|
||||
|
||||
GOOD_CHARACTERS = "123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMMOPQRSTUVWXYZ-_"
|
||||
|
||||
simple_name = "".join(i for i in name if i in GOOD_CHARACTERS).encode("ascii")
|
||||
|
||||
if not simple_name:
|
||||
simple_name = "game"
|
||||
|
||||
self.simple_name = simple_name
|
||||
|
||||
self.savedir = self.simple_name + "-" + str(int(time.time()))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -197,16 +197,19 @@ screen common:
|
||||
label title text_color title_color style "l_info_label"
|
||||
|
||||
if back:
|
||||
textbutton _("Back") action back style "l_left_button"
|
||||
textbutton _("Return") action back style "l_left_button"
|
||||
elif cancel:
|
||||
textbutton _("Cancel") action cancel style "l_left_button"
|
||||
|
||||
if continue_:
|
||||
textbutton _("Continue") action continue_ style "l_right_button"
|
||||
key "input_enter" action continue_
|
||||
|
||||
|
||||
screen launcher_input:
|
||||
|
||||
default value = default
|
||||
|
||||
frame:
|
||||
style "l_root"
|
||||
|
||||
@@ -222,7 +225,7 @@ screen launcher_input:
|
||||
|
||||
add SPACER
|
||||
|
||||
input style "l_default" size 24 xalign 0.5 default default color INPUT_COLOR
|
||||
input style "l_default" value ScreenVariableInputValue("value", returnable=True) size 24 xalign 0.5 color INPUT_COLOR
|
||||
|
||||
if filename:
|
||||
add SPACER
|
||||
@@ -233,6 +236,9 @@ screen launcher_input:
|
||||
if cancel:
|
||||
textbutton _("Cancel") action cancel style "l_left_button"
|
||||
|
||||
textbutton _("Continue") action Return(value) style "l_right_button"
|
||||
|
||||
|
||||
init python in interface:
|
||||
|
||||
import traceback
|
||||
|
||||
@@ -0,0 +1,374 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
init python:
|
||||
IOS_NO_RENIOS = 0
|
||||
IOS_NO_DIRECTORY = 1
|
||||
IOS_NO_PROJECT = 2
|
||||
IOS_OK = 3
|
||||
|
||||
IOS_NO_RENIOS_TEXT = _("To build iOS packages, please download renios, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher.")
|
||||
IOS_NO_DIRECTORY_TEXT = _("The directory in where Xcode projects will be placed has not been selected. Choose 'Select Directory' to select it.")
|
||||
IOS_NO_PROJECT_TEXT = _("There is no Xcode project corresponding to the current Ren'Py project. Choose 'Create Xcode Project' to create one.")
|
||||
IOS_OK_TEXT = _("An Xcode project exists. Choose 'Update Xcode Project' to update it with the latest game files, or use Xcode to build and install it.")
|
||||
|
||||
IPHONE_TEXT = _("Attempts to emulate an iPhone.\n\nTouch input is emulated through the mouse, but only when the button is held down.")
|
||||
IPAD_TEXT = _("Attempts to emulate an iPad.\n\nTouch input is emulated through the mouse, but only when the button is held down.")
|
||||
|
||||
IOS_SELECT_DIRECTORY_TEXT = _("Selects the directory where Xcode projects will be placed.")
|
||||
IOS_CREATE_PROJECT_TEXT = _("Creates an Xcode project corresponding to the current Ren'Py project.")
|
||||
IOS_UPDATE_PROJECT_TEXT = _("Updates the Xcode project with the latest game files. This must be done each time the Ren'Py project changes.")
|
||||
IOS_XCODE_TEXT = _("Opens the Xcode project in Xcode.")
|
||||
|
||||
IOS_OPEN_DIRECTORY_TEXT = _("Opens the directory containing Xcode projects.")
|
||||
|
||||
def find_renios():
|
||||
|
||||
global RENIOS_PATH
|
||||
|
||||
candidates = [ ]
|
||||
|
||||
RENIOS_PATH = os.path.join(config.renpy_base, "renios")
|
||||
|
||||
if os.path.isdir(RENIOS_PATH) and check_hash_txt("renios"):
|
||||
import sys
|
||||
sys.path.insert(0, os.path.join(RENIOS_PATH, "buildlib"))
|
||||
else:
|
||||
RENIOS_PATH = None
|
||||
|
||||
find_renios()
|
||||
|
||||
if RENIOS_PATH:
|
||||
import renios.create
|
||||
|
||||
def IOSState():
|
||||
if not RENIOS_PATH:
|
||||
return IOS_NO_RENIOS
|
||||
elif not persistent.xcode_projects_directory:
|
||||
return IOS_NO_DIRECTORY
|
||||
elif not os.path.exists(xcode_project()):
|
||||
return IOS_NO_PROJECT
|
||||
else:
|
||||
return IOS_OK
|
||||
|
||||
def IOSStateText(state):
|
||||
if state == IOS_NO_RENIOS:
|
||||
return IOS_NO_RENIOS_TEXT
|
||||
elif state == IOS_NO_DIRECTORY:
|
||||
return IOS_NO_DIRECTORY_TEXT
|
||||
elif state == IOS_NO_PROJECT:
|
||||
return IOS_NO_PROJECT_TEXT
|
||||
else:
|
||||
return IOS_OK_TEXT
|
||||
|
||||
def IOSIfState(state, needed, action):
|
||||
"""
|
||||
If `state` is `needed` or better, `action` is returned. Otherwise,
|
||||
returns None, disabling the button.
|
||||
"""
|
||||
|
||||
if state >= needed:
|
||||
return action
|
||||
else:
|
||||
return None
|
||||
|
||||
xcode_name_cache = { }
|
||||
|
||||
def xcode_name(s):
|
||||
"""
|
||||
Returns a version of `s` that's safe to use in Xcode.
|
||||
"""
|
||||
|
||||
if s in xcode_name_cache:
|
||||
return xcode_name_cache[s]
|
||||
|
||||
s = re.sub(r'[^\w\-\.]', '', s)
|
||||
xcode_name_cache[s] = s
|
||||
return s
|
||||
|
||||
def xcode_project(p=None):
|
||||
"""
|
||||
Return the path to the Xcode project corresponding to `p`, or the current
|
||||
project if `p` is None
|
||||
"""
|
||||
|
||||
if p is None:
|
||||
p = project.current
|
||||
|
||||
if persistent.xcode_projects_directory is None:
|
||||
raise Exception("The Xcode projects directory has not been set.")
|
||||
|
||||
return os.path.join(persistent.xcode_projects_directory, xcode_name(p.name))
|
||||
|
||||
def ios_create(p=None, gui=True):
|
||||
|
||||
dest = xcode_project(p)
|
||||
|
||||
if os.path.exists(dest):
|
||||
interface.yesno(_("The Xcode project already exists. Would you like to rename the old project, and replace it with a new one?"), no=Jump("ios"))
|
||||
|
||||
i = 0
|
||||
while True:
|
||||
i += 1
|
||||
backup = dest + "." + str(i)
|
||||
if not os.path.exists(backup):
|
||||
break
|
||||
|
||||
os.rename(dest, backup)
|
||||
|
||||
iface = MobileInterface("ios")
|
||||
renios.create.create_project(iface, dest)
|
||||
|
||||
ios_populate(p, gui=gui)
|
||||
|
||||
def ios_populate(p=None, gui=True):
|
||||
"""
|
||||
This actually builds the package.
|
||||
"""
|
||||
|
||||
import shutil
|
||||
|
||||
if p is None:
|
||||
p = project.current
|
||||
|
||||
dist = os.path.join(xcode_project(p), "base")
|
||||
|
||||
if os.path.exists(dist):
|
||||
shutil.rmtree(dist)
|
||||
|
||||
if gui:
|
||||
reporter = distribute.GuiReporter()
|
||||
else:
|
||||
reporter = distribute.TextReporter()
|
||||
|
||||
distribute.Distributor(p,
|
||||
reporter=reporter,
|
||||
packages=[ 'ios' ],
|
||||
build_update=False,
|
||||
noarchive=True,
|
||||
packagedest=dist,
|
||||
report_success=False,
|
||||
)
|
||||
|
||||
main_fn = os.path.join(dist, "main.py")
|
||||
|
||||
for fn in os.listdir(dist):
|
||||
if fn.endswith(".py"):
|
||||
py_fn = os.path.join(dist, fn)
|
||||
break
|
||||
else:
|
||||
raise Exception("Could not find a .py file.")
|
||||
|
||||
with open(py_fn, "r") as py_f:
|
||||
with open(main_fn, "w") as main_f:
|
||||
for l in py_f:
|
||||
if l.startswith("#!"):
|
||||
continue
|
||||
|
||||
main_f.write(l)
|
||||
|
||||
os.unlink(py_fn)
|
||||
|
||||
|
||||
def launch_xcode():
|
||||
dist = xcode_project(None)
|
||||
base = os.path.basename(dist)
|
||||
xcodeproj = "{}/{}.xcodeproj".format(dist, base)
|
||||
|
||||
subprocess.call([ 'open', renpy.fsencode(xcodeproj) ])
|
||||
|
||||
screen ios:
|
||||
|
||||
default tt = Tooltip(None)
|
||||
$ state = IOSState()
|
||||
|
||||
frame:
|
||||
style_group "l"
|
||||
style "l_root"
|
||||
|
||||
window:
|
||||
|
||||
has vbox
|
||||
|
||||
label _("iOS: [project.current.name!q]")
|
||||
|
||||
add HALF_SPACER
|
||||
|
||||
hbox:
|
||||
|
||||
# Left side.
|
||||
frame:
|
||||
style "l_indent"
|
||||
xmaximum ONEHALF
|
||||
xfill True
|
||||
|
||||
has vbox
|
||||
|
||||
add SEPARATOR2
|
||||
|
||||
frame:
|
||||
style "l_indent"
|
||||
has vbox
|
||||
|
||||
text _("Emulation:")
|
||||
|
||||
add HALF_SPACER
|
||||
|
||||
frame style "l_indent":
|
||||
|
||||
has hbox:
|
||||
spacing 15
|
||||
|
||||
textbutton _("iPhone"):
|
||||
action LaunchEmulator("ios-touch", "small phone touch ios mobile")
|
||||
hovered tt.Action(IPHONE_TEXT)
|
||||
|
||||
textbutton _("iPad"):
|
||||
action LaunchEmulator("ios-touch", "medium tablet touch ios mobile")
|
||||
hovered tt.Action(IPAD_TEXT)
|
||||
|
||||
|
||||
add SPACER
|
||||
add SEPARATOR2
|
||||
|
||||
frame:
|
||||
style "l_indent"
|
||||
has vbox
|
||||
|
||||
text _("Build:")
|
||||
|
||||
add HALF_SPACER
|
||||
|
||||
frame style "l_indent":
|
||||
|
||||
has vbox
|
||||
|
||||
textbutton _("Select Xcode Projects Directory"):
|
||||
action IOSIfState(state, IOS_NO_DIRECTORY, Jump("select_xcode_projects_directory"))
|
||||
hovered tt.Action(IOS_SELECT_DIRECTORY_TEXT)
|
||||
|
||||
textbutton _("Create Xcode Project"):
|
||||
action IOSIfState(state, IOS_NO_PROJECT, Jump("create_xcode_project"))
|
||||
hovered tt.Action(IOS_CREATE_PROJECT_TEXT)
|
||||
|
||||
textbutton _("Update Xcode Project"):
|
||||
action IOSIfState(state, IOS_NO_PROJECT, Jump("update_xcode_project"))
|
||||
hovered tt.Action(IOS_UPDATE_PROJECT_TEXT)
|
||||
|
||||
if renpy.macintosh:
|
||||
textbutton _("Launch Xcode"):
|
||||
action IOSIfState(state, IOS_OK, launch_xcode)
|
||||
hovered tt.Action(IOS_XCODE_TEXT)
|
||||
|
||||
# textbutton _("Configure"):
|
||||
# action AndroidIfState(state, ANDROID_NO_CONFIG, Jump("android_configure"))
|
||||
# hovered tt.Action(CONFIGURE_TEXT)
|
||||
#
|
||||
# textbutton _("Build Package"):
|
||||
# action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build"))
|
||||
# hovered tt.Action(BUILD_TEXT)
|
||||
#
|
||||
# textbutton _("Build & Install"):
|
||||
# action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build_and_install"))
|
||||
# hovered tt.Action(BUILD_AND_INSTALL_TEXT)
|
||||
#
|
||||
# textbutton _("Build, Install & Launch"):
|
||||
# action AndroidIfState(state, ANDROID_OK, AndroidBuild("android_build_install_and_launch"))
|
||||
# hovered tt.Action(BUILD_INSTALL_AND_LAUNCH_TEXT)
|
||||
|
||||
add SPACER
|
||||
add SEPARATOR2
|
||||
|
||||
frame:
|
||||
style "l_indent"
|
||||
has vbox
|
||||
|
||||
text _("Other:")
|
||||
|
||||
add HALF_SPACER
|
||||
|
||||
frame style "l_indent":
|
||||
|
||||
has vbox
|
||||
|
||||
textbutton _("Open Xcode Projects Directory"):
|
||||
action IOSIfState(state, IOS_NO_PROJECT, OpenDirectory(persistent.xcode_projects_directory, absolute=True))
|
||||
hovered tt.Action(IOS_OPEN_DIRECTORY_TEXT)
|
||||
|
||||
|
||||
# Right side.
|
||||
frame:
|
||||
style "l_indent"
|
||||
xmaximum ONEHALF
|
||||
xfill True
|
||||
|
||||
has vbox
|
||||
|
||||
add SEPARATOR2
|
||||
|
||||
frame:
|
||||
style "l_indent"
|
||||
has vbox
|
||||
|
||||
add SPACER
|
||||
|
||||
if tt.value:
|
||||
text tt.value
|
||||
else:
|
||||
text IOSStateText(state)
|
||||
|
||||
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
|
||||
|
||||
label ios:
|
||||
|
||||
if RENIOS_PATH is None:
|
||||
$ interface.yesno(_("Before packaging iOS apps, you'll need to download renios, Ren'Py's iOS support. Would you like to download renios now?"), no=Jump("front_page"))
|
||||
$ add_dlc("renios", restart=True)
|
||||
|
||||
call screen ios
|
||||
|
||||
label select_xcode_projects_directory:
|
||||
|
||||
python hide:
|
||||
|
||||
interface.interaction(_("XCODE PROJECTS DIRECTORY"), _("Please choose the Xcode Projects Directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"))
|
||||
|
||||
path, is_default = choose_directory(persistent.xcode_projects_directory)
|
||||
|
||||
if is_default:
|
||||
interface.info(_("Ren'Py has set the Xcode Projects Directory to:"), "[path!q]", path=path)
|
||||
|
||||
persistent.xcode_projects_directory = path
|
||||
|
||||
jump ios
|
||||
|
||||
label create_xcode_project:
|
||||
|
||||
$ ios_create(None, True)
|
||||
|
||||
jump ios
|
||||
|
||||
label update_xcode_project:
|
||||
$ ios_populate(None, True)
|
||||
|
||||
jump ios
|
||||
@@ -0,0 +1,130 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
init python:
|
||||
|
||||
def find_itch_butler():
|
||||
|
||||
import os
|
||||
|
||||
if renpy.windows:
|
||||
rv = os.path.join(os.environ.get("APPDATA", ""), "Roaming", "itch", "bin", "butler.exe")
|
||||
|
||||
if not os.path.exists(rv):
|
||||
rv = os.path.join(os.environ.get("APPDATA", ""), "itch", "bin", "butler.exe")
|
||||
|
||||
elif renpy.macintosh:
|
||||
rv = os.path.join(os.environ.get("HOME", ""), "Library", "Application Support", "itch", "bin", "butler")
|
||||
else:
|
||||
rv = os.path.join(os.environ.get("HOME", ""), ".config", "itch", "bin", "butler")
|
||||
|
||||
if not os.path.exists(rv):
|
||||
return None
|
||||
|
||||
return rv
|
||||
|
||||
label itch:
|
||||
|
||||
call build_update_dump
|
||||
|
||||
|
||||
python hide:
|
||||
|
||||
build = project.current.dump["build"]
|
||||
|
||||
destination = build["destination"]
|
||||
parent = os.path.dirname(project.current.path)
|
||||
destination = os.path.join(parent, destination)
|
||||
|
||||
version = build["version"]
|
||||
|
||||
if not os.path.exists(destination):
|
||||
interface.error(
|
||||
_("The built distributions could not be found. Please choose 'Build' and try again."),
|
||||
label="build_distributions"
|
||||
)
|
||||
|
||||
# A list of full filename, channel tuples.
|
||||
files = [ ]
|
||||
|
||||
for fn in os.listdir(destination):
|
||||
fn = os.path.join(destination, fn)
|
||||
|
||||
if fn.endswith("-all.zip"):
|
||||
channel = "all"
|
||||
|
||||
elif fn.endswith("-win.zip"):
|
||||
channel = "win"
|
||||
|
||||
elif fn.endswith("-mac.zip"):
|
||||
channel = "mac"
|
||||
|
||||
# Butler doesn't seem to support .bz2s yet.
|
||||
|
||||
# elif fn.endswith("-linux.tar.bz2"):
|
||||
# channel = "linux"
|
||||
|
||||
else:
|
||||
continue
|
||||
|
||||
files.append((fn, channel))
|
||||
|
||||
if not os.path.exists(destination):
|
||||
interface.error(
|
||||
_("No uploadable files were found. Please choose 'Build' and try again."),
|
||||
label="build_distributions"
|
||||
)
|
||||
|
||||
butler = find_itch_butler()
|
||||
|
||||
if not butler:
|
||||
interface.error(
|
||||
_("The butler program was not found."),
|
||||
_("Please install the itch.io app, which includes butler, and try again."),
|
||||
label="build_distributions"
|
||||
)
|
||||
|
||||
itch_project = project.current.dump["build"].get("itch_project", None)
|
||||
|
||||
if itch_project is None or ("/" not in itch_project):
|
||||
interface.error(
|
||||
_("The name of the itch project has not been set."),
|
||||
_("Please {a=https://itch.io/game/new}create your project{/a}, then add a line like \n{vspace=5}define build.itch_project = \"user-name/game-name\"\n{vspace=5} to options.rpy."),
|
||||
label="build_distributions"
|
||||
)
|
||||
|
||||
cc = ConsoleCommand()
|
||||
|
||||
for filename, channel in files:
|
||||
|
||||
cc.add(
|
||||
butler,
|
||||
"push",
|
||||
filename,
|
||||
itch_project + ":" + build["version"] + "-" + channel,
|
||||
)
|
||||
|
||||
cc.run()
|
||||
|
||||
|
||||
|
||||
|
||||
jump build_distributions
|
||||
@@ -0,0 +1,258 @@
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
# (the "Software"), to deal in the Software without restriction,
|
||||
# including without limitation the rights to use, copy, modify, merge,
|
||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
||||
# and to permit persons to whom the Software is furnished to do so,
|
||||
# subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be
|
||||
# included in all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
# This file contains mobile build things that are shared by the android
|
||||
# and iOS builds.
|
||||
|
||||
init -1 python:
|
||||
|
||||
def check_hash_txt(module):
|
||||
fn1 = module + "_hash.txt"
|
||||
fn2 = renpy.fsencode(os.path.join(config.renpy_base, module, "hash.txt"))
|
||||
|
||||
# No hash file? We're in dev mode - ignore.
|
||||
if not renpy.loadable(fn1):
|
||||
return True
|
||||
|
||||
hash1 = renpy.file(fn1).read()
|
||||
|
||||
if not os.path.exists(fn2):
|
||||
return False
|
||||
|
||||
hash2 = open(fn2).read()
|
||||
|
||||
return hash1.strip() == hash2.strip()
|
||||
|
||||
class LaunchEmulator(Action):
|
||||
|
||||
def __init__(self, emulator, variants):
|
||||
self.emulator = emulator
|
||||
self.variants = variants
|
||||
|
||||
def __call__(self):
|
||||
|
||||
env = {
|
||||
"RENPY_EMULATOR" : self.emulator,
|
||||
"RENPY_VARIANT" : self.variants,
|
||||
}
|
||||
|
||||
p = project.current
|
||||
p.launch(env=env)
|
||||
|
||||
class MobileInterface(object):
|
||||
"""
|
||||
This is used to interface between the launcher and RAPT/RENIOS.
|
||||
"""
|
||||
|
||||
def __init__(self, platform, edit=True, filename=None):
|
||||
"""
|
||||
`platform`
|
||||
The name of the platform we're using for. Used for libraries,
|
||||
cancel labels, and logfiles.
|
||||
|
||||
`edit`
|
||||
If true, we launch the log file in the editor on failure.
|
||||
"""
|
||||
|
||||
self.platform = platform
|
||||
self.edit = edit
|
||||
|
||||
self.process = None
|
||||
|
||||
if filename is None:
|
||||
filename = platform + ".txt"
|
||||
|
||||
self.filename = project.current.temp_filename(filename)
|
||||
|
||||
self.info_msg = ""
|
||||
|
||||
with open(self.filename, "w"):
|
||||
pass
|
||||
|
||||
def log(self, msg):
|
||||
with open(self.filename, "a") as f:
|
||||
f.write("\n")
|
||||
f.write(msg)
|
||||
f.write("\n")
|
||||
|
||||
def info(self, prompt):
|
||||
self.info_msg = prompt
|
||||
interface.processing(prompt, pause=False)
|
||||
self.log(prompt)
|
||||
|
||||
def yesno(self, prompt, submessage=None):
|
||||
return interface.yesno(prompt, submessage=submessage)
|
||||
|
||||
def yesno_choice(self, prompt, default=None):
|
||||
choices = [ (True, "Yes"), (False, "No") ]
|
||||
return interface.choice(prompt, choices, default)
|
||||
|
||||
def terms(self, url, prompt):
|
||||
submessage = _("{a=%s}%s{/a}") % (url, url)
|
||||
|
||||
if not interface.yesno(prompt, submessage=submessage):
|
||||
self.fail("You must accept the terms and conditions to proceed.", edit=False)
|
||||
|
||||
|
||||
def input(self, prompt, empty=None):
|
||||
|
||||
if empty is None:
|
||||
empty = ''
|
||||
|
||||
while True:
|
||||
rv = interface.input(_("QUESTION"), prompt, default=empty, cancel=Jump("android"))
|
||||
|
||||
rv = rv.strip()
|
||||
|
||||
if rv:
|
||||
return rv
|
||||
|
||||
def choice(self, prompt, choices, default):
|
||||
return interface.choice(prompt, choices, default, cancel=Jump("android"))
|
||||
|
||||
def fail(self, prompt, edit=True):
|
||||
self.log(prompt)
|
||||
prompt = re.sub(r'(http://\S+)', r'{a=\1}\1{/a}', prompt)
|
||||
|
||||
# Open android.txt in the editor.
|
||||
if edit and self.edit:
|
||||
self.open_editor()
|
||||
|
||||
interface.error(prompt, label="android")
|
||||
|
||||
def open_editor(self):
|
||||
editor.EditAbsolute(self.filename)()
|
||||
|
||||
def success(self, prompt):
|
||||
self.log(prompt)
|
||||
interface.info(prompt, pause=False)
|
||||
|
||||
def final_success(self, prompt):
|
||||
self.log(prompt)
|
||||
interface.info(prompt, label="android")
|
||||
|
||||
def run_yes_thread(self):
|
||||
import time
|
||||
|
||||
try:
|
||||
while self.run_yes:
|
||||
self.process.stdin.write('y\n')
|
||||
self.process.stdin.flush()
|
||||
time.sleep(.2)
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
def call(self, cmd, cancel=False, use_path=False, yes=False):
|
||||
|
||||
cmd = [ renpy.fsencode(i) for i in cmd ]
|
||||
|
||||
self.cmd = cmd
|
||||
|
||||
f = open(self.filename, "a")
|
||||
|
||||
f.write("\n\n\n")
|
||||
|
||||
if cancel:
|
||||
cancel_action = self.cancel
|
||||
else:
|
||||
cancel_action = None
|
||||
|
||||
startupinfo = None
|
||||
if renpy.windows:
|
||||
startupinfo = subprocess.STARTUPINFO()
|
||||
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
|
||||
|
||||
self.yes_thread = None
|
||||
|
||||
try:
|
||||
interface.processing(self.info_msg, show_screen=True, cancel=cancel_action)
|
||||
|
||||
kwargs = { }
|
||||
if yes:
|
||||
kwargs["stdin"] = subprocess.PIPE
|
||||
|
||||
try:
|
||||
self.process = subprocess.Popen(cmd, cwd=renpy.fsencode(RAPT_PATH), stdout=f, stderr=f, startupinfo=startupinfo, **kwargs)
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc(file=f)
|
||||
raise
|
||||
|
||||
if yes:
|
||||
import threading
|
||||
self.run_yes = True
|
||||
self.yes_thread = threading.Thread(target=self.run_yes_thread)
|
||||
self.yes_thread.daemon = True
|
||||
self.yes_thread.start()
|
||||
|
||||
renpy.call_screen("android_process", interface=self)
|
||||
finally:
|
||||
f.close()
|
||||
interface.hide_screen()
|
||||
|
||||
if yes and self.yes_thread:
|
||||
self.run_yes = False
|
||||
self.yes_thread.join()
|
||||
|
||||
self.process = None
|
||||
self.yes_thread = None
|
||||
|
||||
def check_process(self):
|
||||
rv = self.process.poll()
|
||||
|
||||
if rv is not None:
|
||||
if rv:
|
||||
raise subprocess.CalledProcessError(rv, self.cmd)
|
||||
else:
|
||||
return True
|
||||
|
||||
def download(self, url, dest):
|
||||
try:
|
||||
d = Downloader(url, dest)
|
||||
cancel_action = [ d.cancel, Jump(self.platform) ]
|
||||
interface.processing(self.info_msg, show_screen=True, cancel=cancel_action, bar_value=DownloaderValue(d))
|
||||
ui.timer(.1, action=d.check, repeat=True)
|
||||
ui.interact()
|
||||
finally:
|
||||
interface.hide_screen()
|
||||
|
||||
def background(self, f):
|
||||
try:
|
||||
t = threading.Thread(target=f)
|
||||
t.start()
|
||||
|
||||
interface.processing(self.info_msg, show_screen=True)
|
||||
|
||||
while t.is_alive():
|
||||
renpy.pause(0)
|
||||
t.join(0.25)
|
||||
|
||||
finally:
|
||||
interface.hide_screen()
|
||||
|
||||
|
||||
def cancel(self):
|
||||
if self.process:
|
||||
self.process.terminate()
|
||||
|
||||
renpy.jump(self.platform)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -257,7 +257,7 @@ screen navigation:
|
||||
xalign 0.5
|
||||
yalign 0.5
|
||||
|
||||
textbutton _("Back") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Launch Project") action project.Launch() style "l_right_button"
|
||||
|
||||
label navigation:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -25,6 +25,56 @@ init python:
|
||||
import time
|
||||
import re
|
||||
|
||||
def check_language_support():
|
||||
|
||||
language = _preferences.language
|
||||
|
||||
|
||||
new = False
|
||||
legacy = False
|
||||
|
||||
|
||||
# Check for a translation of the words "New GUI Interface".
|
||||
if (language is None) or (__("New GUI Interface") != "New GUI Interface"):
|
||||
new = True
|
||||
|
||||
try:
|
||||
if (language is None) or os.path.exists(os.path.join(config.renpy_base, "templates", language)):
|
||||
legacy = True
|
||||
except:
|
||||
pass
|
||||
|
||||
if new and legacy:
|
||||
store.language_support = _("Both interfaces have been translated to your language.")
|
||||
elif new:
|
||||
store.language_support = _("Only the new GUI has been translated to your language.")
|
||||
elif legacy:
|
||||
store.language_support = _("Only the legacy theme interface has been translated to your language.")
|
||||
else:
|
||||
store.language_support = _("Neither interface has been translated to your language.")
|
||||
|
||||
|
||||
label new_project:
|
||||
|
||||
if persistent.projects_directory is None:
|
||||
call choose_projects_directory
|
||||
|
||||
if persistent.projects_directory is None:
|
||||
$ interface.error(_("The projects directory could not be set. Giving up."))
|
||||
|
||||
python:
|
||||
|
||||
check_language_support()
|
||||
|
||||
gui_kind = interface.choice(
|
||||
_("Which interface would you like to use? The new GUI has a modern look, supports wide screens and mobile devices, and is easier to customize. Legacy themes might be necessary to work with older example code.\n\n[language_support!t]\n\nIf in doubt, choose the new GUI, then click Continue on the bottom-right."),
|
||||
[ ( 'new_gui_project', _("New GUI Interface") ), ( 'new_theme_project', _("Legacy Theme Interface")) ],
|
||||
"new_gui_project",
|
||||
cancel=Jump("front_page"),
|
||||
)
|
||||
|
||||
renpy.jump(gui_kind)
|
||||
|
||||
screen select_template:
|
||||
|
||||
default result = project.manager.get("english")
|
||||
@@ -58,17 +108,11 @@ screen select_template:
|
||||
text _("Please select a template to use for your new project. The template sets the default font and the user interface language. If your language is not supported, choose 'english'.")
|
||||
|
||||
|
||||
textbutton _("Back") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Continue") action Return(result) style "l_right_button"
|
||||
|
||||
|
||||
label new_project:
|
||||
|
||||
if persistent.projects_directory is None:
|
||||
call choose_projects_directory
|
||||
|
||||
if persistent.projects_directory is None:
|
||||
$ interface.error(_("The projects directory could not be set. Giving up."))
|
||||
label new_theme_project:
|
||||
|
||||
python hide:
|
||||
|
||||
@@ -118,6 +162,12 @@ label new_project:
|
||||
with open(fn, "wb") as f:
|
||||
f.write(options.encode("utf-8"))
|
||||
|
||||
font = template.data.get("font", None)
|
||||
if font is not None:
|
||||
src = os.path.join(config.gamedir, "fonts", font)
|
||||
dst = os.path.join(project_dir, "game", "tl", "None", font)
|
||||
shutil.copy(src, dst)
|
||||
|
||||
# Activate the project.
|
||||
with interface.error_handling("activating the new project"):
|
||||
project.manager.scan()
|
||||
|
||||
+155
-116
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -19,30 +19,30 @@
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
## This file contains some of the options that can be changed to customize
|
||||
## your Ren'Py game. It only contains the most common options... there
|
||||
## is quite a bit more customization you can do.
|
||||
##
|
||||
## Lines beginning with two '#' marks are comments, and you shouldn't
|
||||
## uncomment them. Lines beginning with a single '#' mark are
|
||||
## commented-out code, and you may want to uncomment them when
|
||||
## appropriate.
|
||||
# This file contains some of the options that can be changed to customize
|
||||
# your Ren'Py game. It only contains the most common options... there
|
||||
# is quite a bit more customization you can do.
|
||||
#
|
||||
# Lines beginning with two '#' marks are comments, and you shouldn't
|
||||
# uncomment them. Lines beginning with a single '#' mark are
|
||||
# commented-out code, and you may want to uncomment them when
|
||||
# appropriate.
|
||||
|
||||
init -1 python hide:
|
||||
|
||||
## Should we enable the use of developer tools? This should be
|
||||
## set to False before the game is released, so the user can't
|
||||
## cheat using developer tools.
|
||||
# Should we enable the use of developer tools? This should be
|
||||
# set to False before the game is released, so the user can't
|
||||
# cheat using developer tools.
|
||||
|
||||
config.developer = True
|
||||
|
||||
## These control the width and height of the screen.
|
||||
# These control the width and height of the screen.
|
||||
|
||||
config.screen_width = 800
|
||||
config.screen_height = 600
|
||||
|
||||
## This controls the title of the window, when Ren'Py is
|
||||
## running in a window.
|
||||
# This controls the title of the window, when Ren'Py is
|
||||
# running in a window.
|
||||
|
||||
config.window_title = u"Ren'Py Launcher"
|
||||
|
||||
@@ -51,135 +51,135 @@ init -1 python hide:
|
||||
config.name = "Ren'Py Launcher"
|
||||
config.version = renpy.version().split()[1]
|
||||
|
||||
#########################################
|
||||
#####################
|
||||
# Themes
|
||||
|
||||
## We then want to call a theme function. themes.roundrect is
|
||||
## a theme that features the use of rounded rectangles. It's
|
||||
## the only theme we currently support.
|
||||
##
|
||||
## The theme function takes a number of parameters that can
|
||||
## customize the color scheme.
|
||||
# We then want to call a theme function. themes.roundrect is
|
||||
# a theme that features the use of rounded rectangles. It's
|
||||
# the only theme we currently support.
|
||||
#
|
||||
# The theme function takes a number of parameters that can
|
||||
# customize the color scheme.
|
||||
|
||||
theme.roundrect(
|
||||
## Theme: Roundrect
|
||||
## Color scheme: Basic Blue
|
||||
# Theme: Roundrect
|
||||
# Color scheme: Basic Blue
|
||||
|
||||
## The color of an idle widget face.
|
||||
# The color of an idle widget face.
|
||||
widget = "#003c78",
|
||||
|
||||
## The color of a focused widget face.
|
||||
# The color of a focused widget face.
|
||||
widget_hover = "#0050a0",
|
||||
|
||||
## The color of the text in a widget.
|
||||
# The color of the text in a widget.
|
||||
widget_text = "#c8ffff",
|
||||
|
||||
## The color of the text in a selected widget. (For
|
||||
## example, the current value of a preference.)
|
||||
# The color of the text in a selected widget. (For
|
||||
# example, the current value of a preference.)
|
||||
widget_selected = "#ffffc8",
|
||||
|
||||
## The color of a disabled widget face.
|
||||
# The color of a disabled widget face.
|
||||
disabled = "#404040",
|
||||
|
||||
## The color of disabled widget text.
|
||||
# The color of disabled widget text.
|
||||
disabled_text = "#c8c8c8",
|
||||
|
||||
## The color of informational labels.
|
||||
# The color of informational labels.
|
||||
label = "#ffffff",
|
||||
|
||||
## The color of a frame containing widgets.
|
||||
# The color of a frame containing widgets.
|
||||
frame = "#6496c8",
|
||||
|
||||
## The background of the main menu. This can be a color
|
||||
## beginning with '#', or an image filename. The latter
|
||||
## should take up the full height and width of the screen.
|
||||
# The background of the main menu. This can be a color
|
||||
# beginning with '#', or an image filename. The latter
|
||||
# should take up the full height and width of the screen.
|
||||
mm_root = "#dcebff",
|
||||
|
||||
## The background of the game menu. This can be a color
|
||||
## beginning with '#', or an image filename. The latter
|
||||
## should take up the full height and width of the screen.
|
||||
# The background of the game menu. This can be a color
|
||||
# beginning with '#', or an image filename. The latter
|
||||
# should take up the full height and width of the screen.
|
||||
gm_root = "#dcebff",
|
||||
|
||||
## If this is True, the in-game window is rounded. If False,
|
||||
## the in-game window is square.
|
||||
# If this is True, the in-game window is rounded. If False,
|
||||
# the in-game window is square.
|
||||
rounded_window = False,
|
||||
|
||||
## And we're done with the theme. The theme will customize
|
||||
## various styles, so if we want to change them, we should
|
||||
## do so below.
|
||||
# And we're done with the theme. The theme will customize
|
||||
# various styles, so if we want to change them, we should
|
||||
# do so below.
|
||||
)
|
||||
|
||||
#########################################
|
||||
## Help.
|
||||
#####################
|
||||
# Help.
|
||||
|
||||
## This lets you configure the help option on the Ren'Py menus.
|
||||
## It may be:
|
||||
## - A label in the script, in which case that label is called to
|
||||
## show help to the user.
|
||||
## - A file name relative to the base directory, which is opened in a
|
||||
## web browser.
|
||||
## - None, to disable help.
|
||||
# This lets you configure the help option on the Ren'Py menus.
|
||||
# It may be:
|
||||
# - A label in the script, in which case that label is called to
|
||||
# show help to the user.
|
||||
# - A file name relative to the base directory, which is opened in a
|
||||
# web browser.
|
||||
# - None, to disable help.
|
||||
config.help = "README.html"
|
||||
|
||||
#########################################
|
||||
## Transitions.
|
||||
#####################
|
||||
# Transitions.
|
||||
|
||||
## Used when entering the game menu from the game.
|
||||
# Used when entering the game menu from the game.
|
||||
config.enter_transition = None
|
||||
|
||||
## Used when exiting the game menu to the game.
|
||||
# Used when exiting the game menu to the game.
|
||||
config.exit_transition = None
|
||||
|
||||
## Used between screens of the game menu.
|
||||
# Used between screens of the game menu.
|
||||
config.intra_transition = None
|
||||
|
||||
## Used when entering the game menu from the main menu.
|
||||
# Used when entering the game menu from the main menu.
|
||||
config.main_game_transition = None
|
||||
|
||||
## Used when returning to the main menu from the game.
|
||||
# Used when returning to the main menu from the game.
|
||||
config.game_main_transition = None
|
||||
|
||||
## Used when entering the main menu from the splashscreen.
|
||||
# Used when entering the main menu from the splashscreen.
|
||||
config.end_splash_transition = None
|
||||
|
||||
## Used when entering the main menu after the game has ended.
|
||||
# Used when entering the main menu after the game has ended.
|
||||
config.end_game_transition = None
|
||||
|
||||
## Used when a game is loaded.
|
||||
# Used when a game is loaded.
|
||||
config.after_load_transition = None
|
||||
|
||||
## Used when the window is shown.
|
||||
# Used when the window is shown.
|
||||
config.window_show_transition = None
|
||||
|
||||
## Used when the window is hidden.
|
||||
# Used when the window is hidden.
|
||||
config.window_hide_transition = None
|
||||
|
||||
|
||||
#########################################
|
||||
## This is the name of the directory where the game's data is
|
||||
## stored. (It needs to be set early, before any other init code
|
||||
## is run, so the persistent information can be found by the init code.)
|
||||
#####################
|
||||
# This is the name of the directory where the game's data is
|
||||
# stored. (It needs to be set early, before any other init code
|
||||
# is run, so the persistent information can be found by the init code.)
|
||||
python early:
|
||||
config.save_directory = "launcher-4"
|
||||
|
||||
init -1 python hide:
|
||||
#########################################
|
||||
## Default values of Preferences.
|
||||
#####################
|
||||
# Default values of Preferences.
|
||||
|
||||
## Note: These options are only evaluated the first time a
|
||||
## game is run. To have them run a second time, delete
|
||||
## game/saves/persistent
|
||||
# Note: These options are only evaluated the first time a
|
||||
# game is run. To have them run a second time, delete
|
||||
# game/saves/persistent
|
||||
|
||||
## Should we start in fullscreen mode?
|
||||
# Should we start in fullscreen mode?
|
||||
|
||||
config.default_fullscreen = False
|
||||
|
||||
## The default text speed in characters per second. 0 is infinite.
|
||||
# The default text speed in characters per second. 0 is infinite.
|
||||
|
||||
config.default_text_cps = 0
|
||||
|
||||
#########################################
|
||||
## More customizations can go here.
|
||||
#####################
|
||||
# More customizations can go here.
|
||||
|
||||
config.sound = False
|
||||
config.quit_action = Quit(confirm=False)
|
||||
@@ -188,53 +188,72 @@ init -1 python hide:
|
||||
config.windows_icon = "images/logo32.png"
|
||||
config.has_autosave = False
|
||||
config.log_enable = False
|
||||
config.mouse_hide_time = 86400 * 366
|
||||
config.mouse_hide_time = None
|
||||
|
||||
_game_menu_screen = None
|
||||
|
||||
config.underlay = [
|
||||
renpy.Keymap(
|
||||
screenshot = _screenshot,
|
||||
reload_game = _reload_game,
|
||||
developer = _developer,
|
||||
quit = renpy.quit_event,
|
||||
iconify = renpy.iconify,
|
||||
help = _help,
|
||||
choose_renderer = renpy.curried_call_in_new_context("_choose_renderer"),
|
||||
console = _console.enter,
|
||||
profile_once = _profile_once,
|
||||
memory_profile = _memory_profile,
|
||||
self_voicing = Preference("self voicing", "toggle"),
|
||||
clipboard_voicing = Preference("clipboard voicing", "toggle"),
|
||||
debug_voicing = Preference("debug voicing", "toggle"),
|
||||
progress_screen = _progress_screen,
|
||||
),
|
||||
]
|
||||
]
|
||||
|
||||
config.rollback_enabled = False
|
||||
|
||||
translate None python:
|
||||
config.rtl = False
|
||||
|
||||
## This section controls how to build Ren'Py. (Building the launcher is how
|
||||
## we build Ren'Py distributions.)
|
||||
# This section controls how to build Ren'Py. (Building the launcher is how
|
||||
# we build Ren'Py distributions.)
|
||||
init python:
|
||||
|
||||
## We're building Ren'Py tonight.
|
||||
# We're building Ren'Py tonight.
|
||||
build.renpy = True
|
||||
|
||||
## The version number that's supplied to the updater.
|
||||
# The version number that's supplied to the updater.
|
||||
build.version = "Ren'Py {}".format(config.version)
|
||||
|
||||
## The name that's used for directories and archive files. For example, if
|
||||
## this is 'mygame-1.0', the windows distribution will be in the
|
||||
## directory 'mygame-1.0-win', in the 'mygame-1.0-win.zip' file.
|
||||
# The name that's used for directories and archive files. For example, if
|
||||
# this is 'mygame-1.0', the windows distribution will be in the
|
||||
# directory 'mygame-1.0-win', in the 'mygame-1.0-win.zip' file.
|
||||
|
||||
if 'RENPY_NIGHTLY' in os.environ:
|
||||
build.directory_name = os.environ['RENPY_NIGHTLY']
|
||||
if 'RENPY_BUILD_VERSION' in os.environ:
|
||||
build.directory_name = "renpy-" + os.environ['RENPY_BUILD_VERSION']
|
||||
else:
|
||||
build.directory_name = "renpy-" + config.version.rsplit('.', 1)[0]
|
||||
|
||||
## The name that's uses for executables - the program that users will run
|
||||
## to start the game. For example, if this is 'mygame', then on Windows,
|
||||
## users can click 'mygame.exe' to start the game.
|
||||
# The name that's uses for executables - the program that users will run
|
||||
# to start the game. For example, if this is 'mygame', then on Windows,
|
||||
# users can click 'mygame.exe' to start the game.
|
||||
build.executable_name = "renpy"
|
||||
|
||||
## If True, Ren'Py will include update information into packages. This
|
||||
## allows the updater to run.
|
||||
# If True, Ren'Py will include update information into packages. This
|
||||
# allows the updater to run.
|
||||
build.include_update = True
|
||||
|
||||
## Clear out various file patterns.
|
||||
# Allow empty directories, so we can distribute the images directory.
|
||||
build.exclude_empty_directories = False
|
||||
|
||||
|
||||
# Mac signing options.
|
||||
import os
|
||||
build.mac_identity = os.environ.get("RENPY_MAC_IDENTITY", None)
|
||||
build.mac_codesign_command = [ "/home/tom/ab/renpy-deps/mac/mac_sign_client.sh", "{identity}", "{app}" ]
|
||||
build.mac_create_dmg_command = [ "/home/tom/ab/renpy-deps/mac/mac_dmg_client.sh", "{identity}", "{volname}", "{sourcedir}", "{dmg}" ]
|
||||
build.mac_codesign_dmg_command = [ "/bin/true" ]
|
||||
|
||||
|
||||
# Clear out various file patterns.
|
||||
build.renpy_patterns = [ ]
|
||||
build.early_base_patterns = [ ]
|
||||
build.base_patterns = [ ]
|
||||
@@ -243,15 +262,24 @@ init python:
|
||||
# We don't need to clear out the executable patterns, since they're
|
||||
# correct for Ren'Py.
|
||||
|
||||
## Now, add the Ren'Py distribution in using classify_renpy.
|
||||
|
||||
build.classify_renpy("rapt/**", "rapt")
|
||||
# Now, add the Ren'Py distribution in using classify_renpy.
|
||||
|
||||
build.classify_renpy("**~", None)
|
||||
build.classify_renpy("**/#*", None)
|
||||
build.classify_renpy("**/thumbs.db", None)
|
||||
build.classify_renpy("**/.*", None)
|
||||
|
||||
build.classify_renpy("rapt/**", "rapt")
|
||||
|
||||
build.classify_renpy("renios/prototype/base/", None)
|
||||
build.classify_renpy("renios/prototype/prototype.xcodeproj/*.xcworkspace/", None)
|
||||
build.classify_renpy("renios/prototype/prototype.xcodeproj/xcuserdata/", None)
|
||||
build.classify_renpy("renios/prototype/**", "renios")
|
||||
build.classify_renpy("renios/buildlib/**", "renios")
|
||||
build.classify_renpy("renios/ios.py", "renios")
|
||||
build.classify_renpy("renios/version.txt", "renios")
|
||||
build.classify_renpy("renios/", "renios")
|
||||
|
||||
build.classify_renpy("**.old", None)
|
||||
build.classify_renpy("**.new", None)
|
||||
build.classify_renpy("**.bak", None)
|
||||
@@ -266,28 +294,33 @@ init python:
|
||||
|
||||
# main source.
|
||||
|
||||
def source_and_binary(pattern):
|
||||
def source_and_binary(pattern, source="source", binary="binary"):
|
||||
"""
|
||||
Classifies source and binary files beginning with `pattern`.
|
||||
.pyo, .rpyc, .rpycm, and .rpyb go into binary, everything
|
||||
else goes into source.
|
||||
"""
|
||||
|
||||
build.classify_renpy(pattern + ".pyo", "binary")
|
||||
build.classify_renpy(pattern + ".rpyc", "binary")
|
||||
build.classify_renpy(pattern + ".rpymc", "binary")
|
||||
build.classify_renpy(pattern + ".rpyb", "binary")
|
||||
build.classify_renpy(pattern, "source")
|
||||
build.classify_renpy(pattern + "/**.pyo", binary)
|
||||
build.classify_renpy(pattern + "/**.rpyc", binary)
|
||||
build.classify_renpy(pattern + "/**.rpymc", binary)
|
||||
build.classify_renpy(pattern + "/**/cache/*", binary)
|
||||
|
||||
build.classify_renpy("renpy.py", "source")
|
||||
source_and_binary("renpy/**")
|
||||
build.classify_renpy(pattern + "/**", source)
|
||||
|
||||
build.classify_renpy("renpy.py", "binary")
|
||||
source_and_binary("renpy")
|
||||
|
||||
# games.
|
||||
build.classify_renpy("launcher/game/theme/", None)
|
||||
source_and_binary("launcher/**")
|
||||
source_and_binary("templates/**")
|
||||
source_and_binary("the_question/**")
|
||||
source_and_binary("tutorial/**")
|
||||
build.classify_renpy("gui/game/gui/", None)
|
||||
|
||||
source_and_binary("launcher")
|
||||
source_and_binary("templates", binary=None)
|
||||
source_and_binary("gui", binary=None)
|
||||
|
||||
source_and_binary("the_question")
|
||||
source_and_binary("tutorial")
|
||||
|
||||
# docs.
|
||||
build.classify_renpy("doc/", "source")
|
||||
@@ -305,16 +338,18 @@ init python:
|
||||
build.classify_renpy("module/*.py*", "source")
|
||||
build.classify_renpy("module/include/", "source")
|
||||
build.classify_renpy("module/include/*.pxd", "source")
|
||||
build.classify_renpy("module/include/*.pxi", "source")
|
||||
build.classify_renpy("module/pysdlsound/", "source")
|
||||
build.classify_renpy("module/pysdlsound/*.py", "source")
|
||||
build.classify_renpy("module/pysdlsound/*.pyx", "source")
|
||||
|
||||
# all-platforms binary.
|
||||
build.classify_renpy("lib/**/_renpysteam*", None)
|
||||
build.classify_renpy("lib/**/*steam_api*", None)
|
||||
build.classify_renpy("lib/*/renpy", None)
|
||||
build.classify_renpy("lib/*/renpy.exe", None)
|
||||
build.classify_renpy("lib/**", "binary")
|
||||
build.classify_renpy("renpy.sh", "binary")
|
||||
build.classify_renpy("renpy.exe", "binary")
|
||||
# renpy.app is now built from scratch from distribute.rpy.
|
||||
|
||||
# jedit rules.
|
||||
@@ -335,12 +370,16 @@ init python:
|
||||
# Packages.
|
||||
build.packages = [ ]
|
||||
|
||||
build.package("sdk", "zip tar.bz2", "source binary")
|
||||
build.package("source", "tar.bz2", "source", update=False)
|
||||
build.package("sdk", "zip tar.bz2 dmg", "source binary")
|
||||
build.package("source", "tar.bz2", "source source_only", update=False)
|
||||
|
||||
build.package("jedit", "zip", "jedit", dlc=True)
|
||||
build.package("editra-linux", "tar.bz2", "editra-all editra-linux", dlc=True)
|
||||
build.package("editra-mac", "zip", "editra-all editra-mac", dlc=True)
|
||||
build.package("editra-windows", "zip", "editra-all editra-windows", dlc=True)
|
||||
build.package("rapt", "zip", "rapt", dlc=True)
|
||||
build.package("renios", "zip", "renios", dlc=True)
|
||||
|
||||
|
||||
# Enable the special launcher translation mode.
|
||||
define config.translate_launcher = True
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -107,7 +107,28 @@ init python in distribute:
|
||||
"""
|
||||
|
||||
def __init__(self, filename):
|
||||
self.zipfile = ZipFile(filename, "w", zipfile.ZIP_DEFLATED)
|
||||
self.zipfile = ZipFile(filename, "w", zipfile.ZIP_DEFLATED, True)
|
||||
|
||||
def get_date_time(self, path):
|
||||
"""
|
||||
Gets the datetime for a file. If the time doesn't exist or is
|
||||
weird, use the current time instead.
|
||||
"""
|
||||
|
||||
try:
|
||||
s = os.stat(path)
|
||||
rv = time.gmtime(s.st_mtime)[:6]
|
||||
|
||||
# Check that the time is sensible.
|
||||
if rv[0] < 2000:
|
||||
rv = None
|
||||
except:
|
||||
rv = None
|
||||
|
||||
if rv is None:
|
||||
rv = time.gmtime()[:6]
|
||||
|
||||
return rv
|
||||
|
||||
def add_file(self, name, path, xbit):
|
||||
|
||||
@@ -115,13 +136,7 @@ init python in distribute:
|
||||
raise Exception("path for " + name + " must not be None.")
|
||||
|
||||
zi = zipfile.ZipInfo(name)
|
||||
|
||||
try:
|
||||
s = os.stat(path)
|
||||
zi.date_time = time.gmtime(s.st_mtime)[:6]
|
||||
except:
|
||||
zi.date_time = time.gmtime()[:6]
|
||||
|
||||
zi.date_time = self.get_date_time(path)
|
||||
zi.compress_type = zipfile.ZIP_DEFLATED
|
||||
zi.create_system = 3
|
||||
|
||||
@@ -137,9 +152,7 @@ init python in distribute:
|
||||
return
|
||||
|
||||
zi = zipfile.ZipInfo(name + "/")
|
||||
|
||||
s = os.stat(path)
|
||||
zi.date_time = time.gmtime(s.st_mtime)[:6]
|
||||
zi.date_time = self.get_date_time(path)
|
||||
zi.compress_type = zipfile.ZIP_STORED
|
||||
zi.create_system = 3
|
||||
zi.external_attr = (long(0040755) << 16) | 0x10
|
||||
@@ -209,6 +222,7 @@ init python in distribute:
|
||||
|
||||
def add_file(self, name, path, xbit):
|
||||
fn = os.path.join(self.path, name)
|
||||
|
||||
shutil.copy2(path, fn)
|
||||
|
||||
if xbit:
|
||||
|
||||
@@ -41,6 +41,8 @@ IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
|
||||
OF SUCH DAMAGE.
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
|
||||
__revision__ = "$LastChangedRevision: 63 $"
|
||||
__author__ = 'Ero Carrera'
|
||||
__version__ = '1.2.10-%d' % int( __revision__[21:-2] )
|
||||
@@ -1668,7 +1670,7 @@ class PE:
|
||||
"""
|
||||
|
||||
for warning in self.__warnings:
|
||||
print '>', warning
|
||||
print('>', warning)
|
||||
|
||||
|
||||
def full_load(self):
|
||||
@@ -3251,7 +3253,7 @@ class PE:
|
||||
|
||||
def print_info(self):
|
||||
"""Print all the PE header information in a human readable from."""
|
||||
print self.dump_info()
|
||||
print(self.dump_info())
|
||||
|
||||
|
||||
def dump_info(self, dump=None):
|
||||
@@ -3930,5 +3932,4 @@ class PE:
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
pe = PE(sys.argv[1])
|
||||
print pe
|
||||
|
||||
print(pe)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -25,6 +25,9 @@ init python:
|
||||
|
||||
config.gl_enable = persistent.gl_enable
|
||||
|
||||
if persistent.show_edit_funcs is None:
|
||||
persistent.show_edit_funcs = True
|
||||
|
||||
if persistent.windows_console is None:
|
||||
persistent.windows_console = False
|
||||
|
||||
@@ -168,6 +171,7 @@ screen preferences:
|
||||
|
||||
textbutton _("Hardware rendering") style "l_checkbox" action ToggleField(persistent, "gl_enable")
|
||||
textbutton _("Show templates") style "l_checkbox" action ToggleField(persistent, "show_templates")
|
||||
textbutton _("Show edit file section") style "l_checkbox" action ToggleField(persistent, "show_edit_funcs")
|
||||
textbutton _("Large fonts") style "l_checkbox" action [ ToggleField(persistent, "large_print"), renpy.utter_restart ]
|
||||
|
||||
if renpy.windows:
|
||||
@@ -222,7 +226,7 @@ screen preferences:
|
||||
textbutton tlname action Language(tlvalue) style "l_list"
|
||||
|
||||
|
||||
textbutton _("Back") action Jump("front_page") style "l_left_button"
|
||||
textbutton _("Return") action Jump("front_page") style "l_left_button"
|
||||
|
||||
label projects_directory_preference:
|
||||
call choose_projects_directory
|
||||
|
||||
+91
-79
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -22,9 +22,9 @@
|
||||
# Code that manages projects.
|
||||
|
||||
init python:
|
||||
try:
|
||||
if renpy.windows:
|
||||
import EasyDialogsWin as EasyDialogs
|
||||
except:
|
||||
else:
|
||||
EasyDialogs = None
|
||||
|
||||
import os
|
||||
@@ -53,7 +53,10 @@ init python in project:
|
||||
|
||||
class Project(object):
|
||||
|
||||
def __init__(self, path):
|
||||
def __init__(self, path, name=None):
|
||||
|
||||
if name is None:
|
||||
name = os.path.basename(path)
|
||||
|
||||
while path.endswith("/"):
|
||||
path = path[:-1]
|
||||
@@ -61,11 +64,7 @@ init python in project:
|
||||
if not os.path.exists(path):
|
||||
raise Exception("{} does not exist.".format(path))
|
||||
|
||||
# The name of the project.
|
||||
if path.endswith(".app/Contents/Resources/autorun"):
|
||||
self.name = os.path.basename(path[:-len(".app/Contents/Resources/autorun")])
|
||||
else:
|
||||
self.name = os.path.basename(path)
|
||||
self.name = name
|
||||
|
||||
# The path to the project.
|
||||
self.path = path
|
||||
@@ -120,7 +119,23 @@ init python in project:
|
||||
data = self.data
|
||||
|
||||
data.setdefault("build_update", False)
|
||||
data.setdefault("packages", [ "all" ])
|
||||
data.setdefault("packages", [ "pc", "mac" ])
|
||||
data.setdefault("add_from", True)
|
||||
data.setdefault("force_recompile", True)
|
||||
|
||||
if "renamed_all" not in data:
|
||||
dp = data["packages"]
|
||||
|
||||
if "all" in dp:
|
||||
dp.remove("all")
|
||||
|
||||
if "pc" not in dp:
|
||||
dp.append("pc")
|
||||
|
||||
if "mac" not in dp:
|
||||
dp.append("mac")
|
||||
|
||||
data["renamed_all"] = True
|
||||
|
||||
def make_tmp(self):
|
||||
"""
|
||||
@@ -131,10 +146,10 @@ init python in project:
|
||||
if self.tmp and os.path.isdir(self.tmp):
|
||||
return
|
||||
|
||||
tmp = os.path.join(self.path, "tmp")
|
||||
tmp = os.path.join(config.renpy_base, "tmp", self.name)
|
||||
|
||||
try:
|
||||
os.mkdir(tmp)
|
||||
os.makedirs(tmp)
|
||||
except:
|
||||
pass
|
||||
|
||||
@@ -210,19 +225,24 @@ init python in project:
|
||||
environ = dict(os.environ)
|
||||
environ.update(env)
|
||||
|
||||
for k in environ:
|
||||
environ[k] = renpy.fsencode(environ[k])
|
||||
encoded_environ = { }
|
||||
|
||||
for k, v in environ.items():
|
||||
if v is None:
|
||||
continue
|
||||
|
||||
encoded_environ[renpy.fsencode(k)] = renpy.fsencode(v)
|
||||
|
||||
# Launch the project.
|
||||
cmd = [ renpy.fsencode(i) for i in cmd ]
|
||||
|
||||
p = subprocess.Popen(cmd, env=environ)
|
||||
p = subprocess.Popen(cmd, env=encoded_environ)
|
||||
|
||||
if wait:
|
||||
if p.wait():
|
||||
interface.error(_("Launching the project failed."), _("Please ensure that your project launches normally before running this command."))
|
||||
|
||||
def update_dump(self, force=False, gui=True):
|
||||
def update_dump(self, force=False, gui=True, compile=False):
|
||||
"""
|
||||
If the dumpfile does not exist, runs Ren'Py to create it. Otherwise,
|
||||
loads it in iff it's newer than the one that's already loaded.
|
||||
@@ -235,7 +255,10 @@ init python in project:
|
||||
if gui:
|
||||
interface.processing(_("Ren'Py is scanning the project..."))
|
||||
|
||||
self.launch(["quit"], wait=True)
|
||||
if compile:
|
||||
self.launch(["compile", "--keep-orphan-rpyc" ], wait=True)
|
||||
else:
|
||||
self.launch(["quit"], wait=True)
|
||||
|
||||
if not os.path.exists(dump_filename):
|
||||
self.dump["error"] = True
|
||||
@@ -323,6 +346,13 @@ init python in project:
|
||||
|
||||
return rv
|
||||
|
||||
def exists(self, fn):
|
||||
"""
|
||||
Returns true if the file exists in the game.
|
||||
"""
|
||||
|
||||
return os.path.exists(os.path.join(self.path, fn))
|
||||
|
||||
|
||||
class ProjectManager(object):
|
||||
"""
|
||||
@@ -373,6 +403,33 @@ init python in project:
|
||||
self.projects.sort(key=lambda p : p.name.lower())
|
||||
self.templates.sort(key=lambda p : p.name.lower())
|
||||
|
||||
|
||||
def find_basedir(self, d):
|
||||
"""
|
||||
Try to find a project basedir in d.
|
||||
"""
|
||||
|
||||
def has_game(dn):
|
||||
return os.path.isdir(os.path.join(dn, "game"))
|
||||
|
||||
if has_game(d):
|
||||
return d
|
||||
|
||||
dn = os.path.join(d, "Contents", "Resources", "autorun")
|
||||
if has_game(dn):
|
||||
return dn
|
||||
|
||||
for dn in os.listdir(d):
|
||||
if not dn.endswith(".app"):
|
||||
continue
|
||||
|
||||
dn = os.path.join(d, dn, "Contents", "Resources", "autorun")
|
||||
|
||||
if has_game(dn):
|
||||
return dn
|
||||
|
||||
return None
|
||||
|
||||
def scan_directory(self, d):
|
||||
"""
|
||||
Scans for projects in directories directly underneath `d`.
|
||||
@@ -393,21 +450,21 @@ init python in project:
|
||||
if not os.path.isdir(ppath):
|
||||
continue
|
||||
|
||||
autorun = os.path.join(ppath, "Contents", "Resources", "autorun")
|
||||
if os.path.exists(autorun):
|
||||
ppath = autorun
|
||||
try:
|
||||
ppath = self.find_basedir(ppath)
|
||||
except:
|
||||
continue
|
||||
|
||||
# A project has either a game/ directory, or a project.json
|
||||
# file.
|
||||
if (not os.path.isdir(os.path.join(ppath, "game"))) and (not os.path.exists(os.path.join(ppath, "project.json"))):
|
||||
if ppath is None:
|
||||
continue
|
||||
|
||||
if ppath in self.scanned:
|
||||
continue
|
||||
|
||||
self.scanned.add(ppath)
|
||||
|
||||
# We have a project directory, so create a Project.
|
||||
p = Project(ppath)
|
||||
p = Project(ppath, pdir)
|
||||
|
||||
project_type = p.data.get("type", "normal")
|
||||
|
||||
@@ -544,6 +601,11 @@ init python in project:
|
||||
if isinstance(persistent.projects_directory, str):
|
||||
persistent.projects_directory = renpy.fsdecode(persistent.projects_directory)
|
||||
|
||||
init 10 python:
|
||||
if persistent.projects_directory is not None:
|
||||
if not directory_is_writable(persistent.projects_directory):
|
||||
persistent.projects_directory = None
|
||||
|
||||
###############################################################################
|
||||
# Code to choose the projects directory.
|
||||
|
||||
@@ -553,62 +615,12 @@ label choose_projects_directory:
|
||||
|
||||
interface.interaction(_("PROJECTS DIRECTORY"), _("Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"), _("This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."),)
|
||||
|
||||
path = persistent.projects_directory
|
||||
path, is_default = choose_directory(persistent.projects_directory)
|
||||
|
||||
if path:
|
||||
default_path = path
|
||||
else:
|
||||
try:
|
||||
default_path = os.path.dirname(os.path.abspath(config.renpy_base))
|
||||
except:
|
||||
default_path = os.path.abspath(config.renpy_base)
|
||||
|
||||
|
||||
if EasyDialogs:
|
||||
|
||||
choice = EasyDialogs.AskFolder(defaultLocation=default_path, wanted=unicode)
|
||||
|
||||
if choice is not None:
|
||||
path = choice
|
||||
else:
|
||||
path = None
|
||||
|
||||
else:
|
||||
|
||||
try:
|
||||
|
||||
cmd = [ "/usr/bin/python", os.path.join(config.gamedir, "tkaskdir.py"), renpy.fsencode(default_path) ]
|
||||
|
||||
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
|
||||
choice = p.stdout.read()
|
||||
code = p.wait()
|
||||
|
||||
except:
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
code = 0
|
||||
choice = ""
|
||||
path = None
|
||||
|
||||
interface.error(_("Ren'Py was unable to run python with tkinter to choose the projects directory. Please install the python-tk or tkinter package."), label=None)
|
||||
|
||||
if code:
|
||||
interface.error(_("Ren'Py was unable to run python with tkinter to choose the projects directory. Please install the python-tk or tkinter package."), label=None)
|
||||
|
||||
elif choice:
|
||||
path = choice.decode("utf-8")
|
||||
|
||||
if path is None:
|
||||
path = default_path
|
||||
if is_default:
|
||||
interface.info(_("Ren'Py has set the projects directory to:"), "[path!q]", path=path)
|
||||
|
||||
path = renpy.fsdecode(path)
|
||||
|
||||
if os.path.isdir(path):
|
||||
persistent.projects_directory = path
|
||||
else:
|
||||
path = os.path.abspath(config.renpy_base)
|
||||
persistent.projects_directory = path
|
||||
|
||||
project.manager.scan()
|
||||
|
||||
@@ -622,7 +634,7 @@ init python:
|
||||
|
||||
args = ap.parse_args()
|
||||
|
||||
persistent.projects_directory = args.projects
|
||||
persistent.projects_directory = renpy.fsdecode(args.projects)
|
||||
renpy.save_persistent()
|
||||
|
||||
return False
|
||||
@@ -633,7 +645,7 @@ init python:
|
||||
ap = renpy.arguments.ArgumentParser()
|
||||
args = ap.parse_args()
|
||||
|
||||
print persistent.projects_directory
|
||||
print renpy.fsencode(persistent.projects_directory)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
+229
-205
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
@@ -19,8 +19,22 @@
|
||||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
init -1:
|
||||
|
||||
# Fonts.
|
||||
define gui.LIGHT_FONT = "fonts/Roboto-Light.ttf"
|
||||
define gui.REGULAR_FONT = "fonts/Roboto-Regular.ttf"
|
||||
|
||||
# Used to scale the size of fonts.
|
||||
define gui.FONT_SCALE = 1.0
|
||||
|
||||
# Should places where the regular font used be bolded?
|
||||
define gui.REGULAR_BOLD = False
|
||||
|
||||
init -1 python:
|
||||
|
||||
config.defer_styles = True
|
||||
|
||||
# The color of non-interactive text.
|
||||
TEXT = "#545454"
|
||||
|
||||
@@ -63,12 +77,6 @@ init -1 python:
|
||||
# The color of input text.
|
||||
INPUT_COLOR = "#d86b45"
|
||||
|
||||
# FONTS/WEIGHTS
|
||||
LIGHT = "Roboto-Light.ttf"
|
||||
REGULAR = "Roboto-Regular.ttf"
|
||||
|
||||
if persistent.large_print:
|
||||
LIGHT = REGULAR
|
||||
|
||||
init 1 python:
|
||||
|
||||
@@ -80,8 +88,18 @@ init 1 python:
|
||||
if persistent.large_print and n < 18:
|
||||
n = 18
|
||||
|
||||
n = int(n * gui.FONT_SCALE)
|
||||
|
||||
return n
|
||||
|
||||
def light_font():
|
||||
if persistent.large_print:
|
||||
return gui.REGULAR_FONT
|
||||
|
||||
return gui.LIGHT_FONT
|
||||
|
||||
def regular_font():
|
||||
return gui.REGULAR_FONT
|
||||
|
||||
INDENT = 20
|
||||
HALF_INDENT = 10
|
||||
@@ -104,240 +122,246 @@ init 1 python:
|
||||
|
||||
def checkbox(full, color):
|
||||
if full:
|
||||
return im.Twocolor("images/checkbox_full.png", color, color, yalign=0.5)
|
||||
return im.Twocolor("images/checkbox_full.png", color, color, style="l_checkbox_box")
|
||||
else:
|
||||
return im.Twocolor("images/checkbox_empty.png", color, color, yalign=0.5)
|
||||
|
||||
init 1:
|
||||
|
||||
# The default style.
|
||||
style l_default is default:
|
||||
font LIGHT
|
||||
color TEXT
|
||||
idle_color IDLE
|
||||
hover_color HOVER
|
||||
size size(18)
|
||||
|
||||
style l_text is l_default
|
||||
|
||||
style l_button is l_default
|
||||
style l_button_text is l_default:
|
||||
insensitive_color DISABLED
|
||||
selected_font REGULAR
|
||||
|
||||
# A small button, used at the bottom of the screen.
|
||||
style l_link is l_default
|
||||
style l_link_text is l_default:
|
||||
size size(14)
|
||||
font LIGHT
|
||||
|
||||
# Action buttons on the bottom of the screen.
|
||||
style l_right_button is l_default:
|
||||
xalign 1.0
|
||||
ypos 600 - 128 + 12
|
||||
left_margin 8 + INDENT
|
||||
right_margin 10 + INDENT
|
||||
|
||||
style l_right_button_text is l_default:
|
||||
size size(30)
|
||||
|
||||
style l_left_button is l_right_button:
|
||||
xalign 0.0
|
||||
|
||||
style l_left_button_text is l_right_button_text
|
||||
return im.Twocolor("images/checkbox_empty.png", color, color, style="l_checkbox_box")
|
||||
|
||||
|
||||
# The root frame. This contains everything but the bottom navigation,
|
||||
# and buttons.
|
||||
style l_root is l_default:
|
||||
background BACKGROUND
|
||||
xpadding 10
|
||||
top_padding 64
|
||||
bottom_padding 128
|
||||
|
||||
# An inner window.
|
||||
style l_window is l_default:
|
||||
background WINDOW
|
||||
left_padding 6
|
||||
xfill True
|
||||
yfill True
|
||||
# The default style.
|
||||
style l_default is default:
|
||||
font light_font()
|
||||
color TEXT
|
||||
idle_color IDLE
|
||||
hover_color HOVER
|
||||
size size(18)
|
||||
|
||||
# Normal size labels.
|
||||
style l_label is l_default:
|
||||
xfill True
|
||||
top_padding 10
|
||||
bottom_padding 8
|
||||
bottom_margin 12
|
||||
background SEPARATOR
|
||||
style l_text is l_default
|
||||
|
||||
style l_label_text is l_default:
|
||||
size size(24)
|
||||
xpos INDENT
|
||||
yoffset 6
|
||||
style l_button is l_default
|
||||
style l_button_text is l_default:
|
||||
insensitive_color DISABLED
|
||||
selected_font regular_font()
|
||||
selected_bold gui.REGULAR_BOLD
|
||||
|
||||
style l_label_small is l_default:
|
||||
xfill True
|
||||
bottom_padding 8
|
||||
bottom_margin HALF_SPACER_HEIGHT
|
||||
background SEPARATOR
|
||||
# A small button, used at the bottom of the screen.
|
||||
style l_link is l_default
|
||||
style l_link_text is l_default:
|
||||
size size(14)
|
||||
font light_font()
|
||||
|
||||
# Small labels.
|
||||
style l_label_small_text is l_default:
|
||||
xpos INDENT
|
||||
yoffset 6
|
||||
size size(20)
|
||||
# Action buttons on the bottom of the screen.
|
||||
style l_right_button is l_default:
|
||||
xalign 1.0
|
||||
ypos 600 - 128 + 12
|
||||
left_margin 8 + INDENT
|
||||
right_margin 10 + INDENT
|
||||
|
||||
# Alternate labels. This nests inside an l_label, and gives a button
|
||||
# or label that's nested inside another label.
|
||||
style l_right_button_text is l_default:
|
||||
size size(30)
|
||||
|
||||
style l_alternate is l_default:
|
||||
xalign 1.0
|
||||
yalign 1.0
|
||||
yoffset 4
|
||||
right_margin INDENT
|
||||
style l_left_button is l_right_button:
|
||||
xalign 0.0
|
||||
|
||||
style l_alternate_text is l_default:
|
||||
size size(14)
|
||||
font LIGHT
|
||||
text_align 1.0
|
||||
style l_left_button_text is l_right_button_text
|
||||
|
||||
style l_small_button is l_button
|
||||
|
||||
style l_small_button_text is l_button_text:
|
||||
size size(14)
|
||||
# The root frame. This contains everything but the bottom navigation,
|
||||
# and buttons.
|
||||
style l_root is l_default:
|
||||
background BACKGROUND
|
||||
xpadding 10
|
||||
top_padding 64
|
||||
bottom_padding 128
|
||||
|
||||
style l_small_text is l_text:
|
||||
size size(14)
|
||||
# An inner window.
|
||||
style l_window is l_default:
|
||||
background WINDOW
|
||||
left_padding 6
|
||||
xfill True
|
||||
yfill True
|
||||
|
||||
# Indents its contents.
|
||||
style l_indent is l_default:
|
||||
left_margin INDENT
|
||||
# Normal size labels.
|
||||
style l_label is l_default:
|
||||
xfill True
|
||||
top_padding 10
|
||||
bottom_padding 8
|
||||
bottom_margin 12
|
||||
background SEPARATOR
|
||||
|
||||
# Indents its contents and pads vertically.
|
||||
style l_indent_margin is l_indent:
|
||||
ymargin 6
|
||||
style l_label_text is l_default:
|
||||
size size(24)
|
||||
xpos INDENT
|
||||
yoffset 6
|
||||
|
||||
# Lists.
|
||||
style l_list is l_default:
|
||||
left_padding HALF_INDENT
|
||||
xfill True
|
||||
selected_background REVERSE_IDLE
|
||||
selected_hover_background REVERSE_HOVER
|
||||
style l_label_small is l_default:
|
||||
xfill True
|
||||
bottom_padding 8
|
||||
bottom_margin HALF_SPACER_HEIGHT
|
||||
background SEPARATOR
|
||||
|
||||
style l_list_text is l_default:
|
||||
idle_color IDLE
|
||||
hover_color HOVER
|
||||
selected_idle_color REVERSE_TEXT
|
||||
selected_hover_color REVERSE_TEXT
|
||||
insensitive_color DISABLED
|
||||
# Small labels.
|
||||
style l_label_small_text is l_default:
|
||||
xpos INDENT
|
||||
yoffset 6
|
||||
size size(20)
|
||||
|
||||
style l_list2 is l_list:
|
||||
left_padding (HALF_INDENT + INDENT)
|
||||
# Alternate labels. This nests inside an l_label, and gives a button
|
||||
# or label that's nested inside another label.
|
||||
|
||||
style l_list2_text is l_list_text
|
||||
style l_alternate is l_default:
|
||||
xalign 1.0
|
||||
yalign 1.0
|
||||
yoffset 4
|
||||
right_margin INDENT
|
||||
|
||||
# Scrollbar.
|
||||
style l_vscrollbar is l_default:
|
||||
thumb Fixed(
|
||||
Solid(SCROLLBAR_IDLE, xmaximum=8, xalign=0.5),
|
||||
Image("images/vscrollbar_center.png", xalign=0.5, yalign=0.5),
|
||||
xmaximum = SCROLLBAR_SIZE)
|
||||
hover_thumb Fixed(
|
||||
Solid(SCROLLBAR_HOVER, xmaximum=8, xalign=0.5),
|
||||
Image("images/vscrollbar_center.png", xalign=0.5, yalign=0.5),
|
||||
xmaximum = SCROLLBAR_SIZE)
|
||||
xmaximum SCROLLBAR_SIZE
|
||||
bar_vertical True
|
||||
bar_invert True
|
||||
unscrollable "hide"
|
||||
style l_alternate_text is l_default:
|
||||
size size(14)
|
||||
font light_font()
|
||||
text_align 1.0
|
||||
|
||||
# Information window.
|
||||
style l_info_vbox is vbox:
|
||||
yalign 0.5
|
||||
xalign 0.5
|
||||
xfill True
|
||||
style l_small_button is l_button
|
||||
|
||||
style l_info_frame is l_default:
|
||||
ypadding 21
|
||||
xfill True
|
||||
background Fixed(
|
||||
INFO_WINDOW,
|
||||
Frame(PATTERN, 0, 0, tile=True, ymaximum=5, yalign=0.0, yoffset=8),
|
||||
Frame(PATTERN, 0, 0, tile=True, ymaximum=5, yalign=1.0, yoffset=-8),
|
||||
)
|
||||
yminimum 180
|
||||
ypos 75
|
||||
style l_small_button_text is l_button_text:
|
||||
size size(14)
|
||||
|
||||
style l_info_label is l_default:
|
||||
xalign 0.5
|
||||
ypos 75
|
||||
yanchor 1.0
|
||||
yoffset 12
|
||||
style l_small_text is l_text:
|
||||
size size(14)
|
||||
|
||||
style l_info_label_text is l_default:
|
||||
size size(36)
|
||||
# Indents its contents.
|
||||
style l_indent is l_default:
|
||||
left_margin INDENT
|
||||
|
||||
style l_info_text is l_default:
|
||||
xalign 0.5
|
||||
# Indents its contents and pads vertically.
|
||||
style l_indent_margin is l_indent:
|
||||
ymargin 6
|
||||
|
||||
style l_info_button is l_button:
|
||||
xalign 0.5
|
||||
xmargin 50
|
||||
# Lists.
|
||||
style l_list is l_default:
|
||||
left_padding HALF_INDENT
|
||||
xfill True
|
||||
selected_background REVERSE_IDLE
|
||||
selected_hover_background REVERSE_HOVER
|
||||
|
||||
style l_info_button_text is l_button_text:
|
||||
text_align 0.5
|
||||
layout "subtitle"
|
||||
style l_list_text is l_default:
|
||||
idle_color IDLE
|
||||
hover_color HOVER
|
||||
selected_idle_color REVERSE_TEXT
|
||||
selected_hover_color REVERSE_TEXT
|
||||
insensitive_color DISABLED
|
||||
|
||||
# Progress bar.
|
||||
style l_progress_frame is l_default:
|
||||
background Frame(PATTERN, 0, 0, tile=True)
|
||||
ypadding 5
|
||||
style l_list2 is l_list:
|
||||
left_padding (HALF_INDENT + INDENT)
|
||||
|
||||
style l_progress_bar is l_default:
|
||||
left_bar REVERSE_IDLE
|
||||
right_bar Null()
|
||||
ymaximum 24
|
||||
style l_list2_text is l_list_text
|
||||
|
||||
# Navigation.
|
||||
style l_navigation_button is l_button:
|
||||
size_group "navigation"
|
||||
right_margin INDENT
|
||||
top_margin 3
|
||||
# Scrollbar.
|
||||
style l_vscrollbar is l_default:
|
||||
thumb Fixed(
|
||||
Solid(SCROLLBAR_IDLE, xmaximum=8, xalign=0.5),
|
||||
Image("images/vscrollbar_center.png", xalign=0.5, yalign=0.5),
|
||||
xmaximum = SCROLLBAR_SIZE)
|
||||
hover_thumb Fixed(
|
||||
Solid(SCROLLBAR_HOVER, xmaximum=8, xalign=0.5),
|
||||
Image("images/vscrollbar_center.png", xalign=0.5, yalign=0.5),
|
||||
xmaximum = SCROLLBAR_SIZE)
|
||||
xmaximum SCROLLBAR_SIZE
|
||||
bar_vertical True
|
||||
bar_invert True
|
||||
unscrollable "hide"
|
||||
|
||||
style l_navigation_button_text is l_button_text:
|
||||
size size(14)
|
||||
font REGULAR
|
||||
# Information window.
|
||||
style l_info_vbox is vbox:
|
||||
yalign 0.5
|
||||
xalign 0.5
|
||||
xfill True
|
||||
|
||||
style l_navigation_text is l_text:
|
||||
size size(14)
|
||||
font LIGHT
|
||||
color TEXT
|
||||
style l_info_frame is l_default:
|
||||
ypadding 21
|
||||
xfill True
|
||||
background Fixed(
|
||||
INFO_WINDOW,
|
||||
Frame(PATTERN, 0, 0, tile=True, ymaximum=5, yalign=0.0, yoffset=8),
|
||||
Frame(PATTERN, 0, 0, tile=True, ymaximum=5, yalign=1.0, yoffset=-8),
|
||||
)
|
||||
yminimum 180
|
||||
ypos 75
|
||||
|
||||
# Checkboxes.
|
||||
style l_checkbox is l_button:
|
||||
left_padding INDENT
|
||||
background checkbox(False, IDLE)
|
||||
hover_background checkbox(False, HOVER)
|
||||
selected_idle_background checkbox(True, IDLE)
|
||||
selected_hover_background checkbox(True, HOVER)
|
||||
insensitive_background checkbox(False, DISABLED)
|
||||
style l_info_label is l_default:
|
||||
xalign 0.5
|
||||
ypos 75
|
||||
yanchor 1.0
|
||||
yoffset 12
|
||||
|
||||
style l_checkbox_text is l_button_text:
|
||||
selected_font LIGHT
|
||||
style l_info_label_text is l_default:
|
||||
size size(36)
|
||||
|
||||
# Lines up with a checkbox.
|
||||
style l_nonbox is l_button:
|
||||
xpadding INDENT
|
||||
style l_info_text is l_default:
|
||||
xalign 0.5
|
||||
|
||||
style l_nonbox_text is l_button_text:
|
||||
selected_font LIGHT
|
||||
style l_info_button is l_button:
|
||||
xalign 0.5
|
||||
xmargin 50
|
||||
|
||||
# Projects list.
|
||||
style l_projects is l_default:
|
||||
background PROJECTS_WINDOW
|
||||
style l_info_button_text is l_button_text:
|
||||
text_align 0.5
|
||||
layout "subtitle"
|
||||
|
||||
style hyperlink_text:
|
||||
size size(18)
|
||||
font LIGHT
|
||||
color IDLE
|
||||
hover_color HOVER
|
||||
# Progress bar.
|
||||
style l_progress_frame is l_default:
|
||||
background Frame(PATTERN, 0, 0, tile=True)
|
||||
ypadding 5
|
||||
|
||||
style l_progress_bar is l_default:
|
||||
left_bar REVERSE_IDLE
|
||||
right_bar Null()
|
||||
ymaximum 24
|
||||
|
||||
# Navigation.
|
||||
style l_navigation_button is l_button:
|
||||
size_group "navigation"
|
||||
right_margin INDENT
|
||||
top_margin 3
|
||||
|
||||
style l_navigation_button_text is l_button_text:
|
||||
size size(14)
|
||||
font regular_font()
|
||||
|
||||
style l_navigation_text is l_text:
|
||||
size size(14)
|
||||
font light_font()
|
||||
color TEXT
|
||||
|
||||
# Checkboxes.
|
||||
style l_checkbox is l_button:
|
||||
left_padding INDENT
|
||||
background checkbox(False, IDLE)
|
||||
hover_background checkbox(False, HOVER)
|
||||
selected_idle_background checkbox(True, IDLE)
|
||||
selected_hover_background checkbox(True, HOVER)
|
||||
insensitive_background checkbox(False, DISABLED)
|
||||
|
||||
style l_checkbox_box:
|
||||
yanchor 0.5
|
||||
ypos 11
|
||||
|
||||
style l_checkbox_text is l_button_text:
|
||||
selected_font light_font()
|
||||
selected_bold False
|
||||
|
||||
# Lines up with a checkbox.
|
||||
style l_nonbox is l_button:
|
||||
xpadding INDENT
|
||||
|
||||
style l_nonbox_text is l_button_text:
|
||||
selected_font light_font()
|
||||
|
||||
# Projects list.
|
||||
style l_projects is l_default:
|
||||
background PROJECTS_WINDOW
|
||||
|
||||
style hyperlink_text:
|
||||
size size(18)
|
||||
font light_font()
|
||||
color IDLE
|
||||
hover_color HOVER
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -0,0 +1,112 @@
|
||||
init python:
|
||||
TEST_PROJECTS = u"/tmp/renpy-moé"
|
||||
import shutil
|
||||
|
||||
testcase default:
|
||||
call new_project
|
||||
call translate_project
|
||||
call extract_dialogue
|
||||
|
||||
"Delete Persistent"
|
||||
"Force Recompile"
|
||||
|
||||
call build_project
|
||||
|
||||
"quit"
|
||||
|
||||
testcase new_project:
|
||||
python:
|
||||
if os.path.exists(TEST_PROJECTS):
|
||||
shutil.rmtree(TEST_PROJECTS)
|
||||
|
||||
os.mkdir(TEST_PROJECTS, 0o777)
|
||||
|
||||
persistent.projects_directory = TEST_PROJECTS
|
||||
|
||||
"refresh"
|
||||
"Create New Project"
|
||||
|
||||
# Kind of interface
|
||||
"New GUI Interface"
|
||||
"Continue"
|
||||
|
||||
# Name
|
||||
type "Test Project"
|
||||
"Continue"
|
||||
|
||||
# Size
|
||||
"1280x720"
|
||||
"Continue"
|
||||
|
||||
# Color Selection
|
||||
"Continue"
|
||||
|
||||
testcase choose_colors:
|
||||
"Change/Update GUI"
|
||||
"Choose new colors"
|
||||
"Continue"
|
||||
"Continue"
|
||||
|
||||
"Change/Update GUI"
|
||||
"Regenerate the"
|
||||
"Continue"
|
||||
|
||||
|
||||
|
||||
testcase translate_project:
|
||||
"Generate Translations"
|
||||
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
type BACKSPACE
|
||||
|
||||
type "piglatin"
|
||||
|
||||
"Generate Translations"
|
||||
"Continue"
|
||||
|
||||
"Generate Translations"
|
||||
"Extract String Translations"
|
||||
"Continue"
|
||||
|
||||
"Generate Translations"
|
||||
"Merge String Translations"
|
||||
"Continue"
|
||||
|
||||
"Generate Translations"
|
||||
"Update Default"
|
||||
|
||||
testcase build_project:
|
||||
"Build Distributions"
|
||||
"Build"
|
||||
|
||||
testcase extract_dialogue_common:
|
||||
"Extract Dialogue"
|
||||
"Strip text tags"
|
||||
"Escape quotes"
|
||||
"Extract all"
|
||||
|
||||
testcase extract_dialogue:
|
||||
call extract_dialogue_common
|
||||
"Tab-delimited"
|
||||
"Continue"
|
||||
"Continue"
|
||||
|
||||
|
||||
call extract_dialogue_common
|
||||
"Text Only"
|
||||
"Continue"
|
||||
"Continue"
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright 2004-2014 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2016 Tom Rothamel <pytom@bishoujo.us>
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person
|
||||
# obtaining a copy of this software and associated documentation files
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/add_file.rpy:7
|
||||
old "FILENAME"
|
||||
new "اسم الملف"
|
||||
|
||||
# game/add_file.rpy:7
|
||||
old "Enter the name of the script file to create."
|
||||
new "إختر اسم لملف الحوار الذي سيتم تكوينه"
|
||||
|
||||
# game/add_file.rpy:10
|
||||
old "The filename must have the .rpy extension."
|
||||
new "يجب ان ينتهي اسم الملف بالصيغة .rpy"
|
||||
|
||||
# game/add_file.rpy:18
|
||||
old "The file already exists."
|
||||
new "هذا الملف موجود مسبقاً"
|
||||
|
||||
# game/add_file.rpy:21
|
||||
old "# Ren'Py automatically loads all script files ending with .rpy. To use this\n# file, define a label and jump to it from another file.\n"
|
||||
new "رينباي يقوم بتشغيل الملفات المنتهية بـ .rpy تلقائياً. لكي تستعمل هذا الملف, اختر له تبويب وافتحه عبر ملف آخر."
|
||||
|
||||
@@ -1,164 +0,0 @@
|
||||
# : Translation updated at 2013-11-17 23:18
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/android.rpy:12
|
||||
old "To build Android packages, please download RAPT (from {a=http://www.renpy.org/dl/android}here{/a}), unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
|
||||
new "لتجهيز اللعبة للعمل على اجهزة اندرويد يمكنك تحميل الحزمة الخاصة بذلك {a=http://www.renpy.org/dl/android}here{/a}) و فك الضغط عنها, ثم نسخها إلى مجلد رينباي الرئيسي ثم إعادة فتح هذا المشغِّل."
|
||||
|
||||
# game/android.rpy:13
|
||||
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
|
||||
new "حزمة الاندرويد RAPT موجوده, لكنك تحتاج لتنصيب Android SDK قبل ان تبدأ بتجهيز حزم للعمل على اندرويد. الرجاء اختيار تنصيب Android SDK لتستطيع ذلك."
|
||||
|
||||
# game/android.rpy:14
|
||||
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
|
||||
new "حزمة اندرويد RAPT موجوده, لكن المفتاح لم يتم تجهيزه. الرجاء تكوين مفتاح جديد او استرجاع android.keystore"
|
||||
|
||||
# game/android.rpy:15
|
||||
old "The current project has not been configured. Use \"Configure\" to configure it before building."
|
||||
new "المشروع الحالي لم يتم تجهيز إعدادته. الرجاء اختيار \"Configure\" لتقوم بتجهيزها قبل بناء الحزمة."
|
||||
|
||||
# game/android.rpy:16
|
||||
old "Choose \"Build\" to build the current project, or attach an Android device and choose \"Build & Install\" to build and install it on the device."
|
||||
new "قم باختيار زر \"Build\" لتقوم بتجهيز المشروع الحالي إلى حزمة قابلة للعمل على اندرويد. او قم بربط جهاز اندرويد و اختيار \"Build & Install\" ليتم تنصيبها مباشرة على الجهاز المطلوب."
|
||||
|
||||
# game/android.rpy:18
|
||||
old "Attempts to emulate an Android phone.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "يقوم بمحاكاة جهاز اندرويد هاتفي محمول. \n\n خاصية اللمس يتم محاكاتها عبر مؤشر الفأره, لكن فقط حين يكون زر الفأره مضغوطاً. زر الخروج يقوم باستدعاء نافذة القائمة الرئيسية, و PageUp هو زر العودة إلى الوراء."
|
||||
|
||||
# game/android.rpy:19
|
||||
old "Attempts to emulate an Android tablet.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "يقوم بمحاكاة جهاز اندرويد تابلت. \n\n خاصية اللمس يتم محاكاتها عبر مؤشر الفأره, لكن فقط حين يكون زر الفأره مضغوطاً. زر الخروج يقوم باستدعاء نافذة القائمة الرئيسية, و PageUp هو زر العودة إلى الوراء"
|
||||
|
||||
# game/android.rpy:20
|
||||
old "Attempts to emulate an OUYA console.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "يقوم بمحاكاة جهاز Ouya. \n\n يد التحكم تتم محاكاتها بأزرار الإتجاهات, زر الإدخال يحاكي select, زر الخروج يحاكي زر menu, و PageUp يحاكي زر العودة."
|
||||
|
||||
# game/android.rpy:22
|
||||
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
|
||||
new "يقوم بتحميل و تنصيب Android SDK والحزم المساندة لها. يعطيك خيار تكوين المفاتيح المطلوبة لتتمكن من استعمال الحزمة."
|
||||
|
||||
# game/android.rpy:23
|
||||
old "Configures the package name, version, and other information about this project."
|
||||
new "يقوم بتجهيز إعدادات الحزمة, رقم النسخة, و معلومات أخرى تتعلق بهذا المشروع."
|
||||
|
||||
# game/android.rpy:24
|
||||
old "Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details."
|
||||
new "يفتح الملف الخاص بمعلومات مفتاح Google Play في محرر النصوص. \n\n هذه الخطوة غير مطلوبة إلا لو كان البرنامج يحتاج إحدى الحوم المساندة expansion APK. الرجاء الإطلاع على ملفات المساعدة للحصول على المزيد من المعلومات."
|
||||
|
||||
# game/android.rpy:25
|
||||
old "Builds the Android package."
|
||||
new "يقوم ببناء حزمة للأندرويد."
|
||||
|
||||
# game/android.rpy:26
|
||||
old "Builds the Android package, and installs it on an Android device connected to your computer."
|
||||
new "يقوم ببناء حزمة للأندرويد, ثم يقوم بتنصيبها على جهاز أندرويد المتصل بحاسوبك."
|
||||
|
||||
# game/android.rpy:142
|
||||
old "{a=%s}%s{/a}"
|
||||
new "{a=%s}%s{/a}"
|
||||
|
||||
# game/android.rpy:361
|
||||
old "Android: [project.current.name!q]"
|
||||
new "أندرويد: [project.current.name!q]"
|
||||
|
||||
# game/android.rpy:381
|
||||
old "Emulation:"
|
||||
new "محاكاة"
|
||||
|
||||
# game/android.rpy:389
|
||||
old "Phone"
|
||||
new "هاتف"
|
||||
|
||||
# game/android.rpy:393
|
||||
old "Tablet"
|
||||
new "تابلت/ لوحي"
|
||||
|
||||
# game/android.rpy:397
|
||||
old "Television / OUYA"
|
||||
new "تلفزيون / OUYA"
|
||||
|
||||
# game/android.rpy:409
|
||||
old "Build:"
|
||||
new ""
|
||||
|
||||
# game/android.rpy:417
|
||||
old "Install SDK & Create Keys"
|
||||
new "تنصيب SDK و اختلاق مفاتيح"
|
||||
|
||||
# game/android.rpy:421
|
||||
old "Configure"
|
||||
new "إعدادات"
|
||||
|
||||
# game/android.rpy:425
|
||||
old "Build Package"
|
||||
new "بناء الحزمة"
|
||||
|
||||
# game/android.rpy:429
|
||||
old "Build & Install"
|
||||
new "بناء و تنصيب"
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/android.rpy:30
|
||||
old "To build Android packages, please download RAPT, unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
|
||||
new "لبناء ملفات الأندرويد, الرجاء تحميل RAPT, ثم فك الضغط عن الملف ووضعه في مجلد رينباي. قد تحتاج لإعادة تشغيل رينباي ليعمل بشكل صحيح."
|
||||
|
||||
# game/android.rpy:31
|
||||
old "A 32-bit Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
|
||||
new "تحتاج لنسخة برمجية من جافا تعتمد الـ 32-بت لتستطيع إنشاء ملفات الأندرويد على نظام الوندوز. حزمة JDK تختلف عن JRE, قد تكون الجافا لديك موجوده لكنها تفتقد الـ JDK. \n\n الرجاء {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}تحميل و تنصيب JDK{/a} ثم إعادة تشغيل رينباي"
|
||||
|
||||
# game/android.rpy:39
|
||||
old "Attempts to emulate a televison-based Android console, like the OUYA or Fire TV.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "يحاول محاكاة نظام تلفزيوني للأندرويد مثل جهاز OUYA او Fire TV. \n\n يتم تخطيط الأزرار لعصا التحكم لتناسب ازرار جهاز التحكم عن بعد. Controller input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
|
||||
# game/android.rpy:47
|
||||
old "Connects to an Android device running ADB in TCP/IP mode."
|
||||
new "يتصل بجهاز أندرويد يعمل على نظام ADB عن طريق TCP/IP mode"
|
||||
|
||||
# game/android.rpy:48
|
||||
old "Disconnects from an Android device running ADB in TCP/IP mode."
|
||||
new "يفصل الاتصال عن جهاز أندرويد يعمل على نظام ADB عن طريق TCP/IP mode"
|
||||
|
||||
# game/android.rpy:516
|
||||
old "Other:"
|
||||
new "آخر:"
|
||||
|
||||
# game/android.rpy:524
|
||||
old "Remote ADB Connect"
|
||||
new "الإتصال عن بعد عن طريق ADB"
|
||||
|
||||
# game/android.rpy:528
|
||||
old "Remote ADB Disconnect"
|
||||
new "قطع إتصال ADB عن بعد"
|
||||
|
||||
# game/android.rpy:561
|
||||
old "Before packaging Android apps, you'll need to download RAPT, the Ren'Py Android Packaging Tool. Would you like to download RAPT now?"
|
||||
new "قبل ان تصتطيع إنشاء ملفات للأندرويد, عليك ان تقوم بتحميل ملفات RAPT الخاصة بتحويل ملفات رينباي للأندرويد. هل تريد ان تقوم بتحميل الحزمة الآن؟"
|
||||
|
||||
# game/android.rpy:608
|
||||
old "Remote ADB Address"
|
||||
new "عنوان ADB عن بعد"
|
||||
|
||||
# game/android.rpy:609
|
||||
old "Please enter the IP address and port number to connect to, in the form \"192.168.1.143:5555\". Consult your device's documentation to determine if it supports remote ADB, and if so, the address and port to use."
|
||||
new "الرجاء إدخال عنوان الأي بي ورقم المنفذ المطلوب للإتصال, على شكل \"192.168.1.143:5555\". الرجاء العودة لدليل المستخدم الخاص بجهازك لتعرف إن كان يدعم الإتصال عن بعد للـ ADB و إن كان قادراً على ذلك, ستجد العنوان و المنفذ المطلوبان."
|
||||
|
||||
# game/android.rpy:619
|
||||
old "Invalid remote ADB address"
|
||||
new "عنوان ِADB خاطيء"
|
||||
|
||||
# game/android.rpy:619
|
||||
old "The address must contain one exactly one ':'."
|
||||
new "العنوان يجب ان يحتوي على علامة ':' واحده فقط لا غير"
|
||||
|
||||
# game/android.rpy:623
|
||||
old "The host may not contain whitespace."
|
||||
new "الخادم يجب ان لا يحتوي على مساحات فارغة"
|
||||
|
||||
# game/android.rpy:629
|
||||
old "The port must be a number."
|
||||
new "يجب ان يكون العنوان مكون من أرقام فقط"
|
||||
|
||||
@@ -1,43 +0,0 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/choose_theme.rpy:274
|
||||
old "Could not change the theme. Perhaps options.rpy was changed too much."
|
||||
new "لم يتمكن رينباي من تغيير المظهر, ربما ملف options.rpy قد تغير بشكل كبير"
|
||||
|
||||
# game/choose_theme.rpy:332
|
||||
old "Display"
|
||||
new "عرض"
|
||||
|
||||
# game/choose_theme.rpy:333
|
||||
old "Window"
|
||||
new "نافذة"
|
||||
|
||||
# game/choose_theme.rpy:334
|
||||
old "Fullscreen"
|
||||
new "ملء الشاشة"
|
||||
|
||||
# game/choose_theme.rpy:335
|
||||
old "Planetarium"
|
||||
new "Planetarium"
|
||||
|
||||
# game/choose_theme.rpy:342
|
||||
old "Sound Volume"
|
||||
new "مستوى الصوت"
|
||||
|
||||
# game/choose_theme.rpy:376
|
||||
old "Choose Theme"
|
||||
new "إختر المظهر"
|
||||
|
||||
# game/choose_theme.rpy:389
|
||||
old "Theme"
|
||||
new "المظهر"
|
||||
|
||||
# game/choose_theme.rpy:413
|
||||
old "Color Scheme"
|
||||
new "توليفة الألوان"
|
||||
|
||||
# game/choose_theme.rpy:444
|
||||
old "Continue"
|
||||
new "استمرار"
|
||||
|
||||
+270
-463
@@ -1,528 +1,335 @@
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00action_file.rpy:118
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Monday"
|
||||
new "{#weekday}Monday"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Tuesday"
|
||||
new "{#weekday}Tuesday"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Wednesday"
|
||||
new "{#weekday}Wednesday"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Thursday"
|
||||
new "{#weekday}Thursday"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Friday"
|
||||
new "{#weekday}Friday"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Saturday"
|
||||
new "{#weekday}Saturday"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Sunday"
|
||||
new "{#weekday}Sunday"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Mon"
|
||||
new "{#weekday_short}Mon"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Tue"
|
||||
new "{#weekday_short}Tue"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Wed"
|
||||
new "{#weekday_short}Wed"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Thu"
|
||||
new "{#weekday_short}Thu"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Fri"
|
||||
new "{#weekday_short}Fri"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sat"
|
||||
new "{#weekday_short}Sat"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sun"
|
||||
new "{#weekday_short}Sun"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}January"
|
||||
new "{#month}January"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}February"
|
||||
new "{#month}February"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}March"
|
||||
new "{#month}March"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}April"
|
||||
new "{#month}April"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}May"
|
||||
new "{#month}May"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}June"
|
||||
new "{#month}June"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}July"
|
||||
new "{#month}July"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}August"
|
||||
new "{#month}August"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}September"
|
||||
new "{#month}September"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}October"
|
||||
new "{#month}October"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}November"
|
||||
new "{#month}November"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}December"
|
||||
new "{#month}December"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jan"
|
||||
new "{#month_short}Jan"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Feb"
|
||||
new "{#month_short}Feb"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Mar"
|
||||
new "{#month_short}Mar"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Apr"
|
||||
new "{#month_short}Apr"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}May"
|
||||
new "{#month_short}May"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jun"
|
||||
new "{#month_short}Jun"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jul"
|
||||
new "{#month_short}Jul"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Aug"
|
||||
new "{#month_short}Aug"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Sep"
|
||||
new "{#month_short}Sep"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Oct"
|
||||
new "{#month_short}Oct"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Nov"
|
||||
new "{#month_short}Nov"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Dec"
|
||||
new "{#month_short}Dec"
|
||||
|
||||
# 00action_file.rpy:235
|
||||
old "%b %d, %H:%M"
|
||||
new "%b %d, %H:%M"
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
# 00action_file.rpy:820
|
||||
old "Quick save complete."
|
||||
new "تم الحفظ السريع"
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00gltest.rpy:50
|
||||
old "Graphics Acceleration"
|
||||
new "تسريع الرسومات"
|
||||
|
||||
# renpy/common/00gltest.rpy:54
|
||||
old "Automatically Choose"
|
||||
new "إختر بشكل اوتوماتيكي"
|
||||
|
||||
# renpy/common/00gltest.rpy:59
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "فرض استعمال محركات Angle/DirectX"
|
||||
|
||||
# renpy/common/00gltest.rpy:63
|
||||
old "Force OpenGL Renderer"
|
||||
new "فرض استعمال محركات OpenGL"
|
||||
|
||||
# renpy/common/00gltest.rpy:67
|
||||
old "Force Software Renderer"
|
||||
new "فرض استعمال المحركات البرمجية software renderer"
|
||||
|
||||
# renpy/common/00gltest.rpy:73
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "سيتم تفعيل التغييرات في المرة القادمة التي تفتح فيها البرنامج"
|
||||
|
||||
# renpy/common/00gltest.rpy:77
|
||||
old "Quit"
|
||||
new "خروج"
|
||||
|
||||
# renpy/common/00gltest.rpy:82
|
||||
old "Return"
|
||||
new "عودة"
|
||||
|
||||
# renpy/common/00gltest.rpy:112
|
||||
old "Performance Warning"
|
||||
new "تحذير عن الأداء"
|
||||
|
||||
# renpy/common/00gltest.rpy:117
|
||||
old "This computer is using software rendering."
|
||||
new "هذا الجهاز يستعمل software rendering"
|
||||
|
||||
# renpy/common/00gltest.rpy:119
|
||||
old "This computer is not using shaders."
|
||||
new "هذا الجهاز لا يستعمل shaders"
|
||||
|
||||
# renpy/common/00gltest.rpy:121
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "هذا الجهاز يستعرض الرسوميات بشكل بطيء"
|
||||
|
||||
# renpy/common/00gltest.rpy:123
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "هذا الجهاز يواجه مشكلة في استعراض الرسوميات [problem]"
|
||||
|
||||
# renpy/common/00gltest.rpy:128
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "محركات الرسوميات قد تكون قديمة او لا تعمل بشكل صحيح. قد يسبب ذلك بطء او اخطاء في الاستعراض, القيام بتحديث directX قد يساعد في حل المشكلة."
|
||||
|
||||
# renpy/common/00gltest.rpy:130
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new " محركات الرسوميات قد تكون قديمة او لا تعمل بشكل صحيح. قد يسبب ذلك بطء او اخطاء في الاستعراض."
|
||||
|
||||
# renpy/common/00gltest.rpy:135
|
||||
old "Update DirectX"
|
||||
new "تحديث DirectX"
|
||||
|
||||
# renpy/common/00gltest.rpy:141
|
||||
old "Continue, Show this warning again"
|
||||
new "استمرار, الرجاء عرض هذا التحذير في المرة الثادمة ايضاً"
|
||||
|
||||
# renpy/common/00gltest.rpy:145
|
||||
old "Continue, Don't show warning again"
|
||||
new "استمرار, لا تعرض هذا التحذير مرة اخرى"
|
||||
|
||||
# renpy/common/00gltest.rpy:171
|
||||
old "Updating DirectX."
|
||||
new "يتم تحديث DirectX"
|
||||
|
||||
# renpy/common/00gltest.rpy:175
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "يتم الآن تنصيب DirectX, قد يبدأ ذلك بشكل مصغر في شريط المهام. الرجاء اتباع التعليمات لاكمال التنصيب."
|
||||
|
||||
# renpy/common/00gltest.rpy:179
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}ملاحظة:{/b} مايكروسوفت دايركت أكس يقوم تلقائياً بتنصيب شريط بينق Bing toolbar. إذا لم ترغب بذلك الرجاء القيام بإلغاء تحديد خانة الاختيار"
|
||||
|
||||
# renpy/common/00gltest.rpy:183
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "حيثن ينتهي التنصيب, الرجاء الضغط ادناه لإعادة تشغيل البرنامج"
|
||||
|
||||
# renpy/common/00gltest.rpy:185
|
||||
old "Restart"
|
||||
new "إعادة تشغيل"
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00keymap.rpy:167
|
||||
old "Saved screenshot as %s."
|
||||
new "تم حفظ الصورة كـ %s"
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00layout.rpy:421
|
||||
# 00gui.rpy:227
|
||||
old "Are you sure?"
|
||||
new "هل انت متأكد؟"
|
||||
|
||||
# renpy/common/00layout.rpy:422
|
||||
# 00gui.rpy:228
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "هل انت متأكد من رغبتك في حذف خانة الحفظ هذه؟"
|
||||
|
||||
# renpy/common/00layout.rpy:423
|
||||
# 00gui.rpy:229
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "هل انت متأكد من رغبتك في الحفظ على هذه الخانة؟"
|
||||
|
||||
# renpy/common/00layout.rpy:424
|
||||
# 00gui.rpy:230
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "الاسترجاع سيضيع كل ما فعلته منذ خانة الحفظ السابقة. \n هل انت متأكد من رغبتك في الاسترجاع إلى هذه النقطة؟"
|
||||
|
||||
# renpy/common/00layout.rpy:425
|
||||
# 00gui.rpy:231
|
||||
old "Are you sure you want to quit?"
|
||||
new "هل انت متأكد من رغبتك في الخروج؟"
|
||||
|
||||
# renpy/common/00layout.rpy:426
|
||||
# 00gui.rpy:232
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "هل انت متأكد من رغبتك في العودة للقائمة الرئيسية؟ \n كل ما لم تقم بحفظة سيضيع."
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
# 00gui.rpy:233
|
||||
old "Are you sure you want to end the replay?"
|
||||
new "Are you sure you want to end the replay?"
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00library.rpy:77
|
||||
old "Skip Mode"
|
||||
new "وضع التسريع"
|
||||
|
||||
# renpy/common/00library.rpy:80
|
||||
old "Fast Skip Mode"
|
||||
new "وضع التسريع السريع"
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00updater.rpy:1258
|
||||
old "Updater"
|
||||
new "برنامج التحديث"
|
||||
|
||||
# renpy/common/00updater.rpy:1267
|
||||
old "This program is up to date."
|
||||
new "هذه النسخة هي الأحدث"
|
||||
|
||||
# renpy/common/00updater.rpy:1269
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "النسخة [u.version] متوفرة, هل ترغب في تنصيبها؟"
|
||||
|
||||
# renpy/common/00updater.rpy:1271
|
||||
old "Preparing to download the updates."
|
||||
new "يتم التجهيز لتحميل البرنامج من الانترنت"
|
||||
|
||||
# renpy/common/00updater.rpy:1273
|
||||
old "Downloading the updates."
|
||||
new "يتم تنزيل التحديثات"
|
||||
|
||||
# renpy/common/00updater.rpy:1275
|
||||
old "Unpacking the updates."
|
||||
new "يتم فك الضغط عن التحديثات"
|
||||
|
||||
# renpy/common/00updater.rpy:1279
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "تم التحديث.. سيتم إعادة تشغيل البرنامج."
|
||||
|
||||
# renpy/common/00updater.rpy:1281
|
||||
old "The updates have been installed."
|
||||
new "تم التحديث."
|
||||
|
||||
# renpy/common/00updater.rpy:1283
|
||||
old "The updates were cancelled."
|
||||
new "تم إلغاء التحديث."
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:180
|
||||
old "Empty Slot."
|
||||
new "خانة فارغة"
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:337
|
||||
old "Previous"
|
||||
new "السابق"
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:344
|
||||
old "Next"
|
||||
new "التالي"
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/_compat/preferences.rpym:411
|
||||
old "Joystick Mapping"
|
||||
new "خيارات عصى التحكم"
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/_errorhandling.rpym:408
|
||||
old "An exception has occurred."
|
||||
new "حصل استثناء"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:434
|
||||
old "Rollback"
|
||||
new "تراجع"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:436
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "يقوم بالتراجع لنقطة سابقة لكي تستطيع اختيار شيء آخر"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:439
|
||||
old "Ignore"
|
||||
new "تجاهل"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:441
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "يتجاهل الاستثناء مما يستمح لك بالاستمرار. قد يسبب هذا المزيد من الاخطاء."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:444
|
||||
old "Reload"
|
||||
new "إعادة المحاولة"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:446
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "يعيد تشغيل اللعبة من القرص الصلب, مع محاولة استعمادة آخر نقطة وحفظها عند الإستطاعة."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:448
|
||||
old "Open Traceback"
|
||||
new "قراءة التقرير"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:450
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "يفتح تقرير الخطأ في برنامج الملفات النصية."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:456
|
||||
old "Quits the game."
|
||||
new "يخرج من اللعبة."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:483
|
||||
old "Parsing the script failed."
|
||||
new "حصل خطأ أثناء تشغيل النص."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:510
|
||||
old "Open Parse Errors"
|
||||
new "يفتح قائمة اخطاء التشغيل."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:512
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "يفتح ملف errors.txt في برنامج الملفات النصية"
|
||||
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:152
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:161
|
||||
old "q"
|
||||
new "q"
|
||||
|
||||
# : Translation updated at 2013-11-17 23:18
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00action_file.rpy:587
|
||||
old "Quick save complete."
|
||||
new "تم الحفظ السريع بنجاح"
|
||||
|
||||
# : Translation updated at 2013-11-17 23:18
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00gallery.rpy:521
|
||||
old "Image [index] of [count] locked."
|
||||
new "يوجد عدد صور [index] من أصل [count] مقفل"
|
||||
|
||||
# renpy/common/00gallery.rpy:539
|
||||
old "prev"
|
||||
new "السابق"
|
||||
|
||||
# renpy/common/00gallery.rpy:540
|
||||
old "next"
|
||||
new "التالي"
|
||||
|
||||
# renpy/common/00gallery.rpy:541
|
||||
old "slideshow"
|
||||
new "عرض الشرائح"
|
||||
|
||||
# renpy/common/00gallery.rpy:542
|
||||
old "return"
|
||||
new "العودة"
|
||||
|
||||
# : Translation updated at 2013-11-17 23:18
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/00layout.rpy:427
|
||||
# 00gui.rpy:234
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "هل أنت متأكد من رغبتك في البدء بالتسريع؟"
|
||||
|
||||
# renpy/common/00layout.rpy:428
|
||||
# 00gui.rpy:235
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "هل انت متأكد من رغبتك في التسريع حتى الخيار التالي؟"
|
||||
|
||||
# renpy/common/00layout.rpy:429
|
||||
old "Are you sure you want to skip to unseen dialogue or the next choice?"
|
||||
new "هل انت متأكد من رغبتك في تسريع الخيارات و الحوار الذي لم يسبق لك قرائته؟"
|
||||
# 00gui.rpy:236
|
||||
old "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
new "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
# 00keymap.rpy:250
|
||||
old "Saved screenshot as %s."
|
||||
new "تم حفظ الصورة كـ %s"
|
||||
|
||||
translate arabic strings:
|
||||
# 00library.rpy:142
|
||||
old "Self-voicing disabled."
|
||||
new "Self-voicing disabled."
|
||||
|
||||
# renpy/common/00console.rpy:179
|
||||
old "%(version)s console, originally by Shiz, C, and delta.\n"
|
||||
new ""
|
||||
# 00library.rpy:143
|
||||
old "Clipboard voicing enabled. "
|
||||
new "Clipboard voicing enabled. "
|
||||
|
||||
# renpy/common/00console.rpy:180
|
||||
old "Press <esc> to exit console. Type help for help.\n"
|
||||
new "إضغط زر الخروج لإغلاق لوحة التحكم, اكتب كلمة help للمساعدة"
|
||||
# 00library.rpy:144
|
||||
old "Self-voicing enabled. "
|
||||
new "Self-voicing enabled. "
|
||||
|
||||
# renpy/common/00console.rpy:184
|
||||
old "Ren'Py script enabled."
|
||||
new "لغة برمحة رينباي متاحه"
|
||||
# 00library.rpy:179
|
||||
old "Skip Mode"
|
||||
new "وضع التسريع"
|
||||
|
||||
# renpy/common/00console.rpy:186
|
||||
old "Ren'Py script disabled."
|
||||
new "لغة برمجة رينباي غير متاحه"
|
||||
# 00library.rpy:262
|
||||
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
|
||||
# renpy/common/00console.rpy:392
|
||||
old "help: show this help"
|
||||
new "مساعده: عرض هذه المساعده"
|
||||
# 00preferences.rpy:422
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
new "تشغيل الأصوات من الحافظة مفعّل. إضغط لإيقافه زريّ: Shift+C"
|
||||
|
||||
# renpy/common/00console.rpy:397
|
||||
old "commands:\n"
|
||||
new "أوامر: \n"
|
||||
# 00preferences.rpy:424
|
||||
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
|
||||
new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
|
||||
|
||||
# renpy/common/00console.rpy:407
|
||||
old " <renpy script statement>: run the statement\n"
|
||||
new "<renpy script statement>: عرض الأوامر\n"
|
||||
# 00preferences.rpy:426
|
||||
old "Self-voicing enabled. Press 'v' to disable."
|
||||
new "التكلّم التلقائي مفعَل. لإيقافه إضغط زر V"
|
||||
|
||||
# renpy/common/00console.rpy:409
|
||||
old " <python expression or statement>: run the expression or statement"
|
||||
new " <python expression or statement>: عرض التعبير او الأوامر"
|
||||
# 00iap.rpy:217
|
||||
old "Contacting App Store\nPlease Wait..."
|
||||
new "Contacting App Store\nPlease Wait..."
|
||||
|
||||
# renpy/common/00console.rpy:417
|
||||
old "clear: clear the console history"
|
||||
new "clear: مسح تاريخ لوحة التحكم"
|
||||
# 00updater.rpy:367
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
new "تحديث برنامج رينباي غير مدعوم على الأجهزة المحمولة."
|
||||
|
||||
# renpy/common/00console.rpy:421
|
||||
old "exit: exit the console"
|
||||
new "exit: الخروج من لوحة التحكم"
|
||||
# 00updater.rpy:486
|
||||
old "An error is being simulated."
|
||||
new "يتم محاكاة خطأ الآن."
|
||||
|
||||
# renpy/common/00console.rpy:429
|
||||
old "load <slot>: loads the game from slot"
|
||||
new "استرجاع <slot>: يقوم باسترجاع اللعب من نقطة الحفظ"
|
||||
# 00updater.rpy:662
|
||||
old "Either this project does not support updating, or the update status file was deleted."
|
||||
new "هذا المشروع لا يدعم التحديث، أو أن ملف حالة نسخة البرنامج محذوفة."
|
||||
|
||||
# renpy/common/00console.rpy:442
|
||||
old "save <slot>: saves the game in slot"
|
||||
new "حفظ <slot>: يقوم بحفظ اللعب في نقطة الحفظ"
|
||||
# 00updater.rpy:676
|
||||
old "This account does not have permission to perform an update."
|
||||
new "هذا الحساب ليست لديه الصلاحية ليقوم بالتحديث."
|
||||
|
||||
# renpy/common/00console.rpy:453
|
||||
old "reload: reloads the game, refreshing the scripts"
|
||||
new "reload: يعيد تشغيل اللعبة مع عرض التغييرات في النص"
|
||||
# 00updater.rpy:679
|
||||
old "This account does not have permission to write the update log."
|
||||
new " هذا الحساب ليست لديه الصلاحية ليكتب ملف التحديث."
|
||||
|
||||
# renpy/common/00console.rpy:461
|
||||
old "watch <expression>: watch a python expression"
|
||||
new "مشاهده <expression>: يقوم بعرض تبيرات بايثون"
|
||||
# 00updater.rpy:704
|
||||
old "Could not verify update signature."
|
||||
new "لم نتمكن من التحقق من توقيع التحديث update signature."
|
||||
|
||||
# renpy/common/00console.rpy:470
|
||||
old "unwatch <expression>: stop watching an expression"
|
||||
new "unwatch <expression>: يقوم بإيقاف تعبير بايثون"
|
||||
# 00updater.rpy:975
|
||||
old "The update file was not downloaded."
|
||||
new "لم يتم تحميل ملف التحديث."
|
||||
|
||||
# renpy/common/00console.rpy:478
|
||||
old "unwatchall: stop watching all expressions"
|
||||
new "unwatchall: يقوم بإيقاف كل تعبيرات بايثون"
|
||||
# 00updater.rpy:993
|
||||
old "The update file does not have the correct digest - it may have been corrupted."
|
||||
new "ملف التحديث لا يحتوي على المختصرات الصحيحة - قد يكون معطوباً."
|
||||
|
||||
# renpy/common/00console.rpy:484
|
||||
old "jump <label>: jumps to label"
|
||||
new "jump <label>: يقفز للعنوان"
|
||||
# 00updater.rpy:1049
|
||||
old "While unpacking {}, unknown type {}."
|
||||
new "عند فك الحزمة {}، نوع مجهول {}."
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
# 00updater.rpy:1393
|
||||
old "Updater"
|
||||
new "برنامج التحديث"
|
||||
|
||||
translate arabic strings:
|
||||
# 00updater.rpy:1404
|
||||
old "This program is up to date."
|
||||
new "هذه النسخة هي الأحدث"
|
||||
|
||||
# renpy/common/00keymap.rpy:332
|
||||
old "Autoreload"
|
||||
new "إعادة التحميل تلقائياً"
|
||||
# 00updater.rpy:1406
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "النسخة [u.version] متوفرة, هل ترغب في تنصيبها؟"
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
# 00updater.rpy:1408
|
||||
old "Preparing to download the updates."
|
||||
new "يتم التجهيز لتحميل البرنامج من الانترنت"
|
||||
|
||||
translate arabic strings:
|
||||
# 00updater.rpy:1410
|
||||
old "Downloading the updates."
|
||||
new "يتم تنزيل التحديثات"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:65
|
||||
old "Developer Menu"
|
||||
new "قائمة المبرمج"
|
||||
# 00updater.rpy:1412
|
||||
old "Unpacking the updates."
|
||||
new "يتم فك الضغط عن التحديثات"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:67
|
||||
old "Reload Game (Shift+R)"
|
||||
new "إعادة تشغيل اللعبة (Shift+R)"
|
||||
# 00updater.rpy:1416
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "تم التحديث.. سيتم إعادة تشغيل البرنامج."
|
||||
|
||||
# renpy/common/_developer/developer.rpym:69
|
||||
old "Console (Shift+O)"
|
||||
new "لوحة التحكم (Shift+O)"
|
||||
# 00updater.rpy:1418
|
||||
old "The updates have been installed."
|
||||
new "تم التحديث."
|
||||
|
||||
# renpy/common/_developer/developer.rpym:71
|
||||
old "Variable Viewer"
|
||||
new "مستعرض الأوامر"
|
||||
# 00updater.rpy:1420
|
||||
old "The updates were cancelled."
|
||||
new "تم إلغاء التحديث."
|
||||
|
||||
# renpy/common/_developer/developer.rpym:73
|
||||
old "Theme Test"
|
||||
new "اختبار القوالب"
|
||||
# 00gallery.rpy:563
|
||||
old "Image [index] of [count] locked."
|
||||
new "يوجد عدد صور [index] من أصل [count] مقفل"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:75
|
||||
old "Image Location Picker"
|
||||
new "مكان الصور المطلوبة"
|
||||
# 00gallery.rpy:583
|
||||
old "prev"
|
||||
new "السابق"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:77
|
||||
old "Filename List"
|
||||
new "قائمة اسماء الملفات"
|
||||
# 00gallery.rpy:584
|
||||
old "next"
|
||||
new "التالي"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:81
|
||||
old "Show Image Load Log"
|
||||
new "عرض قائمة الصور "
|
||||
# 00gallery.rpy:585
|
||||
old "slideshow"
|
||||
new "عرض الشرائح"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:84
|
||||
old "Hide Image Load Log"
|
||||
new "إخفاء قائمة الصور"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:149
|
||||
old "No variables have changed since the game started."
|
||||
new "لم يتم تغيير اي من الأوامر منذ ان بدأت اللعبة"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:152
|
||||
old "Return to the developer menu"
|
||||
new "العودة للوحة المبرمج"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:272
|
||||
old "{b}Missing Images{/b}"
|
||||
new "{b}صور مفقودة{/b}"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:424
|
||||
old "Rectangle: %r"
|
||||
new "مثلث: %r"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:429
|
||||
old "Mouse position: %r"
|
||||
new "مكان المؤشر: %r"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:431
|
||||
old "Right-click or escape to quit."
|
||||
new "إضغط بالزر الايمن او إضغط زر الخروح للإغلاق"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:482
|
||||
old "Done"
|
||||
new "تم"
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:43
|
||||
old "Displayable Inspector"
|
||||
new "اختبار المستعرضات"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:49
|
||||
old "Nothing to inspect."
|
||||
new "لا يوجد شيء ليتم اختباره"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:58
|
||||
old "Size"
|
||||
new "حجم"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:63
|
||||
old "Style"
|
||||
new "مظهر"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:123
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "يتم اختبار المظهر الخاص بـ [displayable_name!q]"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:135
|
||||
old "displayable:"
|
||||
new "مستعرضات"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:142
|
||||
old " (no properties affect the displayable)"
|
||||
new " (لا توجد اي مؤثرات على هذا المستعرض)"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:144
|
||||
old " (default properties omitted)"
|
||||
new " (تم استبعاد تأثير المؤثرات القياسية)"
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:174
|
||||
old "<repr() failed>"
|
||||
new "<repr() failed>"
|
||||
|
||||
# Translation updated at 2014-09-30 23:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# renpy/common/_developer/inspector.rpym:80
|
||||
old "Location"
|
||||
new "الموقع"
|
||||
# 00gallery.rpy:586
|
||||
old "return"
|
||||
new "العودة"
|
||||
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# _developer/developer.rpym:38
|
||||
old "Developer Menu"
|
||||
new "قائمة المبرمج"
|
||||
|
||||
# _developer/developer.rpym:43
|
||||
old "Reload Game (Shift+R)"
|
||||
new "إعادة تشغيل اللعبة (Shift+R)"
|
||||
|
||||
# _developer/developer.rpym:45
|
||||
old "Console (Shift+O)"
|
||||
new "لوحة التحكم (Shift+O)"
|
||||
|
||||
# _developer/developer.rpym:47
|
||||
old "Variable Viewer"
|
||||
new "مستعرض الأوامر"
|
||||
|
||||
# _developer/developer.rpym:49
|
||||
old "Theme Test"
|
||||
new "اختبار القوالب"
|
||||
|
||||
# _developer/developer.rpym:51
|
||||
old "Image Location Picker"
|
||||
new "مكان الصور المطلوبة"
|
||||
|
||||
# _developer/developer.rpym:53
|
||||
old "Filename List"
|
||||
new "قائمة اسماء الملفات"
|
||||
|
||||
# _developer/developer.rpym:57
|
||||
old "Show Image Load Log"
|
||||
new "عرض قائمة الصور "
|
||||
|
||||
# _developer/developer.rpym:60
|
||||
old "Hide Image Load Log"
|
||||
new "إخفاء قائمة الصور"
|
||||
|
||||
# _developer/developer.rpym:95
|
||||
old "Nothing to inspect."
|
||||
new "لا يوجد شيء ليتم اختباره"
|
||||
|
||||
# _developer/developer.rpym:217
|
||||
old "Return to the developer menu"
|
||||
new "العودة للوحة المبرمج"
|
||||
|
||||
# _developer/developer.rpym:373
|
||||
old "Rectangle: %r"
|
||||
new "مثلث: %r"
|
||||
|
||||
# _developer/developer.rpym:378
|
||||
old "Mouse position: %r"
|
||||
new "مكان المؤشر: %r"
|
||||
|
||||
# _developer/developer.rpym:383
|
||||
old "Right-click or escape to quit."
|
||||
new "إضغط بالزر الايمن او إضغط زر الخروح للإغلاق"
|
||||
|
||||
# _developer/developer.rpym:412
|
||||
old "Rectangle copied to clipboard."
|
||||
new "تم نسخ المربع إلى الحافظة."
|
||||
|
||||
# _developer/developer.rpym:415
|
||||
old "Position copied to clipboard."
|
||||
new "تم نسخ الموضع إلى الحافظة."
|
||||
|
||||
# _developer/developer.rpym:524
|
||||
old "✔ "
|
||||
new "✔ "
|
||||
|
||||
# _developer/developer.rpym:527
|
||||
old "✘ "
|
||||
new "✘ "
|
||||
|
||||
# _developer/developer.rpym:532
|
||||
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
new "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
|
||||
# _developer/inspector.rpym:38
|
||||
old "Displayable Inspector"
|
||||
new "اختبار المستعرضات"
|
||||
|
||||
# _developer/inspector.rpym:61
|
||||
old "Size"
|
||||
new "حجم"
|
||||
|
||||
# _developer/inspector.rpym:65
|
||||
old "Style"
|
||||
new "مظهر"
|
||||
|
||||
# _developer/inspector.rpym:71
|
||||
old "Location"
|
||||
new "الموقع"
|
||||
|
||||
# _developer/inspector.rpym:122
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "يتم اختبار المظهر الخاص بـ [displayable_name!q]"
|
||||
|
||||
# _developer/inspector.rpym:139
|
||||
old "displayable:"
|
||||
new "مستعرضات"
|
||||
|
||||
# _developer/inspector.rpym:145
|
||||
old " (no properties affect the displayable)"
|
||||
new " (لا توجد اي مؤثرات على هذا المستعرض)"
|
||||
|
||||
# _developer/inspector.rpym:147
|
||||
old " (default properties omitted)"
|
||||
new " (تم استبعاد تأثير المؤثرات القياسية)"
|
||||
|
||||
# _developer/inspector.rpym:185
|
||||
old "<repr() failed>"
|
||||
new "<repr() failed>"
|
||||
|
||||
# 00console.rpy:182
|
||||
old "Press <esc> to exit console. Type help for help.\n"
|
||||
new "إضغط زر الخروج لإغلاق لوحة التحكم, اكتب كلمة help للمساعدة"
|
||||
|
||||
# 00console.rpy:186
|
||||
old "Ren'Py script enabled."
|
||||
new "لغة برمحة رينباي متاحه"
|
||||
|
||||
# 00console.rpy:188
|
||||
old "Ren'Py script disabled."
|
||||
new "لغة برمجة رينباي غير متاحه"
|
||||
|
||||
# 00console.rpy:398
|
||||
old "help: show this help"
|
||||
new "مساعده: عرض هذه المساعده"
|
||||
|
||||
# 00console.rpy:403
|
||||
old "commands:\n"
|
||||
new "أوامر: \n"
|
||||
|
||||
# 00console.rpy:413
|
||||
old " <renpy script statement>: run the statement\n"
|
||||
new "<renpy script statement>: عرض الأوامر\n"
|
||||
|
||||
# 00console.rpy:415
|
||||
old " <python expression or statement>: run the expression or statement"
|
||||
new " <python expression or statement>: عرض التعبير او الأوامر"
|
||||
|
||||
# 00console.rpy:423
|
||||
old "clear: clear the console history"
|
||||
new "clear: مسح تاريخ لوحة التحكم"
|
||||
|
||||
# 00console.rpy:427
|
||||
old "exit: exit the console"
|
||||
new "exit: الخروج من لوحة التحكم"
|
||||
|
||||
# 00console.rpy:435
|
||||
old "load <slot>: loads the game from slot"
|
||||
new "استرجاع <slot>: يقوم باسترجاع اللعب من نقطة الحفظ"
|
||||
|
||||
# 00console.rpy:448
|
||||
old "save <slot>: saves the game in slot"
|
||||
new "حفظ <slot>: يقوم بحفظ اللعب في نقطة الحفظ"
|
||||
|
||||
# 00console.rpy:459
|
||||
old "reload: reloads the game, refreshing the scripts"
|
||||
new "reload: يعيد تشغيل اللعبة مع عرض التغييرات في النص"
|
||||
|
||||
# 00console.rpy:467
|
||||
old "watch <expression>: watch a python expression"
|
||||
new "مشاهده <expression>: يقوم بعرض تبيرات بايثون"
|
||||
|
||||
# 00console.rpy:493
|
||||
old "unwatch <expression>: stop watching an expression"
|
||||
new "unwatch <expression>: يقوم بإيقاف تعبير بايثون"
|
||||
|
||||
# 00console.rpy:519
|
||||
old "unwatchall: stop watching all expressions"
|
||||
new "unwatchall: يقوم بإيقاف كل تعبيرات بايثون"
|
||||
|
||||
# 00console.rpy:536
|
||||
old "jump <label>: jumps to label"
|
||||
new "jump <label>: يقفز للعنوان"
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/distribute.rpy:333
|
||||
old "Nothing to do."
|
||||
new "لا شيء لإنجازه"
|
||||
|
||||
# game/distribute.rpy:337
|
||||
old "Scanning project files..."
|
||||
new "يتم فحص الملفات..."
|
||||
|
||||
# game/distribute.rpy:344
|
||||
old "Scanning Ren'Py files..."
|
||||
new "يتم فحص ملفات رينباي..."
|
||||
|
||||
# game/distribute.rpy:494
|
||||
old "Archiving files..."
|
||||
new "يتم أرشفة الملفات..."
|
||||
|
||||
# game/distribute.rpy:745
|
||||
old "Writing the [variant] [format] package."
|
||||
new "يتم كتابة ملفات [variant] [format]"
|
||||
|
||||
# game/distribute.rpy:758
|
||||
old "Making the [variant] update zsync file."
|
||||
new "Making the [variant] update zsync file."
|
||||
|
||||
# game/distribute.rpy:854
|
||||
old "Processed {b}[complete]{/b} of {b}[total]{/b} files."
|
||||
new "تم انهاء {b}[complete]{/b} من عدد {b}[total]{/b} من الملفات."
|
||||
|
||||
# game/distribute.rpy:915
|
||||
old "All packages have been built.\n\nDue to the presence of permission information, unpacking and repacking the Linux and Macintosh distributions on Windows is not supported."
|
||||
new "تم الإنتهاء من تكوين رزمة البيانات لنشر اللعبة. بسبب اختلاف نظام الملفات في الأنظمة التشغيلية ماك و لينوكس, لا يمكن فك الضغط عن الرزمة الخاصة بتلك الأنظمة على نظام وندوز."
|
||||
|
||||
# : Translation updated at 2013-11-17 23:18
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/distribute.rpy:358
|
||||
old "No packages are selected, so there's nothing to do."
|
||||
new "لم يتم اختيار اي حزمة, لم يحصل اي شيء."
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/distribute.rpy:335
|
||||
old "Building distributions failed:\n\nThe build.directory_name variable may not include the space, colon, or semicolon characters."
|
||||
new "فشل بناء ملفات النشر. build.directory_name يجب أن لا يحتوي على مساحات فارغة, فواصل, او فواصل منقوطة في إسم المجلد "
|
||||
|
||||
@@ -1,47 +0,0 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/distribute_gui.rpy:139
|
||||
old "Build Distributions: [project.current.name!q]"
|
||||
new "تجميع الملفات تجهيزاً للنشر: [project.current.name!q]"
|
||||
|
||||
# game/distribute_gui.rpy:154
|
||||
old "Directory Name:"
|
||||
new "اسم المجلد:"
|
||||
|
||||
# game/distribute_gui.rpy:158
|
||||
old "Executable Name:"
|
||||
new "اسم الملف التشغيلي:"
|
||||
|
||||
# game/distribute_gui.rpy:167
|
||||
old "Actions:"
|
||||
new "الأوامر:"
|
||||
|
||||
# game/distribute_gui.rpy:175
|
||||
old "Edit options.rpy"
|
||||
new "تحرير options.rpy"
|
||||
|
||||
# game/distribute_gui.rpy:176
|
||||
old "Refresh"
|
||||
new "إعادة تحميل"
|
||||
|
||||
# game/distribute_gui.rpy:193
|
||||
old "Build Packages:"
|
||||
new "بناء الرزمة البيانية:"
|
||||
|
||||
# game/distribute_gui.rpy:208
|
||||
old "Build Updates"
|
||||
new "بناء تحديثات:"
|
||||
|
||||
# game/distribute_gui.rpy:212
|
||||
old "Build"
|
||||
new "بناء"
|
||||
|
||||
# game/distribute_gui.rpy:219
|
||||
old "Errors were detected when running the project. Please ensure the project runs without errors before building distributions."
|
||||
new "تم ايجاد بعض الاخطاء في المشروع. الرجاء التأكد من خلو المشروع من الأخطاء قبل نشره بشكل نهائي."
|
||||
|
||||
# game/distribute_gui.rpy:236
|
||||
old "Your project does not contain build information. Would you like to add build information to the end of options.rpy?"
|
||||
new "مشروعك يخلو من معلومات النشر, هل ترغب في إضافة هذه المعلومات في نهاية ملف options.rpy؟"
|
||||
|
||||
@@ -1,64 +0,0 @@
|
||||
# Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/editor.rpy:120
|
||||
old "{b}Recommended.{/b} A beta editor with an easy to use interface and features that aid in development, such as spell-checking. Editra currently lacks the IME support required for Chinese, Japanese, and Korean text input."
|
||||
new "{b}نقترح.{/b} محرر نص له واجهة سهلة الاستعمال ويعين على كتابة النصوص البرمجية يفضل برنامج يحتوي على مدقق لغوي. Editraحالياً لا يدعم اللغات الأجنبية مثل اللغه الكورية و الصينية و اليابانية."
|
||||
|
||||
# game/editor.rpy:121
|
||||
old "{b}Recommended.{/b} A beta editor with an easy to use interface and features that aid in development, such as spell-checking. Editra currently lacks the IME support required for Chinese, Japanese, and Korean text input. On Linux, Editra requires wxPython."
|
||||
new "{b}نقترح.{/b} محرر نص له واجهة سهلة الاستعمال ويعين على كتابة النصوص البرمجية يفضل برنامج يحتوي على مدقق لغوي. Editraحالياً لا يدعم اللغات الأجنبية مثل اللغه الكورية و الصينية و اليابانية. على نظام لينوكس, Editra يحتاج wxPython."
|
||||
|
||||
# game/editor.rpy:137
|
||||
old "The may have occured because wxPython is not installed on this system."
|
||||
new "قد يكون السبب ان wxPython غير موجود على هذا الجهاز."
|
||||
|
||||
# game/editor.rpy:144
|
||||
old "Up to 22 MB download required."
|
||||
new "مطلوب تحميل ملف بحجم 22 ميغا بايت."
|
||||
|
||||
# game/editor.rpy:157
|
||||
old "1.8 MB download required."
|
||||
new "مطلوب تحميل ملف بحجم 1.8 ميغا بايت."
|
||||
|
||||
# game/editor.rpy:158
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
new "قد يكون السبب ان الجافا غير موجوده على هذا الجهاز."
|
||||
|
||||
# game/editor.rpy:327
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
new "حصل استثناء اثناء فتح المحرر: \n[exception!q]"
|
||||
|
||||
# game/editor.rpy:378
|
||||
old "Select Editor"
|
||||
new "الرجاء اختيار المحرر"
|
||||
|
||||
# game/editor.rpy:393
|
||||
old "A text editor is the program you'll use to edit Ren'Py script files. Here, you can select the editor Ren'Py will use. If not already present, the editor will be automatically downloaded and installed."
|
||||
new "محرر النصوص هو برنامج يساعدك على تعديل ملفات رينباي البرمجية والحوار. هنا, يمكنك اختيار المحرر الذي سيستعلمه رينباي. إذا لم يكن لديك مسبقاً, سيتم تحميله و تنصيبه بشكل اوتوماتيكي."
|
||||
|
||||
# game/editor.rpy:415
|
||||
old "Cancel"
|
||||
new "إلغاء الامر"
|
||||
|
||||
# Translation updated at 2013-11-17 23:18
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/editor.rpy:137
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
new "قد يكون سبب ذلك ان wxPython غير موجود في نظام التشغيل لديك"
|
||||
|
||||
# game/editor.rpy:155
|
||||
old "A mature editor that requires Java."
|
||||
new "محرر متخصص يستعمل لغة جافا"
|
||||
|
||||
# game/editor.rpy:164
|
||||
old "Invokes the editor your operating system has associated with .rpy files."
|
||||
new "يقوم بفتح البرنامج المسؤول عن تحرير ملفات .rpy في نظامك التشغيلي"
|
||||
|
||||
# game/editor.rpy:180
|
||||
old "Prevents Ren'Py from opening a text editor."
|
||||
new "يمنع رينباي من فتح اي محرر نصوص"
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# 00gltest.rpy:64
|
||||
old "Graphics Acceleration"
|
||||
new "تسريع الرسومات"
|
||||
|
||||
# 00gltest.rpy:70
|
||||
old "Automatically Choose"
|
||||
new "إختيار اوتوماتيكي"
|
||||
|
||||
# 00gltest.rpy:75
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "فرض الزاوية/دايركت × ومحركاته"
|
||||
|
||||
# 00gltest.rpy:79
|
||||
old "Force OpenGL Renderer"
|
||||
new "فرض محرك OpenGL"
|
||||
|
||||
# 00gltest.rpy:83
|
||||
old "Force Software Renderer"
|
||||
new "فرض محركات البرامج"
|
||||
|
||||
# 00gltest.rpy:93
|
||||
old "Enable"
|
||||
new "Enable"
|
||||
|
||||
# 00gltest.rpy:109
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "التغييرات سيتم تطبيقها في المرة القادمة تفتح البرنامج"
|
||||
|
||||
# 00gltest.rpy:141
|
||||
old "Performance Warning"
|
||||
new "تحذير تشغيلي"
|
||||
|
||||
# 00gltest.rpy:146
|
||||
old "This computer is using software rendering."
|
||||
new "هذا الحاسوب يستعمل محركات البرامج software rendering"
|
||||
|
||||
# 00gltest.rpy:148
|
||||
old "This computer is not using shaders."
|
||||
new "هذا الحاسوب لا يستعمل اي shaders"
|
||||
|
||||
# 00gltest.rpy:150
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "هذا الحاسوب يستعرض الرسوميات بشكل بطيء"
|
||||
|
||||
# 00gltest.rpy:152
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "هذا الحاسوب يواجه مشكلة في عرض الرسوميات [problem]"
|
||||
|
||||
# 00gltest.rpy:157
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "محركات الرسوميات قد تكون قديمة او لا تعمل بشكل صحيح. قد يسبب ذلك بطء او اخطاء في الاستعراض, القيام بتحديث directX قد يساعد في حل المشكلة."
|
||||
|
||||
# 00gltest.rpy:159
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new " محركات الرسوميات قد تكون قديمة او لا تعمل بشكل صحيح. قد يسبب ذلك بطء او اخطاء في الاستعراض."
|
||||
|
||||
# 00gltest.rpy:164
|
||||
old "Update DirectX"
|
||||
new "تحديث DirectX"
|
||||
|
||||
# 00gltest.rpy:170
|
||||
old "Continue, Show this warning again"
|
||||
new "استمرار, الرجاء عرض هذا التحذير في المرة الثادمة ايضاً"
|
||||
|
||||
# 00gltest.rpy:174
|
||||
old "Continue, Don't show warning again"
|
||||
new "استمرار, لا تعرض هذا التحذير مرة اخرى"
|
||||
|
||||
# 00gltest.rpy:192
|
||||
old "Updating DirectX."
|
||||
new "يتم تحديث DirectX"
|
||||
|
||||
# 00gltest.rpy:196
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "يتم الآن تنصيب DirectX, قد يبدأ ذلك بشكل مصغر في شريط المهام. الرجاء اتباع التعليمات لاكمال التنصيب."
|
||||
|
||||
# 00gltest.rpy:200
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}ملاحظة:{/b} مايكروسوفت دايركت أكس يقوم تلقائياً بتنصيب شريط بينق Bing toolbar. إذا لم ترغب بذلك الرجاء القيام بإلغاء تحديد خانة الاختيار"
|
||||
|
||||
# 00gltest.rpy:204
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "حيثن ينتهي التنصيب, الرجاء الضغط ادناه لإعادة تشغيل البرنامج"
|
||||
|
||||
# 00gltest.rpy:206
|
||||
old "Restart"
|
||||
new "إعادة تشغيل"
|
||||
|
||||
# 00gamepad.rpy:32
|
||||
old "Select Gamepad to Calibrate"
|
||||
new "Select Gamepad to Calibrate"
|
||||
|
||||
# 00gamepad.rpy:35
|
||||
old "No Gamepads Available"
|
||||
new "No Gamepads Available"
|
||||
|
||||
# 00gamepad.rpy:54
|
||||
old "Calibrating [name] ([i]/[total])"
|
||||
new "Calibrating [name] ([i]/[total])"
|
||||
|
||||
# 00gamepad.rpy:58
|
||||
old "Press or move the [control!r] [kind]."
|
||||
new "Press or move the [control!r] [kind]."
|
||||
|
||||
# 00gamepad.rpy:66
|
||||
old "Skip (A)"
|
||||
new "Skip (A)"
|
||||
|
||||
# 00gamepad.rpy:69
|
||||
old "Back (B)"
|
||||
new "Back (B)"
|
||||
|
||||
# _errorhandling.rpym:495
|
||||
old "Open Traceback"
|
||||
new "قراءة التقرير"
|
||||
|
||||
# _errorhandling.rpym:497
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "يفتح تقرير الخطأ في برنامج الملفات النصية."
|
||||
|
||||
# _errorhandling.rpym:499
|
||||
old "Copy to Clipboard"
|
||||
new "Copy to Clipboard"
|
||||
|
||||
# _errorhandling.rpym:501
|
||||
old "Copies the traceback.txt file to the clipboard."
|
||||
new "Copies the traceback.txt file to the clipboard."
|
||||
|
||||
# _errorhandling.rpym:519
|
||||
old "An exception has occurred."
|
||||
new "حصل استثناء"
|
||||
|
||||
# _errorhandling.rpym:538
|
||||
old "Rollback"
|
||||
new "تراجع"
|
||||
|
||||
# _errorhandling.rpym:540
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "يقوم بالتراجع لنقطة سابقة لكي تستطيع اختيار شيء آخر"
|
||||
|
||||
# _errorhandling.rpym:543
|
||||
old "Ignore"
|
||||
new "تجاهل"
|
||||
|
||||
# _errorhandling.rpym:545
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "يتجاهل الاستثناء مما يستمح لك بالاستمرار. قد يسبب هذا المزيد من الاخطاء."
|
||||
|
||||
# _errorhandling.rpym:548
|
||||
old "Reload"
|
||||
new "إعادة المحاولة"
|
||||
|
||||
# _errorhandling.rpym:550
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "يعيد تشغيل اللعبة من القرص الصلب, مع محاولة استعمادة آخر نقطة وحفظها عند الإستطاعة."
|
||||
|
||||
# _errorhandling.rpym:560
|
||||
old "Quits the game."
|
||||
new "يخرج من اللعبة."
|
||||
|
||||
# _errorhandling.rpym:582
|
||||
old "Parsing the script failed."
|
||||
new "حصل خطأ أثناء تشغيل النص."
|
||||
|
||||
# _errorhandling.rpym:606
|
||||
old "Open Parse Errors"
|
||||
new "يفتح قائمة اخطاء التشغيل."
|
||||
|
||||
# _errorhandling.rpym:608
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "يفتح ملف errors.txt في برنامج الملفات النصية"
|
||||
|
||||
# _errorhandling.rpym:612
|
||||
old "Copies the errors.txt file to the clipboard."
|
||||
new "Copies the errors.txt file to the clipboard."
|
||||
|
||||
@@ -1,116 +0,0 @@
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/front_page.rpy:79
|
||||
old "+ Create New Project"
|
||||
new "+ إبدأ مشروعاً جديداً"
|
||||
|
||||
# game/front_page.rpy:90
|
||||
old "Launch Project"
|
||||
new "تشغيل المشروع"
|
||||
|
||||
# game/front_page.rpy:111
|
||||
old "Tutorial"
|
||||
new "الدليل العملي"
|
||||
|
||||
# game/front_page.rpy:112
|
||||
old "The Question"
|
||||
new "السؤال"
|
||||
|
||||
# game/front_page.rpy:128
|
||||
old "Active Project"
|
||||
new "المشروع الحالي"
|
||||
|
||||
# game/front_page.rpy:136
|
||||
old "Open Directory"
|
||||
new "فتح مجلد"
|
||||
|
||||
# game/front_page.rpy:141
|
||||
old "game"
|
||||
new "اللعبة"
|
||||
|
||||
# game/front_page.rpy:142
|
||||
old "base"
|
||||
new "المشروع كله"
|
||||
|
||||
# game/front_page.rpy:148
|
||||
old "Edit File"
|
||||
new "تحرير ملف"
|
||||
|
||||
# game/front_page.rpy:156
|
||||
old "All script files"
|
||||
new "جميع الملفات النصية"
|
||||
|
||||
# game/front_page.rpy:165
|
||||
old "Navigate Script"
|
||||
new "مهام إضافية"
|
||||
|
||||
# game/front_page.rpy:176
|
||||
old "Check Script (Lint)"
|
||||
new "فحص الملف (لينت)"
|
||||
|
||||
# game/front_page.rpy:177
|
||||
old "Change Theme"
|
||||
new "تغيير المظهر"
|
||||
|
||||
# game/front_page.rpy:178
|
||||
old "Delete Persistent"
|
||||
new "حذف الملفات المؤقتة"
|
||||
|
||||
# game/front_page.rpy:186
|
||||
old "Build Distributions"
|
||||
new "تجميع المشروع للنشر"
|
||||
|
||||
# game/front_page.rpy:188
|
||||
old "Generate Translations"
|
||||
new "تجهيز ملفات للترجمة"
|
||||
|
||||
# game/front_page.rpy:204
|
||||
old "Checking script for potential problems..."
|
||||
new "يتم فحص الملفات لأي اخطاء محتملة..."
|
||||
|
||||
# game/front_page.rpy:219
|
||||
old "Deleting persistent data..."
|
||||
new "يتم الآن حذف الملفات المؤقتة "
|
||||
|
||||
# : Translation updated at 2013-11-17 23:18
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/front_page.rpy:204
|
||||
old "Android"
|
||||
new "أندرويد"
|
||||
|
||||
# game/front_page.rpy:206
|
||||
old "Extract Dialogue"
|
||||
new "استخراج النص"
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/front_page.rpy:144
|
||||
old "[p.name!q] (template)"
|
||||
new "[p.name!q] (template)"
|
||||
|
||||
# Translation updated at 2014-09-30 23:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/front_page.rpy:35
|
||||
old "Open [text] directory."
|
||||
new "فتح المجلد [text]"
|
||||
|
||||
# game/front_page.rpy:150
|
||||
old "Select project [text]."
|
||||
new "اختر المشروع [text]"
|
||||
|
||||
# game/front_page.rpy:234
|
||||
old "Force Recompile"
|
||||
new "إعادة حزم الملفات"
|
||||
|
||||
# game/front_page.rpy:285
|
||||
old "Recompiling all rpy files into rpyc files..."
|
||||
new "يتم إعادة حزم الملفات من صيغة rpy إلى rpyc..."
|
||||
|
||||
@@ -0,0 +1,411 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# gui.rpy:2
|
||||
old "## Initialization"
|
||||
new "## Initialization"
|
||||
|
||||
# gui.rpy:5
|
||||
old "## The init offset statement causes the init code in this file to run before init code in any other file."
|
||||
new "## The init offset statement causes the init code in this file to run before init code in any other file."
|
||||
|
||||
# gui.rpy:9
|
||||
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
|
||||
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
|
||||
|
||||
# gui.rpy:21
|
||||
old "## Colors"
|
||||
new "## Colors"
|
||||
|
||||
# gui.rpy:23
|
||||
old "## The colors of text in the interface."
|
||||
new "## The colors of text in the interface."
|
||||
|
||||
# gui.rpy:25
|
||||
old "## An accent color used throughout the interface to label and highlight text."
|
||||
new "## An accent color used throughout the interface to label and highlight text."
|
||||
|
||||
# gui.rpy:29
|
||||
old "## The color used for a text button when it is neither selected nor hovered."
|
||||
new "## The color used for a text button when it is neither selected nor hovered."
|
||||
|
||||
# gui.rpy:32
|
||||
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
|
||||
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
|
||||
|
||||
# gui.rpy:36
|
||||
old "## The color that is used for buttons and bars that are hovered."
|
||||
new "## The color that is used for buttons and bars that are hovered."
|
||||
|
||||
# gui.rpy:39
|
||||
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
|
||||
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
|
||||
|
||||
# gui.rpy:43
|
||||
old "## The color used for a text button when it cannot be selected."
|
||||
new "## The color used for a text button when it cannot be selected."
|
||||
|
||||
# gui.rpy:46
|
||||
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
|
||||
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
|
||||
|
||||
# gui.rpy:51
|
||||
old "## The colors used for dialogue and menu choice text."
|
||||
new "## The colors used for dialogue and menu choice text."
|
||||
|
||||
# gui.rpy:56
|
||||
old "## Fonts and Font Sizes"
|
||||
new "## Fonts and Font Sizes"
|
||||
|
||||
# gui.rpy:58
|
||||
old "## The font used for in-game text."
|
||||
new "## The font used for in-game text."
|
||||
|
||||
# gui.rpy:61
|
||||
old "## The font used for character names."
|
||||
new "## The font used for character names."
|
||||
|
||||
# gui.rpy:64
|
||||
old "## The font used for out-of-game text."
|
||||
new "## The font used for out-of-game text."
|
||||
|
||||
# gui.rpy:67
|
||||
old "## The size of normal dialogue text."
|
||||
new "## The size of normal dialogue text."
|
||||
|
||||
# gui.rpy:70
|
||||
old "## The size of character names."
|
||||
new "## The size of character names."
|
||||
|
||||
# gui.rpy:73
|
||||
old "## The size of text in the game's user interface."
|
||||
new "## The size of text in the game's user interface."
|
||||
|
||||
# gui.rpy:76
|
||||
old "## The size of labels in the game's user interface."
|
||||
new "## The size of labels in the game's user interface."
|
||||
|
||||
# gui.rpy:79
|
||||
old "## The size of text on the notify screen."
|
||||
new "## The size of text on the notify screen."
|
||||
|
||||
# gui.rpy:82
|
||||
old "## The size of the game's title."
|
||||
new "## The size of the game's title."
|
||||
|
||||
# gui.rpy:86
|
||||
old "## Main and Game Menus"
|
||||
new "## Main and Game Menus"
|
||||
|
||||
# gui.rpy:88
|
||||
old "## The images used for the main and game menus."
|
||||
new "## The images used for the main and game menus."
|
||||
|
||||
# gui.rpy:92
|
||||
old "## Should we show the name and version of the game?"
|
||||
new "## Should we show the name and version of the game?"
|
||||
|
||||
# gui.rpy:96
|
||||
old "## Dialogue"
|
||||
new "## Dialogue"
|
||||
|
||||
# gui.rpy:98
|
||||
old "## These variables control how dialogue is displayed on the screen one line at a time."
|
||||
new "## These variables control how dialogue is displayed on the screen one line at a time."
|
||||
|
||||
# gui.rpy:101
|
||||
old "## The height of the textbox containing dialogue."
|
||||
new "## The height of the textbox containing dialogue."
|
||||
|
||||
# gui.rpy:104
|
||||
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
|
||||
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
|
||||
|
||||
# gui.rpy:109
|
||||
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
|
||||
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
|
||||
|
||||
# gui.rpy:114
|
||||
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
|
||||
# gui.rpy:118
|
||||
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
|
||||
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
|
||||
|
||||
# gui.rpy:123
|
||||
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
# gui.rpy:138
|
||||
old "## The maximum width of dialogue text, in pixels."
|
||||
new "## The maximum width of dialogue text, in pixels."
|
||||
|
||||
# gui.rpy:141
|
||||
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
|
||||
# gui.rpy:146
|
||||
old "## Buttons"
|
||||
new "## Buttons"
|
||||
|
||||
# gui.rpy:148
|
||||
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
|
||||
# gui.rpy:151
|
||||
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
|
||||
# gui.rpy:155
|
||||
old "## The borders on each side of the button, in left, top, right, bottom order."
|
||||
new "## The borders on each side of the button, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:158
|
||||
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
|
||||
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
|
||||
|
||||
# gui.rpy:162
|
||||
old "## The font used by the button."
|
||||
new "## The font used by the button."
|
||||
|
||||
# gui.rpy:165
|
||||
old "## The size of the text used by the button."
|
||||
new "## The size of the text used by the button."
|
||||
|
||||
# gui.rpy:179
|
||||
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
|
||||
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
|
||||
|
||||
# gui.rpy:183
|
||||
old "## These customizations are used by the default interface:"
|
||||
new "## These customizations are used by the default interface:"
|
||||
|
||||
# gui.rpy:198
|
||||
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
|
||||
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
|
||||
|
||||
# gui.rpy:205
|
||||
old "## Choice Buttons"
|
||||
new "## Choice Buttons"
|
||||
|
||||
# gui.rpy:207
|
||||
old "## Choice buttons are used in the in-game menus."
|
||||
new "## Choice buttons are used in the in-game menus."
|
||||
|
||||
# gui.rpy:220
|
||||
old "## File Slot Buttons"
|
||||
new "## File Slot Buttons"
|
||||
|
||||
# gui.rpy:222
|
||||
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
|
||||
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
|
||||
|
||||
# gui.rpy:226
|
||||
old "## The save slot button."
|
||||
new "## The save slot button."
|
||||
|
||||
# gui.rpy:234
|
||||
old "## The width and height of thumbnails used by the save slots."
|
||||
new "## The width and height of thumbnails used by the save slots."
|
||||
|
||||
# gui.rpy:238
|
||||
old "## The number of columns and rows in the grid of save slots."
|
||||
new "## The number of columns and rows in the grid of save slots."
|
||||
|
||||
# gui.rpy:243
|
||||
old "## Positioning and Spacing"
|
||||
new "## Positioning and Spacing"
|
||||
|
||||
# gui.rpy:245
|
||||
old "## These variables control the positioning and spacing of various user interface elements."
|
||||
new "## These variables control the positioning and spacing of various user interface elements."
|
||||
|
||||
# gui.rpy:248
|
||||
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
|
||||
# gui.rpy:252
|
||||
old "## The vertical position of the skip indicator."
|
||||
new "## The vertical position of the skip indicator."
|
||||
|
||||
# gui.rpy:255
|
||||
old "## The vertical position of the notify screen."
|
||||
new "## The vertical position of the notify screen."
|
||||
|
||||
# gui.rpy:258
|
||||
old "## The spacing between menu choices."
|
||||
new "## The spacing between menu choices."
|
||||
|
||||
# gui.rpy:261
|
||||
old "## Buttons in the navigation section of the main and game menus."
|
||||
new "## Buttons in the navigation section of the main and game menus."
|
||||
|
||||
# gui.rpy:264
|
||||
old "## Controls the amount of spacing between preferences."
|
||||
new "## Controls the amount of spacing between preferences."
|
||||
|
||||
# gui.rpy:267
|
||||
old "## Controls the amount of spacing between preference buttons."
|
||||
new "## Controls the amount of spacing between preference buttons."
|
||||
|
||||
# gui.rpy:270
|
||||
old "## The spacing between file page buttons."
|
||||
new "## The spacing between file page buttons."
|
||||
|
||||
# gui.rpy:273
|
||||
old "## The spacing between file slots."
|
||||
new "## The spacing between file slots."
|
||||
|
||||
# gui.rpy:277
|
||||
old "## Frames"
|
||||
new "## Frames"
|
||||
|
||||
# gui.rpy:279
|
||||
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
|
||||
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
|
||||
|
||||
# gui.rpy:282
|
||||
old "## Generic frames that are introduced by player code."
|
||||
new "## Generic frames that are introduced by player code."
|
||||
|
||||
# gui.rpy:285
|
||||
old "## The frame that is used as part of the confirm screen."
|
||||
new "## The frame that is used as part of the confirm screen."
|
||||
|
||||
# gui.rpy:288
|
||||
old "## The frame that is used as part of the skip screen."
|
||||
new "## The frame that is used as part of the skip screen."
|
||||
|
||||
# gui.rpy:291
|
||||
old "## The frame that is used as part of the notify screen."
|
||||
new "## The frame that is used as part of the notify screen."
|
||||
|
||||
# gui.rpy:294
|
||||
old "## Should frame backgrounds be tiled?"
|
||||
new "## Should frame backgrounds be tiled?"
|
||||
|
||||
# gui.rpy:298
|
||||
old "## Bars, Scrollbars, and Sliders"
|
||||
new "## Bars, Scrollbars, and Sliders"
|
||||
|
||||
# gui.rpy:300
|
||||
old "## These control the look and size of bars, scrollbars, and sliders."
|
||||
new "## These control the look and size of bars, scrollbars, and sliders."
|
||||
|
||||
# gui.rpy:302
|
||||
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
|
||||
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
|
||||
|
||||
# gui.rpy:305
|
||||
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
|
||||
# gui.rpy:311
|
||||
old "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
new "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
|
||||
# gui.rpy:316
|
||||
old "## Horizontal borders."
|
||||
new "## Horizontal borders."
|
||||
|
||||
# gui.rpy:321
|
||||
old "## Vertical borders."
|
||||
new "## Vertical borders."
|
||||
|
||||
# gui.rpy:326
|
||||
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
|
||||
# gui.rpy:331
|
||||
old "## History"
|
||||
new "## History"
|
||||
|
||||
# gui.rpy:333
|
||||
old "## The history screen displays dialogue that the player has already dismissed."
|
||||
new "## The history screen displays dialogue that the player has already dismissed."
|
||||
|
||||
# gui.rpy:335
|
||||
old "## The number of blocks of dialogue history Ren'Py will keep."
|
||||
new "## The number of blocks of dialogue history Ren'Py will keep."
|
||||
|
||||
# gui.rpy:338
|
||||
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
|
||||
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
|
||||
|
||||
# gui.rpy:342
|
||||
old "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
new "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
|
||||
# gui.rpy:349
|
||||
old "## The position, width, and alignment of the dialogue text."
|
||||
new "## The position, width, and alignment of the dialogue text."
|
||||
|
||||
# gui.rpy:356
|
||||
old "## NVL-Mode"
|
||||
new "## NVL-Mode"
|
||||
|
||||
# gui.rpy:358
|
||||
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
|
||||
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
|
||||
|
||||
# gui.rpy:360
|
||||
old "## The borders of the background of the NVL-mode background window."
|
||||
new "## The borders of the background of the NVL-mode background window."
|
||||
|
||||
# gui.rpy:363
|
||||
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
|
||||
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
|
||||
|
||||
# gui.rpy:367
|
||||
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
|
||||
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
|
||||
|
||||
# gui.rpy:384
|
||||
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
|
||||
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
|
||||
|
||||
# gui.rpy:391
|
||||
old "## The position of nvl menu_buttons."
|
||||
new "## The position of nvl menu_buttons."
|
||||
|
||||
# gui.rpy:403
|
||||
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
|
||||
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
|
||||
|
||||
# gui.rpy:409
|
||||
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
|
||||
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
|
||||
|
||||
# gui.rpy:413
|
||||
old "## Font sizes."
|
||||
new "## Font sizes."
|
||||
|
||||
# gui.rpy:421
|
||||
old "## Adjust the location of the textbox."
|
||||
new "## Adjust the location of the textbox."
|
||||
|
||||
# gui.rpy:427
|
||||
old "## Change the size and spacing of items in the game menu."
|
||||
new "## Change the size and spacing of items in the game menu."
|
||||
|
||||
# gui.rpy:436
|
||||
old "## File button layout."
|
||||
new "## File button layout."
|
||||
|
||||
# gui.rpy:440
|
||||
old "## NVL-mode."
|
||||
new "## NVL-mode."
|
||||
|
||||
# gui.rpy:456
|
||||
old "## Quick buttons."
|
||||
new "## Quick buttons."
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/interface.rpy:89
|
||||
old "Documentation"
|
||||
new "المستندات المرفقة"
|
||||
|
||||
# game/interface.rpy:90
|
||||
old "Ren'Py Website"
|
||||
new "موقع رينباي"
|
||||
|
||||
# game/interface.rpy:91
|
||||
old "Ren'Py Games List"
|
||||
new "قائمة ألعاب رينباي"
|
||||
|
||||
# game/interface.rpy:92
|
||||
old "About"
|
||||
new "معلومات"
|
||||
|
||||
# game/interface.rpy:99
|
||||
old "update"
|
||||
new "تحديث"
|
||||
|
||||
# game/interface.rpy:101
|
||||
old "preferences"
|
||||
new "خيارات"
|
||||
|
||||
# game/interface.rpy:102
|
||||
old "quit"
|
||||
new "خروج"
|
||||
|
||||
# game/interface.rpy:149
|
||||
old "Yes"
|
||||
new "نعم"
|
||||
|
||||
# game/interface.rpy:151
|
||||
old "No"
|
||||
new "لا"
|
||||
|
||||
# game/interface.rpy:181
|
||||
old "Due to package format limitations, non-ASCII file and directory names are not allowed."
|
||||
new "بسبب محدودية التجميع, الاحرف الغير لاتينيه غير مسموح بها في اسم الملف او المجلدات"
|
||||
|
||||
# game/interface.rpy:183
|
||||
old "[title]"
|
||||
new "[title]"
|
||||
|
||||
# game/interface.rpy:248
|
||||
old "ERROR"
|
||||
new "خطأ"
|
||||
|
||||
# game/interface.rpy:280
|
||||
old "While [what!q], an error occured:"
|
||||
new "حصل خطأ أثناء [what!q]"
|
||||
|
||||
# game/interface.rpy:281
|
||||
old "[exception!q]"
|
||||
new "[exception!q]"
|
||||
|
||||
# game/interface.rpy:298
|
||||
old "Text input may not contain the {{ or [[ characters."
|
||||
new "لا يمكن استعمال الرمزان {{ و ]] هنا"
|
||||
|
||||
# game/interface.rpy:303
|
||||
old "File and directory names may not contain / or \\."
|
||||
new "غير مسموح ان يحتوي اسم الملف او المجلد على الرمزان / أو \\"
|
||||
|
||||
# game/interface.rpy:309
|
||||
old "File and directory names must consist of ASCII characters."
|
||||
new "اسم الملف و المجلدات التي تحتويه يجب ان تكون مكتوبة بأحرف ASCII "
|
||||
|
||||
# game/interface.rpy:330
|
||||
old "INFORMATION"
|
||||
new "معلومات"
|
||||
|
||||
# game/interface.rpy:373
|
||||
old "PROCESSING"
|
||||
new "يتم إجراء العمليات"
|
||||
|
||||
# game/interface.rpy:390
|
||||
old "QUESTION"
|
||||
new "سؤال"
|
||||
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/interface.rpy:451
|
||||
old "CHOICE"
|
||||
new "إختيار"
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,71 +0,0 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/navigation.rpy:150
|
||||
old "Navigate: [project.current.name]"
|
||||
new "الذهاب إلى: [project.current.name]"
|
||||
|
||||
# game/navigation.rpy:159
|
||||
old "Order: "
|
||||
new "الترتيب:"
|
||||
|
||||
# game/navigation.rpy:160
|
||||
old "alphabetical"
|
||||
new "أبجدي"
|
||||
|
||||
# game/navigation.rpy:162
|
||||
old "by-file"
|
||||
new "ملف ملف"
|
||||
|
||||
# game/navigation.rpy:164
|
||||
old "natural"
|
||||
new "طبيعي"
|
||||
|
||||
# game/navigation.rpy:168
|
||||
old "refresh"
|
||||
new "إعادة تحميل"
|
||||
|
||||
# game/navigation.rpy:176
|
||||
old "Category:"
|
||||
new "فئة:"
|
||||
|
||||
# game/navigation.rpy:178
|
||||
old "files"
|
||||
new "ملفات"
|
||||
|
||||
# game/navigation.rpy:179
|
||||
old "labels"
|
||||
new "وسم"
|
||||
|
||||
# game/navigation.rpy:180
|
||||
old "defines"
|
||||
new "تحديد"
|
||||
|
||||
# game/navigation.rpy:181
|
||||
old "transforms"
|
||||
new "التحول"
|
||||
|
||||
# game/navigation.rpy:182
|
||||
old "screens"
|
||||
new "النوافذ"
|
||||
|
||||
# game/navigation.rpy:183
|
||||
old "callables"
|
||||
new "ما يمكن استجلابه"
|
||||
|
||||
# game/navigation.rpy:184
|
||||
old "TODOs"
|
||||
new "TODOs"
|
||||
|
||||
# game/navigation.rpy:223
|
||||
old "+ Add script file"
|
||||
new "+إضافة ملف نص"
|
||||
|
||||
# game/navigation.rpy:231
|
||||
old "No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."
|
||||
new "No TODO comments found.\n\nTo create one, include \"# TODO\" in your script."
|
||||
|
||||
# game/navigation.rpy:238
|
||||
old "The list of names is empty."
|
||||
new "قائمة الأسماء فارغة"
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/new_project.rpy:22
|
||||
old "Choose Project Template"
|
||||
new "الرجاء اختيار تصميم المظهر للمشروع"
|
||||
|
||||
# game/new_project.rpy:40
|
||||
old "Please select a template to use for your new project. Ren'Py ships with a default template that creates an English-language game with standard screens."
|
||||
new "الرجاء اختيار التصميم الذي ترغبه لمشروعك الجديد. رينباي يأتي بعدة تصاميم قياسية يمكنك التعديل عليها لاحقاً."
|
||||
|
||||
# game/new_project.rpy:55
|
||||
old "PROJECT NAME"
|
||||
new "اسم المشروع"
|
||||
|
||||
# game/new_project.rpy:56
|
||||
old "Please enter the name of your project:"
|
||||
new "الرجاء اختيار اسم لمشروعك الجديد"
|
||||
|
||||
# game/new_project.rpy:62
|
||||
old "The project name may not be empty."
|
||||
new "لا يمكن ان يكون اسم المشروع فارغاً"
|
||||
|
||||
# game/new_project.rpy:67
|
||||
old "[project_name!q] already exists. Please choose a different project name."
|
||||
new "الاسم [project_name!q] يوجد مسبقاً, الرجاء اختيار اسم مختلف."
|
||||
|
||||
# game/new_project.rpy:70
|
||||
old "[project_dir!q] already exists. Please choose a different project name."
|
||||
new "[project_dir!q] يوجد مسبقاً, الرجاء اختيار اسم مختلف."
|
||||
|
||||
# : Translation updated at 2013-11-17 23:18
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/new_project.rpy:40
|
||||
old "Please select a template to use for your new project. The template sets the default font and the user interface language. If your language is not supported, choose 'english'."
|
||||
new "الرجاء اختيار القالب المطلوب للمشروع الجديد. هذه القوالب تقوم بتجهيز اتجاه النص و اللغه المستخدمة في الواجهة لتسهل عملية البدء. إذا لم تكن لغتك مدعومة الرجاء اختيار اللغة الانجليزية."
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/new_project.rpy:71
|
||||
old "The projects directory could not be set. Giving up."
|
||||
new "لم يتم تحديد مجلد المشاريع, سيتم الإلغاء"
|
||||
|
||||
@@ -0,0 +1,27 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# _layout/classic_joystick_preferences.rpym:94
|
||||
old "Joystick Mapping"
|
||||
new "خيارات عصى التحكم"
|
||||
|
||||
# _layout/classic_load_save.rpym:138
|
||||
old "Empty Slot."
|
||||
new "خانة فارغة"
|
||||
|
||||
# _layout/classic_load_save.rpym:170
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# _layout/classic_load_save.rpym:179
|
||||
old "q"
|
||||
new "q"
|
||||
|
||||
# _compat/gamemenu.rpym:355
|
||||
old "Previous"
|
||||
new "السابق"
|
||||
|
||||
# _compat/gamemenu.rpym:362
|
||||
old "Next"
|
||||
new "التالي"
|
||||
|
||||
@@ -0,0 +1,195 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# options.rpy:1
|
||||
old "## This file contains options that can be changed to customize your game."
|
||||
new "## This file contains options that can be changed to customize your game."
|
||||
|
||||
# options.rpy:4
|
||||
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
|
||||
new "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
|
||||
|
||||
# options.rpy:10
|
||||
old "## Basics"
|
||||
new "## Basics"
|
||||
|
||||
# options.rpy:12
|
||||
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
|
||||
new "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
|
||||
|
||||
# options.rpy:15
|
||||
old "## The _() surrounding the string marks it as eligible for translation."
|
||||
new "## The _() surrounding the string marks it as eligible for translation."
|
||||
|
||||
# options.rpy:17
|
||||
old "Ren'Py 7 Default GUI"
|
||||
new "Ren'Py 7 Default GUI"
|
||||
|
||||
# options.rpy:20
|
||||
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
|
||||
new "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
|
||||
|
||||
# options.rpy:26
|
||||
old "## The version of the game."
|
||||
new "## The version of the game."
|
||||
|
||||
# options.rpy:31
|
||||
old "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
|
||||
new "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
|
||||
|
||||
# options.rpy:37
|
||||
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
|
||||
new "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
|
||||
|
||||
# options.rpy:44
|
||||
old "## Sounds and music"
|
||||
new "## Sounds and music"
|
||||
|
||||
# options.rpy:46
|
||||
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
|
||||
new "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
|
||||
|
||||
# options.rpy:55
|
||||
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
|
||||
new "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
|
||||
|
||||
# options.rpy:62
|
||||
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
|
||||
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
|
||||
|
||||
# options.rpy:69
|
||||
old "## Transitions"
|
||||
new "## Transitions"
|
||||
|
||||
# options.rpy:71
|
||||
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
|
||||
new "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
|
||||
|
||||
# options.rpy:75
|
||||
old "## Entering or exiting the game menu."
|
||||
new "## Entering or exiting the game menu."
|
||||
|
||||
# options.rpy:81
|
||||
old "## A transition that is used after a game has been loaded."
|
||||
new "## A transition that is used after a game has been loaded."
|
||||
|
||||
# options.rpy:86
|
||||
old "## Used when entering the main menu after the game has ended."
|
||||
new "## Used when entering the main menu after the game has ended."
|
||||
|
||||
# options.rpy:91
|
||||
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
|
||||
new "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
|
||||
|
||||
# options.rpy:96
|
||||
old "## Window management"
|
||||
new "## Window management"
|
||||
|
||||
# options.rpy:98
|
||||
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
|
||||
new "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
|
||||
|
||||
# options.rpy:103
|
||||
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
|
||||
new "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
|
||||
|
||||
# options.rpy:109
|
||||
old "## Transitions used to show and hide the dialogue window"
|
||||
new "## Transitions used to show and hide the dialogue window"
|
||||
|
||||
# options.rpy:115
|
||||
old "## Preference defaults"
|
||||
new "## Preference defaults"
|
||||
|
||||
# options.rpy:117
|
||||
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
|
||||
new "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
|
||||
|
||||
# options.rpy:123
|
||||
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
|
||||
new "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
|
||||
|
||||
# options.rpy:129
|
||||
old "## Save directory"
|
||||
new "## Save directory"
|
||||
|
||||
# options.rpy:131
|
||||
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
|
||||
new "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
|
||||
|
||||
# options.rpy:134
|
||||
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
new "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
|
||||
# options.rpy:136
|
||||
old "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
|
||||
new "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
|
||||
|
||||
# options.rpy:138
|
||||
old "## Linux: $HOME/.renpy/<config.save_directory>"
|
||||
new "## Linux: $HOME/.renpy/<config.save_directory>"
|
||||
|
||||
# options.rpy:140
|
||||
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
|
||||
new "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
|
||||
|
||||
# options.rpy:146
|
||||
old "## Icon ########################################################################'"
|
||||
new "## Icon ########################################################################'"
|
||||
|
||||
# options.rpy:148
|
||||
old "## The icon displayed on the taskbar or dock."
|
||||
new "## The icon displayed on the taskbar or dock."
|
||||
|
||||
# options.rpy:153
|
||||
old "## Build configuration"
|
||||
new "## Build configuration"
|
||||
|
||||
# options.rpy:155
|
||||
old "## This section controls how Ren'Py turns your project into distribution files."
|
||||
new "## This section controls how Ren'Py turns your project into distribution files."
|
||||
|
||||
# options.rpy:160
|
||||
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
|
||||
new "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
|
||||
|
||||
# options.rpy:165
|
||||
old "## In a pattern:"
|
||||
new "## In a pattern:"
|
||||
|
||||
# options.rpy:167
|
||||
old "## / is the directory separator."
|
||||
new "## / is the directory separator."
|
||||
|
||||
# options.rpy:169
|
||||
old "## * matches all characters, except the directory separator."
|
||||
new "## * matches all characters, except the directory separator."
|
||||
|
||||
# options.rpy:171
|
||||
old "## ** matches all characters, including the directory separator."
|
||||
new "## ** matches all characters, including the directory separator."
|
||||
|
||||
# options.rpy:173
|
||||
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
|
||||
new "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
|
||||
|
||||
# options.rpy:177
|
||||
old "## Classify files as None to exclude them from the built distributions."
|
||||
new "## Classify files as None to exclude them from the built distributions."
|
||||
|
||||
# options.rpy:185
|
||||
old "## To archive files, classify them as 'archive'."
|
||||
new "## To archive files, classify them as 'archive'."
|
||||
|
||||
# options.rpy:190
|
||||
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
|
||||
new "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
|
||||
|
||||
# options.rpy:196
|
||||
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
|
||||
new "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
|
||||
|
||||
# options.rpy:203
|
||||
old "## The username and project name associated with an itch.io project, separated by a slash."
|
||||
new "## The username and project name associated with an itch.io project, separated by a slash."
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/preferences.rpy:40
|
||||
old "Launcher Preferences"
|
||||
new "خيارات برنامج التشغيل"
|
||||
|
||||
# game/preferences.rpy:61
|
||||
old "Projects Directory:"
|
||||
new "دليل المشاريع:"
|
||||
|
||||
# game/preferences.rpy:68
|
||||
old "[persistent.projects_directory!q]"
|
||||
new "[persistent.projects_directory!q]"
|
||||
|
||||
# game/preferences.rpy:70
|
||||
old "Not Set"
|
||||
new "غير محدد"
|
||||
|
||||
# game/preferences.rpy:84
|
||||
old "Text Editor:"
|
||||
new "محرر الملفات النصية:"
|
||||
|
||||
# game/preferences.rpy:106
|
||||
old "Update Channel:"
|
||||
new "مصدر التحديثات:"
|
||||
|
||||
# game/preferences.rpy:126
|
||||
old "Navigation Options:"
|
||||
new "خيارات استعراض المجلدات"
|
||||
|
||||
# game/preferences.rpy:130
|
||||
old "Include private names"
|
||||
new "تضمين الأسماء الخاصة"
|
||||
|
||||
# game/preferences.rpy:131
|
||||
old "Include library names"
|
||||
new "تضمين اسماء المكتبات"
|
||||
|
||||
# game/preferences.rpy:141
|
||||
old "Launcher Options:"
|
||||
new "خيارات برنامج التشغيل:"
|
||||
|
||||
# game/preferences.rpy:145
|
||||
old "Hardware rendering"
|
||||
new "الإستعراض بواسطة قطع الجهاز الداخلية"
|
||||
|
||||
# game/preferences.rpy:148
|
||||
old "Console output"
|
||||
new "الإستعراض بواسطة البرمجيات المتوفرة"
|
||||
|
||||
# game/preferences.rpy:169
|
||||
old "Open launcher project"
|
||||
new "فتح الواجهة التشغيلية كمشروع"
|
||||
|
||||
# game/preferences.rpy:183
|
||||
old "Language:"
|
||||
new "اللغة:"
|
||||
|
||||
# Translation updated at 2014-04-17 13:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/preferences.rpy:164
|
||||
old "Show templates"
|
||||
new "عرض القوالب"
|
||||
|
||||
# Translation updated at 2014-09-30 23:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/preferences.rpy:91
|
||||
old "Projects directory: [text]"
|
||||
new "مجلد المشاريع [text]"
|
||||
|
||||
# game/preferences.rpy:114
|
||||
old "Text editor: [text]"
|
||||
new "محرر النصوص [text]"
|
||||
|
||||
# game/preferences.rpy:171
|
||||
old "Large fonts"
|
||||
new "خط كبير"
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/project.rpy:196
|
||||
old "Ren'Py is scanning the project..."
|
||||
new "رينباي يقوم بفحص المشروع"
|
||||
|
||||
# game/project.rpy:485
|
||||
old "PROJECTS DIRECTORY"
|
||||
new "سياق مجلدات المشاريع"
|
||||
|
||||
# game/project.rpy:485
|
||||
old "Please choose the projects directory using the directory chooser.\n{b}The directory chooser may have opened behind this window.{/b}"
|
||||
new "الرجاء اختيار نسق المشاريع من الصفحة الخاصة بذلك. \n{b}قد تكون النافذة ظهرت خلف هذه النافذة.{/b}"
|
||||
|
||||
# game/project.rpy:485
|
||||
old "This launcher will scan for projects in this directory, will create new projects in this directory, and will place built projects into this directory."
|
||||
new "سيقوم البرنامج بفحص المجلد هذا لإيجاد المشاريع السابقة, أو ليضع المشاريع الجديده فيه, و ايضاً لوضع المشاريع المنتهيه عند تجهيزها للنشر."
|
||||
|
||||
# game/project.rpy:525
|
||||
old "Ren'Py was unable to run python with tkinter to choose the projects directory."
|
||||
new "رينباي لم يستطع تشغيل برمجيات بايثون للبحث عن مجلد المشاريع."
|
||||
|
||||
# game/project.rpy:529
|
||||
old "Ren'Py has set the projects directory to:"
|
||||
new "رينباي قام بتحديد مجلد المشاريع إلى المكان التالي:"
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/project.rpy:48
|
||||
old "After making changes to the script, press shift+R to reload your game."
|
||||
new "عند إجراء أي تغييرات في ملف الحوار, يمكنك ضغط shift+R لترى التغييرات داخل اللعبة"
|
||||
|
||||
# game/project.rpy:49
|
||||
old "Press shift+O (the letter) to access the console."
|
||||
new "إضغط shift+O للدخول على لوحة التحكم"
|
||||
|
||||
# game/project.rpy:50
|
||||
old "Press shift+D to access the developer menu."
|
||||
new "إضغط shift+D للدخول على لوحة تحكم المبرمج"
|
||||
|
||||
# game/project.rpy:219
|
||||
old "Launching the project failed."
|
||||
new "لم تنجح محاولة إقلاع المشروع"
|
||||
|
||||
# game/project.rpy:219
|
||||
old "Please ensure that your project launches normally before running this command."
|
||||
new "الرجاء التأكد من سلامة إقلاع المشروع قبل تشغيل هذا الأمر البرمجي"
|
||||
|
||||
# game/project.rpy:516
|
||||
old "Launching"
|
||||
new "جاري الإقلاع"
|
||||
|
||||
# game/project.rpy:585
|
||||
old "Ren'Py was unable to run python with tkinter to choose the projects directory. Please install the python-tk or tkinter package."
|
||||
new "رينباي لم يتمكن من تشغيل بايثون مع tkinter لكي يختار مجلد المشاريع, الرجاء تنصيب Python-tk او tkinter"
|
||||
|
||||
# Translation updated at 2014-09-30 23:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/project.rpy:47
|
||||
old "Have you backed up your projects recently?"
|
||||
new "هل قمت بعمل نسخة احتياطية من مشاريعك مؤخراً؟"
|
||||
|
||||
@@ -0,0 +1,643 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# screens.rpy:9
|
||||
old "## Styles"
|
||||
new "## Styles"
|
||||
|
||||
# screens.rpy:87
|
||||
old "## In-game screens"
|
||||
new "## In-game screens"
|
||||
|
||||
# screens.rpy:91
|
||||
old "## Say screen"
|
||||
new "## Say screen"
|
||||
|
||||
# screens.rpy:93
|
||||
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
|
||||
new "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
|
||||
|
||||
# screens.rpy:98
|
||||
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
|
||||
new "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
|
||||
|
||||
# screens.rpy:102
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#say"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#say"
|
||||
|
||||
# screens.rpy:169
|
||||
old "## Input screen"
|
||||
new "## Input screen"
|
||||
|
||||
# screens.rpy:171
|
||||
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
|
||||
new "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
|
||||
|
||||
# screens.rpy:174
|
||||
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
|
||||
new "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
|
||||
|
||||
# screens.rpy:177
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#input"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#input"
|
||||
|
||||
# screens.rpy:205
|
||||
old "## Choice screen"
|
||||
new "## Choice screen"
|
||||
|
||||
# screens.rpy:207
|
||||
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
|
||||
new "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
|
||||
|
||||
# screens.rpy:211
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#choice"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#choice"
|
||||
|
||||
# screens.rpy:221
|
||||
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
|
||||
new "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
|
||||
|
||||
# screens.rpy:244
|
||||
old "## Quick Menu screen"
|
||||
new "## Quick Menu screen"
|
||||
|
||||
# screens.rpy:246
|
||||
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
|
||||
new "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
|
||||
|
||||
# screens.rpy:261
|
||||
old "Back"
|
||||
new "عودة"
|
||||
|
||||
# screens.rpy:262
|
||||
old "History"
|
||||
new "History"
|
||||
|
||||
# screens.rpy:263
|
||||
old "Skip"
|
||||
new "تخطي"
|
||||
|
||||
# screens.rpy:264
|
||||
old "Auto"
|
||||
new "تلقائي"
|
||||
|
||||
# screens.rpy:265
|
||||
old "Save"
|
||||
new "حفظ"
|
||||
|
||||
# screens.rpy:266
|
||||
old "Q.Save"
|
||||
new "حفظ سريع"
|
||||
|
||||
# screens.rpy:267
|
||||
old "Q.Load"
|
||||
new "استرجاع سريع"
|
||||
|
||||
# screens.rpy:268
|
||||
old "Prefs"
|
||||
new "خيارات"
|
||||
|
||||
# screens.rpy:271
|
||||
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
|
||||
new "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
|
||||
|
||||
# screens.rpy:291
|
||||
old "## Navigation screen"
|
||||
new "## Navigation screen"
|
||||
|
||||
# screens.rpy:293
|
||||
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
|
||||
new "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
|
||||
|
||||
# screens.rpy:308
|
||||
old "Start"
|
||||
new "Start"
|
||||
|
||||
# screens.rpy:316
|
||||
old "Load"
|
||||
new "Load"
|
||||
|
||||
# screens.rpy:318
|
||||
old "Preferences"
|
||||
new "خيارات"
|
||||
|
||||
# screens.rpy:322
|
||||
old "End Replay"
|
||||
new "End Replay"
|
||||
|
||||
# screens.rpy:326
|
||||
old "Main Menu"
|
||||
new "القائمة الرئيسية"
|
||||
|
||||
# screens.rpy:328
|
||||
old "About"
|
||||
new "معلومات"
|
||||
|
||||
# screens.rpy:332
|
||||
old "## Help isn't necessary or relevant to mobile devices."
|
||||
new "## Help isn't necessary or relevant to mobile devices."
|
||||
|
||||
# screens.rpy:333
|
||||
old "Help"
|
||||
new "مساعدة"
|
||||
|
||||
# screens.rpy:335
|
||||
old "## The quit button is banned on iOS and unnecessary on Android."
|
||||
new "## The quit button is banned on iOS and unnecessary on Android."
|
||||
|
||||
# screens.rpy:336
|
||||
old "Quit"
|
||||
new "خروج"
|
||||
|
||||
# screens.rpy:350
|
||||
old "## Main Menu screen"
|
||||
new "## Main Menu screen"
|
||||
|
||||
# screens.rpy:352
|
||||
old "## Used to display the main menu when Ren'Py starts."
|
||||
new "## Used to display the main menu when Ren'Py starts."
|
||||
|
||||
# screens.rpy:354
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
|
||||
|
||||
# screens.rpy:369
|
||||
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
|
||||
new "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
|
||||
|
||||
# screens.rpy:413
|
||||
old "## Game Menu screen"
|
||||
new "## Game Menu screen"
|
||||
|
||||
# screens.rpy:415
|
||||
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
|
||||
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
|
||||
|
||||
# screens.rpy:418
|
||||
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
|
||||
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
|
||||
|
||||
# screens.rpy:476
|
||||
old "Return"
|
||||
new "عودة"
|
||||
|
||||
# screens.rpy:539
|
||||
old "## About screen"
|
||||
new "## About screen"
|
||||
|
||||
# screens.rpy:541
|
||||
old "## This screen gives credit and copyright information about the game and Ren'Py."
|
||||
new "## This screen gives credit and copyright information about the game and Ren'Py."
|
||||
|
||||
# screens.rpy:544
|
||||
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
|
||||
new "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
|
||||
|
||||
# screens.rpy:551
|
||||
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
|
||||
new "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
|
||||
|
||||
# screens.rpy:561
|
||||
old "Version [config.version!t]\n"
|
||||
new "Version [config.version!t]\n"
|
||||
|
||||
# screens.rpy:563
|
||||
old "## gui.about is usually set in options.rpy."
|
||||
new "## gui.about is usually set in options.rpy."
|
||||
|
||||
# screens.rpy:567
|
||||
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
new "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
|
||||
# screens.rpy:570
|
||||
old "## This is redefined in options.rpy to add text to the about screen."
|
||||
new "## This is redefined in options.rpy to add text to the about screen."
|
||||
|
||||
# screens.rpy:582
|
||||
old "## Load and Save screens"
|
||||
new "## Load and Save screens"
|
||||
|
||||
# screens.rpy:584
|
||||
old "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
|
||||
new "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
|
||||
|
||||
# screens.rpy:588
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
|
||||
|
||||
# screens.rpy:607
|
||||
old "Page {}"
|
||||
new "Page {}"
|
||||
|
||||
# screens.rpy:607
|
||||
old "Automatic saves"
|
||||
new "Automatic saves"
|
||||
|
||||
# screens.rpy:607
|
||||
old "Quick saves"
|
||||
new "Quick saves"
|
||||
|
||||
# screens.rpy:613
|
||||
old "## This ensures the input will get the enter event before any of the buttons do."
|
||||
new "## This ensures the input will get the enter event before any of the buttons do."
|
||||
|
||||
# screens.rpy:629
|
||||
old "## The grid of file slots."
|
||||
new "## The grid of file slots."
|
||||
|
||||
# screens.rpy:649
|
||||
old "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
new "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
|
||||
# screens.rpy:649
|
||||
old "empty slot"
|
||||
new "empty slot"
|
||||
|
||||
# screens.rpy:657
|
||||
old "## Buttons to access other pages."
|
||||
new "## Buttons to access other pages."
|
||||
|
||||
# screens.rpy:666
|
||||
old "<"
|
||||
new "<"
|
||||
|
||||
# screens.rpy:668
|
||||
old "{#auto_page}A"
|
||||
new "{#auto_page}A"
|
||||
|
||||
# screens.rpy:670
|
||||
old "{#quick_page}Q"
|
||||
new "{#quick_page}Q"
|
||||
|
||||
# screens.rpy:676
|
||||
old ">"
|
||||
new ">"
|
||||
|
||||
# screens.rpy:711
|
||||
old "## Preferences screen"
|
||||
new "## Preferences screen"
|
||||
|
||||
# screens.rpy:713
|
||||
old "## The preferences screen allows the player to configure the game to better suit themselves."
|
||||
new "## The preferences screen allows the player to configure the game to better suit themselves."
|
||||
|
||||
# screens.rpy:716
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#preferences"
|
||||
|
||||
# screens.rpy:738
|
||||
old "Display"
|
||||
new "عرض"
|
||||
|
||||
# screens.rpy:739
|
||||
old "Window"
|
||||
new "نافذة"
|
||||
|
||||
# screens.rpy:740
|
||||
old "Fullscreen"
|
||||
new "ملء الشاشة"
|
||||
|
||||
# screens.rpy:744
|
||||
old "Rollback Side"
|
||||
new "Rollback Side"
|
||||
|
||||
# screens.rpy:745
|
||||
old "Disable"
|
||||
new "Disable"
|
||||
|
||||
# screens.rpy:746
|
||||
old "Left"
|
||||
new "Left"
|
||||
|
||||
# screens.rpy:747
|
||||
old "Right"
|
||||
new "Right"
|
||||
|
||||
# screens.rpy:752
|
||||
old "Unseen Text"
|
||||
new "Unseen Text"
|
||||
|
||||
# screens.rpy:753
|
||||
old "After Choices"
|
||||
new "بعد الإختيار"
|
||||
|
||||
# screens.rpy:754
|
||||
old "Transitions"
|
||||
new "التأثيرات البصرية"
|
||||
|
||||
# screens.rpy:756
|
||||
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
|
||||
new "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
|
||||
|
||||
# screens.rpy:767
|
||||
old "Text Speed"
|
||||
new "سرعة النص"
|
||||
|
||||
# screens.rpy:771
|
||||
old "Auto-Forward Time"
|
||||
new "وقت التسريع التلقائي"
|
||||
|
||||
# screens.rpy:778
|
||||
old "Music Volume"
|
||||
new "مستوى الموسيقى"
|
||||
|
||||
# screens.rpy:785
|
||||
old "Sound Volume"
|
||||
new "مستوى الأصوات"
|
||||
|
||||
# screens.rpy:791
|
||||
old "Test"
|
||||
new "تجربة"
|
||||
|
||||
# screens.rpy:795
|
||||
old "Voice Volume"
|
||||
new "مستوى صوت الكلام"
|
||||
|
||||
# screens.rpy:806
|
||||
old "Mute All"
|
||||
new "Mute All"
|
||||
|
||||
# screens.rpy:882
|
||||
old "## History screen"
|
||||
new "## History screen"
|
||||
|
||||
# screens.rpy:884
|
||||
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
|
||||
new "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
|
||||
|
||||
# screens.rpy:888
|
||||
old "## https://www.renpy.org/doc/html/history.html"
|
||||
new "## https://www.renpy.org/doc/html/history.html"
|
||||
|
||||
# screens.rpy:894
|
||||
old "## Avoid predicting this screen, as it can be very large."
|
||||
new "## Avoid predicting this screen, as it can be very large."
|
||||
|
||||
# screens.rpy:905
|
||||
old "## This lays things out properly if history_height is None."
|
||||
new "## This lays things out properly if history_height is None."
|
||||
|
||||
# screens.rpy:914
|
||||
old "## Take the color of the who text from the Character, if set."
|
||||
new "## Take the color of the who text from the Character, if set."
|
||||
|
||||
# screens.rpy:921
|
||||
old "The dialogue history is empty."
|
||||
new "The dialogue history is empty."
|
||||
|
||||
# screens.rpy:965
|
||||
old "## Help screen"
|
||||
new "## Help screen"
|
||||
|
||||
# screens.rpy:967
|
||||
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
|
||||
new "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
|
||||
|
||||
# screens.rpy:986
|
||||
old "Keyboard"
|
||||
new "Keyboard"
|
||||
|
||||
# screens.rpy:987
|
||||
old "Mouse"
|
||||
new "Mouse"
|
||||
|
||||
# screens.rpy:990
|
||||
old "Gamepad"
|
||||
new "Gamepad"
|
||||
|
||||
# screens.rpy:1003
|
||||
old "Enter"
|
||||
new "Enter"
|
||||
|
||||
# screens.rpy:1004
|
||||
old "Advances dialogue and activates the interface."
|
||||
new "Advances dialogue and activates the interface."
|
||||
|
||||
# screens.rpy:1007
|
||||
old "Space"
|
||||
new "Space"
|
||||
|
||||
# screens.rpy:1008
|
||||
old "Advances dialogue without selecting choices."
|
||||
new "Advances dialogue without selecting choices."
|
||||
|
||||
# screens.rpy:1011
|
||||
old "Arrow Keys"
|
||||
new "Arrow Keys"
|
||||
|
||||
# screens.rpy:1012
|
||||
old "Navigate the interface."
|
||||
new "Navigate the interface."
|
||||
|
||||
# screens.rpy:1015
|
||||
old "Escape"
|
||||
new "Escape"
|
||||
|
||||
# screens.rpy:1016
|
||||
old "Accesses the game menu."
|
||||
new "Accesses the game menu."
|
||||
|
||||
# screens.rpy:1019
|
||||
old "Ctrl"
|
||||
new "Ctrl"
|
||||
|
||||
# screens.rpy:1020
|
||||
old "Skips dialogue while held down."
|
||||
new "Skips dialogue while held down."
|
||||
|
||||
# screens.rpy:1023
|
||||
old "Tab"
|
||||
new "Tab"
|
||||
|
||||
# screens.rpy:1024
|
||||
old "Toggles dialogue skipping."
|
||||
new "Toggles dialogue skipping."
|
||||
|
||||
# screens.rpy:1027
|
||||
old "Page Up"
|
||||
new "Page Up"
|
||||
|
||||
# screens.rpy:1028
|
||||
old "Rolls back to earlier dialogue."
|
||||
new "Rolls back to earlier dialogue."
|
||||
|
||||
# screens.rpy:1031
|
||||
old "Page Down"
|
||||
new "Page Down"
|
||||
|
||||
# screens.rpy:1032
|
||||
old "Rolls forward to later dialogue."
|
||||
new "Rolls forward to later dialogue."
|
||||
|
||||
# screens.rpy:1036
|
||||
old "Hides the user interface."
|
||||
new "Hides the user interface."
|
||||
|
||||
# screens.rpy:1040
|
||||
old "Takes a screenshot."
|
||||
new "Takes a screenshot."
|
||||
|
||||
# screens.rpy:1044
|
||||
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
|
||||
new "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
|
||||
|
||||
# screens.rpy:1050
|
||||
old "Left Click"
|
||||
new "Left Click"
|
||||
|
||||
# screens.rpy:1054
|
||||
old "Middle Click"
|
||||
new "Middle Click"
|
||||
|
||||
# screens.rpy:1058
|
||||
old "Right Click"
|
||||
new "Right Click"
|
||||
|
||||
# screens.rpy:1062
|
||||
old "Mouse Wheel Up\nClick Rollback Side"
|
||||
new "Mouse Wheel Up\nClick Rollback Side"
|
||||
|
||||
# screens.rpy:1066
|
||||
old "Mouse Wheel Down"
|
||||
new "Mouse Wheel Down"
|
||||
|
||||
# screens.rpy:1073
|
||||
old "Right Trigger\nA/Bottom Button"
|
||||
new "Right Trigger\nA/Bottom Button"
|
||||
|
||||
# screens.rpy:1074
|
||||
old "Advance dialogue and activates the interface."
|
||||
new "Advance dialogue and activates the interface."
|
||||
|
||||
# screens.rpy:1078
|
||||
old "Roll back to earlier dialogue."
|
||||
new "Roll back to earlier dialogue."
|
||||
|
||||
# screens.rpy:1081
|
||||
old "Right Shoulder"
|
||||
new "Right Shoulder"
|
||||
|
||||
# screens.rpy:1082
|
||||
old "Roll forward to later dialogue."
|
||||
new "Roll forward to later dialogue."
|
||||
|
||||
# screens.rpy:1085
|
||||
old "D-Pad, Sticks"
|
||||
new "D-Pad, Sticks"
|
||||
|
||||
# screens.rpy:1089
|
||||
old "Start, Guide"
|
||||
new "Start, Guide"
|
||||
|
||||
# screens.rpy:1090
|
||||
old "Access the game menu."
|
||||
new "Access the game menu."
|
||||
|
||||
# screens.rpy:1093
|
||||
old "Y/Top Button"
|
||||
new "Y/Top Button"
|
||||
|
||||
# screens.rpy:1096
|
||||
old "Calibrate"
|
||||
new "Calibrate"
|
||||
|
||||
# screens.rpy:1124
|
||||
old "## Additional screens"
|
||||
new "## Additional screens"
|
||||
|
||||
# screens.rpy:1128
|
||||
old "## Confirm screen"
|
||||
new "## Confirm screen"
|
||||
|
||||
# screens.rpy:1130
|
||||
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
|
||||
new "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
|
||||
|
||||
# screens.rpy:1133
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#confirm"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#confirm"
|
||||
|
||||
# screens.rpy:1137
|
||||
old "## Ensure other screens do not get input while this screen is displayed."
|
||||
new "## Ensure other screens do not get input while this screen is displayed."
|
||||
|
||||
# screens.rpy:1161
|
||||
old "Yes"
|
||||
new "نعم"
|
||||
|
||||
# screens.rpy:1162
|
||||
old "No"
|
||||
new "لا"
|
||||
|
||||
# screens.rpy:1164
|
||||
old "## Right-click and escape answer \"no\"."
|
||||
new "## Right-click and escape answer \"no\"."
|
||||
|
||||
# screens.rpy:1191
|
||||
old "## Skip indicator screen"
|
||||
new "## Skip indicator screen"
|
||||
|
||||
# screens.rpy:1193
|
||||
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
|
||||
new "## The skip_indicator screen is displayed to indicate that skipping is in progress."
|
||||
|
||||
# screens.rpy:1196
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
|
||||
|
||||
# screens.rpy:1208
|
||||
old "Skipping"
|
||||
new "Skipping"
|
||||
|
||||
# screens.rpy:1215
|
||||
old "## This transform is used to blink the arrows one after another."
|
||||
new "## This transform is used to blink the arrows one after another."
|
||||
|
||||
# screens.rpy:1247
|
||||
old "## Notify screen"
|
||||
new "## Notify screen"
|
||||
|
||||
# screens.rpy:1249
|
||||
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
|
||||
new "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
|
||||
|
||||
# screens.rpy:1252
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
|
||||
|
||||
# screens.rpy:1286
|
||||
old "## NVL screen"
|
||||
new "## NVL screen"
|
||||
|
||||
# screens.rpy:1288
|
||||
old "## This screen is used for NVL-mode dialogue and menus."
|
||||
new "## This screen is used for NVL-mode dialogue and menus."
|
||||
|
||||
# screens.rpy:1290
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#nvl"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#nvl"
|
||||
|
||||
# screens.rpy:1301
|
||||
old "## Displays dialogue in either a vpgrid or the vbox."
|
||||
new "## Displays dialogue in either a vpgrid or the vbox."
|
||||
|
||||
# screens.rpy:1314
|
||||
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
|
||||
new "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
|
||||
|
||||
# screens.rpy:1344
|
||||
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
|
||||
new "## This controls the maximum number of NVL-mode entries that can be displayed at once."
|
||||
|
||||
# screens.rpy:1406
|
||||
old "## Mobile Variants"
|
||||
new "## Mobile Variants"
|
||||
|
||||
# screens.rpy:1413
|
||||
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
|
||||
new "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
|
||||
|
||||
# screens.rpy:1429
|
||||
old "Menu"
|
||||
new "Menu"
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
# You can place the script of your game in this file.
|
||||
|
||||
# Declare images below this line, using the image statement.
|
||||
# eg. image eileen happy = "eileen_happy.png"
|
||||
|
||||
# Declare characters used by this game.
|
||||
define e = Character('إيلين', color="#c8ffc8")
|
||||
|
||||
init python:
|
||||
if not persistent.default_language_set:
|
||||
persistent.default_language_set = True
|
||||
_preferences.language = "arabic"
|
||||
|
||||
# The game starts here.
|
||||
label start:
|
||||
|
||||
e "لقد بدأت حكاية رينباي جديدة."
|
||||
|
||||
e "كل ما عليك فعله هو إضافة نصوص و صور و إرسالها للعالم!"
|
||||
|
||||
return
|
||||
@@ -1,17 +1,10 @@
|
||||
translate arabic python:
|
||||
al = "DejaVuSans.ttf"
|
||||
style.l_default.font = al
|
||||
style.l_default.size = 16
|
||||
style.l_button_text.selected_font = al
|
||||
style.l_button_text.selected_bold = True
|
||||
style.l_link_text.font = al
|
||||
style.l_alternate_text.font = al
|
||||
style.l_navigation_button_text.font = al
|
||||
style.l_navigation_text.font = al
|
||||
style.l_navigation_text.bold = True
|
||||
style.l_checkbox_text.selected_font = al
|
||||
style.l_nonbox_text.selected_font = al
|
||||
style.hyperlink_text.font = al
|
||||
make_style_backup()
|
||||
translate arabic python:
|
||||
gui.REGULAR_FONT = "DejaVuSans.ttf"
|
||||
gui.LIGHT_FONT = "DejaVuSans.ttf"
|
||||
gui.FONT_SCALE = .9
|
||||
gui.REGULAR_BOLD = True
|
||||
|
||||
config.rtl = True
|
||||
|
||||
init python:
|
||||
translate_define("arabic", "config.rtl", "True")
|
||||
|
||||
@@ -1,38 +0,0 @@
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/translations.rpy:10
|
||||
old "Create or Update Translations"
|
||||
new "صنع او تحديث الترجمات"
|
||||
|
||||
# game/translations.rpy:10
|
||||
old "Please enter the name of the language for which you want to create or update translations."
|
||||
new "الرجاء كتابة اسم اللغة التي ستقوم بالترجمة إليها و الضغط على زر انتر"
|
||||
|
||||
# game/translations.rpy:15
|
||||
old "The language name can not be the empty string."
|
||||
new "لا يمكن ان يكون اسم اللغة فارغاً"
|
||||
|
||||
# game/translations.rpy:26
|
||||
old "Ren'Py is generating translations...."
|
||||
new "يقوم رينباي بتصنيع ملفات الترجمة..."
|
||||
|
||||
# game/translations.rpy:30
|
||||
old "Ren'Py has finished generating [language] translations."
|
||||
new "انتهى رينباي من صناعة ملفات الترجمة إلى [language]"
|
||||
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/translations.rpy:44
|
||||
old "What format would you like for the extracted dialogue?"
|
||||
new "ما هي الصيغة التي تريدها للنص المستخرج؟"
|
||||
|
||||
# game/translations.rpy:56
|
||||
old "Ren'Py is extracting dialogue...."
|
||||
new "رينباي يقوم باستخراج الحوار إلى ملف نص"
|
||||
|
||||
# game/translations.rpy:60
|
||||
old "Ren'Py has finished extracting dialogue. The extracted dialogue can be found in dialogue.[format] in the base directory."
|
||||
new "رينباي انتهى من استخراج الحوار. الحوار المستخرج يوجد الآن في [format] في المجلد الرئيسي"
|
||||
|
||||
@@ -1,100 +0,0 @@
|
||||
# : Translation updated at 2013-04-30 07:54
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/updater.rpy:54
|
||||
old "Select Update Channel"
|
||||
new "الرجاء اختيار طريقة التحديث"
|
||||
|
||||
# game/updater.rpy:65
|
||||
old "The update channel controls the version of Ren'Py the updater will download. Please select an update channel:"
|
||||
new "طريقة التحديث تحدد لبرنامج رينباي اي المواقع يستخدم لإيجاد النسخ الجديدة. الرجاء اختيار الطريقة التي تناسبك."
|
||||
|
||||
# game/updater.rpy:70
|
||||
old "Release"
|
||||
new "نسخة مكتملة"
|
||||
|
||||
# game/updater.rpy:76
|
||||
old "{b}Recommended.{/b} The version of Ren'Py that should be used in all newly-released games."
|
||||
new "{b}موصى به.{/b} نسخة رينباي التي يفضل استعمالها مع كل الالعاب الجديدة."
|
||||
|
||||
# game/updater.rpy:81
|
||||
old "Prerelease"
|
||||
new "نسخة مبدأية"
|
||||
|
||||
# game/updater.rpy:87
|
||||
old "A preview of the next version of Ren'Py that can be used for testing and taking advantage of new features, but not for final releases of games."
|
||||
new "عينة من نسخة رينباي القادمة تسمح لك بتجربة الإضافات الجديدة. لا ننصح باستعمالها لصناعة ألعاب معدة للنشر."
|
||||
|
||||
# game/updater.rpy:93
|
||||
old "Experimental"
|
||||
new "نسخة تجريبية"
|
||||
|
||||
# game/updater.rpy:99
|
||||
old "Experimental versions of Ren'Py. You shouldn't select this channel unless asked by a Ren'Py developer."
|
||||
new "النسخ التجريبية من رينباي. الأفضل ألا تستعمل هذه النسخ إلا لو طلب منك ذلك احد مبرمجي رينباي"
|
||||
|
||||
# game/updater.rpy:119
|
||||
old "An error has occured:"
|
||||
new "حصل خطأ:"
|
||||
|
||||
# game/updater.rpy:121
|
||||
old "Checking for updates."
|
||||
new "يتم البحث عن تحديثات."
|
||||
|
||||
# game/updater.rpy:123
|
||||
old "Ren'Py is up to date."
|
||||
new "نسخة رينباي التي لديك هي الأحدث."
|
||||
|
||||
# game/updater.rpy:125
|
||||
old "[u.version] is now available. Do you want to install it?"
|
||||
new "النسخة [u.version] متوفرة, هل ترغب في تنصيبها؟"
|
||||
|
||||
# game/updater.rpy:127
|
||||
old "Preparing to download the update."
|
||||
new "يتم التجهيز لتنزيل التحديث."
|
||||
|
||||
# game/updater.rpy:129
|
||||
old "Downloading the update."
|
||||
new "يتم تنزيل التحديث."
|
||||
|
||||
# game/updater.rpy:131
|
||||
old "Unpacking the update."
|
||||
new "يتم فك الضغط عن التحديث."
|
||||
|
||||
# game/updater.rpy:133
|
||||
old "Finishing up."
|
||||
new "اللمسات النهائية."
|
||||
|
||||
# game/updater.rpy:135
|
||||
old "The update has been installed. Ren'Py will restart."
|
||||
new "تم تنصيب التحديثات بنجاح, سيتم إعادة تشغيل رينباي الآن."
|
||||
|
||||
# game/updater.rpy:137
|
||||
old "The update has been installed."
|
||||
new "تم تنصيب التحديثات."
|
||||
|
||||
# game/updater.rpy:139
|
||||
old "The update was cancelled."
|
||||
new "تم إلغاء التحديث."
|
||||
|
||||
# game/updater.rpy:156
|
||||
old "Ren'Py Update"
|
||||
new "تحديثات رينباي."
|
||||
|
||||
# game/updater.rpy:162
|
||||
old "Proceed"
|
||||
new "استمرار."
|
||||
|
||||
# : Translation updated at 2014-04-17 13:01
|
||||
|
||||
translate arabic strings:
|
||||
|
||||
# game/updater.rpy:129
|
||||
old "Nightly"
|
||||
new "مسائي"
|
||||
|
||||
# game/updater.rpy:135
|
||||
old "The bleeding edge of Ren'Py development. This may have the latest features, or might not run at all."
|
||||
new "أحدث نسخة طازجة من رينباي التجريبي, قد يحتوي على آخر مستجدات رينباي و قد لا يعمل مطلقاً"
|
||||
|
||||
@@ -0,0 +1,335 @@
|
||||
|
||||
translate finnish strings:
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Monday"
|
||||
new "{#weekday}Maanatai"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Tuesday"
|
||||
new "{#weekday}Tiistai"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Wednesday"
|
||||
new "{#weekday}Keskiviikko"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Thursday"
|
||||
new "{#weekday}Torstai"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Friday"
|
||||
new "{#weekday}Perjantai"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Saturday"
|
||||
new "{#weekday}Lauantai"
|
||||
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Sunday"
|
||||
new "{#weekday}Sunnuntai"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Mon"
|
||||
new "{#weekday_short}Ma"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Tue"
|
||||
new "{#weekday_short}Ti"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Wed"
|
||||
new "{#weekday_short}Ke"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Thu"
|
||||
new "{#weekday_short}To"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Fri"
|
||||
new "{#weekday_short}Pe"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sat"
|
||||
new "{#weekday_short}La"
|
||||
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sun"
|
||||
new "{#weekday_short}Su"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}January"
|
||||
new "{#month}Tammikuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}February"
|
||||
new "{#month}Helmikuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}March"
|
||||
new "{#month}Maaliskuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}April"
|
||||
new "{#month}Huhtikuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}May"
|
||||
new "{#month}Toukokuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}June"
|
||||
new "{#month}Kesäkuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}July"
|
||||
new "{#month}Heinäkuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}August"
|
||||
new "{#month}Elokuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}September"
|
||||
new "{#month}Syyskuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}October"
|
||||
new "{#month}Lokakuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}November"
|
||||
new "{#month}Marraskuu"
|
||||
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}December"
|
||||
new "{#month}Joulukuu"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jan"
|
||||
new "{#month_short}Tammi"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Feb"
|
||||
new "{#month_short}Helmi"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Mar"
|
||||
new "{#month_short}Maalis"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Apr"
|
||||
new "{#month_short}Huhti"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}May"
|
||||
new "{#month_short}Touko"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jun"
|
||||
new "{#month_short}Kesä"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jul"
|
||||
new "{#month_short}Heinä"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Aug"
|
||||
new "{#month_short}Elo"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Sep"
|
||||
new "{#month_short}Syys"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Oct"
|
||||
new "{#month_short}Loka"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Nov"
|
||||
new "{#month_short}Marras"
|
||||
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Dec"
|
||||
new "{#month_short}Joulu"
|
||||
|
||||
# 00action_file.rpy:235
|
||||
old "%b %d, %H:%M"
|
||||
new "%b %d, %H:%M"
|
||||
|
||||
# 00action_file.rpy:820
|
||||
old "Quick save complete."
|
||||
new "Pikatallennus suoritettu."
|
||||
|
||||
# 00gui.rpy:227
|
||||
old "Are you sure?"
|
||||
new "Oletko varma?"
|
||||
|
||||
# 00gui.rpy:228
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "Oletko varma, että haluat poistaa tämän tallennuksen?"
|
||||
|
||||
# 00gui.rpy:229
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "Oletko varma, että haluat korvata tallennuksen uudella?"
|
||||
|
||||
# 00gui.rpy:230
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "Lataamalla tallennuksen menetät tallentamattoman edistyksen.\nOletko varma, että haluat tehdä näin?"
|
||||
|
||||
# 00gui.rpy:231
|
||||
old "Are you sure you want to quit?"
|
||||
new "Haluatko varmasti lopettaa?"
|
||||
|
||||
# 00gui.rpy:232
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "Haluatko varmasti palata päävalikkoon?\nMenetät kaikki tallentamattomat tiedot."
|
||||
|
||||
# 00gui.rpy:233
|
||||
old "Are you sure you want to end the replay?"
|
||||
new "Oletko varma, että haluat lopettaa tämän uusinnan?"
|
||||
|
||||
# 00gui.rpy:234
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "Oletko varma, että haluat alkaa dialogin sivuuttamisen?"
|
||||
|
||||
# 00gui.rpy:235
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "Oletko varma, että haluat siirtyä suoraan seuraavaan valintaan?"
|
||||
|
||||
# 00gui.rpy:236
|
||||
old "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
new "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
|
||||
# 00keymap.rpy:250
|
||||
old "Saved screenshot as %s."
|
||||
new "Näytönkaappaus tallennettu nimellä %s."
|
||||
|
||||
# 00library.rpy:142
|
||||
old "Self-voicing disabled."
|
||||
new "Tietokoneen ääninäyttely lopetettu."
|
||||
|
||||
# 00library.rpy:143
|
||||
old "Clipboard voicing enabled. "
|
||||
new "Leikepöydän ääneen toisto käytössä. "
|
||||
|
||||
# 00library.rpy:144
|
||||
old "Self-voicing enabled. "
|
||||
new "Ääneen toisto poissa käytöstä."
|
||||
|
||||
# 00library.rpy:179
|
||||
old "Skip Mode"
|
||||
new "Ylihyppäystila"
|
||||
|
||||
# 00library.rpy:262
|
||||
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
|
||||
# 00preferences.rpy:422
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
new "Leikepöydän ääneen toisto käytössä. Paina 'shift+C' lopettaaksesi."
|
||||
|
||||
# 00preferences.rpy:424
|
||||
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
|
||||
new "Tietokoneen ääninäyttely sanoisi \"[renpy.display.tts.last]\". Paina 'alt+shift+V' lopettaaksesi."
|
||||
|
||||
# 00preferences.rpy:426
|
||||
old "Self-voicing enabled. Press 'v' to disable."
|
||||
new "Tietokoneen ääninäyttely käytössä. Paina 'v' lopettaaksesi."
|
||||
|
||||
# 00iap.rpy:217
|
||||
old "Contacting App Store\nPlease Wait..."
|
||||
new "Contacting App Store\nPlease Wait..."
|
||||
|
||||
# 00updater.rpy:367
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
new "Mobiililaitteet eivät tue Ren'Py Updater -toimintoa."
|
||||
|
||||
# 00updater.rpy:486
|
||||
old "An error is being simulated."
|
||||
new "Simuloidaan havaittua ongelmaa."
|
||||
|
||||
# 00updater.rpy:662
|
||||
old "Either this project does not support updating, or the update status file was deleted."
|
||||
new "Tämä projekti ei tue päivittämistä tai päivityksen statustiedosto poistettiin."
|
||||
|
||||
# 00updater.rpy:676
|
||||
old "This account does not have permission to perform an update."
|
||||
new "Tällä käyttäjällä ei ole oikeutta päivityksen suorittamiseen."
|
||||
|
||||
# 00updater.rpy:679
|
||||
old "This account does not have permission to write the update log."
|
||||
new "Tällä käyttäjällä ei ole oikeutta kirjoittaa dataa päivityslokiin."
|
||||
|
||||
# 00updater.rpy:704
|
||||
old "Could not verify update signature."
|
||||
new "Päivityksen allekirjoitusta ei voitu vahvistaa."
|
||||
|
||||
# 00updater.rpy:975
|
||||
old "The update file was not downloaded."
|
||||
new "Päivitystiedostoa ei ladattu."
|
||||
|
||||
# 00updater.rpy:993
|
||||
old "The update file does not have the correct digest - it may have been corrupted."
|
||||
new "Päivitystiedosto ei sisällä oikeaa tiivistelmää - se on saattanut korruptoitua."
|
||||
|
||||
# 00updater.rpy:1049
|
||||
old "While unpacking {}, unknown type {}."
|
||||
new "Purettaessa {}, tuntematon tyyppi {}."
|
||||
|
||||
# 00updater.rpy:1393
|
||||
old "Updater"
|
||||
new "Päivittäjä"
|
||||
|
||||
# 00updater.rpy:1404
|
||||
old "This program is up to date."
|
||||
new "Käytät jo uuinta versiota."
|
||||
|
||||
# 00updater.rpy:1406
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] on saatavilla. Haluatko asentaa sen?"
|
||||
|
||||
# 00updater.rpy:1408
|
||||
old "Preparing to download the updates."
|
||||
new "Valmistellaan päivitysten lataamista."
|
||||
|
||||
# 00updater.rpy:1410
|
||||
old "Downloading the updates."
|
||||
new "Ladataan päivityksiä."
|
||||
|
||||
# 00updater.rpy:1412
|
||||
old "Unpacking the updates."
|
||||
new "Puretaan päivityksiä."
|
||||
|
||||
# 00updater.rpy:1416
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "Päivitykset on asennettu. Ohjelma käynnistyy nyt uudelleen."
|
||||
|
||||
# 00updater.rpy:1418
|
||||
old "The updates have been installed."
|
||||
new "Päivitykset on asennettu."
|
||||
|
||||
# 00updater.rpy:1420
|
||||
old "The updates were cancelled."
|
||||
new "Päivitykset peruttiin."
|
||||
|
||||
# 00gallery.rpy:563
|
||||
old "Image [index] of [count] locked."
|
||||
new "[index]. kuva [count]:stä on lukittu"
|
||||
|
||||
# 00gallery.rpy:583
|
||||
old "prev"
|
||||
new "edellinen"
|
||||
|
||||
# 00gallery.rpy:584
|
||||
old "next"
|
||||
new "seuraava"
|
||||
|
||||
# 00gallery.rpy:585
|
||||
old "slideshow"
|
||||
new "diaesitys"
|
||||
|
||||
# 00gallery.rpy:586
|
||||
old "return"
|
||||
new "palaa"
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
|
||||
translate finnish strings:
|
||||
|
||||
# _developer/developer.rpym:38
|
||||
old "Developer Menu"
|
||||
new "Kehittäjävalikko"
|
||||
|
||||
# _developer/developer.rpym:43
|
||||
old "Reload Game (Shift+R)"
|
||||
new "Käynnistä peli uudelleen (Shift+R)"
|
||||
|
||||
# _developer/developer.rpym:45
|
||||
old "Console (Shift+O)"
|
||||
new "Konsoli (Shift+O)"
|
||||
|
||||
# _developer/developer.rpym:47
|
||||
old "Variable Viewer"
|
||||
new "Muuttujat"
|
||||
|
||||
# _developer/developer.rpym:49
|
||||
old "Theme Test"
|
||||
new "Teematesti"
|
||||
|
||||
# _developer/developer.rpym:51
|
||||
old "Image Location Picker"
|
||||
new "Kuvan sijainnin selvitin"
|
||||
|
||||
# _developer/developer.rpym:53
|
||||
old "Filename List"
|
||||
new "Tiedostonimilista"
|
||||
|
||||
# _developer/developer.rpym:57
|
||||
old "Show Image Load Log"
|
||||
new "Näytä kuvanlatausloki"
|
||||
|
||||
# _developer/developer.rpym:60
|
||||
old "Hide Image Load Log"
|
||||
new "Piilota kuvanlatausloki"
|
||||
|
||||
# _developer/developer.rpym:95
|
||||
old "Nothing to inspect."
|
||||
new "Ei tutkittavaa."
|
||||
|
||||
# _developer/developer.rpym:217
|
||||
old "Return to the developer menu"
|
||||
new "Palaa kehittäjävalikkoon"
|
||||
|
||||
# _developer/developer.rpym:373
|
||||
old "Rectangle: %r"
|
||||
new "Suorakulmio: %r"
|
||||
|
||||
# _developer/developer.rpym:378
|
||||
old "Mouse position: %r"
|
||||
new "Hiiren sijainti: %r"
|
||||
|
||||
# _developer/developer.rpym:383
|
||||
old "Right-click or escape to quit."
|
||||
new "Paina Esc tai hiiren oikeaa näppäintä poistuaksesi."
|
||||
|
||||
# _developer/developer.rpym:412
|
||||
old "Rectangle copied to clipboard."
|
||||
new "Suorakulmio kopioitu leikepöydälle."
|
||||
|
||||
# _developer/developer.rpym:415
|
||||
old "Position copied to clipboard."
|
||||
new "Sijainti kopioitu leikepöydälle."
|
||||
|
||||
# _developer/developer.rpym:524
|
||||
old "✔ "
|
||||
new "✔ "
|
||||
|
||||
# _developer/developer.rpym:527
|
||||
old "✘ "
|
||||
new "✘ "
|
||||
|
||||
# _developer/developer.rpym:532
|
||||
old "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
new "\n{color=#cfc}✔ predicted image (good){/color}\n{color=#fcc}✘ unpredicted image (bad){/color}\n{color=#fff}Drag to move.{/color}"
|
||||
|
||||
# _developer/inspector.rpym:38
|
||||
old "Displayable Inspector"
|
||||
new "Näkyvien objektien tutkija"
|
||||
|
||||
# _developer/inspector.rpym:61
|
||||
old "Size"
|
||||
new "Koko"
|
||||
|
||||
# _developer/inspector.rpym:65
|
||||
old "Style"
|
||||
new "Tyyli"
|
||||
|
||||
# _developer/inspector.rpym:71
|
||||
old "Location"
|
||||
new "Sijainti"
|
||||
|
||||
# _developer/inspector.rpym:122
|
||||
old "Inspecting Styles of [displayable_name!q]"
|
||||
new "Tutkitaan [displayable_name!q]n tyylejä"
|
||||
|
||||
# _developer/inspector.rpym:139
|
||||
old "displayable:"
|
||||
new "näkyvä objekti:"
|
||||
|
||||
# _developer/inspector.rpym:145
|
||||
old " (no properties affect the displayable)"
|
||||
new " (mitkään ominaisuudet eivät vaikuta objektiin)"
|
||||
|
||||
# _developer/inspector.rpym:147
|
||||
old " (default properties omitted)"
|
||||
new " (perusominaisuudet sivuutettu)"
|
||||
|
||||
# _developer/inspector.rpym:185
|
||||
old "<repr() failed>"
|
||||
new "<repr() epäonnistui>"
|
||||
|
||||
# 00console.rpy:182
|
||||
old "Press <esc> to exit console. Type help for help.\n"
|
||||
new "Paina <esc> poistuaksesi konsolista. Käytä komentoa help saadaksesi apua."
|
||||
|
||||
# 00console.rpy:186
|
||||
old "Ren'Py script enabled."
|
||||
new "Ren'Py-skriptikieli käytössä."
|
||||
|
||||
# 00console.rpy:188
|
||||
old "Ren'Py script disabled."
|
||||
new "Ren'Py-skriptikieli poissa käytöstä."
|
||||
|
||||
# 00console.rpy:398
|
||||
old "help: show this help"
|
||||
new "help: näytä tämä apuviesti"
|
||||
|
||||
# 00console.rpy:403
|
||||
old "commands:\n"
|
||||
new "komennot:\n"
|
||||
|
||||
# 00console.rpy:413
|
||||
old " <renpy script statement>: run the statement\n"
|
||||
new " <renpy script-väite>: suorita väite\n"
|
||||
|
||||
# 00console.rpy:415
|
||||
old " <python expression or statement>: run the expression or statement"
|
||||
new " <python-ekspressio tai väite>: suorita ekspressio tai väite"
|
||||
|
||||
# 00console.rpy:423
|
||||
old "clear: clear the console history"
|
||||
new "clear: tyhjennä konsolin historia"
|
||||
|
||||
# 00console.rpy:427
|
||||
old "exit: exit the console"
|
||||
new "exit: poistu konsolista"
|
||||
|
||||
# 00console.rpy:435
|
||||
old "load <slot>: loads the game from slot"
|
||||
new "load <tallennuspaikka>: lataa pelin halutusta tallennuspaikasta"
|
||||
|
||||
# 00console.rpy:448
|
||||
old "save <slot>: saves the game in slot"
|
||||
new "save <tallennuspaikka>: tallentaa pelin tallennuspaikkaan"
|
||||
|
||||
# 00console.rpy:459
|
||||
old "reload: reloads the game, refreshing the scripts"
|
||||
new "reload: lataa pelin uudelleen, päivittäen skriptit"
|
||||
|
||||
# 00console.rpy:467
|
||||
old "watch <expression>: watch a python expression"
|
||||
new "watch <ekspressio>: tarkkaile python-ekspressiota"
|
||||
|
||||
# 00console.rpy:493
|
||||
old "unwatch <expression>: stop watching an expression"
|
||||
new "unwatch <ekspressio>: lakkaa tarkkailemasta ekspressiota"
|
||||
|
||||
# 00console.rpy:519
|
||||
old "unwatchall: stop watching all expressions"
|
||||
new "unwatchall: lopeta kaikkien ekspressioiden tarkkailu"
|
||||
|
||||
# 00console.rpy:536
|
||||
old "jump <label>: jumps to label"
|
||||
new "jump <tunnus>: hyppää 'script.rpy'-tiedosto(i)ssa olevaan, tunnuksella merkittyyn kohtaan"
|
||||
|
||||
@@ -0,0 +1,179 @@
|
||||
|
||||
translate finnish strings:
|
||||
|
||||
# 00gltest.rpy:64
|
||||
old "Graphics Acceleration"
|
||||
new "Grafiikkakiihdytys"
|
||||
|
||||
# 00gltest.rpy:70
|
||||
old "Automatically Choose"
|
||||
new "Valitse automaattisesti"
|
||||
|
||||
# 00gltest.rpy:75
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "Pakota Angle/DirectX-renderöinti"
|
||||
|
||||
# 00gltest.rpy:79
|
||||
old "Force OpenGL Renderer"
|
||||
new "Pakota OpenGL-renderöinti"
|
||||
|
||||
# 00gltest.rpy:83
|
||||
old "Force Software Renderer"
|
||||
new "Pakota Software-renderöinti"
|
||||
|
||||
# 00gltest.rpy:93
|
||||
old "Enable"
|
||||
new "Ota käyttöön"
|
||||
|
||||
# 00gltest.rpy:109
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "Muutokset tulevat voimaan, kun käynnistät ohjelman uudelleen."
|
||||
|
||||
# 00gltest.rpy:141
|
||||
old "Performance Warning"
|
||||
new "Suorituskyvyn varoitus"
|
||||
|
||||
# 00gltest.rpy:146
|
||||
old "This computer is using software rendering."
|
||||
new "Tietokone käyttää software-renderöintiä."
|
||||
|
||||
# 00gltest.rpy:148
|
||||
old "This computer is not using shaders."
|
||||
new "Tietokone ei käytä varjostuksia."
|
||||
|
||||
# 00gltest.rpy:150
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "Tietokone näyttää grafiikkaa hitaasti."
|
||||
|
||||
# 00gltest.rpy:152
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "Tietokoneella on ongelmia grafiikan näyttämisessä: [problem]."
|
||||
|
||||
# 00gltest.rpy:157
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "Sen grafiikka-ajurit voivat olla vanhentuneita tai ne saattavat toimia väärin. Tämä voi johtaa hitaaseen tai väärään grafiikan esittämiseen. DirectX:n päivittäminen saattaa korjata ongelman."
|
||||
|
||||
# 00gltest.rpy:159
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new "Sen grafiikka-ajurit voivat olla vanhentuneita tai ne saattavat toimia väärin. Tämä voi johtaa hitaaseen tai väärään grafiikan esittämiseen."
|
||||
|
||||
# 00gltest.rpy:164
|
||||
old "Update DirectX"
|
||||
new "Päivitä DirectX"
|
||||
|
||||
# 00gltest.rpy:170
|
||||
old "Continue, Show this warning again"
|
||||
new "Jatka, näytä tämä varoitus uudelleen"
|
||||
|
||||
# 00gltest.rpy:174
|
||||
old "Continue, Don't show warning again"
|
||||
new "Jatka, älä näytä tätä varoitusta enää uudelleen"
|
||||
|
||||
# 00gltest.rpy:192
|
||||
old "Updating DirectX."
|
||||
new "Päivitetään DirectX:ää."
|
||||
|
||||
# 00gltest.rpy:196
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "DirectX:n verkkoasennus on alkanut. Se voi olla aluksi minimisoituna työkalupalkilla. Seuraa ohjeita asentaaksesi DirectX:n."
|
||||
|
||||
# 00gltest.rpy:200
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}Huomaa:{/b} Microsoftin DirectX verkkoasennusohjelma asentaa, oletusarvoisesti, Bing-työkalupalkin. Jos et halua tätä työkalupalkkia, poista valinta oikeasta laatikosta."
|
||||
|
||||
# 00gltest.rpy:204
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "Kun asennus on valmis, klikkaa alhaalta käynnistääksesi tämän ohjelman uudelleen."
|
||||
|
||||
# 00gltest.rpy:206
|
||||
old "Restart"
|
||||
new "Käynnistä uudelleen"
|
||||
|
||||
# 00gamepad.rpy:32
|
||||
old "Select Gamepad to Calibrate"
|
||||
new "Valitse kalibroitava peliohjain"
|
||||
|
||||
# 00gamepad.rpy:35
|
||||
old "No Gamepads Available"
|
||||
new "Peliohjaimia ei havaittu"
|
||||
|
||||
# 00gamepad.rpy:54
|
||||
old "Calibrating [name] ([i]/[total])"
|
||||
new "Kalibroidaan [name] ([i]/[total])"
|
||||
|
||||
# 00gamepad.rpy:58
|
||||
old "Press or move the [control!r] [kind]."
|
||||
new "Paina tai liikuta [control!r] [kind]."
|
||||
|
||||
# 00gamepad.rpy:66
|
||||
old "Skip (A)"
|
||||
new "Ohita (A)"
|
||||
|
||||
# 00gamepad.rpy:69
|
||||
old "Back (B)"
|
||||
new "Takaisin (B)"
|
||||
|
||||
# _errorhandling.rpym:495
|
||||
old "Open Traceback"
|
||||
new "Avaa virheenjäljitystoiminto"
|
||||
|
||||
# _errorhandling.rpym:497
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "Avaa traceback.txt-tiedoston tekstieditorissa."
|
||||
|
||||
# _errorhandling.rpym:499
|
||||
old "Copy to Clipboard"
|
||||
new "Kopioi leikepöydälle"
|
||||
|
||||
# _errorhandling.rpym:501
|
||||
old "Copies the traceback.txt file to the clipboard."
|
||||
new "Kopioi traceback.txt-tiedoston leikepöydälle."
|
||||
|
||||
# _errorhandling.rpym:519
|
||||
old "An exception has occurred."
|
||||
new "Odottamaton virhe on tapahtunut."
|
||||
|
||||
# _errorhandling.rpym:538
|
||||
old "Rollback"
|
||||
new "Palaa edelliseen tilaan"
|
||||
|
||||
# _errorhandling.rpym:540
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "Yrittää palata aikaisempaan tilaan, antaen sinun tallentaa tai tehdä eri valinnan."
|
||||
|
||||
# _errorhandling.rpym:543
|
||||
old "Ignore"
|
||||
new "Sivuuta"
|
||||
|
||||
# _errorhandling.rpym:545
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "Sivuuttaa poikkeuksen, antaen sinun jatkaa. Tämä johtaa usein uusiin virheisiin."
|
||||
|
||||
# _errorhandling.rpym:548
|
||||
old "Reload"
|
||||
new "Lataa uudelleen"
|
||||
|
||||
# _errorhandling.rpym:550
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "Lataa pelin uudelleen muistista, tallentaen ja palauttaen pelitilan jos mahdollista."
|
||||
|
||||
# _errorhandling.rpym:560
|
||||
old "Quits the game."
|
||||
new "Lopettaa pelin."
|
||||
|
||||
# _errorhandling.rpym:582
|
||||
old "Parsing the script failed."
|
||||
new "Skriptin jäsennys epäonnistui."
|
||||
|
||||
# _errorhandling.rpym:606
|
||||
old "Open Parse Errors"
|
||||
new "Avaa jäsennysvirheet"
|
||||
|
||||
# _errorhandling.rpym:608
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "Avaa errors.txt-tiedoston tekstieditorissa."
|
||||
|
||||
# _errorhandling.rpym:612
|
||||
old "Copies the errors.txt file to the clipboard."
|
||||
new "Kopioi errors.txt-tiedoston leikepöydälle."
|
||||
|
||||
@@ -0,0 +1,411 @@
|
||||
|
||||
translate finnish strings:
|
||||
|
||||
# gui.rpy:2
|
||||
old "## Initialization"
|
||||
new "## Initialization"
|
||||
|
||||
# gui.rpy:5
|
||||
old "## The init offset statement causes the init code in this file to run before init code in any other file."
|
||||
new "## The init offset statement causes the init code in this file to run before init code in any other file."
|
||||
|
||||
# gui.rpy:9
|
||||
old "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
|
||||
new "## Calling gui.init resets the styles to sensible default values, and sets the width and height of the game."
|
||||
|
||||
# gui.rpy:21
|
||||
old "## Colors"
|
||||
new "## Colors"
|
||||
|
||||
# gui.rpy:23
|
||||
old "## The colors of text in the interface."
|
||||
new "## The colors of text in the interface."
|
||||
|
||||
# gui.rpy:25
|
||||
old "## An accent color used throughout the interface to label and highlight text."
|
||||
new "## An accent color used throughout the interface to label and highlight text."
|
||||
|
||||
# gui.rpy:29
|
||||
old "## The color used for a text button when it is neither selected nor hovered."
|
||||
new "## The color used for a text button when it is neither selected nor hovered."
|
||||
|
||||
# gui.rpy:32
|
||||
old "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
|
||||
new "## The small color is used for small text, which needs to be brighter/darker to achieve the same effect."
|
||||
|
||||
# gui.rpy:36
|
||||
old "## The color that is used for buttons and bars that are hovered."
|
||||
new "## The color that is used for buttons and bars that are hovered."
|
||||
|
||||
# gui.rpy:39
|
||||
old "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
|
||||
new "## The color used for a text button when it is selected but not focused. A button is selected if it is the current screen or preference value."
|
||||
|
||||
# gui.rpy:43
|
||||
old "## The color used for a text button when it cannot be selected."
|
||||
new "## The color used for a text button when it cannot be selected."
|
||||
|
||||
# gui.rpy:46
|
||||
old "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
|
||||
new "## Colors used for the portions of bars that are not filled in. These are not used directly, but are used when re-generating bar image files."
|
||||
|
||||
# gui.rpy:51
|
||||
old "## The colors used for dialogue and menu choice text."
|
||||
new "## The colors used for dialogue and menu choice text."
|
||||
|
||||
# gui.rpy:56
|
||||
old "## Fonts and Font Sizes"
|
||||
new "## Fonts and Font Sizes"
|
||||
|
||||
# gui.rpy:58
|
||||
old "## The font used for in-game text."
|
||||
new "## The font used for in-game text."
|
||||
|
||||
# gui.rpy:61
|
||||
old "## The font used for character names."
|
||||
new "## The font used for character names."
|
||||
|
||||
# gui.rpy:64
|
||||
old "## The font used for out-of-game text."
|
||||
new "## The font used for out-of-game text."
|
||||
|
||||
# gui.rpy:67
|
||||
old "## The size of normal dialogue text."
|
||||
new "## The size of normal dialogue text."
|
||||
|
||||
# gui.rpy:70
|
||||
old "## The size of character names."
|
||||
new "## The size of character names."
|
||||
|
||||
# gui.rpy:73
|
||||
old "## The size of text in the game's user interface."
|
||||
new "## The size of text in the game's user interface."
|
||||
|
||||
# gui.rpy:76
|
||||
old "## The size of labels in the game's user interface."
|
||||
new "## The size of labels in the game's user interface."
|
||||
|
||||
# gui.rpy:79
|
||||
old "## The size of text on the notify screen."
|
||||
new "## The size of text on the notify screen."
|
||||
|
||||
# gui.rpy:82
|
||||
old "## The size of the game's title."
|
||||
new "## The size of the game's title."
|
||||
|
||||
# gui.rpy:86
|
||||
old "## Main and Game Menus"
|
||||
new "## Main and Game Menus"
|
||||
|
||||
# gui.rpy:88
|
||||
old "## The images used for the main and game menus."
|
||||
new "## The images used for the main and game menus."
|
||||
|
||||
# gui.rpy:92
|
||||
old "## Should we show the name and version of the game?"
|
||||
new "## Should we show the name and version of the game?"
|
||||
|
||||
# gui.rpy:96
|
||||
old "## Dialogue"
|
||||
new "## Dialogue"
|
||||
|
||||
# gui.rpy:98
|
||||
old "## These variables control how dialogue is displayed on the screen one line at a time."
|
||||
new "## These variables control how dialogue is displayed on the screen one line at a time."
|
||||
|
||||
# gui.rpy:101
|
||||
old "## The height of the textbox containing dialogue."
|
||||
new "## The height of the textbox containing dialogue."
|
||||
|
||||
# gui.rpy:104
|
||||
old "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
|
||||
new "## The placement of the textbox vertically on the screen. 0.0 is the top, 0.5 is center, and 1.0 is the bottom."
|
||||
|
||||
# gui.rpy:109
|
||||
old "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
|
||||
new "## The placement of the speaking character's name, relative to the textbox. These can be a whole number of pixels from the left or top, or 0.5 to center."
|
||||
|
||||
# gui.rpy:114
|
||||
old "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## The horizontal alignment of the character's name. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
|
||||
# gui.rpy:118
|
||||
old "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
|
||||
new "## The width, height, and borders of the box containing the character's name, or None to automatically size it."
|
||||
|
||||
# gui.rpy:123
|
||||
old "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
new "## The borders of the box containing the character's name, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:127
|
||||
old "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
new "## If True, the background of the namebox will be tiled, if False, the background if the namebox will be scaled."
|
||||
|
||||
# gui.rpy:132
|
||||
old "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
new "## The placement of dialogue relative to the textbox. These can be a whole number of pixels relative to the left or top side of the textbox, or 0.5 to center."
|
||||
|
||||
# gui.rpy:138
|
||||
old "## The maximum width of dialogue text, in pixels."
|
||||
new "## The maximum width of dialogue text, in pixels."
|
||||
|
||||
# gui.rpy:141
|
||||
old "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
new "## The horizontal alignment of the dialogue text. This can be 0.0 for left-aligned, 0.5 for centered, and 1.0 for right-aligned."
|
||||
|
||||
# gui.rpy:146
|
||||
old "## Buttons"
|
||||
new "## Buttons"
|
||||
|
||||
# gui.rpy:148
|
||||
old "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
new "## These variables, along with the image files in gui/button, control aspects of how buttons are displayed."
|
||||
|
||||
# gui.rpy:151
|
||||
old "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
new "## The width and height of a button, in pixels. If None, Ren'Py computes a size."
|
||||
|
||||
# gui.rpy:155
|
||||
old "## The borders on each side of the button, in left, top, right, bottom order."
|
||||
new "## The borders on each side of the button, in left, top, right, bottom order."
|
||||
|
||||
# gui.rpy:158
|
||||
old "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
|
||||
new "## If True, the background image will be tiled. If False, the background image will be linearly scaled."
|
||||
|
||||
# gui.rpy:162
|
||||
old "## The font used by the button."
|
||||
new "## The font used by the button."
|
||||
|
||||
# gui.rpy:165
|
||||
old "## The size of the text used by the button."
|
||||
new "## The size of the text used by the button."
|
||||
|
||||
# gui.rpy:179
|
||||
old "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
|
||||
new "## These variables override settings for different kinds of buttons. Please see the gui documentation for the kinds of buttons available, and what each is used for."
|
||||
|
||||
# gui.rpy:183
|
||||
old "## These customizations are used by the default interface:"
|
||||
new "## These customizations are used by the default interface:"
|
||||
|
||||
# gui.rpy:198
|
||||
old "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
|
||||
new "## You can also add your own customizations, by adding properly-named variables. For example, you can uncomment the following line to set the width of a navigation button."
|
||||
|
||||
# gui.rpy:205
|
||||
old "## Choice Buttons"
|
||||
new "## Choice Buttons"
|
||||
|
||||
# gui.rpy:207
|
||||
old "## Choice buttons are used in the in-game menus."
|
||||
new "## Choice buttons are used in the in-game menus."
|
||||
|
||||
# gui.rpy:220
|
||||
old "## File Slot Buttons"
|
||||
new "## File Slot Buttons"
|
||||
|
||||
# gui.rpy:222
|
||||
old "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
|
||||
new "## A file slot button is a special kind of button. It contains a thumbnail image, and text describing the contents of the save slot. A save slot uses image files in gui/button, like the other kinds of buttons."
|
||||
|
||||
# gui.rpy:226
|
||||
old "## The save slot button."
|
||||
new "## The save slot button."
|
||||
|
||||
# gui.rpy:234
|
||||
old "## The width and height of thumbnails used by the save slots."
|
||||
new "## The width and height of thumbnails used by the save slots."
|
||||
|
||||
# gui.rpy:238
|
||||
old "## The number of columns and rows in the grid of save slots."
|
||||
new "## The number of columns and rows in the grid of save slots."
|
||||
|
||||
# gui.rpy:243
|
||||
old "## Positioning and Spacing"
|
||||
new "## Positioning and Spacing"
|
||||
|
||||
# gui.rpy:245
|
||||
old "## These variables control the positioning and spacing of various user interface elements."
|
||||
new "## These variables control the positioning and spacing of various user interface elements."
|
||||
|
||||
# gui.rpy:248
|
||||
old "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
new "## The position of the left side of the navigation buttons, relative to the left side of the screen."
|
||||
|
||||
# gui.rpy:252
|
||||
old "## The vertical position of the skip indicator."
|
||||
new "## The vertical position of the skip indicator."
|
||||
|
||||
# gui.rpy:255
|
||||
old "## The vertical position of the notify screen."
|
||||
new "## The vertical position of the notify screen."
|
||||
|
||||
# gui.rpy:258
|
||||
old "## The spacing between menu choices."
|
||||
new "## The spacing between menu choices."
|
||||
|
||||
# gui.rpy:261
|
||||
old "## Buttons in the navigation section of the main and game menus."
|
||||
new "## Buttons in the navigation section of the main and game menus."
|
||||
|
||||
# gui.rpy:264
|
||||
old "## Controls the amount of spacing between preferences."
|
||||
new "## Controls the amount of spacing between preferences."
|
||||
|
||||
# gui.rpy:267
|
||||
old "## Controls the amount of spacing between preference buttons."
|
||||
new "## Controls the amount of spacing between preference buttons."
|
||||
|
||||
# gui.rpy:270
|
||||
old "## The spacing between file page buttons."
|
||||
new "## The spacing between file page buttons."
|
||||
|
||||
# gui.rpy:273
|
||||
old "## The spacing between file slots."
|
||||
new "## The spacing between file slots."
|
||||
|
||||
# gui.rpy:277
|
||||
old "## Frames"
|
||||
new "## Frames"
|
||||
|
||||
# gui.rpy:279
|
||||
old "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
|
||||
new "## These variables control the look of frames that can contain user interface components when an overlay or window is not present."
|
||||
|
||||
# gui.rpy:282
|
||||
old "## Generic frames that are introduced by player code."
|
||||
new "## Generic frames that are introduced by player code."
|
||||
|
||||
# gui.rpy:285
|
||||
old "## The frame that is used as part of the confirm screen."
|
||||
new "## The frame that is used as part of the confirm screen."
|
||||
|
||||
# gui.rpy:288
|
||||
old "## The frame that is used as part of the skip screen."
|
||||
new "## The frame that is used as part of the skip screen."
|
||||
|
||||
# gui.rpy:291
|
||||
old "## The frame that is used as part of the notify screen."
|
||||
new "## The frame that is used as part of the notify screen."
|
||||
|
||||
# gui.rpy:294
|
||||
old "## Should frame backgrounds be tiled?"
|
||||
new "## Should frame backgrounds be tiled?"
|
||||
|
||||
# gui.rpy:298
|
||||
old "## Bars, Scrollbars, and Sliders"
|
||||
new "## Bars, Scrollbars, and Sliders"
|
||||
|
||||
# gui.rpy:300
|
||||
old "## These control the look and size of bars, scrollbars, and sliders."
|
||||
new "## These control the look and size of bars, scrollbars, and sliders."
|
||||
|
||||
# gui.rpy:302
|
||||
old "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
|
||||
new "## The default GUI only uses sliders and vertical scrollbars. All of the other bars are only used in creator-written code."
|
||||
|
||||
# gui.rpy:305
|
||||
old "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
new "## The height of horizontal bars, scrollbars, and sliders. The width of vertical bars, scrollbars, and sliders."
|
||||
|
||||
# gui.rpy:311
|
||||
old "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
new "## True if bar images should be tiled. False if they should be linearly scaled."
|
||||
|
||||
# gui.rpy:316
|
||||
old "## Horizontal borders."
|
||||
new "## Horizontal borders."
|
||||
|
||||
# gui.rpy:321
|
||||
old "## Vertical borders."
|
||||
new "## Vertical borders."
|
||||
|
||||
# gui.rpy:326
|
||||
old "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
new "## What to do with unscrollable scrollbars in the gui. \"hide\" hides them, while None shows them."
|
||||
|
||||
# gui.rpy:331
|
||||
old "## History"
|
||||
new "## History"
|
||||
|
||||
# gui.rpy:333
|
||||
old "## The history screen displays dialogue that the player has already dismissed."
|
||||
new "## The history screen displays dialogue that the player has already dismissed."
|
||||
|
||||
# gui.rpy:335
|
||||
old "## The number of blocks of dialogue history Ren'Py will keep."
|
||||
new "## The number of blocks of dialogue history Ren'Py will keep."
|
||||
|
||||
# gui.rpy:338
|
||||
old "## The height of a history screen entry, or None to make the height variable at the cost of performance."
|
||||
new "## The height of a history screen entry, or None to make the height variable at the cost of performance."
|
||||
|
||||
# gui.rpy:342
|
||||
old "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
new "## The position, width, and alignment of the label giving the name of the speaking character."
|
||||
|
||||
# gui.rpy:349
|
||||
old "## The position, width, and alignment of the dialogue text."
|
||||
new "## The position, width, and alignment of the dialogue text."
|
||||
|
||||
# gui.rpy:356
|
||||
old "## NVL-Mode"
|
||||
new "## NVL-Mode"
|
||||
|
||||
# gui.rpy:358
|
||||
old "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
|
||||
new "## The NVL-mode screen displays the dialogue spoken by NVL-mode characters."
|
||||
|
||||
# gui.rpy:360
|
||||
old "## The borders of the background of the NVL-mode background window."
|
||||
new "## The borders of the background of the NVL-mode background window."
|
||||
|
||||
# gui.rpy:363
|
||||
old "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
|
||||
new "## The height of an NVL-mode entry. Set this to None to have the entries dynamically adjust height."
|
||||
|
||||
# gui.rpy:367
|
||||
old "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
|
||||
new "## The spacing between NVL-mode entries when gui.nvl_height is None, and between NVL-mode entries and an NVL-mode menu."
|
||||
|
||||
# gui.rpy:384
|
||||
old "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
|
||||
new "## The position, width, and alignment of nvl_thought text (the text said by the nvl_narrator character.)"
|
||||
|
||||
# gui.rpy:391
|
||||
old "## The position of nvl menu_buttons."
|
||||
new "## The position of nvl menu_buttons."
|
||||
|
||||
# gui.rpy:403
|
||||
old "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
|
||||
new "## This increases the size of the quick buttons to make them easier to touch on tablets and phones."
|
||||
|
||||
# gui.rpy:409
|
||||
old "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
|
||||
new "## This changes the size and spacing of various GUI elements to ensure they are easily visible on phones."
|
||||
|
||||
# gui.rpy:413
|
||||
old "## Font sizes."
|
||||
new "## Font sizes."
|
||||
|
||||
# gui.rpy:421
|
||||
old "## Adjust the location of the textbox."
|
||||
new "## Adjust the location of the textbox."
|
||||
|
||||
# gui.rpy:427
|
||||
old "## Change the size and spacing of items in the game menu."
|
||||
new "## Change the size and spacing of items in the game menu."
|
||||
|
||||
# gui.rpy:436
|
||||
old "## File button layout."
|
||||
new "## File button layout."
|
||||
|
||||
# gui.rpy:440
|
||||
old "## NVL-mode."
|
||||
new "## NVL-mode."
|
||||
|
||||
# gui.rpy:456
|
||||
old "## Quick buttons."
|
||||
new "## Quick buttons."
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,27 @@
|
||||
|
||||
translate finnish strings:
|
||||
|
||||
# _layout/classic_joystick_preferences.rpym:94
|
||||
old "Joystick Mapping"
|
||||
new "Peliohjaimen näppäinten asetus"
|
||||
|
||||
# _layout/classic_load_save.rpym:138
|
||||
old "Empty Slot."
|
||||
new "Tyhjä paikka."
|
||||
|
||||
# _layout/classic_load_save.rpym:170
|
||||
old "a"
|
||||
new "a"
|
||||
|
||||
# _layout/classic_load_save.rpym:179
|
||||
old "q"
|
||||
new "q"
|
||||
|
||||
# _compat/gamemenu.rpym:355
|
||||
old "Previous"
|
||||
new "Edellinen"
|
||||
|
||||
# _compat/gamemenu.rpym:362
|
||||
old "Next"
|
||||
new "Seuraava"
|
||||
|
||||
@@ -0,0 +1,195 @@
|
||||
|
||||
translate finnish strings:
|
||||
|
||||
# options.rpy:1
|
||||
old "## This file contains options that can be changed to customize your game."
|
||||
new "## This file contains options that can be changed to customize your game."
|
||||
|
||||
# options.rpy:4
|
||||
old "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
|
||||
new "## Lines beginning with two '#' marks are comments, and you shouldn't uncomment them. Lines beginning with a single '#' mark are commented-out code, and you may want to uncomment them when appropriate."
|
||||
|
||||
# options.rpy:10
|
||||
old "## Basics"
|
||||
new "## Basics"
|
||||
|
||||
# options.rpy:12
|
||||
old "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
|
||||
new "## A human-readable name of the game. This is used to set the default window title, and shows up in the interface and error reports."
|
||||
|
||||
# options.rpy:15
|
||||
old "## The _() surrounding the string marks it as eligible for translation."
|
||||
new "## The _() surrounding the string marks it as eligible for translation."
|
||||
|
||||
# options.rpy:17
|
||||
old "Ren'Py 7 Default GUI"
|
||||
new "Ren'Py 7 Default GUI"
|
||||
|
||||
# options.rpy:20
|
||||
old "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
|
||||
new "## Determines if the title given above is shown on the main menu screen. Set this to False to hide the title."
|
||||
|
||||
# options.rpy:26
|
||||
old "## The version of the game."
|
||||
new "## The version of the game."
|
||||
|
||||
# options.rpy:31
|
||||
old "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
|
||||
new "## Text that is placed on the game's about screen. To insert a blank line between paragraphs, write \\n\\n."
|
||||
|
||||
# options.rpy:37
|
||||
old "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
|
||||
new "## A short name for the game used for executables and directories in the built distribution. This must be ASCII-only, and must not contain spaces, colons, or semicolons."
|
||||
|
||||
# options.rpy:44
|
||||
old "## Sounds and music"
|
||||
new "## Sounds and music"
|
||||
|
||||
# options.rpy:46
|
||||
old "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
|
||||
new "## These three variables control which mixers are shown to the player by default. Setting one of these to False will hide the appropriate mixer."
|
||||
|
||||
# options.rpy:55
|
||||
old "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
|
||||
new "## To allow the user to play a test sound on the sound or voice channel, uncomment a line below and use it to set a sample sound to play."
|
||||
|
||||
# options.rpy:62
|
||||
old "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
|
||||
new "## Uncomment the following line to set an audio file that will be played while the player is at the main menu. This file will continue playing into the game, until it is stopped or another file is played."
|
||||
|
||||
# options.rpy:69
|
||||
old "## Transitions"
|
||||
new "## Transitions"
|
||||
|
||||
# options.rpy:71
|
||||
old "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
|
||||
new "## These variables set transitions that are used when certain events occur. Each variable should be set to a transition, or None to indicate that no transition should be used."
|
||||
|
||||
# options.rpy:75
|
||||
old "## Entering or exiting the game menu."
|
||||
new "## Entering or exiting the game menu."
|
||||
|
||||
# options.rpy:81
|
||||
old "## A transition that is used after a game has been loaded."
|
||||
new "## A transition that is used after a game has been loaded."
|
||||
|
||||
# options.rpy:86
|
||||
old "## Used when entering the main menu after the game has ended."
|
||||
new "## Used when entering the main menu after the game has ended."
|
||||
|
||||
# options.rpy:91
|
||||
old "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
|
||||
new "## A variable to set the transition used when the game starts does not exist. Instead, use a with statement after showing the initial scene."
|
||||
|
||||
# options.rpy:96
|
||||
old "## Window management"
|
||||
new "## Window management"
|
||||
|
||||
# options.rpy:98
|
||||
old "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
|
||||
new "## This controls when the dialogue window is displayed. If \"show\", it is always displayed. If \"hide\", it is only displayed when dialogue is present. If \"auto\", the window is hidden before scene statements and shown again once dialogue is displayed."
|
||||
|
||||
# options.rpy:103
|
||||
old "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
|
||||
new "## After the game has started, this can be changed with the \"window show\", \"window hide\", and \"window auto\" statements."
|
||||
|
||||
# options.rpy:109
|
||||
old "## Transitions used to show and hide the dialogue window"
|
||||
new "## Transitions used to show and hide the dialogue window"
|
||||
|
||||
# options.rpy:115
|
||||
old "## Preference defaults"
|
||||
new "## Preference defaults"
|
||||
|
||||
# options.rpy:117
|
||||
old "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
|
||||
new "## Controls the default text speed. The default, 0, is infinite, while any other number is the number of characters per second to type out."
|
||||
|
||||
# options.rpy:123
|
||||
old "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
|
||||
new "## The default auto-forward delay. Larger numbers lead to longer waits, with 0 to 30 being the valid range."
|
||||
|
||||
# options.rpy:129
|
||||
old "## Save directory"
|
||||
new "## Save directory"
|
||||
|
||||
# options.rpy:131
|
||||
old "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
|
||||
new "## Controls the platform-specific place Ren'Py will place the save files for this game. The save files will be placed in:"
|
||||
|
||||
# options.rpy:134
|
||||
old "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
new "## Windows: %APPDATA\\RenPy\\<config.save_directory>"
|
||||
|
||||
# options.rpy:136
|
||||
old "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
|
||||
new "## Macintosh: $HOME/Library/RenPy/<config.save_directory>"
|
||||
|
||||
# options.rpy:138
|
||||
old "## Linux: $HOME/.renpy/<config.save_directory>"
|
||||
new "## Linux: $HOME/.renpy/<config.save_directory>"
|
||||
|
||||
# options.rpy:140
|
||||
old "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
|
||||
new "## This generally should not be changed, and if it is, should always be a literal string, not an expression."
|
||||
|
||||
# options.rpy:146
|
||||
old "## Icon ########################################################################'"
|
||||
new "## Icon ########################################################################'"
|
||||
|
||||
# options.rpy:148
|
||||
old "## The icon displayed on the taskbar or dock."
|
||||
new "## The icon displayed on the taskbar or dock."
|
||||
|
||||
# options.rpy:153
|
||||
old "## Build configuration"
|
||||
new "## Build configuration"
|
||||
|
||||
# options.rpy:155
|
||||
old "## This section controls how Ren'Py turns your project into distribution files."
|
||||
new "## This section controls how Ren'Py turns your project into distribution files."
|
||||
|
||||
# options.rpy:160
|
||||
old "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
|
||||
new "## The following functions take file patterns. File patterns are case- insensitive, and matched against the path relative to the base directory, with and without a leading /. If multiple patterns match, the first is used."
|
||||
|
||||
# options.rpy:165
|
||||
old "## In a pattern:"
|
||||
new "## In a pattern:"
|
||||
|
||||
# options.rpy:167
|
||||
old "## / is the directory separator."
|
||||
new "## / is the directory separator."
|
||||
|
||||
# options.rpy:169
|
||||
old "## * matches all characters, except the directory separator."
|
||||
new "## * matches all characters, except the directory separator."
|
||||
|
||||
# options.rpy:171
|
||||
old "## ** matches all characters, including the directory separator."
|
||||
new "## ** matches all characters, including the directory separator."
|
||||
|
||||
# options.rpy:173
|
||||
old "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
|
||||
new "## For example, \"*.txt\" matches txt files in the base directory, \"game/**.ogg\" matches ogg files in the game directory or any of its subdirectories, and \"**.psd\" matches psd files anywhere in the project."
|
||||
|
||||
# options.rpy:177
|
||||
old "## Classify files as None to exclude them from the built distributions."
|
||||
new "## Classify files as None to exclude them from the built distributions."
|
||||
|
||||
# options.rpy:185
|
||||
old "## To archive files, classify them as 'archive'."
|
||||
new "## To archive files, classify them as 'archive'."
|
||||
|
||||
# options.rpy:190
|
||||
old "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
|
||||
new "## Files matching documentation patterns are duplicated in a mac app build, so they appear in both the app and the zip file."
|
||||
|
||||
# options.rpy:196
|
||||
old "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
|
||||
new "## A Google Play license key is required to download expansion files and perform in-app purchases. It can be found on the \"Services & APIs\" page of the Google Play developer console."
|
||||
|
||||
# options.rpy:203
|
||||
old "## The username and project name associated with an itch.io project, separated by a slash."
|
||||
new "## The username and project name associated with an itch.io project, separated by a slash."
|
||||
|
||||
@@ -0,0 +1,643 @@
|
||||
|
||||
translate finnish strings:
|
||||
|
||||
# screens.rpy:9
|
||||
old "## Styles"
|
||||
new "## Styles"
|
||||
|
||||
# screens.rpy:87
|
||||
old "## In-game screens"
|
||||
new "## In-game screens"
|
||||
|
||||
# screens.rpy:91
|
||||
old "## Say screen"
|
||||
new "## Say screen"
|
||||
|
||||
# screens.rpy:93
|
||||
old "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
|
||||
new "## The say screen is used to display dialogue to the player. It takes two parameters, who and what, which are the name of the speaking character and the text to be displayed, respectively. (The who parameter can be None if no name is given.)"
|
||||
|
||||
# screens.rpy:98
|
||||
old "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
|
||||
new "## This screen must create a text displayable with id \"what\", as Ren'Py uses this to manage text display. It can also create displayables with id \"who\" and id \"window\" to apply style properties."
|
||||
|
||||
# screens.rpy:102
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#say"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#say"
|
||||
|
||||
# screens.rpy:169
|
||||
old "## Input screen"
|
||||
new "## Input screen"
|
||||
|
||||
# screens.rpy:171
|
||||
old "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
|
||||
new "## This screen is used to display renpy.input. The prompt parameter is used to pass a text prompt in."
|
||||
|
||||
# screens.rpy:174
|
||||
old "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
|
||||
new "## This screen must create an input displayable with id \"input\" to accept the various input parameters."
|
||||
|
||||
# screens.rpy:177
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#input"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#input"
|
||||
|
||||
# screens.rpy:205
|
||||
old "## Choice screen"
|
||||
new "## Choice screen"
|
||||
|
||||
# screens.rpy:207
|
||||
old "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
|
||||
new "## This screen is used to display the in-game choices presented by the menu statement. The one parameter, items, is a list of objects, each with caption and action fields."
|
||||
|
||||
# screens.rpy:211
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#choice"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#choice"
|
||||
|
||||
# screens.rpy:221
|
||||
old "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
|
||||
new "## When this is true, menu captions will be spoken by the narrator. When false, menu captions will be displayed as empty buttons."
|
||||
|
||||
# screens.rpy:244
|
||||
old "## Quick Menu screen"
|
||||
new "## Quick Menu screen"
|
||||
|
||||
# screens.rpy:246
|
||||
old "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
|
||||
new "## The quick menu is displayed in-game to provide easy access to the out-of-game menus."
|
||||
|
||||
# screens.rpy:261
|
||||
old "Back"
|
||||
new "Takaisin"
|
||||
|
||||
# screens.rpy:262
|
||||
old "History"
|
||||
new "History"
|
||||
|
||||
# screens.rpy:263
|
||||
old "Skip"
|
||||
new "Skip"
|
||||
|
||||
# screens.rpy:264
|
||||
old "Auto"
|
||||
new "Auto"
|
||||
|
||||
# screens.rpy:265
|
||||
old "Save"
|
||||
new "Save"
|
||||
|
||||
# screens.rpy:266
|
||||
old "Q.Save"
|
||||
new "Q.Save"
|
||||
|
||||
# screens.rpy:267
|
||||
old "Q.Load"
|
||||
new "Q.Load"
|
||||
|
||||
# screens.rpy:268
|
||||
old "Prefs"
|
||||
new "Prefs"
|
||||
|
||||
# screens.rpy:271
|
||||
old "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
|
||||
new "## This code ensures that the quick_menu screen is displayed in-game, whenever the player has not explicitly hidden the interface."
|
||||
|
||||
# screens.rpy:291
|
||||
old "## Navigation screen"
|
||||
new "## Navigation screen"
|
||||
|
||||
# screens.rpy:293
|
||||
old "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
|
||||
new "## This screen is included in the main and game menus, and provides navigation to other menus, and to start the game."
|
||||
|
||||
# screens.rpy:308
|
||||
old "Start"
|
||||
new "Start"
|
||||
|
||||
# screens.rpy:316
|
||||
old "Load"
|
||||
new "Load"
|
||||
|
||||
# screens.rpy:318
|
||||
old "Preferences"
|
||||
new "Preferences"
|
||||
|
||||
# screens.rpy:322
|
||||
old "End Replay"
|
||||
new "End Replay"
|
||||
|
||||
# screens.rpy:326
|
||||
old "Main Menu"
|
||||
new "Main Menu"
|
||||
|
||||
# screens.rpy:328
|
||||
old "About"
|
||||
new "Tietoja"
|
||||
|
||||
# screens.rpy:332
|
||||
old "## Help isn't necessary or relevant to mobile devices."
|
||||
new "## Help isn't necessary or relevant to mobile devices."
|
||||
|
||||
# screens.rpy:333
|
||||
old "Help"
|
||||
new "Help"
|
||||
|
||||
# screens.rpy:335
|
||||
old "## The quit button is banned on iOS and unnecessary on Android."
|
||||
new "## The quit button is banned on iOS and unnecessary on Android."
|
||||
|
||||
# screens.rpy:336
|
||||
old "Quit"
|
||||
new "Poistu"
|
||||
|
||||
# screens.rpy:350
|
||||
old "## Main Menu screen"
|
||||
new "## Main Menu screen"
|
||||
|
||||
# screens.rpy:352
|
||||
old "## Used to display the main menu when Ren'Py starts."
|
||||
new "## Used to display the main menu when Ren'Py starts."
|
||||
|
||||
# screens.rpy:354
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#main-menu"
|
||||
|
||||
# screens.rpy:369
|
||||
old "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
|
||||
new "## The use statement includes another screen inside this one. The actual contents of the main menu are in the navigation screen."
|
||||
|
||||
# screens.rpy:413
|
||||
old "## Game Menu screen"
|
||||
new "## Game Menu screen"
|
||||
|
||||
# screens.rpy:415
|
||||
old "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
|
||||
new "## This lays out the basic common structure of a game menu screen. It's called with the screen title, and displays the background, title, and navigation."
|
||||
|
||||
# screens.rpy:418
|
||||
old "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
|
||||
new "## The scroll parameter can be None, or one of \"viewport\" or \"vpgrid\". When this screen is intended to be used with one or more children, which are transcluded (placed) inside it."
|
||||
|
||||
# screens.rpy:476
|
||||
old "Return"
|
||||
new "Palaa"
|
||||
|
||||
# screens.rpy:539
|
||||
old "## About screen"
|
||||
new "## About screen"
|
||||
|
||||
# screens.rpy:541
|
||||
old "## This screen gives credit and copyright information about the game and Ren'Py."
|
||||
new "## This screen gives credit and copyright information about the game and Ren'Py."
|
||||
|
||||
# screens.rpy:544
|
||||
old "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
|
||||
new "## There's nothing special about this screen, and hence it also serves as an example of how to make a custom screen."
|
||||
|
||||
# screens.rpy:551
|
||||
old "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
|
||||
new "## This use statement includes the game_menu screen inside this one. The vbox child is then included inside the viewport inside the game_menu screen."
|
||||
|
||||
# screens.rpy:561
|
||||
old "Version [config.version!t]\n"
|
||||
new "Version [config.version!t]\n"
|
||||
|
||||
# screens.rpy:563
|
||||
old "## gui.about is usually set in options.rpy."
|
||||
new "## gui.about is usually set in options.rpy."
|
||||
|
||||
# screens.rpy:567
|
||||
old "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
new "Made with {a=https://www.renpy.org/}Ren'Py{/a} [renpy.version_only].\n\n[renpy.license!t]"
|
||||
|
||||
# screens.rpy:570
|
||||
old "## This is redefined in options.rpy to add text to the about screen."
|
||||
new "## This is redefined in options.rpy to add text to the about screen."
|
||||
|
||||
# screens.rpy:582
|
||||
old "## Load and Save screens"
|
||||
new "## Load and Save screens"
|
||||
|
||||
# screens.rpy:584
|
||||
old "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
|
||||
new "## These screens are responsible for letting the player save the game and load it again. Since they share nearly everything in common, both are implemented in terms of a third screen, file_slots."
|
||||
|
||||
# screens.rpy:588
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#save https://www.renpy.org/doc/html/screen_special.html#load"
|
||||
|
||||
# screens.rpy:607
|
||||
old "Page {}"
|
||||
new "Sivu {}"
|
||||
|
||||
# screens.rpy:607
|
||||
old "Automatic saves"
|
||||
new "Automaattiset tallennukset"
|
||||
|
||||
# screens.rpy:607
|
||||
old "Quick saves"
|
||||
new "Pikatallennukset"
|
||||
|
||||
# screens.rpy:613
|
||||
old "## This ensures the input will get the enter event before any of the buttons do."
|
||||
new "## This ensures the input will get the enter event before any of the buttons do."
|
||||
|
||||
# screens.rpy:629
|
||||
old "## The grid of file slots."
|
||||
new "## The grid of file slots."
|
||||
|
||||
# screens.rpy:649
|
||||
old "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
new "{#file_time}%A, %B %d %Y, %H:%M"
|
||||
|
||||
# screens.rpy:649
|
||||
old "empty slot"
|
||||
new "empty slot"
|
||||
|
||||
# screens.rpy:657
|
||||
old "## Buttons to access other pages."
|
||||
new "## Buttons to access other pages."
|
||||
|
||||
# screens.rpy:666
|
||||
old "<"
|
||||
new "<"
|
||||
|
||||
# screens.rpy:668
|
||||
old "{#auto_page}A"
|
||||
new "{#auto_page}A"
|
||||
|
||||
# screens.rpy:670
|
||||
old "{#quick_page}Q"
|
||||
new "{#quick_page}Q"
|
||||
|
||||
# screens.rpy:676
|
||||
old ">"
|
||||
new ">"
|
||||
|
||||
# screens.rpy:711
|
||||
old "## Preferences screen"
|
||||
new "## Preferences screen"
|
||||
|
||||
# screens.rpy:713
|
||||
old "## The preferences screen allows the player to configure the game to better suit themselves."
|
||||
new "## The preferences screen allows the player to configure the game to better suit themselves."
|
||||
|
||||
# screens.rpy:716
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#preferences"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#preferences"
|
||||
|
||||
# screens.rpy:738
|
||||
old "Display"
|
||||
new "Näyttö"
|
||||
|
||||
# screens.rpy:739
|
||||
old "Window"
|
||||
new "Ikkuna"
|
||||
|
||||
# screens.rpy:740
|
||||
old "Fullscreen"
|
||||
new "Koko näyttö"
|
||||
|
||||
# screens.rpy:744
|
||||
old "Rollback Side"
|
||||
new "Rollback Side"
|
||||
|
||||
# screens.rpy:745
|
||||
old "Disable"
|
||||
new "Poista käytöstä"
|
||||
|
||||
# screens.rpy:746
|
||||
old "Left"
|
||||
new "Left"
|
||||
|
||||
# screens.rpy:747
|
||||
old "Right"
|
||||
new "Right"
|
||||
|
||||
# screens.rpy:752
|
||||
old "Unseen Text"
|
||||
new "Unseen Text"
|
||||
|
||||
# screens.rpy:753
|
||||
old "After Choices"
|
||||
new "After Choices"
|
||||
|
||||
# screens.rpy:754
|
||||
old "Transitions"
|
||||
new "Transitions"
|
||||
|
||||
# screens.rpy:756
|
||||
old "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
|
||||
new "## Additional vboxes of type \"radio_pref\" or \"check_pref\" can be added here, to add additional creator-defined preferences."
|
||||
|
||||
# screens.rpy:767
|
||||
old "Text Speed"
|
||||
new "Text Speed"
|
||||
|
||||
# screens.rpy:771
|
||||
old "Auto-Forward Time"
|
||||
new "Auto-Forward Time"
|
||||
|
||||
# screens.rpy:778
|
||||
old "Music Volume"
|
||||
new "Music Volume"
|
||||
|
||||
# screens.rpy:785
|
||||
old "Sound Volume"
|
||||
new "Äänenvoimakkuus"
|
||||
|
||||
# screens.rpy:791
|
||||
old "Test"
|
||||
new "Test"
|
||||
|
||||
# screens.rpy:795
|
||||
old "Voice Volume"
|
||||
new "Voice Volume"
|
||||
|
||||
# screens.rpy:806
|
||||
old "Mute All"
|
||||
new "Mute All"
|
||||
|
||||
# screens.rpy:882
|
||||
old "## History screen"
|
||||
new "## History screen"
|
||||
|
||||
# screens.rpy:884
|
||||
old "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
|
||||
new "## This is a screen that displays the dialogue history to the player. While there isn't anything special about this screen, it does have to access the dialogue history stored in _history_list."
|
||||
|
||||
# screens.rpy:888
|
||||
old "## https://www.renpy.org/doc/html/history.html"
|
||||
new "## https://www.renpy.org/doc/html/history.html"
|
||||
|
||||
# screens.rpy:894
|
||||
old "## Avoid predicting this screen, as it can be very large."
|
||||
new "## Avoid predicting this screen, as it can be very large."
|
||||
|
||||
# screens.rpy:905
|
||||
old "## This lays things out properly if history_height is None."
|
||||
new "## This lays things out properly if history_height is None."
|
||||
|
||||
# screens.rpy:914
|
||||
old "## Take the color of the who text from the Character, if set."
|
||||
new "## Take the color of the who text from the Character, if set."
|
||||
|
||||
# screens.rpy:921
|
||||
old "The dialogue history is empty."
|
||||
new "The dialogue history is empty."
|
||||
|
||||
# screens.rpy:965
|
||||
old "## Help screen"
|
||||
new "## Help screen"
|
||||
|
||||
# screens.rpy:967
|
||||
old "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
|
||||
new "## A screen that gives information about key and mouse bindings. It uses other screens (keyboard_help, mouse_help, and gamepad_help) to display the actual help."
|
||||
|
||||
# screens.rpy:986
|
||||
old "Keyboard"
|
||||
new "Keyboard"
|
||||
|
||||
# screens.rpy:987
|
||||
old "Mouse"
|
||||
new "Mouse"
|
||||
|
||||
# screens.rpy:990
|
||||
old "Gamepad"
|
||||
new "Peliohjain"
|
||||
|
||||
# screens.rpy:1003
|
||||
old "Enter"
|
||||
new "Enter"
|
||||
|
||||
# screens.rpy:1004
|
||||
old "Advances dialogue and activates the interface."
|
||||
new "Advances dialogue and activates the interface."
|
||||
|
||||
# screens.rpy:1007
|
||||
old "Space"
|
||||
new "Space"
|
||||
|
||||
# screens.rpy:1008
|
||||
old "Advances dialogue without selecting choices."
|
||||
new "Advances dialogue without selecting choices."
|
||||
|
||||
# screens.rpy:1011
|
||||
old "Arrow Keys"
|
||||
new "Arrow Keys"
|
||||
|
||||
# screens.rpy:1012
|
||||
old "Navigate the interface."
|
||||
new "Navigate the interface."
|
||||
|
||||
# screens.rpy:1015
|
||||
old "Escape"
|
||||
new "Escape"
|
||||
|
||||
# screens.rpy:1016
|
||||
old "Accesses the game menu."
|
||||
new "Accesses the game menu."
|
||||
|
||||
# screens.rpy:1019
|
||||
old "Ctrl"
|
||||
new "Ctrl"
|
||||
|
||||
# screens.rpy:1020
|
||||
old "Skips dialogue while held down."
|
||||
new "Skips dialogue while held down."
|
||||
|
||||
# screens.rpy:1023
|
||||
old "Tab"
|
||||
new "Tab"
|
||||
|
||||
# screens.rpy:1024
|
||||
old "Toggles dialogue skipping."
|
||||
new "Toggles dialogue skipping."
|
||||
|
||||
# screens.rpy:1027
|
||||
old "Page Up"
|
||||
new "Page Up"
|
||||
|
||||
# screens.rpy:1028
|
||||
old "Rolls back to earlier dialogue."
|
||||
new "Rolls back to earlier dialogue."
|
||||
|
||||
# screens.rpy:1031
|
||||
old "Page Down"
|
||||
new "Page Down"
|
||||
|
||||
# screens.rpy:1032
|
||||
old "Rolls forward to later dialogue."
|
||||
new "Rolls forward to later dialogue."
|
||||
|
||||
# screens.rpy:1036
|
||||
old "Hides the user interface."
|
||||
new "Hides the user interface."
|
||||
|
||||
# screens.rpy:1040
|
||||
old "Takes a screenshot."
|
||||
new "Takes a screenshot."
|
||||
|
||||
# screens.rpy:1044
|
||||
old "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
|
||||
new "Toggles assistive {a=https://www.renpy.org/l/voicing}self-voicing{/a}."
|
||||
|
||||
# screens.rpy:1050
|
||||
old "Left Click"
|
||||
new "Left Click"
|
||||
|
||||
# screens.rpy:1054
|
||||
old "Middle Click"
|
||||
new "Middle Click"
|
||||
|
||||
# screens.rpy:1058
|
||||
old "Right Click"
|
||||
new "Right Click"
|
||||
|
||||
# screens.rpy:1062
|
||||
old "Mouse Wheel Up\nClick Rollback Side"
|
||||
new "Mouse Wheel Up\nClick Rollback Side"
|
||||
|
||||
# screens.rpy:1066
|
||||
old "Mouse Wheel Down"
|
||||
new "Mouse Wheel Down"
|
||||
|
||||
# screens.rpy:1073
|
||||
old "Right Trigger\nA/Bottom Button"
|
||||
new "Right Trigger\nA/Bottom Button"
|
||||
|
||||
# screens.rpy:1074
|
||||
old "Advance dialogue and activates the interface."
|
||||
new "Advance dialogue and activates the interface."
|
||||
|
||||
# screens.rpy:1078
|
||||
old "Roll back to earlier dialogue."
|
||||
new "Roll back to earlier dialogue."
|
||||
|
||||
# screens.rpy:1081
|
||||
old "Right Shoulder"
|
||||
new "Right Shoulder"
|
||||
|
||||
# screens.rpy:1082
|
||||
old "Roll forward to later dialogue."
|
||||
new "Roll forward to later dialogue."
|
||||
|
||||
# screens.rpy:1085
|
||||
old "D-Pad, Sticks"
|
||||
new "D-Pad, Sticks"
|
||||
|
||||
# screens.rpy:1089
|
||||
old "Start, Guide"
|
||||
new "Start, Guide"
|
||||
|
||||
# screens.rpy:1090
|
||||
old "Access the game menu."
|
||||
new "Access the game menu."
|
||||
|
||||
# screens.rpy:1093
|
||||
old "Y/Top Button"
|
||||
new "Y/Top Button"
|
||||
|
||||
# screens.rpy:1096
|
||||
old "Calibrate"
|
||||
new "Kalibroi"
|
||||
|
||||
# screens.rpy:1124
|
||||
old "## Additional screens"
|
||||
new "## Additional screens"
|
||||
|
||||
# screens.rpy:1128
|
||||
old "## Confirm screen"
|
||||
new "## Confirm screen"
|
||||
|
||||
# screens.rpy:1130
|
||||
old "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
|
||||
new "## The confirm screen is called when Ren'Py wants to ask the player a yes or no question."
|
||||
|
||||
# screens.rpy:1133
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#confirm"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#confirm"
|
||||
|
||||
# screens.rpy:1137
|
||||
old "## Ensure other screens do not get input while this screen is displayed."
|
||||
new "## Ensure other screens do not get input while this screen is displayed."
|
||||
|
||||
# screens.rpy:1161
|
||||
old "Yes"
|
||||
new "Kyllä"
|
||||
|
||||
# screens.rpy:1162
|
||||
old "No"
|
||||
new "Ei"
|
||||
|
||||
# screens.rpy:1164
|
||||
old "## Right-click and escape answer \"no\"."
|
||||
new "## Right-click and escape answer \"no\"."
|
||||
|
||||
# screens.rpy:1191
|
||||
old "## Skip indicator screen"
|
||||
new "## Skip indicator screen"
|
||||
|
||||
# screens.rpy:1193
|
||||
old "## The skip_indicator screen is displayed to indicate that skipping is in progress."
|
||||
new "## The skip_indicator screen is displayed to indicate that skipping is in progress."
|
||||
|
||||
# screens.rpy:1196
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#skip-indicator"
|
||||
|
||||
# screens.rpy:1208
|
||||
old "Skipping"
|
||||
new "Skipping"
|
||||
|
||||
# screens.rpy:1215
|
||||
old "## This transform is used to blink the arrows one after another."
|
||||
new "## This transform is used to blink the arrows one after another."
|
||||
|
||||
# screens.rpy:1247
|
||||
old "## Notify screen"
|
||||
new "## Notify screen"
|
||||
|
||||
# screens.rpy:1249
|
||||
old "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
|
||||
new "## The notify screen is used to show the player a message. (For example, when the game is quicksaved or a screenshot has been taken.)"
|
||||
|
||||
# screens.rpy:1252
|
||||
old "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
|
||||
new "## https://www.renpy.org/doc/html/screen_special.html#notify-screen"
|
||||
|
||||
# screens.rpy:1286
|
||||
old "## NVL screen"
|
||||
new "## NVL screen"
|
||||
|
||||
# screens.rpy:1288
|
||||
old "## This screen is used for NVL-mode dialogue and menus."
|
||||
new "## This screen is used for NVL-mode dialogue and menus."
|
||||
|
||||
# screens.rpy:1290
|
||||
old "## http://www.renpy.org/doc/html/screen_special.html#nvl"
|
||||
new "## http://www.renpy.org/doc/html/screen_special.html#nvl"
|
||||
|
||||
# screens.rpy:1301
|
||||
old "## Displays dialogue in either a vpgrid or the vbox."
|
||||
new "## Displays dialogue in either a vpgrid or the vbox."
|
||||
|
||||
# screens.rpy:1314
|
||||
old "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
|
||||
new "## Displays the menu, if given. The menu may be displayed incorrectly if config.narrator_menu is set to True, as it is above."
|
||||
|
||||
# screens.rpy:1344
|
||||
old "## This controls the maximum number of NVL-mode entries that can be displayed at once."
|
||||
new "## This controls the maximum number of NVL-mode entries that can be displayed at once."
|
||||
|
||||
# screens.rpy:1406
|
||||
old "## Mobile Variants"
|
||||
new "## Mobile Variants"
|
||||
|
||||
# screens.rpy:1413
|
||||
old "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
|
||||
new "## Since a mouse may not be present, we replace the quick menu with a version that uses fewer and bigger buttons that are easier to touch."
|
||||
|
||||
# screens.rpy:1429
|
||||
old "Menu"
|
||||
new "Menu"
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -1,10 +0,0 @@
|
||||
translate french strings:
|
||||
|
||||
# game/about.rpy:21
|
||||
old "[version!q]"
|
||||
new "[version!q]"
|
||||
|
||||
# game/about.rpy:25
|
||||
old "View license"
|
||||
new "Voir la licence"
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
translate french strings:
|
||||
|
||||
# game/add_file.rpy:7
|
||||
old "FILENAME"
|
||||
new "NOM DU FICHIER"
|
||||
|
||||
# game/add_file.rpy:7
|
||||
old "Enter the name of the script file to create."
|
||||
new "Entrez le nom du fichier de script à créer."
|
||||
|
||||
# game/add_file.rpy:10
|
||||
old "The filename must have the .rpy extension."
|
||||
new "Le fichier doit avoir l'extension .rpy."
|
||||
|
||||
# game/add_file.rpy:18
|
||||
old "The file already exists."
|
||||
new "Le fichier éxiste déjà."
|
||||
|
||||
# game/add_file.rpy:21
|
||||
old "# Ren'Py automatically loads all script files ending with .rpy. To use this\n# file, define a label and jump to it from another file.\n"
|
||||
new "Ren'Py charge automatiquement tous les fichiers de script finissant par .rpy. Pour utiliser ce ficher\n#, définissez un label et faites un «jump» vers lui depuis un autre fichier.\n"
|
||||
|
||||
@@ -1,101 +0,0 @@
|
||||
translate french strings:
|
||||
|
||||
# game/android.rpy:12
|
||||
old "To build Android packages, please download RAPT (from {a=http://www.renpy.org/dl/android}here{/a}), unzip it, and place it into the Ren'Py directory. Then restart the Ren'Py launcher."
|
||||
new "Pour construire les paquets Android, téléchargez RAPT (depuis {a=http://www.renpy.org/dl/android}here{/a}), dézippé le, et placez le dans le répertoire de Ren'Py. Puis, redémarrez Ren'Py."
|
||||
|
||||
# game/android.rpy:13
|
||||
old "RAPT has been installed, but you'll need to install the Android SDK before you can build Android packages. Choose Install SDK to do this."
|
||||
new "RAPT a été installé, mais vous devez installer le kit de développement Android pour pouvoir construire les paquets Android. Choisissez \"installer le kit de développement et créer les clés\" pour cela"
|
||||
|
||||
# game/android.rpy:14
|
||||
old "RAPT has been installed, but a key hasn't been configured. Please create a new key, or restore android.keystore."
|
||||
new "RAPT a été installé, mais aucune clé n'a été configurée. Créez une nouvelle clé, ou restaurez android.keystore."
|
||||
|
||||
# game/android.rpy:15
|
||||
old "The current project has not been configured. Use \"Configure\" to configure it before building."
|
||||
new "Le projet courant n'a pas été configuré. Choisissez \"Configurer\' pour effectuer la configuration."
|
||||
|
||||
# game/android.rpy:16
|
||||
old "Choose \"Build\" to build the current project, or attach an Android device and choose \"Build & Install\" to build and install it on the device."
|
||||
new "Choisissez \"Construire\" pour construire le projet courant, ou connecté un appareil Android et choisissez \"Construire et Installer\" pour l'installer sur l'appareil."
|
||||
|
||||
# game/android.rpy:18
|
||||
old "Attempts to emulate an Android phone.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "Tentative d'émulation d'un téléphone Android.\n\nLe touché est émulé via la souris, mails uniquement lorsque le bouton est pressé. La barre d'espace correspond au bouton menu, et la touche PageUp correspond au bouton retour."
|
||||
|
||||
# game/android.rpy:19
|
||||
old "Attempts to emulate an Android tablet.\n\nTouch input is emulated through the mouse, but only when the button is held down. Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "Tentative d'émulation d'une tablette Android.\n\nLe touché est émulé via la souris, mails uniquement lorsque le bouton est pressé. La barre d'espace correspond au bouton menu, et la touche PageUp correspond au bouton retour."
|
||||
|
||||
# game/android.rpy:20
|
||||
old "Attempts to emulate an OUYA console.\n\nController input is mapped to the arrow keys, Enter is mapped to the select button, Escape is mapped to the menu button, and PageUp is mapped to the back button."
|
||||
new "Tentative d'émulation d'une console OUYA.\n\nLe pad est émulé via les flèches du clavier. La touche Entrée correspond au bouton select, la barre d'espace au bouton menu, et la touche PageUp correspond au bouton retour."
|
||||
|
||||
# game/android.rpy:22
|
||||
old "Downloads and installs the Android SDK and supporting packages. Optionally, generates the keys required to sign the package."
|
||||
new "Télécharge et installe le kit de développement Android et les paquets supportés. Optionnellement, génère les clés requises pour signer le paquet."
|
||||
|
||||
# game/android.rpy:23
|
||||
old "Configures the package name, version, and other information about this project."
|
||||
new "Configure le nom du packet, sa version et d'autres informations à propos de ce projet."
|
||||
|
||||
# game/android.rpy:24
|
||||
old "Opens the file containing the Google Play keys in the editor.\n\nThis is only needed if the application is using an expansion APK. Read the documentation for more details."
|
||||
new "Ouvre le fichier contenant les clés Google Play dans l'éditeur.\n\nCela est nécessaire uniquement si l'application utilise une expansion APK. Référez-vous à la documentation pour plus d'informations."
|
||||
|
||||
# game/android.rpy:25
|
||||
old "Builds the Android package."
|
||||
new "Construire le paquet Android."
|
||||
|
||||
# game/android.rpy:26
|
||||
old "Builds the Android package, and installs it on an Android device connected to your computer."
|
||||
new "Construire le paquet Android, et l'installer sur l'appareil Android connecté à votre ordinateur."
|
||||
|
||||
# game/android.rpy:142
|
||||
old "{a=%s}%s{/a}"
|
||||
new "{a=%s}%s{/a}"
|
||||
|
||||
# game/android.rpy:361
|
||||
old "Android: [project.current.name!q]"
|
||||
new "Android: [project.current.name!q]"
|
||||
|
||||
# game/android.rpy:381
|
||||
old "Emulation:"
|
||||
new "Émulateur:"
|
||||
|
||||
# game/android.rpy:389
|
||||
old "Phone"
|
||||
new "Téléphone"
|
||||
|
||||
# game/android.rpy:393
|
||||
old "Tablet"
|
||||
new "Tablette"
|
||||
|
||||
# game/android.rpy:397
|
||||
old "Television / OUYA"
|
||||
new "Télévision / OUYA"
|
||||
|
||||
# game/android.rpy:409
|
||||
old "Build:"
|
||||
new "Construire:"
|
||||
|
||||
# game/android.rpy:417
|
||||
old "Install SDK & Create Keys"
|
||||
new "Installer le kit de développement et créer les clés"
|
||||
|
||||
# game/android.rpy:421
|
||||
old "Configure"
|
||||
new "Configurer"
|
||||
|
||||
# game/android.rpy:425
|
||||
old "Build Package"
|
||||
new "Construire le paquet"
|
||||
|
||||
# game/android.rpy:429
|
||||
old "Build & Install"
|
||||
new "Construire et installer"
|
||||
|
||||
# game/android.rpy:13
|
||||
old "A 32-bit Java Development Kit is required to build Android packages on Windows. The JDK is different from the JRE, so it's possible you have Java without having the JDK.\n\nPlease {a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}download and install the JDK{/a}, then restart the Ren'Py launcher."
|
||||
new "Un Kit de Développement Java (JDK) 32 bits est nécessaire pour construire les paquets pour Android depuis Windows. Le JDK n'est pas la même chose que le JRE, il est possible que Java soit installé sur votre machine sans le JDK.\n\n{a=http://www.oracle.com/technetwork/java/javase/downloads/index.html}Téléchargez et installez le JDK{/a}, puis relancer le lanceur Ren'Py."
|
||||
@@ -1,41 +0,0 @@
|
||||
translate french strings:
|
||||
|
||||
# game/choose_theme.rpy:274
|
||||
old "Could not change the theme. Perhaps options.rpy was changed too much."
|
||||
new "Impossible de changer le thème. Peut être que options.rpy a été trop modifié."
|
||||
|
||||
# game/choose_theme.rpy:332
|
||||
old "Display"
|
||||
new "Affichage"
|
||||
|
||||
# game/choose_theme.rpy:333
|
||||
old "Window"
|
||||
new "Fenêtre"
|
||||
|
||||
# game/choose_theme.rpy:334
|
||||
old "Fullscreen"
|
||||
new "Plein écran"
|
||||
|
||||
# game/choose_theme.rpy:335
|
||||
old "Planetarium"
|
||||
new "Planetarium"
|
||||
|
||||
# game/choose_theme.rpy:342
|
||||
old "Sound Volume"
|
||||
new "Volume sonore"
|
||||
|
||||
# game/choose_theme.rpy:376
|
||||
old "Choose Theme"
|
||||
new "Choisir un thème"
|
||||
|
||||
# game/choose_theme.rpy:389
|
||||
old "Theme"
|
||||
new "Thème"
|
||||
|
||||
# game/choose_theme.rpy:413
|
||||
old "Color Scheme"
|
||||
new "Agencement des couleurs"
|
||||
|
||||
# game/choose_theme.rpy:444
|
||||
old "Continue"
|
||||
new "Continuer"
|
||||
+276
-222
@@ -1,281 +1,335 @@
|
||||
translate french strings:
|
||||
|
||||
translate french strings:
|
||||
|
||||
# renpy/common/00updater.rpy:1258
|
||||
old "Updater"
|
||||
new "Programme de mise à jour"
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Monday"
|
||||
new "{#weekday}Monday"
|
||||
|
||||
# renpy/common/00updater.rpy:1267
|
||||
old "This program is up to date."
|
||||
new "Ce programme est à jour."
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Tuesday"
|
||||
new "{#weekday}Tuesday"
|
||||
|
||||
# renpy/common/00updater.rpy:1269
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "La version [u.version]. Voulez-vous l'installer ?"
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Wednesday"
|
||||
new "{#weekday}Wednesday"
|
||||
|
||||
# renpy/common/00updater.rpy:1271
|
||||
old "Preparing to download the updates."
|
||||
new "Préparation du téléchargement de la mise à jour."
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Thursday"
|
||||
new "{#weekday}Thursday"
|
||||
|
||||
# renpy/common/00updater.rpy:1273
|
||||
old "Downloading the updates."
|
||||
new "Téléchargement de la mise à jour."
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Friday"
|
||||
new "{#weekday}Friday"
|
||||
|
||||
# renpy/common/00updater.rpy:1275
|
||||
old "Unpacking the updates."
|
||||
new "Dépaquetage de la mise à jour."
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Saturday"
|
||||
new "{#weekday}Saturday"
|
||||
|
||||
# renpy/common/00updater.rpy:1279
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "La mise à jour a bien été effectuée. Le programme va redémarrer."
|
||||
# 00action_file.rpy:26
|
||||
old "{#weekday}Sunday"
|
||||
new "{#weekday}Sunday"
|
||||
|
||||
# renpy/common/00updater.rpy:1281
|
||||
old "The updates have been installed."
|
||||
new "La mise à jour a bien été effectuée."
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Mon"
|
||||
new "{#weekday_short}Mon"
|
||||
|
||||
# renpy/common/00updater.rpy:1283
|
||||
old "The updates were cancelled."
|
||||
new "La mise à jour a été annullée."
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Tue"
|
||||
new "{#weekday_short}Tue"
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:120
|
||||
old "Empty Slot."
|
||||
new "Emplacement vide."
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Wed"
|
||||
new "{#weekday_short}Wed"
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:152
|
||||
old "a"
|
||||
new "a"
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Thu"
|
||||
new "{#weekday_short}Thu"
|
||||
|
||||
# renpy/common/_layout/classic_load_save.rpym:161
|
||||
old "q"
|
||||
new "q"
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Fri"
|
||||
new "{#weekday_short}Fri"
|
||||
|
||||
# renpy/common/_layout/classic_joystick_preferences.rpym:76
|
||||
old "Joystick Mapping"
|
||||
new "Joystick"
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sat"
|
||||
new "{#weekday_short}Sat"
|
||||
|
||||
# renpy/common/00layout.rpy:421
|
||||
old "Are you sure?"
|
||||
new "Êtes-vous sûr ?"
|
||||
# 00action_file.rpy:37
|
||||
old "{#weekday_short}Sun"
|
||||
new "{#weekday_short}Sun"
|
||||
|
||||
# renpy/common/00layout.rpy:422
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "Êtes-vous sûr de vouloir supprimer cette sauvegarde ?"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}January"
|
||||
new "{#month}January"
|
||||
|
||||
# renpy/common/00layout.rpy:423
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "Êtes-vous sûr de vouloir écraser cette sauvegarde ?"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}February"
|
||||
new "{#month}February"
|
||||
|
||||
# renpy/common/00layout.rpy:424
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "En effectuant ce chargement, vous perderez votre avancement non sauvegardé.\nÊtes-vous sûr de vouloire faire ça ?"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}March"
|
||||
new "{#month}March"
|
||||
|
||||
# renpy/common/00layout.rpy:425
|
||||
old "Are you sure you want to quit?"
|
||||
new "Êtes-vous sûr de vouloir quitter ?"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}April"
|
||||
new "{#month}April"
|
||||
|
||||
# renpy/common/00layout.rpy:426
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "Êtes-vous sûr de vouloir retourner au menu principal ?\nVous perdrez votre avancement non sauvegardé."
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}May"
|
||||
new "{#month}May"
|
||||
|
||||
# renpy/common/00keymap.rpy:167
|
||||
old "Saved screenshot as %s."
|
||||
new "La capture d'écran a été enregistrée en tant que %s"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}June"
|
||||
new "{#month}June"
|
||||
|
||||
# renpy/common/00gltest.rpy:50
|
||||
old "Graphics Acceleration"
|
||||
new "Accélération graphique"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}July"
|
||||
new "{#month}July"
|
||||
|
||||
# renpy/common/00gltest.rpy:54
|
||||
old "Automatically Choose"
|
||||
new "Choix automatique"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}August"
|
||||
new "{#month}August"
|
||||
|
||||
# renpy/common/00gltest.rpy:59
|
||||
old "Force Angle/DirectX Renderer"
|
||||
new "Forcer le rendu Angle/DirectX"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}September"
|
||||
new "{#month}September"
|
||||
|
||||
# renpy/common/00gltest.rpy:63
|
||||
old "Force OpenGL Renderer"
|
||||
new "Forcer le rendu OpenGL"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}October"
|
||||
new "{#month}October"
|
||||
|
||||
# renpy/common/00gltest.rpy:67
|
||||
old "Force Software Renderer"
|
||||
new "Forcer le rendu logiciel"
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}November"
|
||||
new "{#month}November"
|
||||
|
||||
# renpy/common/00gltest.rpy:73
|
||||
old "Changes will take effect the next time this program is run."
|
||||
new "Les changement seront pris en compte au prochin démarrage du programme."
|
||||
# 00action_file.rpy:47
|
||||
old "{#month}December"
|
||||
new "{#month}December"
|
||||
|
||||
# renpy/common/00gltest.rpy:77
|
||||
old "Quit"
|
||||
new "Quitter"
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jan"
|
||||
new "{#month_short}Jan"
|
||||
|
||||
# renpy/common/00gltest.rpy:82
|
||||
old "Return"
|
||||
new "Retour"
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Feb"
|
||||
new "{#month_short}Feb"
|
||||
|
||||
# renpy/common/00gltest.rpy:112
|
||||
old "Performance Warning"
|
||||
new "Avertissement sur les performances"
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Mar"
|
||||
new "{#month_short}Mar"
|
||||
|
||||
# renpy/common/00gltest.rpy:117
|
||||
old "This computer is using software rendering."
|
||||
new "Cet ordinateur utilise le rendu logiciel."
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Apr"
|
||||
new "{#month_short}Apr"
|
||||
|
||||
# renpy/common/00gltest.rpy:119
|
||||
old "This computer is not using shaders."
|
||||
new "Cet ordinateur n'utilise pas les shaders."
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}May"
|
||||
new "{#month_short}May"
|
||||
|
||||
# renpy/common/00gltest.rpy:121
|
||||
old "This computer is displaying graphics slowly."
|
||||
new "Cet ordinateur affiche lentement les graphismes."
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jun"
|
||||
new "{#month_short}Jun"
|
||||
|
||||
# renpy/common/00gltest.rpy:123
|
||||
old "This computer has a problem displaying graphics: [problem]."
|
||||
new "Cet ordinateur rencontre des difficultés à afficher les graphismes: [problem]."
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Jul"
|
||||
new "{#month_short}Jul"
|
||||
|
||||
# renpy/common/00gltest.rpy:128
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display. Updating DirectX could fix this problem."
|
||||
new "Les pilotes graphiques ne semblent pas à jour ou dysfonctionnent. Cela peut entraîner des ralentissements ou de mauvais affichages. Mettre à jour DirectX pourraît régler ce problème."
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Aug"
|
||||
new "{#month_short}Aug"
|
||||
|
||||
# renpy/common/00gltest.rpy:130
|
||||
old "Its graphics drivers may be out of date or not operating correctly. This can lead to slow or incorrect graphics display."
|
||||
new "Les pilotes graphiques ne semblent pas à jour ou dysfonctionnent. Cela peut entraîner des ralentissements ou de mauvais affichages."
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Sep"
|
||||
new "{#month_short}Sep"
|
||||
|
||||
# renpy/common/00gltest.rpy:135
|
||||
old "Update DirectX"
|
||||
new "Mettre à jour DirectX"
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Oct"
|
||||
new "{#month_short}Oct"
|
||||
|
||||
# renpy/common/00gltest.rpy:141
|
||||
old "Continue, Show this warning again"
|
||||
new "Continer, Afficher cet avertissement la prochaine fois."
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Nov"
|
||||
new "{#month_short}Nov"
|
||||
|
||||
# renpy/common/00gltest.rpy:145
|
||||
old "Continue, Don't show warning again"
|
||||
new "Continer, Ne plus afficher cet avertissement."
|
||||
# 00action_file.rpy:63
|
||||
old "{#month_short}Dec"
|
||||
new "{#month_short}Dec"
|
||||
|
||||
# renpy/common/00gltest.rpy:171
|
||||
old "Updating DirectX."
|
||||
new "Mettre à jour de DirectX en cours"
|
||||
|
||||
# renpy/common/00gltest.rpy:175
|
||||
old "DirectX web setup has been started. It may start minimized in the taskbar. Please follow the prompts to install DirectX."
|
||||
new "La mise à jour de DirectX a débutée. Elle est sans doute minimisée dans la bare de tâche. Merci de suivre les instructions pour installer DirectX."
|
||||
|
||||
# renpy/common/00gltest.rpy:179
|
||||
old "{b}Note:{/b} Microsoft's DirectX web setup program will, by default, install the Bing toolbar. If you do not want this toolbar, uncheck the appropriate box."
|
||||
new "{b}Note:{/b} le programme d'installation de Microsoft's DirectX va, par defaut, installer la barre d'outils Bing. Si vous ne voulez pas de cette barre, décochez la case appropriée."
|
||||
|
||||
# renpy/common/00gltest.rpy:183
|
||||
old "When setup finishes, please click below to restart this program."
|
||||
new "Lorsque l'instllation sera terminée, cliquez ci-dessous pour redémarrer ce programme."
|
||||
|
||||
# renpy/common/00gltest.rpy:185
|
||||
old "Restart"
|
||||
new "Redémarrer"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:408
|
||||
old "An exception has occurred."
|
||||
new "Une exception a été levée."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:434
|
||||
old "Rollback"
|
||||
new "Revenir en arrière"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:436
|
||||
old "Attempts a roll back to a prior time, allowing you to save or choose a different choice."
|
||||
new "Tenter de revenir en arrière, vous permet de sauvegarder ou de faire un autre choix."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:439
|
||||
old "Ignore"
|
||||
new "Ignorer"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:441
|
||||
old "Ignores the exception, allowing you to continue. This often leads to additional errors."
|
||||
new "Ignorer l'exception vous permet de continuer. Cela entraîne généralement des erreurs additionelles."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:444
|
||||
old "Reload"
|
||||
new "Recharger"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:446
|
||||
old "Reloads the game from disk, saving and restoring game state if possible."
|
||||
new "Recharger le jeu depuis le disque dur and tenter de restaurer le jeu dans l'état actuel."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:448
|
||||
old "Open Traceback"
|
||||
new "Ouvrir la pile d'appel"
|
||||
|
||||
# renpy/common/_errorhandling.rpym:450
|
||||
old "Opens the traceback.txt file in a text editor."
|
||||
new "Ouvrir traceback.txt dans un éditeur de texte."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:456
|
||||
old "Quits the game."
|
||||
new "Quitter le jeu."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:483
|
||||
old "Parsing the script failed."
|
||||
new "L'analyse du script a échouée."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:510
|
||||
old "Open Parse Errors"
|
||||
new "Ouvrir les erreurs d'analyse."
|
||||
|
||||
# renpy/common/_errorhandling.rpym:512
|
||||
old "Opens the errors.txt file in a text editor."
|
||||
new "Ouvrir errors.txt dans un éditeur de texte."
|
||||
|
||||
# renpy/common/00action_file.rpy:118
|
||||
# 00action_file.rpy:235
|
||||
old "%b %d, %H:%M"
|
||||
new "%b %d, %H:%M"
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:337
|
||||
old "Previous"
|
||||
new "Précédent"
|
||||
# 00action_file.rpy:820
|
||||
old "Quick save complete."
|
||||
new "Sauvegarde rapide effectuée."
|
||||
|
||||
# renpy/common/_compat/gamemenu.rpym:344
|
||||
old "Next"
|
||||
new "Suivant"
|
||||
# 00gui.rpy:227
|
||||
old "Are you sure?"
|
||||
new "Êtes-vous sûr ?"
|
||||
|
||||
# renpy/common/00library.rpy:77
|
||||
# 00gui.rpy:228
|
||||
old "Are you sure you want to delete this save?"
|
||||
new "Êtes-vous sûr de vouloir supprimer cette sauvegarde ?"
|
||||
|
||||
# 00gui.rpy:229
|
||||
old "Are you sure you want to overwrite your save?"
|
||||
new "Êtes-vous sûr de vouloir écraser cette sauvegarde ?"
|
||||
|
||||
# 00gui.rpy:230
|
||||
old "Loading will lose unsaved progress.\nAre you sure you want to do this?"
|
||||
new "Le chargement entraînera la perte des données non sauvegardées.\nÊtes-vous sûr de vouloir faire cela ?"
|
||||
|
||||
# 00gui.rpy:231
|
||||
old "Are you sure you want to quit?"
|
||||
new "Êtes-vous sûr de vouloir quitter ?"
|
||||
|
||||
# 00gui.rpy:232
|
||||
old "Are you sure you want to return to the main menu?\nThis will lose unsaved progress."
|
||||
new "Êtes-vous sûr de vouloir retourner au menu principal ?\nVous perdrez les données non sauvegardées."
|
||||
|
||||
# 00gui.rpy:233
|
||||
old "Are you sure you want to end the replay?"
|
||||
new "Are you sure you want to end the replay?"
|
||||
|
||||
# 00gui.rpy:234
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "Êtes-vous sûr de vouloir commencer à sauter ?"
|
||||
|
||||
# 00gui.rpy:235
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "Êtes-vous sûr de vouloir sauter jusqu'au prochain choix ?"
|
||||
|
||||
# 00gui.rpy:236
|
||||
old "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
new "Are you sure you want to skip unseen dialogue to the next choice?"
|
||||
|
||||
# 00keymap.rpy:250
|
||||
old "Saved screenshot as %s."
|
||||
new "Sauvez cette capture d'écran sous le nom %s."
|
||||
|
||||
# 00library.rpy:142
|
||||
old "Self-voicing disabled."
|
||||
new "Self-voicing disabled."
|
||||
|
||||
# 00library.rpy:143
|
||||
old "Clipboard voicing enabled. "
|
||||
new "Clipboard voicing enabled. "
|
||||
|
||||
# 00library.rpy:144
|
||||
old "Self-voicing enabled. "
|
||||
new "Self-voicing enabled. "
|
||||
|
||||
# 00library.rpy:179
|
||||
old "Skip Mode"
|
||||
new "Mode rapide"
|
||||
new "Mode saut"
|
||||
|
||||
# renpy/common/00library.rpy:80
|
||||
old "Fast Skip Mode"
|
||||
new "Mode très rapide"
|
||||
# 00library.rpy:262
|
||||
old "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
new "This program contains free software under a number of licenses, including the MIT License and GNU Lesser General Public License. A complete list of software, including links to full source code, can be found {a=https://www.renpy.org/l/license}here{/a}."
|
||||
|
||||
# renpy/common/00gallery.rpy:521
|
||||
# 00preferences.rpy:422
|
||||
old "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
new "Clipboard voicing enabled. Press 'shift+C' to disable."
|
||||
|
||||
# 00preferences.rpy:424
|
||||
old "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
|
||||
new "Self-voicing would say \"[renpy.display.tts.last]\". Press 'alt+shift+V' to disable."
|
||||
|
||||
# 00preferences.rpy:426
|
||||
old "Self-voicing enabled. Press 'v' to disable."
|
||||
new "Self-voicing enabled. Press 'v' to disable."
|
||||
|
||||
# 00iap.rpy:217
|
||||
old "Contacting App Store\nPlease Wait..."
|
||||
new "Contacting App Store\nPlease Wait..."
|
||||
|
||||
# 00updater.rpy:367
|
||||
old "The Ren'Py Updater is not supported on mobile devices."
|
||||
new "The Ren'Py Updater is not supported on mobile devices."
|
||||
|
||||
# 00updater.rpy:486
|
||||
old "An error is being simulated."
|
||||
new "An error is being simulated."
|
||||
|
||||
# 00updater.rpy:662
|
||||
old "Either this project does not support updating, or the update status file was deleted."
|
||||
new "Either this project does not support updating, or the update status file was deleted."
|
||||
|
||||
# 00updater.rpy:676
|
||||
old "This account does not have permission to perform an update."
|
||||
new "This account does not have permission to perform an update."
|
||||
|
||||
# 00updater.rpy:679
|
||||
old "This account does not have permission to write the update log."
|
||||
new "This account does not have permission to write the update log."
|
||||
|
||||
# 00updater.rpy:704
|
||||
old "Could not verify update signature."
|
||||
new "Could not verify update signature."
|
||||
|
||||
# 00updater.rpy:975
|
||||
old "The update file was not downloaded."
|
||||
new "The update file was not downloaded."
|
||||
|
||||
# 00updater.rpy:993
|
||||
old "The update file does not have the correct digest - it may have been corrupted."
|
||||
new "The update file does not have the correct digest - it may have been corrupted."
|
||||
|
||||
# 00updater.rpy:1049
|
||||
old "While unpacking {}, unknown type {}."
|
||||
new "While unpacking {}, unknown type {}."
|
||||
|
||||
# 00updater.rpy:1393
|
||||
old "Updater"
|
||||
new "Mise à jour"
|
||||
|
||||
# 00updater.rpy:1404
|
||||
old "This program is up to date."
|
||||
new "Ce programme est à jour."
|
||||
|
||||
# 00updater.rpy:1406
|
||||
old "[u.version] is available. Do you want to install it?"
|
||||
new "[u.version] est disponible. Voulez-vous l'installer ?"
|
||||
|
||||
# 00updater.rpy:1408
|
||||
old "Preparing to download the updates."
|
||||
new "Préparation au téléchargement de la mise à jour."
|
||||
|
||||
# 00updater.rpy:1410
|
||||
old "Downloading the updates."
|
||||
new "Téléchargement de la mise à jour."
|
||||
|
||||
# 00updater.rpy:1412
|
||||
old "Unpacking the updates."
|
||||
new "Dépaquetage de la mise à jour."
|
||||
|
||||
# 00updater.rpy:1416
|
||||
old "The updates have been installed. The program will restart."
|
||||
new "La mise à jour a été installée. Le programme va redémarrer."
|
||||
|
||||
# 00updater.rpy:1418
|
||||
old "The updates have been installed."
|
||||
new "La mise à jour a été installée."
|
||||
|
||||
# 00updater.rpy:1420
|
||||
old "The updates were cancelled."
|
||||
new "La mise à jour a été annulée."
|
||||
|
||||
# 00gallery.rpy:563
|
||||
old "Image [index] of [count] locked."
|
||||
new "Image [index] sur [count] verrouillée."
|
||||
new "Image [index] sur [count] bloquée."
|
||||
|
||||
# renpy/common/00gallery.rpy:539
|
||||
# 00gallery.rpy:583
|
||||
old "prev"
|
||||
new "précédent"
|
||||
new "prec."
|
||||
|
||||
# renpy/common/00gallery.rpy:540
|
||||
# 00gallery.rpy:584
|
||||
old "next"
|
||||
new "suivant"
|
||||
new "suiv."
|
||||
|
||||
# renpy/common/00gallery.rpy:541
|
||||
# 00gallery.rpy:585
|
||||
old "slideshow"
|
||||
new "diaporama"
|
||||
|
||||
# renpy/common/00gallery.rpy:542
|
||||
# 00gallery.rpy:586
|
||||
old "return"
|
||||
new "retour"
|
||||
|
||||
# renpy/common/00layout.rpy:427
|
||||
old "Are you sure you want to begin skipping?"
|
||||
new "Êtes-vous sûr de vouloir commencer à sauter certaines étapes ?"
|
||||
|
||||
# renpy/common/00layout.rpy:428
|
||||
old "Are you sure you want to skip to the next choice?"
|
||||
new "Êtes-vous sûr de vouloir sauter le prochain choix ?"
|
||||
|
||||
# renpy/common/00layout.rpy:429
|
||||
old "Are you sure you want to skip to unseen dialogue or the next choice?"
|
||||
new "Êtes-vous sûr de vouloir sauter des dialogues non lus or le prochain choix ?"
|
||||
|
||||
# renpy/common/00action_file.rpy:587
|
||||
old "Quick save complete."
|
||||
new "Sauvegarde rapide effectuée."
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user