Compare commits
703 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7f303a5fbf | |||
| 388cf6aac7 | |||
| c7db343855 | |||
| 7a45ec3e0a | |||
| 976aeebf0b | |||
| 98e85f83be | |||
| 9273c41437 | |||
| a590472f55 | |||
| 06e884ac70 | |||
| fd5f97289b | |||
| 8e2f926bc3 | |||
| 916a4b0f56 | |||
| 3191754e79 | |||
| 0770876b14 | |||
| b4783374a8 | |||
| 5c401c0406 | |||
| 4b39d4d0c4 | |||
| 3860fc7d8d | |||
| 50c70a8615 | |||
| 70f0362b4a | |||
| bd418d9541 | |||
| 95e764b411 | |||
| b173b7252d | |||
| 16fbd10e6f | |||
| feb9cd85ed | |||
| 362f9d6c33 | |||
| f2def9c148 | |||
| 1d994fa126 | |||
| 16685b6b9f | |||
| fd5841d2d2 | |||
| 753776973e | |||
| e546ac6c73 | |||
| e67c91d176 | |||
| 6252945a47 | |||
| 819d3386d7 | |||
| 430d01aa13 | |||
| ef8917e044 | |||
| 4d1be9e610 | |||
| e1b8de8512 | |||
| e55856d177 | |||
| fbe7cab9c6 | |||
| d6e3b4f492 | |||
| 7aac6fffb6 | |||
| 4e09103b09 | |||
| 3605298777 | |||
| 6b467eca81 | |||
| 9e966702ac | |||
| cc2486fa82 | |||
| 74cadd2b03 | |||
| caad552141 | |||
| 3202e0eab2 | |||
| 58434e2553 | |||
| 78ff61dd08 | |||
| 65edc55eb0 | |||
| 5bf35c8c4f | |||
| ef5777d6b6 | |||
| 033574e235 | |||
| 8a21aa55dc | |||
| 6c948bf046 | |||
| 95074ff55d | |||
| d836316e90 | |||
| 4804b04dcc | |||
| 6d08132e58 | |||
| dfb6c7beb1 | |||
| d2755faa5c | |||
| ef40de899c | |||
| d81f8264ff | |||
| 3b60afe8dc | |||
| 6783f22f3b | |||
| 3c59cac254 | |||
| 8de2bda1e6 | |||
| 57f9a1e508 | |||
| e0ca2992ed | |||
| 731cb8c53c | |||
| 37d7d71d2b | |||
| a672a6840a | |||
| 8603ca2cf1 | |||
| 6793d7e5fa | |||
| 24a8135657 | |||
| 1a945d9663 | |||
| 0196e6aa69 | |||
| dbee728716 | |||
| 86bb2b83c0 | |||
| 9586b0f685 | |||
| 6aa0ee45bf | |||
| 54e567160c | |||
| 6c40f39930 | |||
| 9eefa84bf2 | |||
| 9d1f34995a | |||
| 0883e74935 | |||
| f257dc1c41 | |||
| 1b079ef358 | |||
| 07b853f77f | |||
| 8db8651eb0 | |||
| 3568c02c42 | |||
| 5e3b209ba2 | |||
| 4a097934de | |||
| 159f6a94ce | |||
| c726573089 | |||
| b2499105ec | |||
| 315b0a9118 | |||
| cb6101eab4 | |||
| 8773f1b0ed | |||
| ecf19de428 | |||
| c182a7cc72 | |||
| 3b5be04369 | |||
| 38b91afaa1 | |||
| cb382804c3 | |||
| 364eef9392 | |||
| 773b428996 | |||
| 043a7c142e | |||
| a312a6f77e | |||
| ccc502e8a6 | |||
| b2af375e0a | |||
| 14c191cf7f | |||
| 3a47bea97f | |||
| 373235c179 | |||
| b0765aaf3a | |||
| 8b7b17c5ac | |||
| 82d2384b09 | |||
| 37647ecfea | |||
| 3dd9bff6ea | |||
| 8e5445c6bf | |||
| a6142487c8 | |||
| 2acbd61df4 | |||
| 2e45c3e609 | |||
| 87cc2c334d | |||
| 8c7a3b13bf | |||
| 83c75d1a0f | |||
| ac83e934a1 | |||
| 9ce1334039 | |||
| e8ece0a442 | |||
| 4a0738f2aa | |||
| 899eb6616f | |||
| 8cdc759126 | |||
| d1af90f096 | |||
| e88db2678b | |||
| 125f3b81d1 | |||
| dc4541553e | |||
| 6c4e86ac13 | |||
| a96174950f | |||
| 536fce4a22 | |||
| 4957280f4c | |||
| e9a0fdbbc7 | |||
| 9c86961cd1 | |||
| f3e1b12e61 | |||
| 805308d78a | |||
| d0fdf85658 | |||
| ebfcd1b153 | |||
| 52ae19a185 | |||
| 97f4b95969 | |||
| 9af6d13c08 | |||
| b4bbf4bd80 | |||
| 698d391033 | |||
| d9ecde9a62 | |||
| ca9e2dfe47 | |||
| 321434e95e | |||
| 33e633c1aa | |||
| 41b6e689d3 | |||
| cddda04e20 | |||
| 1a8eed69ac | |||
| 3bcc9c72b2 | |||
| 4f1ee9e601 | |||
| 732ef3af11 | |||
| 0c3b419dad | |||
| adf545a199 | |||
| 1a952fd87e | |||
| 96825cb518 | |||
| 7958f5445a | |||
| efd4cc6b5e | |||
| c57b7748f5 | |||
| acf1f8ae38 | |||
| 35c4ba4a41 | |||
| 13df1dc000 | |||
| 5361a8e9a5 | |||
| ba76f970c5 | |||
| a9b529b9fd | |||
| a4f4d49259 | |||
| 7d8d05107b | |||
| dfb31d28f9 | |||
| 181eb8adab | |||
| f0feb9b33e | |||
| 2639028ce7 | |||
| 85e055a3dc | |||
| cbc6986ae6 | |||
| c329714093 | |||
| abdf045277 | |||
| 8df7c8605d | |||
| 919e22059b | |||
| 10d04c1faf | |||
| 0a1e694e02 | |||
| 0f6379a797 | |||
| 9226d27605 | |||
| c2baefb2a1 | |||
| 7aeef3bae9 | |||
| 8d5dbe4f73 | |||
| 04cd9fe223 | |||
| beedbc0a22 | |||
| 36c00a5e19 | |||
| cedcc36418 | |||
| 6a828f6ade | |||
| 3df4aabba0 | |||
| ae20ebead0 | |||
| fc5ccc2f7b | |||
| 9c31ee66bb | |||
| 627c6c6a48 | |||
| 407f3ad859 | |||
| 2b63ccf21e | |||
| 2993629f22 | |||
| 77aaeaa514 | |||
| 7baac98ecb | |||
| ed155c4b43 | |||
| bfae063c3c | |||
| 2ee62542bb | |||
| 20f988a175 | |||
| 26c440f7a5 | |||
| b0e250d11e | |||
| 74157a4ad6 | |||
| 25b4a17d1a | |||
| a2f0747294 | |||
| 7c8f6fc6b7 | |||
| 6951397e17 | |||
| e46ba6c0db | |||
| 8737c5f2a7 | |||
| 16855d59a8 | |||
| cba492a109 | |||
| 2d0c3a3929 | |||
| 66fd602018 | |||
| 85eb29e25d | |||
| cfa27c3295 | |||
| 3bd1fe0d0c | |||
| ad68443ce9 | |||
| 29867c25da | |||
| 5aae0b2a4c | |||
| 02dee6d384 | |||
| bed1de4001 | |||
| 6fdb82a211 | |||
| 4e97001e47 | |||
| 389eac79fe | |||
| 18558cca21 | |||
| 0e9198ae0f | |||
| eee91e5f9c | |||
| 750fc33438 | |||
| 545f4200e4 | |||
| fe02e12192 | |||
| 57b2ce638e | |||
| 05d0bff24e | |||
| ee1a3cf44a | |||
| 5013b1f98f | |||
| 850a9f9b37 | |||
| 0b61e59d7f | |||
| b01928453c | |||
| 3af05dadf6 | |||
| 2508785591 | |||
| b8769d9800 | |||
| 1febfd4306 | |||
| 260cf63292 | |||
| d95d734912 | |||
| c35dc9a02a | |||
| f99c8acd62 | |||
| fbf533a003 | |||
| 03c31da5f0 | |||
| a794ee3b00 | |||
| c1afced29c | |||
| 02156e6e47 | |||
| 07b9a6da78 | |||
| a77170508e | |||
| 03cdfd091d | |||
| 2caf0adabb | |||
| 423f544dc9 | |||
| e207fdc435 | |||
| bfbc9b8b1f | |||
| ae04573e90 | |||
| 6c2baa1474 | |||
| ceb7dea7cc | |||
| 2da5f4ae6a | |||
| 8bbb827d25 | |||
| a535365da0 | |||
| 2450dcbfa8 | |||
| 439921baea | |||
| ac450c8b1f | |||
| 4163c1396c | |||
| d6ab06dd1f | |||
| 3db515db3c | |||
| 99cb4c0975 | |||
| b120ea6303 | |||
| cc654ebfeb | |||
| a8342ba40b | |||
| 72535d881a | |||
| 41458e274e | |||
| 5f8382a9aa | |||
| f389c13b29 | |||
| c57dbe7a9d | |||
| fba051737f | |||
| 83c87011ad | |||
| 9e9e9061e0 | |||
| 3bef0a10b0 | |||
| cedf98910f | |||
| ae08ac55c5 | |||
| e35fcb2e86 | |||
| 6c8030ad99 | |||
| 820bd815ca | |||
| 38b505ba36 | |||
| 9de620953d | |||
| c5f54a6d72 | |||
| 9968387f89 | |||
| 680fe45ec8 | |||
| 5c2258b970 | |||
| 4d976330ec | |||
| d8096effe4 | |||
| f04a303af0 | |||
| 2fdcd690a9 | |||
| 52e309aa1b | |||
| 293f0f5e5d | |||
| f132d49157 | |||
| 73333d16fc | |||
| 6cf5e23f6a | |||
| e6b92d5a27 | |||
| f2d3e0d20e | |||
| e41a4f85e9 | |||
| 6b4e61f3b2 | |||
| adfb70038b | |||
| 5146b83125 | |||
| 5bc46900f6 | |||
| b23a0df6e8 | |||
| 86dbd0d299 | |||
| 13919e7f94 | |||
| 63155fbc7e | |||
| ba0bc218c2 | |||
| 8a4a811a4c | |||
| 643fd38510 | |||
| 8ea6482788 | |||
| 97331e2464 | |||
| 2ba27b5549 | |||
| 8c26b986a3 | |||
| 8d38a6ae4d | |||
| bac6dbdba7 | |||
| 346b34d5a0 | |||
| 7d2a131995 | |||
| fd6eb01e5e | |||
| 81653b0daf | |||
| c97f8acadd | |||
| e3c4993487 | |||
| 62810b94ab | |||
| d0270729c1 | |||
| 3bc3bf3e19 | |||
| 831fb59d49 | |||
| 5db210473c | |||
| 0686c2621d | |||
| 3fcf634c8b | |||
| 9caf81c129 | |||
| f5555d6f1a | |||
| e7eb0e135b | |||
| 9d4fd5aef1 | |||
| 92514e4c1f | |||
| 40078a18f3 | |||
| 22153cb191 | |||
| bf9de85f75 | |||
| 6470a37b40 | |||
| b6aa7e7139 | |||
| 99a5ac89db | |||
| d594f15b23 | |||
| e46073b059 | |||
| 88ddee9d5e | |||
| d8283c958c | |||
| 31025cdadb | |||
| e66a9b8c6d | |||
| 2b5b9835b7 | |||
| 43441524cd | |||
| 3f667e3ef1 | |||
| f8cc239df6 | |||
| 3ece5ec173 | |||
| 823e235a1c | |||
| 2e2020be4a | |||
| 6666a285a7 | |||
| 1df2c15b07 | |||
| 4087f8de87 | |||
| cde2db2ebf | |||
| c1f85b21d5 | |||
| 2552c35581 | |||
| 86294e34f2 | |||
| 5c5252a516 | |||
| 70bb4208bc | |||
| 2e1c09dbbd | |||
| fc5f8e0d3e | |||
| 81198df4c5 | |||
| 9deaddbbd4 | |||
| 4dbddc88ed | |||
| 17e574866b | |||
| c59e787262 | |||
| 5f77306cba | |||
| 28ae4a7c0c | |||
| ec5738c6e0 | |||
| 2da8beecd7 | |||
| e0062cbebc | |||
| 9b290e07f5 | |||
| c0051f49b3 | |||
| f64c74ac78 | |||
| 5d217f6527 | |||
| e63efb05de | |||
| 48ef5c89b3 | |||
| 2145516173 | |||
| 864feaba02 | |||
| 76b068c6dc | |||
| ebc6e66433 | |||
| 9ee1562ff3 | |||
| f25dcea3cb | |||
| 78899cfef3 | |||
| 442c4fdc7a | |||
| 339c7357dc | |||
| 4a1182cdd5 | |||
| 9ff3bb67e8 | |||
| a84543fb99 | |||
| bb3d8254b1 | |||
| f7a5e874ea | |||
| 97f05000b5 | |||
| e7297b78f8 | |||
| 6f2bc54e1b | |||
| 07dc391c59 | |||
| ec758301ac | |||
| 83cada0b34 | |||
| 2fe65592db | |||
| 48bd8358d2 | |||
| 19122e45c8 | |||
| 89d5858d2b | |||
| 75ef4e4f7e | |||
| e6e72e3d94 | |||
| d5b1da1052 | |||
| cb10f2a21a | |||
| 089675bafa | |||
| 5a65eea075 | |||
| 4e5dd16606 | |||
| f746a61a1c | |||
| 28a35bfcea | |||
| dd61e71beb | |||
| 74b4674439 | |||
| 1a8dbd84fb | |||
| 358502391f | |||
| c3246406c2 | |||
| 70f30147df | |||
| bdd07c41ee | |||
| 55bc71c810 | |||
| 423e54de9f | |||
| b097fcf3de | |||
| fa84f0c61e | |||
| 74339b0432 | |||
| f6f4b3bce3 | |||
| 5dbd50159a | |||
| 1e85fd051a | |||
| 88185556c6 | |||
| dc65afd6f1 | |||
| 4cf058d823 | |||
| e3222ec11d | |||
| 37c78dccda | |||
| 1a7f0ca8c3 | |||
| 098b29a15c | |||
| 0ea39d7637 | |||
| 173e4ebef4 | |||
| f2badd8cc9 | |||
| be8831b4b2 | |||
| fc87c053c3 | |||
| 10cc039460 | |||
| fd027dbdbd | |||
| 15eb9a9c13 | |||
| 2ded06bc5d | |||
| 06f6c73e41 | |||
| bebf063872 | |||
| 8c759f7760 | |||
| 7fd921b1a0 | |||
| 54fb00100e | |||
| b87b105387 | |||
| bf142b2ba8 | |||
| 13285fe264 | |||
| a9159c5f71 | |||
| c5cdd0038e | |||
| 8bac98c29a | |||
| 421d8cc37d | |||
| c097434036 | |||
| e3cc4be1b8 | |||
| 2137eab4cb | |||
| 15f498516a | |||
| b5711f7e11 | |||
| 8f2649e3a7 | |||
| ab42c0f6e1 | |||
| 01eacd2932 | |||
| c25f22fe4f | |||
| e1ca5b3d8a | |||
| 03b6addae0 | |||
| bc31530843 | |||
| ad49dcae3c | |||
| fe3b800cab | |||
| ccde74bdb8 | |||
| 1817191f8f | |||
| ab6f469811 | |||
| f92b70d38c | |||
| e89338342a | |||
| 60db4ee41a | |||
| 62ca262aec | |||
| eb5a84d420 | |||
| 3280bcc5ff | |||
| 2155bb02ae | |||
| 5c5f72659c | |||
| bc6e2a63d0 | |||
| 204ca35321 | |||
| b9789ae25c | |||
| 899307d791 | |||
| 0bf4ab51d6 | |||
| 88d3870d5c | |||
| db7d998c38 | |||
| 58e56cff88 | |||
| b1623451e8 | |||
| 4b532ac11e | |||
| a7f16eee3f | |||
| af7314a8a1 | |||
| a8567d0811 | |||
| 74a6660ae1 | |||
| fff2558083 | |||
| 944b7d0e9c | |||
| 797e37678a | |||
| c4528cf6ad | |||
| 1417e58963 | |||
| 7022001dbe | |||
| 0ab9444676 | |||
| 65440785e5 | |||
| 0795565e07 | |||
| 3cf31edae2 | |||
| 8b356090d9 | |||
| c8a2c7036f | |||
| c512985741 | |||
| a2d6911b4e | |||
| 9f3be6e604 | |||
| d59029d66c | |||
| 0e6522f867 | |||
| 3cbe6fa1d8 | |||
| a9ecae1a59 | |||
| bb5588f182 | |||
| 45a6a08559 | |||
| 3bf1b78250 | |||
| 2eda0dc2e9 | |||
| 7084ee4b46 | |||
| 93d760c9fa | |||
| e1cb42f253 | |||
| dde19b8716 | |||
| 01f74075b8 | |||
| 906788fe88 | |||
| 69b019f03c | |||
| 51f523b3c3 | |||
| 9de1c93ef9 | |||
| faf1e15710 | |||
| ef4c0bd1d9 | |||
| 339300d2a0 | |||
| 51f6b0d756 | |||
| c4f478160b | |||
| f547ea3ed1 | |||
| 054535f0c8 | |||
| 8911825d46 | |||
| 16b9c2be67 | |||
| ddc3f67539 | |||
| 4a591d552b | |||
| 99915a3ed3 | |||
| 576a1138d3 | |||
| 50ef339f16 | |||
| 21774019a7 | |||
| 33fbe01388 | |||
| 0385bbcb9b | |||
| 82dd5968e3 | |||
| 43c6f83aff | |||
| e6fc6e3c26 | |||
| 7fe14c09c9 | |||
| 588824cf3f | |||
| ddf7b35160 | |||
| d85879b1fd | |||
| adfbb4970b | |||
| bbf2cff58f | |||
| a1a0b78cb4 | |||
| 4cd14e18b5 | |||
| 20a5d6cd69 | |||
| e70011862a | |||
| 34a1f57e50 | |||
| 5245fbb38e | |||
| 916c6cc9e9 | |||
| 937c91f314 | |||
| f1e2d074c6 | |||
| 6e83ae9bd1 | |||
| d3506085c8 | |||
| d90f1cdc30 | |||
| 02d7a3305a | |||
| 8c82667ae1 | |||
| 3085c15caf | |||
| 2e37df7103 | |||
| 9a75b6628b | |||
| cd590d78eb | |||
| 405d8d4399 | |||
| 0ed2c16ee9 | |||
| 56dda5590b | |||
| fc429eb984 | |||
| 623c5f6d1f | |||
| b430ca2243 | |||
| 86046383a8 | |||
| 8e21bcbc00 | |||
| f907fe119a | |||
| 14ced3377a | |||
| ad690d8a16 | |||
| 31ff6d3e95 | |||
| 6aadfe4d15 | |||
| 435fec2be6 | |||
| 6b507d5a57 | |||
| 1c830a0be1 | |||
| 25b0068b1d | |||
| b1a3171a40 | |||
| 30af1dfb70 | |||
| ee89717b47 | |||
| 6cfef151da | |||
| fca89d813e | |||
| 9050a9d5a5 | |||
| d257b9dc70 | |||
| 89c79e55fe | |||
| d7f194072e | |||
| 60ca4cd5ae | |||
| 20c1f572d7 | |||
| a73e20288c | |||
| 16fe7290fa | |||
| 8d2a6d2596 | |||
| f225453ff1 | |||
| ff04b3ea56 | |||
| 209eb580cf | |||
| 3103cff7f7 | |||
| 903e971395 | |||
| 138884b545 | |||
| 45e942de05 | |||
| 24a699ba12 | |||
| f5ed3d7947 | |||
| 1489a4e748 | |||
| 1a7fb9c008 | |||
| c761ba4c75 | |||
| 79fbc7718e | |||
| 7d4f7d17f9 | |||
| 439bcf73f3 | |||
| 6506a3a45e | |||
| dc81a5edeb | |||
| 331a4f0211 | |||
| 69f1a2bb0b | |||
| cd90dfa789 | |||
| d20d9f2aa7 | |||
| fb1d40db3c | |||
| 4f835f1250 | |||
| 0843e46e91 | |||
| a0963c18ee | |||
| f0dfe18bbf | |||
| 9c6cc41ec3 | |||
| 41e13911e3 | |||
| 35f6794db2 | |||
| 699c2a1679 | |||
| cad9dc37c2 | |||
| deb959a1e7 | |||
| 3913ca9c0c | |||
| 93c4c4e8df | |||
| c634ff91d2 | |||
| 4e03602bd6 | |||
| 5b0f4cf5a7 | |||
| ddd0896840 | |||
| a175edde26 | |||
| 4ebedb6a20 | |||
| d3c827fc55 | |||
| fc9744192d | |||
| 72602ab6ab | |||
| b78f1d1b41 | |||
| e8bbfde5b1 | |||
| 79bda8a568 | |||
| 1fefbeba52 | |||
| 1336b5cfb8 | |||
| 935a25490a | |||
| 5f73d6f1b2 | |||
| 595e4d45bd | |||
| c42667b197 | |||
| 00750cb5d5 | |||
| 5f42c6bff9 | |||
| e6e11dab9f | |||
| 6351d60213 | |||
| 2928e5495c | |||
| 0b5a35a208 | |||
| ffd5eddaf9 | |||
| 27b4c46013 | |||
| c8da44781d | |||
| acf2347930 | |||
| a40d302500 | |||
| 8ad44080ae | |||
| c41b740ae6 | |||
| 67e508c979 | |||
| a7e9d39c1d | |||
| 921ddb07f7 | |||
| b2b222f23e | |||
| af202584db | |||
| d38dbc79b2 | |||
| 15c6fdf8c1 | |||
| 5e02e88ec0 | |||
| 3337049968 | |||
| 2565157a5a | |||
| 5b0cd0bce7 | |||
| 2901314d05 | |||
| 9ec1cd3c4f | |||
| b120f82f98 | |||
| c213d17436 |
+41
-1
@@ -13,7 +13,6 @@ ehthumbs_vista.db
|
||||
# Python related files.
|
||||
*.pyc
|
||||
*.pyo
|
||||
*.pyi
|
||||
*.egg-info
|
||||
|
||||
# Editor/tool files.
|
||||
@@ -134,3 +133,44 @@ CubismSdkForNative-4-*.zip
|
||||
/cg
|
||||
/.vscode/launch.json
|
||||
/.vscode/tasks.json
|
||||
|
||||
|
||||
# Pyi Files (generated by scripts/generate_pyi.py)
|
||||
renpy/audio/filter.pyi
|
||||
renpy/audio/renpysound.pyi
|
||||
renpy/display/accelerator.pyi
|
||||
renpy/display/matrix.pyi
|
||||
renpy/display/quaternion.pyi
|
||||
renpy/display/render.pyi
|
||||
renpy/encryption.pyi
|
||||
renpy/gl2/gl2draw.pyi
|
||||
renpy/gl2/gl2mesh.pyi
|
||||
renpy/gl2/gl2mesh2.pyi
|
||||
renpy/gl2/gl2mesh3.pyi
|
||||
renpy/gl2/gl2model.pyi
|
||||
renpy/gl2/gl2polygon.pyi
|
||||
renpy/gl2/gl2shader.pyi
|
||||
renpy/gl2/gl2texture.pyi
|
||||
renpy/gl2/live2dmodel.pyi
|
||||
renpy/lexersupport.pyi
|
||||
renpy/pydict.pyi
|
||||
renpy/style.pyi
|
||||
renpy/style.pyi
|
||||
renpy/styledata/style_activate_functions.pyi
|
||||
renpy/styledata/style_functions.pyi
|
||||
renpy/styledata/style_hover_functions.pyi
|
||||
renpy/styledata/style_idle_functions.pyi
|
||||
renpy/styledata/style_insensitive_functions.pyi
|
||||
renpy/styledata/style_selected_activate_functions.pyi
|
||||
renpy/styledata/style_selected_functions.pyi
|
||||
renpy/styledata/style_selected_hover_functions.pyi
|
||||
renpy/styledata/style_selected_idle_functions.pyi
|
||||
renpy/styledata/style_selected_insensitive_functions.pyi
|
||||
renpy/styledata/styleclass.pyi
|
||||
renpy/styledata/stylesets.pyi
|
||||
renpy/text/ftfont.pyi
|
||||
renpy/text/hbfont.pyi
|
||||
renpy/text/textsupport.pyi
|
||||
renpy/text/texwrap.pyi
|
||||
renpy/uguu/gl.pyi
|
||||
renpy/uguu/uguu.pyi
|
||||
|
||||
Vendored
+51
-16
@@ -1,23 +1,22 @@
|
||||
{
|
||||
"files.watcherExclude": {
|
||||
"**/renpy/0old/**" : true,
|
||||
"**/renpy/atom/**" : true,
|
||||
"**/renpy/cubism/**" : true,
|
||||
"**/renpy/dists/**" : true,
|
||||
"**/renpy/dl/**" : true,
|
||||
"**/renpy/doc/**" : true,
|
||||
"**/renpy/doc-web/**" : true,
|
||||
"**/renpy/jedit/**" : true,
|
||||
"**/renpy/renpy*.app/**" : true,
|
||||
"**/renpy/tmp/**" : true,
|
||||
"**/renpy/web/**" : true,
|
||||
"**/renpy/0old/**": true,
|
||||
"**/renpy/atom/**": true,
|
||||
"**/renpy/cubism/**": true,
|
||||
"**/renpy/dists/**": true,
|
||||
"**/renpy/dl/**": true,
|
||||
"**/renpy/doc/**": true,
|
||||
"**/renpy/doc-web/**": true,
|
||||
"**/renpy/jedit/**": true,
|
||||
"**/renpy/renpy*.app/**": true,
|
||||
"**/renpy/tmp/**": true,
|
||||
"**/renpy/web/**": true
|
||||
},
|
||||
"files.exclude": {
|
||||
"0old": true,
|
||||
"**-dists": true,
|
||||
"**/*.pyc": true,
|
||||
"**/*.pyo": true,
|
||||
"renpy/**/*.pyi": true,
|
||||
"**/*.rpmc": true,
|
||||
"**/*.rpyc": true,
|
||||
"**/__pycache__": true,
|
||||
@@ -42,9 +41,45 @@
|
||||
"web3": true,
|
||||
"**/*.rpa": true,
|
||||
"**/*.rpymc": true,
|
||||
"**/cache/": true
|
||||
"**/cache/": true,
|
||||
"renpy/audio/filter.pyi": true,
|
||||
"renpy/audio/renpysound.pyi": true,
|
||||
"renpy/display/accelerator.pyi": true,
|
||||
"renpy/display/matrix.pyi": true,
|
||||
"renpy/display/quaternion.pyi": true,
|
||||
"renpy/display/render.pyi": true,
|
||||
"renpy/encryption.pyi": true,
|
||||
"renpy/gl2/gl2draw.pyi": true,
|
||||
"renpy/gl2/gl2mesh.pyi": true,
|
||||
"renpy/gl2/gl2mesh2.pyi": true,
|
||||
"renpy/gl2/gl2mesh3.pyi": true,
|
||||
"renpy/gl2/gl2model.pyi": true,
|
||||
"renpy/gl2/gl2polygon.pyi": true,
|
||||
"renpy/gl2/gl2shader.pyi": true,
|
||||
"renpy/gl2/gl2texture.pyi": true,
|
||||
"renpy/gl2/live2dmodel.pyi": true,
|
||||
"renpy/lexersupport.pyi": true,
|
||||
"renpy/pydict.pyi": true,
|
||||
"renpy/style.pyi": true,
|
||||
"renpy/styledata/style_activate_functions.pyi": true,
|
||||
"renpy/styledata/style_functions.pyi": true,
|
||||
"renpy/styledata/style_hover_functions.pyi": true,
|
||||
"renpy/styledata/style_idle_functions.pyi": true,
|
||||
"renpy/styledata/style_insensitive_functions.pyi": true,
|
||||
"renpy/styledata/style_selected_activate_functions.pyi": true,
|
||||
"renpy/styledata/style_selected_functions.pyi": true,
|
||||
"renpy/styledata/style_selected_hover_functions.pyi": true,
|
||||
"renpy/styledata/style_selected_idle_functions.pyi": true,
|
||||
"renpy/styledata/style_selected_insensitive_functions.pyi": true,
|
||||
"renpy/styledata/styleclass.pyi": true,
|
||||
"renpy/styledata/stylesets.pyi": true,
|
||||
"renpy/text/ftfont.pyi": true,
|
||||
"renpy/text/hbfont.pyi": true,
|
||||
"renpy/text/textsupport.pyi": true,
|
||||
"renpy/text/texwrap.pyi": true,
|
||||
"renpy/uguu/gl.pyi": true,
|
||||
"renpy/uguu/uguu.pyi": true
|
||||
},
|
||||
|
||||
"python.languageServer": "Pylance",
|
||||
"python.analysis.typeCheckingMode": "basic",
|
||||
"python.analysis.diagnosticMode": "workspace",
|
||||
@@ -245,5 +280,5 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
+43
-18
@@ -4,8 +4,29 @@ The Ren'Py Visual Novel Engine
|
||||
|
||||
https://www.renpy.org
|
||||
|
||||
Ren'Py development takes place on the ``master`` branch, and occasionally
|
||||
on feature branches.
|
||||
|
||||
Branches
|
||||
========
|
||||
|
||||
The following branches are the most interesting.
|
||||
|
||||
``fix``
|
||||
The fix branch is used for fixes to the current version of Ren'Py that do
|
||||
not require dangerous changes. The fix branch is also the source of the
|
||||
documentation on https://www.renpy.org/. This branch is automatically
|
||||
merged into master on a regular basis.
|
||||
|
||||
Pull requests that contain fixes or documentation improvements should be
|
||||
made to the fix branch. When a release is made, the master branch is
|
||||
copied to the fix branch.
|
||||
|
||||
``master``
|
||||
The master branch is where the main focus of development is. This branch
|
||||
will eventually become the next release of Ren'Py.
|
||||
|
||||
Pull requests that contain new features, that require incompatible changes,
|
||||
or major changes to Ren'Py's internals should be targeted at the master
|
||||
branch.
|
||||
|
||||
|
||||
Getting Started
|
||||
@@ -37,7 +58,7 @@ renpy.app, or renpy.exe, as appropriate for your platform.
|
||||
|
||||
If the current nightly build doesn't work, please wait 24 hours for a new
|
||||
build to occur. If that build still doesn't work, contact Tom (`pytom at bishoujo.us`,
|
||||
or @renpytom on twitter) to find out what's wrong.
|
||||
or @renpytom on Twitter/X) to find out what's wrong.
|
||||
|
||||
The ``doc`` symlink will dangle until documentation is built, as described
|
||||
below.
|
||||
@@ -49,9 +70,9 @@ 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::
|
||||
|
||||
sudo apt install virtualenvwrapper python3-dev libavcodec-dev libavformat-dev \
|
||||
sudo apt install virtualenvwrapper python3-dev libassimp-dev libavcodec-dev libavformat-dev \
|
||||
libswresample-dev libswscale-dev libharfbuzz-dev libfreetype6-dev libfribidi-dev libsdl2-dev \
|
||||
libsdl2-image-dev libsdl2-gfx-dev libsdl2-mixer-dev libsdl2-ttf-dev libjpeg-dev
|
||||
libsdl2-image-dev libsdl2-gfx-dev libsdl2-mixer-dev libsdl2-ttf-dev libjpeg-dev pkg-config
|
||||
|
||||
Ren'Py requires SDL_image 2.6 or greater. If your distribution doesn't include
|
||||
that version, you'll need to download it from:
|
||||
@@ -71,29 +92,18 @@ To return to this virtualenv later, run::
|
||||
|
||||
After activating the virtualenv, install additional dependencies::
|
||||
|
||||
pip install -U cython future six typing pefile requests ecdsa
|
||||
pip install -U setuptools cython future six typing pefile requests ecdsa
|
||||
|
||||
Then, install pygame_sdl2 by running the following commands::
|
||||
|
||||
git clone https://www.github.com/renpy/pygame_sdl2
|
||||
pushd pygame_sdl2
|
||||
python setup.py install
|
||||
python setup.py install_headers
|
||||
popd
|
||||
|
||||
Next, set RENPY_DEPS_INSTALL To a \:-separated (\;-separated on Windows)
|
||||
list of paths containing the dependencies, and RENPY_CYTHON to the name
|
||||
of the cython command::
|
||||
Finally, use setup.py to compile extension modules that support Ren'Py::
|
||||
|
||||
export RENPY_DEPS_INSTALL="/usr:/usr/lib/$(gcc -dumpmachine)/"
|
||||
export RENPY_CYTHON=cython
|
||||
|
||||
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::
|
||||
@@ -101,6 +111,21 @@ using the command::
|
||||
python renpy.py
|
||||
|
||||
|
||||
Other Platforms
|
||||
---------------
|
||||
|
||||
Where supported, Ren'Py will attempt to find include directories and library paths
|
||||
using pkg-config. If pkg-config is not present, include and library paths can be
|
||||
specified using CFLAGS and LDFLAGS.
|
||||
|
||||
If RENPY_CFLAGS is present in the environment and CFLAGS is not, setup.py
|
||||
will set CFLAGS to RENPY_CFLAGS. The same is true for RENPY_LDFLAGS,
|
||||
RENPY_CC, RENPY_CXX, and RENPY_LD.
|
||||
|
||||
Setup.py does not support cross-compiling. See https://github.com/renpy/renpy-build
|
||||
for software that cross-compiles Ren'Py for many platforms.
|
||||
|
||||
|
||||
Documentation
|
||||
=============
|
||||
|
||||
|
||||
+1
-1
@@ -252,7 +252,7 @@ def main():
|
||||
"-q",
|
||||
"egg_info",
|
||||
"--tag-build",
|
||||
"+renpy" + args.version,
|
||||
"+renpy" + args.version.replace("+", "-"),
|
||||
"sdist",
|
||||
"-d",
|
||||
os.path.abspath(destination)
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
*.c
|
||||
*.so
|
||||
*.egg-info
|
||||
*.html
|
||||
build
|
||||
Symlink
+1
@@ -0,0 +1 @@
|
||||
../../renpy/cslots.pyx
|
||||
@@ -0,0 +1,8 @@
|
||||
from setuptools import setup, Extension
|
||||
|
||||
setup(
|
||||
name="cslots",
|
||||
version="1.0.0",
|
||||
ext_modules=[
|
||||
Extension("cslots", [ "cslots.pyx" ]),
|
||||
])
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e
|
||||
|
||||
cython -a cslots.pyx
|
||||
pip install -e .
|
||||
python3 -m pytest
|
||||
@@ -0,0 +1,262 @@
|
||||
import sys
|
||||
import pickle
|
||||
|
||||
from cslots import Object, Slot, IntegerSlot
|
||||
|
||||
class C1(Object):
|
||||
str1 : str|None = None
|
||||
int1 : int = 0
|
||||
|
||||
def __init__(self, str1=None, int1=1):
|
||||
self.str1 = str1
|
||||
self.int1 = int1
|
||||
|
||||
class C2(C1):
|
||||
str2 : str|None = None
|
||||
int2 : int = 0
|
||||
|
||||
def __init__(self, str1=None, int1=0, str2=None, int2=0):
|
||||
self.str1 = str1
|
||||
self.int1 = int1
|
||||
self.str2 = str2
|
||||
self.int2 = int2
|
||||
|
||||
|
||||
def test_slot_count():
|
||||
assert C1._cslot_count == 2
|
||||
assert C2._cslot_count == 4
|
||||
|
||||
def test_slots():
|
||||
|
||||
o = C2()
|
||||
|
||||
assert o.str1 is None
|
||||
assert o.int1 == 0
|
||||
assert o.str2 is None
|
||||
assert o.int2 == 0
|
||||
|
||||
o.str1 = "hello"
|
||||
o.int1 = 42
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 42
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
|
||||
o.str1 = None
|
||||
o.int1 = 0
|
||||
o.str2 = None
|
||||
o.int2 = 0
|
||||
|
||||
assert o.str1 is None
|
||||
assert o.int1 == 0
|
||||
assert o.str2 is None
|
||||
assert o.int2 == 0
|
||||
|
||||
|
||||
def test_compress():
|
||||
|
||||
def expect_size(o, values, indexes):
|
||||
assert sys.getsizeof(o) == 32 + 8 * values + indexes
|
||||
|
||||
o = C2()
|
||||
|
||||
o.str1 = "hello"
|
||||
o.int1 = 42
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
expect_size(o, 4, 4)
|
||||
|
||||
o._compress()
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 42
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
expect_size(o, 4, 4)
|
||||
|
||||
o = C2()
|
||||
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
o._compress()
|
||||
|
||||
assert o.str1 is None
|
||||
assert o.int1 == 0
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
expect_size(o, 2, 4)
|
||||
|
||||
o = C2()
|
||||
o.str1 = "hello"
|
||||
|
||||
o._compress()
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 0
|
||||
assert o.str2 is None
|
||||
assert o.int2 == 0
|
||||
expect_size(o, 1, 1)
|
||||
|
||||
|
||||
def test_decompress():
|
||||
|
||||
def expect_size(o, values, indexes):
|
||||
assert sys.getsizeof(o) == 32 + 8 * values + indexes
|
||||
|
||||
o = C2()
|
||||
|
||||
o.str1 = "hello"
|
||||
o.int1 = 42
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
expect_size(o, 4, 4)
|
||||
|
||||
o._compress()
|
||||
o._decompress()
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 42
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
expect_size(o, 4, 4)
|
||||
|
||||
o = C2()
|
||||
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
o._compress()
|
||||
o._decompress()
|
||||
|
||||
assert o.str1 is None
|
||||
assert o.int1 == 0
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
expect_size(o, 4, 4)
|
||||
|
||||
o = C2()
|
||||
o.str1 = "hello"
|
||||
|
||||
o._compress()
|
||||
o._decompress()
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 0
|
||||
assert o.str2 is None
|
||||
assert o.int2 == 0
|
||||
expect_size(o, 4, 4)
|
||||
|
||||
|
||||
def test_kill():
|
||||
|
||||
o = C2()
|
||||
|
||||
o.str1 = "hello"
|
||||
o.int1 = 42
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
o._kill()
|
||||
|
||||
assert o.str1 is None
|
||||
assert o.int1 == 0
|
||||
assert o.str2 is None
|
||||
assert o.int2 == 0
|
||||
|
||||
o = C2()
|
||||
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
o._compress()
|
||||
o._kill()
|
||||
|
||||
assert o.str1 is None
|
||||
assert o.int1 == 0
|
||||
assert o.str2 is None
|
||||
assert o.int2 == 0
|
||||
|
||||
|
||||
def test_pickle():
|
||||
o = C2()
|
||||
|
||||
o.str1 = "hello"
|
||||
o.int1 = 42
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
o = pickle.loads(pickle.dumps(o))
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 42
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
|
||||
o = C2()
|
||||
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
o = pickle.loads(pickle.dumps(o))
|
||||
|
||||
assert o.str1 is None
|
||||
assert o.int1 == 0
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
|
||||
o = C2()
|
||||
o.str1 = "hello"
|
||||
|
||||
o = pickle.loads(pickle.dumps(o))
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 0
|
||||
assert o.str2 is None
|
||||
assert o.int2 == 0
|
||||
|
||||
|
||||
|
||||
def test_pickle_compressed():
|
||||
o = C2()
|
||||
|
||||
o.str1 = "hello"
|
||||
o.int1 = 42
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
o._compress()
|
||||
|
||||
o = pickle.loads(pickle.dumps(o))
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 42
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
|
||||
o = C2()
|
||||
|
||||
o.str2 = "world"
|
||||
o.int2 = 43
|
||||
|
||||
o._compress()
|
||||
o = pickle.loads(pickle.dumps(o))
|
||||
|
||||
assert o.str1 is None
|
||||
assert o.int1 == 0
|
||||
assert o.str2 == "world"
|
||||
assert o.int2 == 43
|
||||
|
||||
o = C2()
|
||||
o.str1 = "hello"
|
||||
|
||||
o._compress()
|
||||
o = pickle.loads(pickle.dumps(o))
|
||||
|
||||
assert o.str1 == "hello"
|
||||
assert o.int1 == 0
|
||||
assert o.str2 is None
|
||||
assert o.int2 == 0
|
||||
+1
-1
@@ -328,7 +328,7 @@ define gui.vbar_borders = Borders(gui.scale(4), gui.scale(4), gui.scale(4), gui.
|
||||
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
|
||||
## What to do with unscrollable scrollbars in the game menu. "hide" hides them, while
|
||||
## None shows them.
|
||||
define gui.unscrollable = "hide"
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
## When this file exists, Ren'Py will load files in game/libs before other files in game.
|
||||
@@ -96,7 +96,6 @@ style frame:
|
||||
## https://www.renpy.org/doc/html/screen_special.html#say
|
||||
|
||||
screen say(who, what):
|
||||
style_prefix "say"
|
||||
|
||||
window:
|
||||
id "window"
|
||||
@@ -245,9 +244,7 @@ screen quick_menu():
|
||||
|
||||
hbox:
|
||||
style_prefix "quick"
|
||||
|
||||
xalign 0.5
|
||||
yalign 1.0
|
||||
style "quick_menu"
|
||||
|
||||
textbutton _("Back") action Rollback()
|
||||
textbutton _("History") action ShowMenu('history')
|
||||
@@ -266,9 +263,14 @@ init python:
|
||||
|
||||
default quick_menu = True
|
||||
|
||||
style quick_menu is hbox
|
||||
style quick_button is default
|
||||
style quick_button_text is button_text
|
||||
|
||||
style quick_menu:
|
||||
xalign 0.5
|
||||
yalign 1.0
|
||||
|
||||
style quick_button:
|
||||
properties gui.button_properties("quick_button")
|
||||
|
||||
@@ -701,6 +703,7 @@ style slot_name_text is slot_button_text
|
||||
style page_label:
|
||||
xpadding gui.scale(50)
|
||||
ypadding gui.scale(3)
|
||||
xalign 0.5
|
||||
|
||||
style page_label_text:
|
||||
textalign 0.5
|
||||
@@ -1520,11 +1523,9 @@ screen quick_menu():
|
||||
if quick_menu:
|
||||
|
||||
hbox:
|
||||
style "quick_menu"
|
||||
style_prefix "quick"
|
||||
|
||||
xalign 0.5
|
||||
yalign 1.0
|
||||
|
||||
textbutton _("Back") action Rollback()
|
||||
textbutton _("Skip") action Skip() alternate Skip(fast=True, confirm=True)
|
||||
textbutton _("Auto") action Preference("auto-forward", "toggle")
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -76,24 +76,14 @@ class BinFile(object):
|
||||
self.addr = addr
|
||||
|
||||
def tostring(self):
|
||||
if PY2:
|
||||
return self.a.tostring() # type: ignore
|
||||
else:
|
||||
return self.a.tobytes()
|
||||
return self.a.tobytes()
|
||||
|
||||
def substring(self, start, len): # @ReservedAssignment
|
||||
if PY2:
|
||||
return self.a[start:start + len].tostring() # type: ignore
|
||||
else:
|
||||
return self.a[start:start + len].tobytes()
|
||||
return self.a[start:start + len].tobytes()
|
||||
|
||||
def __init__(self, data):
|
||||
self.a = array.array('B')
|
||||
|
||||
if PY2:
|
||||
self.a.fromstring(data) # type: ignore
|
||||
else:
|
||||
self.a.frombytes(data)
|
||||
self.a.frombytes(data)
|
||||
|
||||
##############################################################################
|
||||
# These functions parse data out of the file. In these functions, offset is
|
||||
@@ -396,7 +386,7 @@ def change_icons(oldexe, icofn):
|
||||
|
||||
|
||||
#Image size is the memory size of all sections + all headers, padded to memory alignment.
|
||||
#There's alread a header size, and this isn't changing headers, so just add.
|
||||
#There's already a header size, and this isn't changing headers, so just add.
|
||||
#imageSize = pe.OPTIONAL_HEADER.ImageBase + pe.OPTIONAL_HEADER.SizeOfHeaders
|
||||
imageSize = pe.OPTIONAL_HEADER.SizeOfHeaders
|
||||
for s in pe.sections:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -24,7 +24,6 @@ init python:
|
||||
import codecs
|
||||
import re
|
||||
import sys
|
||||
import future.utils
|
||||
|
||||
def theme_names():
|
||||
"""
|
||||
@@ -98,7 +97,7 @@ init python:
|
||||
return
|
||||
|
||||
renpy.style.restore(style_backup)
|
||||
future.utils.exec_(theme_data.THEME[theme][scheme], globals(), globals())
|
||||
exec(theme_data.THEME[theme][scheme], globals(), globals())
|
||||
|
||||
# Rebuild the style cache.
|
||||
renpy.style.rebuild(False)
|
||||
@@ -168,8 +167,8 @@ init python:
|
||||
|
||||
def list_logical_lines(filename):
|
||||
"""
|
||||
This reads in filename, and turns it into a list of logical
|
||||
lines.
|
||||
This reads in filename, and turns it into a list of logical
|
||||
lines.
|
||||
"""
|
||||
|
||||
f = codecs.open(filename, "rb", "utf-8")
|
||||
@@ -188,7 +187,7 @@ init python:
|
||||
# The line that we're building up.
|
||||
line = ""
|
||||
|
||||
# The number of open parenthesis there are right now.
|
||||
# The number of open parenthesis there are right now.
|
||||
parendepth = 0
|
||||
|
||||
# Looping over the characters in a single logical line.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -432,10 +432,7 @@ fix_dlc("renios", "renios")
|
||||
for f in sorted(self, key=lambda a : a.name):
|
||||
f.hash(sha, distributor)
|
||||
|
||||
if PY2:
|
||||
return sha.hexdigest().decode("utf-8")
|
||||
else:
|
||||
return sha.hexdigest()
|
||||
return sha.hexdigest()
|
||||
|
||||
def split_by_prefix(self, prefix):
|
||||
"""
|
||||
@@ -661,7 +658,6 @@ fix_dlc("renios", "renios")
|
||||
# Build the mac app and windows exes.
|
||||
self.add_mac_files()
|
||||
self.add_windows_files()
|
||||
self.add_main_py()
|
||||
|
||||
# Add the main.py.
|
||||
self.add_main_py()
|
||||
@@ -898,7 +894,7 @@ fix_dlc("renios", "renios")
|
||||
if not os.path.exists(path):
|
||||
raise Exception("{} does not exist.".format(path))
|
||||
|
||||
if isinstance(file_list, basestring):
|
||||
if isinstance(file_list, str):
|
||||
file_list = file_list.split()
|
||||
|
||||
f = File(name, path, False, executable)
|
||||
@@ -911,7 +907,7 @@ fix_dlc("renios", "renios")
|
||||
Adds an empty directory to the file lists.
|
||||
"""
|
||||
|
||||
if isinstance(file_list, basestring):
|
||||
if isinstance(file_list, str):
|
||||
file_list = file_list.split()
|
||||
|
||||
f = File(name, None, True, False)
|
||||
@@ -947,6 +943,15 @@ fix_dlc("renios", "renios")
|
||||
arcfn = arcname + ".rpa"
|
||||
arcpath = self.temp_filename(arcfn)
|
||||
|
||||
# Create new directories leading to the new archive file relative to the tmp root
|
||||
# if the archive's name indicates it should be in a subdirectory
|
||||
arc_relpath = os.path.relpath(arcpath, self.project.tmp)
|
||||
arc_subdir = os.path.dirname(arc_relpath)
|
||||
|
||||
if arc_subdir:
|
||||
abs_subdir = os.path.join(self.project.tmp, arc_subdir)
|
||||
os.makedirs(abs_subdir, exist_ok=True)
|
||||
|
||||
af = archiver.Archive(arcpath)
|
||||
|
||||
fll = len(self.file_lists[arcname])
|
||||
@@ -985,7 +990,7 @@ fix_dlc("renios", "renios")
|
||||
script_version_txt = self.temp_filename("script_version.txt")
|
||||
|
||||
with open(script_version_txt, "w") as f:
|
||||
f.write(unicode(repr(renpy.renpy.version_tuple[:-1])))
|
||||
f.write(repr(renpy.renpy.version_tuple[:-1]))
|
||||
|
||||
self.add_file("all", "game/script_version.txt", script_version_txt)
|
||||
|
||||
@@ -1075,11 +1080,8 @@ fix_dlc("renios", "renios")
|
||||
|
||||
rv = self.temp_filename("Info.plist")
|
||||
|
||||
if PY2:
|
||||
plistlib.writePlist(plist, rv)
|
||||
else:
|
||||
with open(rv, "wb") as f:
|
||||
plistlib.dump(plist, f)
|
||||
with open(rv, "wb") as f:
|
||||
plistlib.dump(plist, f)
|
||||
|
||||
return rv
|
||||
|
||||
@@ -1100,12 +1102,14 @@ fix_dlc("renios", "renios")
|
||||
|
||||
prefix = py("lib/py{major}-")
|
||||
|
||||
if os.path.exists(linux_i686):
|
||||
i686fn = os.path.join(config.renpy_base, prefix + "linux-i686/renpy")
|
||||
|
||||
if os.path.exists(i686fn):
|
||||
|
||||
self.add_file(
|
||||
linux_i686,
|
||||
prefix + "linux-i686/" + self.executable_name,
|
||||
os.path.join(config.renpy_base, prefix + "linux-i686/renpy"),
|
||||
i686fn,
|
||||
True)
|
||||
|
||||
self.add_file(
|
||||
@@ -1114,16 +1118,6 @@ fix_dlc("renios", "renios")
|
||||
os.path.join(config.renpy_base, prefix + "linux-x86_64/renpy"),
|
||||
True)
|
||||
|
||||
armfn = os.path.join(config.renpy_base, prefix + "linux-armv7l/renpy")
|
||||
|
||||
if os.path.exists(armfn):
|
||||
|
||||
self.add_file(
|
||||
raspi,
|
||||
prefix + "linux-armv7l/" + self.executable_name,
|
||||
armfn,
|
||||
True)
|
||||
|
||||
aarch64fn = os.path.join(config.renpy_base, prefix + "linux-aarch64/renpy")
|
||||
|
||||
if os.path.exists(aarch64fn):
|
||||
@@ -1226,19 +1220,8 @@ fix_dlc("renios", "renios")
|
||||
if os.path.exists(tmp):
|
||||
self.add_file(fl, dst, tmp)
|
||||
|
||||
if PY2:
|
||||
|
||||
if self.build["include_i686"]:
|
||||
write_exe("lib/py2-windows-i686/renpy.exe", self.exe32, self.exe32, windows_i686)
|
||||
write_exe("lib/py2-windows-i686/pythonw.exe", "lib/py2-windows-i686/pythonw.exe", "pythonw-32.exe", windows_i686)
|
||||
|
||||
write_exe("lib/py2-windows-x86_64/renpy.exe", self.exe, self.exe, windows)
|
||||
write_exe("lib/py2-windows-x86_64/pythonw.exe", "lib/py2-windows-x86_64/pythonw.exe", "pythonw-64.exe", windows)
|
||||
|
||||
else:
|
||||
|
||||
write_exe("lib/py3-windows-x86_64/renpy.exe", self.exe, self.exe, windows)
|
||||
write_exe("lib/py3-windows-x86_64/pythonw.exe", "lib/py3-windows-x86_64/pythonw.exe", "pythonw-64.exe", windows)
|
||||
write_exe("lib/py3-windows-x86_64/renpy.exe", self.exe, self.exe, windows)
|
||||
write_exe("lib/py3-windows-x86_64/pythonw.exe", "lib/py3-windows-x86_64/pythonw.exe", "pythonw-64.exe", windows)
|
||||
|
||||
|
||||
def add_main_py(self):
|
||||
@@ -1531,11 +1514,12 @@ fix_dlc("renios", "renios")
|
||||
|
||||
update = { variant : { "version" : self.update_versions[variant], "base_name" : self.base_name, "files" : update_files, "directories" : update_directories, "xbit" : update_xbit } }
|
||||
|
||||
update_fn = os.path.join(self.destination, filename + ".update.json")
|
||||
update_fn = self.temp_filename(filename + ".update.json")
|
||||
|
||||
|
||||
if self.include_update and not format.startswith("app-"):
|
||||
|
||||
with open(update_fn, "wb" if PY2 else "w") as f:
|
||||
with open(update_fn, "w") as f:
|
||||
json.dump(update, f, indent=2)
|
||||
|
||||
if (not dlc) or (format == "update"):
|
||||
@@ -1565,14 +1549,11 @@ fix_dlc("renios", "renios")
|
||||
in this thread or a background thread.
|
||||
"""
|
||||
|
||||
if self.include_update and not self.build_update and not dlc:
|
||||
if os.path.exists(update_fn):
|
||||
os.unlink(update_fn)
|
||||
final_update_fn = os.path.join(self.destination, filename + ".update.json")
|
||||
|
||||
if not directory:
|
||||
file_hash = hash_file(path)
|
||||
else:
|
||||
file_hash = ""
|
||||
if self.build_update or dlc:
|
||||
if os.path.exists(update_fn):
|
||||
shutil.copy(update_fn, final_update_fn)
|
||||
|
||||
if format == "tar.bz2" or format == "bare-tar.bz2":
|
||||
pkg = TarPackage(path, "w:bz2")
|
||||
@@ -1806,8 +1787,9 @@ fix_dlc("renios", "renios")
|
||||
reporter.info(_("Recompiling all rpy files into rpyc files..."))
|
||||
project.launch([ "compile", "--keep-orphan-rpyc" ], wait=True)
|
||||
|
||||
files = [fn + "c" for fn in project.script_files()
|
||||
if fn.startswith("game/") and project.exists(fn + "c")]
|
||||
files = [
|
||||
fn + "c" for fn in project.script_files()
|
||||
if fn.startswith("game/") and project.exists(fn + "c")]
|
||||
len_files = len(files)
|
||||
|
||||
if not files:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -52,7 +52,7 @@ init python:
|
||||
# This is set to true by cancel() to indicate the download should be cancelled.
|
||||
self.cancelled = False
|
||||
|
||||
# Set on succes or failure.
|
||||
# Set on success or failure.
|
||||
self.success = False
|
||||
self.failure = None
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -225,7 +225,7 @@ init 1 python in editor:
|
||||
_("JEdit is deprecated, using another editor is recommended."),
|
||||
"jedit",
|
||||
_("1.8 MB download required."),
|
||||
_("This may have occured because Java is not installed on this system."),
|
||||
_("This may have occurred because Java is not installed on this system."),
|
||||
deprecated=True,
|
||||
)
|
||||
|
||||
@@ -411,7 +411,7 @@ init 1 python in editor:
|
||||
|
||||
except Exception as e:
|
||||
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
|
||||
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
|
||||
renpy.invoke_in_new_context(interface.error, _("An exception occurred while launching the text editor:\n[exception!q]"), error_message, exception=exception)
|
||||
|
||||
class EditAbsolute(Action):
|
||||
def __init__(self, filename, line=None, check=False):
|
||||
@@ -457,7 +457,7 @@ init 1 python in editor:
|
||||
|
||||
except Exception as e:
|
||||
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
|
||||
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
|
||||
renpy.invoke_in_new_context(interface.error, _("An exception occurred while launching the text editor:\n[exception!q]"), error_message, exception=exception)
|
||||
|
||||
|
||||
class EditAll(Action):
|
||||
@@ -495,7 +495,7 @@ init 1 python in editor:
|
||||
|
||||
except Exception as e:
|
||||
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
|
||||
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
|
||||
renpy.invoke_in_new_context(interface.error, _("An exception occurred while launching the text editor:\n[exception!q]"), error_message, exception=exception)
|
||||
|
||||
|
||||
class EditProject(Action):
|
||||
@@ -518,7 +518,7 @@ init 1 python in editor:
|
||||
|
||||
except Exception as e:
|
||||
exception = traceback.format_exception_only(type(e), e)[-1][:-1]
|
||||
renpy.invoke_in_new_context(interface.error, _("An exception occured while launching the text editor:\n[exception!q]"), error_message, exception=exception)
|
||||
renpy.invoke_in_new_context(interface.error, _("An exception occurred while launching the text editor:\n[exception!q]"), error_message, exception=exception)
|
||||
|
||||
|
||||
def CanEditProject():
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -157,13 +157,11 @@ screen front_page_project:
|
||||
label _("Open Directory") style "l_label_small"
|
||||
|
||||
frame style "l_indent":
|
||||
has vbox
|
||||
has grid 2 max(5, (len(p.get_renpy_launcher()["open_directory"]) + 1) // 2):
|
||||
transpose True xfill True
|
||||
|
||||
textbutton "game" action OpenDirectory(os.path.join(p.path, "game"), absolute=True)
|
||||
textbutton "base" action OpenDirectory(os.path.join(p.path, "."), absolute=True)
|
||||
textbutton "images" action OpenDirectory(os.path.join(p.path, "game/images"), absolute=True)
|
||||
textbutton "audio" action OpenDirectory(os.path.join(p.path, "game/audio"), absolute=True)
|
||||
textbutton "gui" action OpenDirectory(os.path.join(p.path, "game/gui"), absolute=True)
|
||||
for button_name, path in p.get_renpy_launcher()["open_directory"].items():
|
||||
textbutton button_name action OpenDirectory(os.path.join(p.path, path), absolute=True)
|
||||
|
||||
vbox:
|
||||
if persistent.show_edit_funcs:
|
||||
@@ -173,10 +171,8 @@ screen front_page_project:
|
||||
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 "gui.rpy" action editor.Edit("game/gui.rpy", check=True)
|
||||
textbutton "screens.rpy" action editor.Edit("game/screens.rpy", check=True)
|
||||
for button_name, path in p.get_renpy_launcher()["edit_file"].items():
|
||||
textbutton button_name action editor.Edit(path, check=True)
|
||||
|
||||
if editor.CanEditProject():
|
||||
textbutton _("Open project") action editor.EditProject()
|
||||
|
||||
+10
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -26,6 +26,15 @@ define gui.asian = False
|
||||
# and provides the full path to the template project.
|
||||
default gui_template_path = None
|
||||
|
||||
define LIBS_TXT = _("""\
|
||||
The game/libs/ directory is meant for third-party libraries that ask to be
|
||||
put in game/libs.
|
||||
|
||||
When this file (game/libs/libs.txt) is present, Ren'Py will load all files
|
||||
in libs before any other file in game/, and will not consider directory names
|
||||
when loading these files.
|
||||
""")
|
||||
|
||||
init -1 python:
|
||||
|
||||
import gui7
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -28,15 +28,19 @@ import os
|
||||
import shutil
|
||||
|
||||
|
||||
|
||||
def finish(p):
|
||||
|
||||
for dn in [ "images", "audio" ]:
|
||||
for dn in [ "images", "audio", "libs" ]:
|
||||
|
||||
fulldn = os.path.join(p.prefix, dn)
|
||||
|
||||
if not os.path.exists(fulldn):
|
||||
os.mkdir(fulldn)
|
||||
|
||||
with open(os.path.join(p.prefix, "libs", "libs.txt"), "w") as f:
|
||||
f.write(renpy.translation.translate_string(renpy.store.LIBS_TXT, language=p.language))
|
||||
|
||||
def generate_gui(p):
|
||||
|
||||
ImageGenerator(p).generate_all()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -172,7 +172,7 @@ class CodeGenerator(object):
|
||||
|
||||
for l in self.lines:
|
||||
|
||||
m = re.match('^(\s*)define (.*?) =', l)
|
||||
m = re.match(r'^(\s*)define (.*?) =', l)
|
||||
|
||||
if m:
|
||||
indent = m.group(1)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -81,10 +81,7 @@ init python:
|
||||
|
||||
label install_live2d:
|
||||
python hide:
|
||||
if PY2:
|
||||
_prefix = r"lib/py2-"
|
||||
else:
|
||||
_prefix = r"lib/py3-"
|
||||
_prefix = r"lib/py3-"
|
||||
|
||||
patterns = [
|
||||
(r".*/Core/dll/linux/x86_64/(libLive2DCubismCore.so)", _prefix + r"linux-x86_64/\1"),
|
||||
@@ -97,11 +94,6 @@ label install_live2d:
|
||||
(r".*/Core/dll/android/(x86_64/libLive2DCubismCore.so)", r"rapt/prototype/renpyandroid/src/main/jniLibs/\1"),
|
||||
]
|
||||
|
||||
if PY2:
|
||||
patterns.extend([
|
||||
(r".*/Core/dll/windows/x86/(Live2DCubismCore.dll)", _prefix + r"windows-i686/\1"),
|
||||
])
|
||||
|
||||
install_from_zip("Live2D Cubism SDK for Native", "CubismSdkForNative-[45]-*.zip", patterns)
|
||||
|
||||
jump front_page
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -169,7 +169,7 @@ def _check_hash(filename, hashj):
|
||||
download_file = ""
|
||||
download_url = ""
|
||||
|
||||
def download(url, filename, hash=None):
|
||||
def download(url, filename, hash=None, headers=None, requests_kwargs={}):
|
||||
"""
|
||||
Downloads `url` to `filename`, a tempfile.
|
||||
"""
|
||||
@@ -188,9 +188,13 @@ def download(url, filename, hash=None):
|
||||
|
||||
progress_time = time.time()
|
||||
|
||||
all_headers = {"User-Agent": 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36 renpy/8'}
|
||||
if headers:
|
||||
all_headers.update(headers)
|
||||
|
||||
try:
|
||||
|
||||
response = requests.get(url, stream=True, proxies=renpy.exports.proxies, timeout=15)
|
||||
response = requests.get(url, stream=True, proxies=renpy.exports.proxies, timeout=15, headers=all_headers, **requests_kwargs)
|
||||
response.raise_for_status()
|
||||
|
||||
total_size = int(response.headers.get('content-length', 1))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -33,6 +33,10 @@ init python in interface:
|
||||
DOC_URL = "http://www.renpy.org/doc/html/"
|
||||
DOC_LOCAL_URL = "file:///" + DOC_PATH
|
||||
|
||||
# If true, the launcher should not link back to renpy.org.
|
||||
NO_LAUNCHER_LINKS = os.path.exists(os.path.join(config.renpy_base, "no_launcher_links.txt"))
|
||||
|
||||
|
||||
local_doc_exists = os.path.exists(DOC_PATH)
|
||||
|
||||
def get_doc_url(page):
|
||||
@@ -40,7 +44,7 @@ init python in interface:
|
||||
Returns the URL to the documentation page.
|
||||
"""
|
||||
|
||||
if local_doc_exists and not persistent.use_web_doc:
|
||||
if local_doc_exists and (NO_LAUNCHER_LINKS or not persistent.use_web_doc):
|
||||
from urllib.parse import urljoin
|
||||
from urllib.request import pathname2url
|
||||
|
||||
@@ -117,7 +121,10 @@ screen bottom_info:
|
||||
hbox:
|
||||
spacing INDENT
|
||||
textbutton _("Documentation") style "l_link" action interface.OpenDocumentation()
|
||||
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
|
||||
|
||||
if not interface.NO_LAUNCHER_LINKS:
|
||||
textbutton _("Ren'Py Website") style "l_link" action OpenURL(interface.RENPY_URL)
|
||||
|
||||
textbutton _("[interface.version]") style "l_link" action Jump("about")
|
||||
|
||||
hbox:
|
||||
@@ -133,7 +140,7 @@ screen bottom_info:
|
||||
textbutton _("preferences") style "l_link" action Jump("preferences")
|
||||
textbutton _("quit") style "l_link" action Quit(confirm=False)
|
||||
|
||||
if persistent.sponsor_message:
|
||||
if persistent.sponsor_message and not interface.NO_LAUNCHER_LINKS:
|
||||
|
||||
textbutton _("Ren'Py Sponsor Information"):
|
||||
style "l_link"
|
||||
@@ -345,7 +352,7 @@ init python in interface:
|
||||
|
||||
def error(message, submessage=None, label="front_page", **kwargs):
|
||||
"""
|
||||
Indicates to the user that an error has occured.
|
||||
Indicates to the user that an error has occurred.
|
||||
|
||||
`message`
|
||||
The message to display.
|
||||
@@ -401,7 +408,7 @@ init python in interface:
|
||||
except Exception as e:
|
||||
renpy.renpy.error.report_exception(e, editor=False)
|
||||
|
||||
error(_("While [what!qt], an error occured:"),
|
||||
error(_("While [what!qt], an error occurred:"),
|
||||
_("[exception!q]"),
|
||||
what=what,
|
||||
label=label,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -164,9 +164,6 @@ init python:
|
||||
|
||||
print("Eliminating __pycache__...")
|
||||
|
||||
if PY2:
|
||||
return
|
||||
|
||||
import pathlib
|
||||
import sys
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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,7 +50,7 @@ init python:
|
||||
pass
|
||||
|
||||
with interface.error_handling(_("Downloading the itch.io butler.")):
|
||||
url = "https://broth.itch.ovh/butler/{}/LATEST/archive/default".format(platform)
|
||||
url = "https://broth.itch.zone/butler/{}/LATEST/archive/default".format(platform)
|
||||
|
||||
response = requests.get(url, headers={'User-Agent' : "Renpy"}, proxies=renpy.proxies)
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -91,7 +91,7 @@ init -1 python:
|
||||
def log(self, msg):
|
||||
with open(self.filename, "a") as f:
|
||||
f.write("\n")
|
||||
f.write(unicode(msg))
|
||||
f.write(msg)
|
||||
f.write("\n")
|
||||
|
||||
def info(self, prompt):
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -34,9 +34,6 @@ label new_project:
|
||||
if persistent.projects_directory is None:
|
||||
$ interface.error(_("The projects directory could not be set. Giving up."))
|
||||
|
||||
if PY2:
|
||||
$ interface.info(_("Warning : you are using Ren'Py 7. It is recommended to start new projects using Ren'Py 8 instead."))
|
||||
|
||||
python:
|
||||
new_project_language = __("{#language name and font}")
|
||||
gui_kind = "new_gui_project"
|
||||
|
||||
+25
-30
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -322,7 +322,7 @@ init python:
|
||||
"""
|
||||
|
||||
if py is True:
|
||||
py = 'pyo' if PY2 else 'pycache'
|
||||
py = 'pycache'
|
||||
|
||||
if py == 'pycache':
|
||||
build.classify_renpy(pattern + "/**__pycache__/", binary)
|
||||
@@ -346,6 +346,8 @@ init python:
|
||||
build.classify_renpy(pattern + "/**.pyo", None)
|
||||
|
||||
build.classify_renpy(pattern + "/**.pyi", None)
|
||||
build.classify_renpy(pattern + "/**.pyx", "source_only")
|
||||
build.classify_renpy(pattern + "/**.pxd", "source_only")
|
||||
|
||||
build.classify_renpy(pattern + "/**.rpyc", binary)
|
||||
build.classify_renpy(pattern + "/**.rpymc", binary)
|
||||
@@ -357,6 +359,7 @@ init python:
|
||||
|
||||
build.classify_renpy(pattern + "/**", source)
|
||||
|
||||
build.classify_renpy("renpy/gl/", None)
|
||||
|
||||
build.classify_renpy("renpy.py", "binary")
|
||||
source_and_binary("renpy")
|
||||
@@ -392,39 +395,31 @@ init python:
|
||||
build.classify_renpy("sphinx/source/inc/", None)
|
||||
build.classify_renpy("sphinx/source/**", "source_only")
|
||||
|
||||
|
||||
# module.
|
||||
build.classify_renpy("module/", "source")
|
||||
build.classify_renpy("module/*.c", "source")
|
||||
build.classify_renpy("module/gen/", None)
|
||||
build.classify_renpy("module/*.h", "source")
|
||||
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")
|
||||
build.classify_renpy("module/fribidi-src/**", "source")
|
||||
build.classify_renpy("module/tinyfiledialogs/**", "source")
|
||||
build.classify_renpy("module/libhydrogen/**", "source")
|
||||
# Build System.
|
||||
build.classify_renpy("setup.py", "source_only")
|
||||
build.classify_renpy("src/**", "source_only")
|
||||
build.classify_renpy("scripts/", "source_only")
|
||||
build.classify_renpy("scripts/setuplib.py", "source_only")
|
||||
build.classify_renpy("scripts/generate_styles.py", "source_only")
|
||||
|
||||
# all-platforms binary.
|
||||
build.classify_renpy("lib/**/libpython{}.{}.dll".format(sys.version_info.major, sys.version_info.minor), "binary")
|
||||
build.classify_renpy("lib/**/libpython*.dll", None)
|
||||
|
||||
build.classify_renpy("lib/**/*steam_api*", "steam")
|
||||
build.classify_renpy("lib/**/*Live2D*", None)
|
||||
|
||||
if PY2:
|
||||
build.classify_renpy("lib/py2-linux-armv7l/**", "linux_arm")
|
||||
build.classify_renpy("lib/py2-linux-aarch64/**", "linux_arm")
|
||||
source_and_binary("lib/py2-**", "binary", "binary")
|
||||
source_and_binary("lib/python2**", "binary", "binary")
|
||||
build.classify_renpy("renpy2.sh", "binary")
|
||||
else:
|
||||
build.classify_renpy("lib/py3-linux-armv7l/**", "linux_arm")
|
||||
build.classify_renpy("lib/py3-linux-aarch64/**", "linux_arm")
|
||||
source_and_binary("lib/py3-**", "binary", "binary")
|
||||
source_and_binary("lib/python3**", "binary", "binary", py='pyc')
|
||||
build.classify_renpy("renpy3.sh", "binary")
|
||||
build.classify_renpy("lib/py3-linux-armv7l", None)
|
||||
build.classify_renpy("lib/py3-linux-aarch64/**", "linux_arm")
|
||||
source_and_binary("lib/py3-**", "binary", "binary")
|
||||
|
||||
libpython = "lib/python{}.{}".format(sys.version_info.major, sys.version_info.minor)
|
||||
source_and_binary(libpython, "binary", "binary", py='pyc')
|
||||
|
||||
build.classify_renpy("lib/python**", None)
|
||||
build.classify_renpy("lib/py2-**", None)
|
||||
|
||||
build.classify_renpy("renpy3.sh", "binary")
|
||||
|
||||
build.classify_renpy("lib/", "binary")
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -34,106 +34,21 @@ init python in distribute:
|
||||
from zipfile import crc32
|
||||
|
||||
# Since the long type doesn't exist on py3, define it here
|
||||
if not PY2:
|
||||
long = int
|
||||
long = int
|
||||
|
||||
zlib.Z_DEFAULT_COMPRESSION = 5
|
||||
|
||||
if PY2:
|
||||
class ZipFile(zipfile.ZipFile):
|
||||
|
||||
class ZipFile(zipfile.ZipFile):
|
||||
def write_with_info(self, zinfo, filename):
|
||||
|
||||
def write_with_info(self, zinfo, filename):
|
||||
"""Put the bytes from filename into the archive under the name
|
||||
arcname."""
|
||||
if not self.fp:
|
||||
raise RuntimeError(
|
||||
"Attempt to write to ZIP archive that was already closed")
|
||||
if zinfo.filename.endswith("/"):
|
||||
data = b''
|
||||
else:
|
||||
with open(filename, "rb") as f:
|
||||
data = f.read()
|
||||
|
||||
st = os.stat(filename)
|
||||
isdir = stat.S_ISDIR(st.st_mode)
|
||||
|
||||
zinfo.file_size = st.st_size
|
||||
zinfo.flag_bits = 0x00
|
||||
zinfo.header_offset = self.fp.tell() # Start of header bytes
|
||||
|
||||
self._writecheck(zinfo)
|
||||
self._didModify = True
|
||||
|
||||
if isdir:
|
||||
zinfo.file_size = 0
|
||||
zinfo.compress_size = 0
|
||||
zinfo.CRC = 0
|
||||
self.filelist.append(zinfo)
|
||||
self.NameToInfo[zinfo.filename] = zinfo
|
||||
self.fp.write(zinfo.FileHeader())
|
||||
return
|
||||
|
||||
with open(filename, "rb") as fp:
|
||||
# Must overwrite CRC and sizes with correct data later
|
||||
zinfo.CRC = CRC = 0
|
||||
zinfo.compress_size = compress_size = 0
|
||||
file_size = 0
|
||||
|
||||
zip64 = self._allowZip64 and \
|
||||
zinfo.file_size * 1.05 > zipfile.ZIP64_LIMIT
|
||||
|
||||
self.fp.write(zinfo.FileHeader(zip64))
|
||||
|
||||
if zinfo.compress_type == zipfile.ZIP_DEFLATED:
|
||||
cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION,
|
||||
zlib.DEFLATED, -15)
|
||||
else:
|
||||
cmpr = None
|
||||
while 1:
|
||||
buf = fp.read(1024 * 1024)
|
||||
if not buf:
|
||||
break
|
||||
file_size = file_size + len(buf)
|
||||
CRC = crc32(buf, CRC) & 0xffffffff
|
||||
if cmpr:
|
||||
buf = cmpr.compress(buf)
|
||||
compress_size = compress_size + len(buf)
|
||||
self.fp.write(buf)
|
||||
if cmpr:
|
||||
buf = cmpr.flush()
|
||||
compress_size = compress_size + len(buf)
|
||||
self.fp.write(buf)
|
||||
zinfo.compress_size = compress_size
|
||||
else:
|
||||
zinfo.compress_size = file_size
|
||||
zinfo.CRC = CRC
|
||||
zinfo.file_size = file_size
|
||||
|
||||
if not zip64 and self._allowZip64:
|
||||
if file_size > zipfile.ZIP64_LIMIT:
|
||||
raise RuntimeError('File size has increased during compressing')
|
||||
if compress_size > zipfile.ZIP64_LIMIT:
|
||||
raise RuntimeError('Compressed size larger than uncompressed size')
|
||||
|
||||
# Seek backwards and write CRC and file sizes
|
||||
position = self.fp.tell() # Preserve current position in file
|
||||
self.fp.seek(zinfo.header_offset, 0)
|
||||
|
||||
self.fp.write(zinfo.FileHeader(zip64))
|
||||
|
||||
self.fp.seek(position, 0)
|
||||
self.filelist.append(zinfo)
|
||||
self.NameToInfo[zinfo.filename] = zinfo
|
||||
|
||||
else:
|
||||
|
||||
class ZipFile(zipfile.ZipFile):
|
||||
|
||||
def write_with_info(self, zinfo, filename):
|
||||
|
||||
if zinfo.filename.endswith("/"):
|
||||
data = b''
|
||||
else:
|
||||
with open(filename, "rb") as f:
|
||||
data = f.read()
|
||||
|
||||
self.writestr(zinfo, data)
|
||||
self.writestr(zinfo, data)
|
||||
|
||||
|
||||
class ZipPackage(object):
|
||||
@@ -469,3 +384,5 @@ init python in distribute:
|
||||
for i in parallel_threads:
|
||||
if i.done:
|
||||
i.done()
|
||||
|
||||
parallel_threads.clear()
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
|
||||
+45
-10
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -92,6 +92,10 @@ init python in project:
|
||||
# The mtime of the last dump file loaded.
|
||||
self.dump_mtime = 0
|
||||
|
||||
# A processed version of data['renpy_launcher'] with missing files
|
||||
# and directories removed.
|
||||
self.renpy_launcher = None
|
||||
|
||||
def get_dump_filename(self):
|
||||
|
||||
if os.path.exists(os.path.join(self.gamedir, "saves")):
|
||||
@@ -116,7 +120,7 @@ init python in project:
|
||||
|
||||
try:
|
||||
with open(os.path.join(self.path, "project.json"), "w") as f:
|
||||
json.dump(self.data, f)
|
||||
json.dump(self.data, f, indent=2)
|
||||
except Exception:
|
||||
self.load_data()
|
||||
|
||||
@@ -156,6 +160,43 @@ init python in project:
|
||||
data["renamed_steam"] = True
|
||||
|
||||
|
||||
def get_renpy_launcher(self):
|
||||
|
||||
if self.renpy_launcher is not None:
|
||||
return self.renpy_launcher
|
||||
|
||||
rv = { }
|
||||
|
||||
default_values = {
|
||||
"open_directory":
|
||||
{
|
||||
"game": "game",
|
||||
"base": ".",
|
||||
"images": "game/images",
|
||||
"audio": "game/audio",
|
||||
"gui": "game/gui",
|
||||
"libs": "game/libs",
|
||||
"mods": "game/mods",
|
||||
},
|
||||
"edit_file":
|
||||
{
|
||||
"script.rpy": "game/script.rpy",
|
||||
"options.rpy": "game/options.rpy",
|
||||
"gui.rpy": "game/gui.rpy",
|
||||
"screens.rpy": "game/screens.rpy"
|
||||
}
|
||||
}
|
||||
|
||||
for k, default_d in default_values.items():
|
||||
d = self.data.get("renpy_launcher", {}).get(k, default_d)
|
||||
rv[k] = { name : path for name, path in d.items() if os.path.exists(os.path.join(self.path, path)) }
|
||||
|
||||
self.renpy_launcher = rv
|
||||
|
||||
return rv
|
||||
|
||||
|
||||
|
||||
def make_tmp(self):
|
||||
"""
|
||||
Makes the project's temporary directory, if it doesn't exist
|
||||
@@ -352,12 +393,6 @@ init python in project:
|
||||
|
||||
line = line[:1024]
|
||||
|
||||
if PY2:
|
||||
try:
|
||||
line = line.decode("utf-8")
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
m = re.search(r"#\s*TODO(\s*:\s*|\s+)(.*)", line, re.I)
|
||||
|
||||
if m is None:
|
||||
@@ -672,7 +707,7 @@ init python in project:
|
||||
The label to jump to when clicked.
|
||||
"""
|
||||
|
||||
if isinstance(p, basestring):
|
||||
if isinstance(p, str):
|
||||
p = manager.get(p)
|
||||
|
||||
self.project = p
|
||||
@@ -760,7 +795,7 @@ init python in project:
|
||||
def __init__(self, p=None):
|
||||
if p is None:
|
||||
self.project = current
|
||||
elif isinstance(p, basestring):
|
||||
elif isinstance(p, str):
|
||||
self.project = manager.get(p)
|
||||
else:
|
||||
self.project = p
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
|
||||
@@ -364,7 +364,7 @@
|
||||
new "{b}نقترح.{/b} محرر نص له واجهة سهلة الاستعمال ويعين على كتابة النصوص البرمجية يفضل برنامج يحتوي على مدقق لغوي. Editraحالياً لا يدعم اللغات الأجنبية مثل اللغه الكورية و الصينية و اليابانية. على نظام لينوكس, Editra يحتاج wxPython."
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "قد يكون سبب ذلك ان wxPython غير موجود في نظام التشغيل لديك"
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -380,7 +380,7 @@
|
||||
new "مطلوب تحميل ملف بحجم 1.8 ميغا بايت."
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "قد يكون السبب ان الجافا غير موجوده على هذا الجهاز."
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -392,7 +392,7 @@
|
||||
new "يمنع رينباي من فتح اي محرر نصوص"
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "حصل استثناء اثناء فتح المحرر: \n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -608,7 +608,7 @@
|
||||
new "خطأ"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "حصل خطأ أثناء [what!qt]"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1136,7 +1136,7 @@
|
||||
new "أحدث نسخة طازجة من رينباي التجريبي, قد يحتوي على آخر مستجدات رينباي و قد لا يعمل مطلقاً"
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "حصل خطأ:"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -929,7 +929,7 @@
|
||||
new "Spildataene er blevet hentet."
|
||||
|
||||
# renpy/common/00updater.rpy:2078
|
||||
old "An error occured when trying to download game data:"
|
||||
old "An error occurred when trying to download game data:"
|
||||
new "En fejl opstod under forsøg på hentning af spildata:"
|
||||
|
||||
# renpy/common/00updater.rpy:2083
|
||||
|
||||
@@ -749,7 +749,7 @@
|
||||
new "Hentning af 1.8 MB påkrævet."
|
||||
|
||||
# game/editor.rpy:211
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Dette er muligvis opstået, fordi Java ikke er installeret på dette system."
|
||||
|
||||
# game/editor.rpy:220
|
||||
@@ -781,7 +781,7 @@
|
||||
new "Rediger [text]."
|
||||
|
||||
# game/editor.rpy:401
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "En undtagelse opstod under opstart af tekstbehandleren:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:533
|
||||
@@ -1073,7 +1073,7 @@
|
||||
new "åbner logfilen"
|
||||
|
||||
# game/interface.rpy:407
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "En fejl opstod under [what!qt]:"
|
||||
|
||||
# game/interface.rpy:407
|
||||
@@ -1753,7 +1753,7 @@
|
||||
new "%d. %B, %Y"
|
||||
|
||||
# game/updater.rpy:163
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "En fejl er opstået:"
|
||||
|
||||
# game/updater.rpy:165
|
||||
|
||||
@@ -364,7 +364,7 @@
|
||||
new "{b}Suositeltu.{/b} Helppokäyttöinen beta-asteella oleva tekstieditori, joka sisältää kehitystä helpottavia toimintoja. Toistaiseksi Editrasta puuttuu täysin kiinalaisen, japanilaisen ja korealaisen tekstin kannatus."
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Tämä saattoi tapahtua, koska wxPythonia ei ole asennettu järjestelmään."
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -380,7 +380,7 @@
|
||||
new "1.8 MB lataus vaaditaan."
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Tämä saattoi tapahtua, koska Javaa ei ole asennettu."
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -392,7 +392,7 @@
|
||||
new "Estää Ren'Py-ohjelmaa avaamasta tekstieditoria."
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Virhe käynnistäessä tekstieditoria:\n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -610,7 +610,7 @@
|
||||
new "VIRHE"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Kun [what!qt], tapahtui virhe:"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1138,7 +1138,7 @@
|
||||
new "Upouudet Ren'Py-kehitysjulkaisut. Voi sisältää uusimmat toiminnot, tai ei ehkä toimi lainkaan."
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "On tapahtunut virhe:"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -365,7 +365,7 @@
|
||||
new "{b}Recommandé.{/b} Un éditeur en version beta avec une interface simple et des fonctionnalités d’assistance au développement. Editra manque pour le moment du support pour les textes en chinois, japonais et coréen. Sur GNU-Linux, Editra nécessite wxPython."
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Cela est sans doute dû au fait que wxPython n’est pas installé sur votre système."
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -381,7 +381,7 @@
|
||||
new "1.8 Mo de téléchargement requis."
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Cela est sans doute produit parce que Java n’est pas installé sur ce système."
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -393,7 +393,7 @@
|
||||
new "Empêcher Ren’Py d’ouvrir un éditeur de texte."
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Une exception est survenue lors du lancement de l’éditeur de texte :\n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -609,7 +609,7 @@
|
||||
new "ERREUR"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Pendant que [what!qt], une erreur est survenue :"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1177,7 +1177,7 @@
|
||||
new "Une version journalière qui corrige les bugs de la dernière version stable."
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Une erreur est survenue :"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -376,7 +376,7 @@
|
||||
new "{b}Empfohlen.{/b} Ein Betaeditor mit einer leichten Benutzeroberfläche und Funktionen, die bei der Entwicklung helfen, wie eine Rechtschreibprüfung. Editra fehlt derzeit die Eingabemethode, die für Chinesisch, Japanisch und Koreanisch benötigt wird. Unter Linux benötigt Editra wxPython."
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Dies ist vermutlich passiert, weil wxPython nicht auf Deinem System installiert ist."
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -392,7 +392,7 @@
|
||||
new "1,8 MB benötigt."
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Dies ist vermutlich passiert, weil Java nicht auf Deinem System installiert ist."
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -404,7 +404,7 @@
|
||||
new "Verhindert, dass Ren'Py einen Texteditor öffnet."
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Ein Fehler ist beim Starten des Texteditors aufgetreten:\n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -631,7 +631,7 @@
|
||||
new "FEHLER"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Während [what!qt] ist ein Fehler aufgetreten:"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1193,7 +1193,7 @@
|
||||
new "Die allerneuste Ren'Py Version. Diese enthält die neusten Funktionen, könnte aber auch überhaupt nicht funktionieren."
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Ein Fehler ist aufgetreten:"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate german strings:
|
||||
|
||||
# screens.rpy:9
|
||||
|
||||
@@ -370,7 +370,7 @@
|
||||
new "{b}Συνιστάται.{/b} Ένας επεξεργαστής κειμένου σε έκδοση beta, με εύκολο περιβάλλον εργασίας και χαραχτηριστικά που σας βοηθούν, όπως π.χ. ορθογραφικό έλεγχο. Ο Editra προς το παρόν δεν υποστηρίζει IME για είσοδο κειμένου σε Κινέζικα, Ιαπωνέζικα και Κορεάτικα. Σε Linux ο Editra απαιτεί το wxPython."
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Αυτό πιθανώς να συνέβη, διότι το wxPython δεν έχει εγκατασταθεί σε αυτό το σύστημα."
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -386,7 +386,7 @@
|
||||
new "1.8 MB απαιτείται να κατέβει."
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Αυτό πιθανώς να συνέβη, διότι η Java δεν έχει εγκατασταθεί σε αυτό το σύστημα."
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -398,7 +398,7 @@
|
||||
new "Εμποδίζει τη Ren'Py να ανοίξει επεξεργαστή κειμένου."
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Μια προγραμματιστική εξαίρεση συνέβει κατά την εκκίνηση του επεξεργαστή κειμένου:\n[exception!q] "
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -624,7 +624,7 @@
|
||||
new "ΣΦΑΛΜΑ"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Ενόσω [what!qt], συνέβη ένα σφάλμα:"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1179,7 +1179,7 @@
|
||||
new "Η απόλυτη νεώτερη έκδοση της Ren'Py. Μπορεί να έχει τα πιο νέα χαρακτηριστικά, αλλά να μη μπορέι καν να φορτώσει."
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Ένα σφάλμα συνέβη:"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -366,7 +366,7 @@
|
||||
new "{b}Di Rekomendasikan.{/b} Editor dengan interface yang mudah untuk di gunakan dan fitur yang sesuai dengan development . Saat ini Editra belum mendukung text input IME yang di butuhkan untuk bahasa Cina,Jepang Dan Korea. Pada Linux, Editra memerlikan wxPython."
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Ini mungkin terjadi karena wxPython tidak terpasang di sistem ini."
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -382,7 +382,7 @@
|
||||
new "1.8 MB download di butuhkan."
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Ini mungkin terjadi karena Java tidak terpasang di sistem ini."
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -394,7 +394,7 @@
|
||||
new "Larang Ren''Py untuk membuka editor text."
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Kesalahan terjadi ketika menjalankan editor text: \n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -612,7 +612,7 @@
|
||||
new "KESALAHAN"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Kesalahan terjadi ketika : [what!qt] adalah :"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1146,7 +1146,7 @@
|
||||
new "Update terbaru dari pengembangan Ren'Py. Ini mungikin mempunyai fitur terbaru. Bahkan tidak jalan sama sekali."
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Kesalahan telah terjadi:"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -365,7 +365,7 @@
|
||||
new "{b}Raccomandato.{/b} Un editor in fase Beta con un'interfaccia facile da usare e funzionalità adatte allo sviluppo come il controllo ortografico. Editra al momento non offre il supporto IMO richiesto per Cinese, Giapponese e Coreano e richiede wxPython su Linux."
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Potrebbe essersi verificato per via dell'assenza di wxPython su questo sistema."
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -381,7 +381,7 @@
|
||||
new "Verranno scaricati 1.8 MB."
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Potrebbe essersi verificato per l'assenza di Java su questo sistema."
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -393,7 +393,7 @@
|
||||
new "Impedisce a Ren'Py di aprire un editor di testo."
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Si è verificata un'eccezione durante il lancio dell'editor:\n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -609,7 +609,7 @@
|
||||
new "ERRORE"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Durante [what!qt], si è verificato un errore:"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1141,7 +1141,7 @@
|
||||
new "La versione più recente di Ren'Py. Potrebbe avere maggiori funzionalità come anche non funzionare affatto."
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Si è verificato un errore:"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -969,7 +969,7 @@ translate japanese strings:
|
||||
new "ゲームデータがダウンロードされました"
|
||||
|
||||
# renpy/common/00updater.rpy:2078
|
||||
old "An error occured when trying to download game data:"
|
||||
old "An error occurred when trying to download game data:"
|
||||
new "ゲームデータダウンロード中にエラーが発生しました:"
|
||||
|
||||
# renpy/common/00updater.rpy:2083
|
||||
|
||||
@@ -364,7 +364,7 @@
|
||||
new "{b}推奨{/b} 使いやすいインターフェースと、スペルチュックのような開発を補助する機能を持つベータエディターです。Editra は現在、中国、韓国、日本語の入力に必要な IME のサポートに欠陥があります。Linux では Editra は wxpython を必要とします。"
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "このエラーは wxPython がこのシステムにインストールされていないため発生したと思われます。"
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -380,7 +380,7 @@
|
||||
new "1.8 MB のダウンロードが必要です。"
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "このエラーは Java がこのシステムにインストールされていないため発生しましたと思われます。"
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -392,7 +392,7 @@
|
||||
new "Ren'Py のテキストエディターの実行を停止します。"
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "テキストエディターの選択中にエラーが発生しました:\n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -608,7 +608,7 @@
|
||||
new "エラー"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "[what!qt] 中にエラーが発生しました:"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1136,7 +1136,7 @@
|
||||
new "Ren'Py の開発版で極めて不安定です。このバージョンには最新の機能が含まれていますが、全く動かないかもしれません。"
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "エラーが発生しました。"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -624,7 +624,7 @@
|
||||
new "에디트라(Editra)는 현재 중국어, 일본어, 한국어 텍스트를 입력할 때 필요한 IME를 지원하지 않습니다. 리눅스에서, 에디트라는 wxPython이 필요합니다."
|
||||
|
||||
# game/editor.rpy:195
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "wxPython이 설치되지 않아 문제가 발생했을 가능성이 있습니다."
|
||||
|
||||
# game/editor.rpy:197
|
||||
@@ -640,7 +640,7 @@
|
||||
new "1.8MB 내려받기 필요."
|
||||
|
||||
# game/editor.rpy:210
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "자바(Java)가 설치되지 않아 문제가 발생했을 수도 있습니다."
|
||||
|
||||
# game/editor.rpy:219
|
||||
@@ -664,7 +664,7 @@
|
||||
new "[text] 편집."
|
||||
|
||||
# game/editor.rpy:387
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "스크립트 에디터를 실행하던 도중 예외가 발생했습니다:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:519
|
||||
@@ -1480,7 +1480,7 @@
|
||||
new "%Y년 %m월 %d일"
|
||||
|
||||
# game/updater.rpy:140
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "오류가 발생했습니다:"
|
||||
|
||||
# game/updater.rpy:142
|
||||
@@ -1532,7 +1532,7 @@
|
||||
new "다음으로"
|
||||
|
||||
# game/interface.rpy:394
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "[what!qt]에 오류가 발생했습니다:"
|
||||
|
||||
# game/interface.rpy:394
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
new "Penyunting matang. Editra tiada sokongan IME yang diperlukan untuk input tulisan bahasa Cina, Jepun, dan Korea. Di Linux, Editra memerlukan wxPython."
|
||||
|
||||
# editor.rpy:195
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Ini mungkin berlaku kerana wxPython tidak dipasangkan di sistem ini."
|
||||
|
||||
# editor.rpy:197
|
||||
@@ -400,7 +400,7 @@
|
||||
new "1.8 MB muat turun diperlukan."
|
||||
|
||||
# editor.rpy:210
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Ini munhkin berlaku kerana Java tidak dipasangkan di sistem ini."
|
||||
|
||||
# editor.rpy:219
|
||||
@@ -424,7 +424,7 @@
|
||||
new "Sunting [text]"
|
||||
|
||||
# editor.rpy:387
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Telah berlakunya pengecualian ralat ketika melancarkan penyunting tulisan:\n[exception!q]"
|
||||
|
||||
# editor.rpy:519
|
||||
@@ -1216,7 +1216,7 @@
|
||||
new "Penjujuhan pinggir pembangunan Ren'Py. Ini mungkin ada ciri-ciri paling baru, atau mungkin tak boleh dijalankan langsung."
|
||||
|
||||
# updater.rpy:158
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Telah berlakunya ralat:"
|
||||
|
||||
# updater.rpy:160
|
||||
|
||||
@@ -942,7 +942,7 @@ translate piglatin strings:
|
||||
new "Hetay amegay ataday ashay eenbay ownloadedday."
|
||||
|
||||
# renpy/common/00updater.rpy:2078
|
||||
old "An error occured when trying to download game data:"
|
||||
old "An error occurred when trying to download game data:"
|
||||
new "Naay erroray occureday henway yingtray otay ownloadday amegay ataday:"
|
||||
|
||||
# renpy/common/00updater.rpy:2083
|
||||
|
||||
@@ -730,7 +730,7 @@ translate piglatin strings:
|
||||
new "1.8 Bmay ownloadday equiredray."
|
||||
|
||||
# game/editor.rpy:214
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Histay aymay avehay occureday ecausebay Avajay isay otnay installeday onay histay ystemsay."
|
||||
|
||||
# game/editor.rpy:228
|
||||
@@ -762,7 +762,7 @@ translate piglatin strings:
|
||||
new "Diteay [text]."
|
||||
|
||||
# game/editor.rpy:409
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Naay exceptionay occureday hileway aunchinglay hetay exttay editoray:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:541
|
||||
@@ -1070,7 +1070,7 @@ translate piglatin strings:
|
||||
new "openingay hetay oglay ilefay"
|
||||
|
||||
# game/interface.rpy:407
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Hileway [what!qt], anay erroray occureday:"
|
||||
|
||||
# game/interface.rpy:407
|
||||
@@ -1778,7 +1778,7 @@ translate piglatin strings:
|
||||
new "%Bay %day, %Yay"
|
||||
|
||||
# game/updater.rpy:162
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Naay erroray ashay occureday:"
|
||||
|
||||
# game/updater.rpy:164
|
||||
|
||||
@@ -632,7 +632,7 @@
|
||||
new "Wymagane pobieranie 1,8 MB."
|
||||
|
||||
# game/editor.rpy:177
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Problem powstał prawdopodobnie przez brak zainstalowanego oprogramowania Java na tym systemie."
|
||||
|
||||
# game/editor.rpy:186
|
||||
@@ -656,7 +656,7 @@
|
||||
new "Edytuj [text]."
|
||||
|
||||
# game/editor.rpy:354
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Wystąpił wyjątek podczas uruchamiania edytora tekstu:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:486
|
||||
@@ -965,7 +965,7 @@
|
||||
new "Otwieranie pliku dziennika"
|
||||
|
||||
# game/interface.rpy:394
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Podczas [what!qt], wystąpił błąd:"
|
||||
|
||||
# game/interface.rpy:394
|
||||
@@ -1553,7 +1553,7 @@
|
||||
new "%B %d, %Y"
|
||||
|
||||
# game/updater.rpy:140
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Wystąpił błąd:"
|
||||
|
||||
# game/updater.rpy:142
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
new "{b}Recomendado.{/b} Um editor beta com uma interface fácil para uso e características que ajudam no desenvolvimento, como correção ortográfica. Editra atualmente carece do suporte IME necessário para textos em Chinês, Japonês e Coreano. No Linux, Editra necessita do wxPython."
|
||||
|
||||
# game/editor.rpy:137
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Isto pode ter ocorrido porque wxPython não está instalado neste sistema."
|
||||
|
||||
# game/editor.rpy:144
|
||||
@@ -28,7 +28,7 @@
|
||||
new "Downlod de 1.8 MB é necessário."
|
||||
|
||||
# game/editor.rpy:158
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Isto pode ter ocorrido porque Java não está instalado neste sistema"
|
||||
|
||||
# option: "System Editor"
|
||||
@@ -52,8 +52,8 @@
|
||||
new "Evita que Ren'Py abra um editor de texto."
|
||||
|
||||
# game/editor.rpy:327
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
new "Ocorreu uma exceção ao executar o editor de texto:\[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Ocorreu uma exceção ao executar o editor de texto:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:423
|
||||
old "Select Editor"
|
||||
|
||||
@@ -62,7 +62,7 @@
|
||||
new "ERRO"
|
||||
|
||||
# game/interface.rpy:328
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Enquanto [what!qt], ocorreu um erro:"
|
||||
|
||||
# game/interface.rpy:329
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
new "Última versão, ainda instavél, do Ren'Py. Pode ter as últimas características ou pode não funcionar de vez."
|
||||
|
||||
# game/updater.rpy:119
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Um erro ocorreu:"
|
||||
|
||||
# game/updater.rpy:121
|
||||
|
||||
@@ -1144,7 +1144,7 @@ translate russian strings:
|
||||
new "Данные игры загружены."
|
||||
|
||||
# renpy/common/00updater.rpy:2077
|
||||
old "An error occured when trying to download game data:"
|
||||
old "An error occurred when trying to download game data:"
|
||||
new "При попытке загрузить данные игры произошла ошибка:"
|
||||
|
||||
# renpy/common/00updater.rpy:2082
|
||||
|
||||
@@ -624,7 +624,7 @@
|
||||
new "Старый, проверенный бета-редактор. Editra на данный момент не поддерживает IME, необходимые для ввода Китайского, Японского и Корейского текстов. На Linux, Editra требует wxPython."
|
||||
|
||||
# editor.rpy:195
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Это могло случиться из-за того, что wxPython не установлен на этой системе."
|
||||
|
||||
# editor.rpy:197
|
||||
@@ -640,7 +640,7 @@
|
||||
new "Требуется скачать 1.8 МБ."
|
||||
|
||||
# editor.rpy:210
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Это могло случиться из-за того, что Java не установлена в данной системе."
|
||||
|
||||
# editor.rpy:219
|
||||
@@ -664,7 +664,7 @@
|
||||
new "Редактировать [text]"
|
||||
|
||||
# editor.rpy:387
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Возникла ошибка при запуске текстового редактора:\n[exception!q]"
|
||||
|
||||
# editor.rpy:519
|
||||
@@ -1457,7 +1457,7 @@
|
||||
new "%d %B %Y года"
|
||||
|
||||
# updater.rpy:140
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Возникла ошибка:"
|
||||
|
||||
# updater.rpy:142
|
||||
@@ -1525,7 +1525,7 @@
|
||||
new "(Бета)"
|
||||
|
||||
# interface.rpy:394
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "В процессе выполнения \"[what!qt]\" произошла ошибка:"
|
||||
|
||||
# interface.rpy:394
|
||||
@@ -1874,7 +1874,7 @@
|
||||
|
||||
# game/androidstrings.rpy:43
|
||||
old "I was unable to use javac to compile a test file. If you haven't installed the Java Development Kit yet, please download it from:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nThe JDK is different from the JRE, so it's possible you have Java without having the JDK. Please make sure you installed the 'JavaSoft (Oracle) registry keys'.\n\nWithout a working JDK, I can't continue."
|
||||
new "Не удалось использовать javac для компиляции тестового файла. Если вы еще не установили Java Development Kit, загрузите его с:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\JDK отличается от JRE, поэтому возможно, что у вас есть Java без JDK. Пожалуйста, убедитесь, что вы установили 'переменные окружения JavaSoft (Oracle)'.\n\nБез работающего JDK я не могу продолжать."
|
||||
new "Не удалось использовать javac для компиляции тестового файла. Если вы еще не установили Java Development Kit, загрузите его с:\n\n{a=https://adoptium.net/?variant=openjdk8}https://adoptium.net/?variant=openjdk8{/a}\n\nJDK отличается от JRE, поэтому возможно, что у вас есть Java без JDK. Пожалуйста, убедитесь, что вы установили 'переменные окружения JavaSoft (Oracle)'.\n\nБез работающего JDK я не могу продолжать."
|
||||
|
||||
# game/androidstrings.rpy:64
|
||||
old "I've opened the directory containing android.keystore and bundle.keystore. Please back them up, and keep them in a safe place."
|
||||
|
||||
@@ -1129,7 +1129,7 @@
|
||||
new "游戏数据已下载"
|
||||
|
||||
# renpy/common/00updater.rpy:2078
|
||||
old "An error occured when trying to download game data:"
|
||||
old "An error occurred when trying to download game data:"
|
||||
new "尝试下载游戏数据时发生错误:"
|
||||
|
||||
# renpy/common/00updater.rpy:2083
|
||||
|
||||
@@ -697,7 +697,7 @@
|
||||
new "需要下载 1.8 MB 的文件。"
|
||||
|
||||
# game/editor.rpy:200
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "这可能是由于您的系统中尚未安装 Java 造成的。"
|
||||
|
||||
# game/editor.rpy:209
|
||||
@@ -729,7 +729,7 @@
|
||||
new "编辑 [text]。"
|
||||
|
||||
# game/editor.rpy:390
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "启动编辑器时发生异常:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:522
|
||||
@@ -1037,7 +1037,7 @@
|
||||
new "打开日志文件"
|
||||
|
||||
# game/interface.rpy:399
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "[what!qt]时出错:"
|
||||
|
||||
# game/interface.rpy:399
|
||||
@@ -1697,7 +1697,7 @@
|
||||
new "%Y-%m-%d"
|
||||
|
||||
# game/updater.rpy:157
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "发生错误:"
|
||||
|
||||
# game/updater.rpy:159
|
||||
|
||||
@@ -884,7 +884,7 @@ translate spanish strings:
|
||||
|
||||
# renpy/common/00sync.rpy:593
|
||||
old "You can use this ID to download your save on another device.\nThis sync will expire in an hour.\nRen'Py Sync is supported by {a=https://www.renpy.org/sponsors.html}Ren'Py's Sponsors{/a}."
|
||||
new "Puede usar esta ID para descargar su guardado en otro dispositivo.\nEsta sincronización caducará en una hora.\RenPy Sync está para {a=https://www.renpy.org/sponsors.html}los patrocinadores de Ren'Py{/a}."
|
||||
new "Puede usar esta ID para descargar su guardado en otro dispositivo.\nEsta sincronización caducará en una hora.\nRenPy Sync está para {a=https://www.renpy.org/sponsors.html}los patrocinadores de Ren'Py{/a}."
|
||||
|
||||
# renpy/common/00sync.rpy:619
|
||||
old "Sync Error"
|
||||
@@ -943,7 +943,7 @@ translate spanish strings:
|
||||
new "Descarga de los datos del juego."
|
||||
|
||||
# renpy/common/00updater.rpy:2078
|
||||
old "An error occured when trying to download game data:"
|
||||
old "An error occurred when trying to download game data:"
|
||||
new "Se ha producido un error al intentar descargar los datos del juego:"
|
||||
|
||||
# renpy/common/00updater.rpy:2083
|
||||
|
||||
@@ -384,7 +384,7 @@
|
||||
new "Un editor maduro. Editra carece de soporte IME, necesario para el texto en chino, japonés y coreano. En Linux, Editra necesita wxPython."
|
||||
|
||||
# editor.rpy:195
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Esto puede haber ocurrido porque wxPython no está instalado en este sistema."
|
||||
|
||||
# editor.rpy:197
|
||||
@@ -400,7 +400,7 @@
|
||||
new "Requiere descargar 1.8 MB."
|
||||
|
||||
# editor.rpy:210
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Esto puede haber ocurrido porque Java no está instalado en este sistema"
|
||||
|
||||
# editor.rpy:219
|
||||
@@ -424,7 +424,7 @@
|
||||
new "Editar [text]."
|
||||
|
||||
# editor.rpy:387
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Ha ocurrido una excepción mientras se ejecutaba el editor de texto:\\[exception!q]"
|
||||
|
||||
# editor.rpy:519
|
||||
@@ -1216,7 +1216,7 @@
|
||||
new "Versión de desarrollo de Ren'Py. Puede tener las últimas características o puede no funcionar."
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Ha sucedido un error:"
|
||||
|
||||
# updater.rpy:154
|
||||
@@ -1568,7 +1568,7 @@
|
||||
new "abriendo el archivo de registro"
|
||||
|
||||
# game/interface.rpy:394
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Mientras que [what!qt], ocurrió un error:"
|
||||
|
||||
# game/interface.rpy:394
|
||||
|
||||
@@ -738,7 +738,7 @@ translate tchinese strings:
|
||||
new "遊戲資料已下載。"
|
||||
|
||||
# renpy/common/00updater.rpy:2078
|
||||
old "An error occured when trying to download game data:"
|
||||
old "An error occurred when trying to download game data:"
|
||||
new "嘗試下載遊戲資料時發生錯誤:"
|
||||
|
||||
# renpy/common/00updater.rpy:2083
|
||||
|
||||
@@ -364,7 +364,7 @@
|
||||
new "{b}推薦{/b} 一個有簡單易用的介面和功能的測試版編輯器能夠幫助開發,例如拼字的校對功能。Editra 現在沒有中文,日文,韓文的輸入功能。在 linux 中 Editra 需要 wxPython(模組支援)。"
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "這可能是因為 wxPython 沒有被安裝在當前系統中而發生的。"
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -380,7 +380,7 @@
|
||||
new "1.8 MB 需要下載。"
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "這可能是因為 Java 沒有被安裝在當前系統中而發生的。"
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -392,7 +392,7 @@
|
||||
new "防止 Ren'Py 開啟文字編輯器。"
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "啟動以下編輯器出現異常:\n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -608,7 +608,7 @@
|
||||
new "錯誤"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "[what!qt] 時,出現錯誤:"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1136,7 +1136,7 @@
|
||||
new "Ren'Py 最新的開發版本。這可能會擁有最新的功能,或可能根本無法運作。"
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "一個錯誤發生:"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -620,7 +620,7 @@
|
||||
new "Gelişmiş bir düzenleyici. Editra; Çince, Japonca ve Korece metin girişi için gerekli olan IME desteğinden yoksundur. Linux'ta Editra wxPython gerektirir."
|
||||
|
||||
# editor.rpy:195
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Bu sistemde wxPython kurulu olmadığı için olabilir."
|
||||
|
||||
# editor.rpy:197
|
||||
@@ -636,7 +636,7 @@
|
||||
new "1.8 MB indirme gerekir."
|
||||
|
||||
# editor.rpy:210
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Bunun sebebi sistemde Java kurulu olmaması olabilir."
|
||||
|
||||
# editor.rpy:219
|
||||
@@ -660,7 +660,7 @@
|
||||
new "Düzenle [text]."
|
||||
|
||||
# editor.rpy:387
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Metin düzenleyicisini başlatırken bir hata oluştu:\n[exception!q]"
|
||||
|
||||
# editor.rpy:519
|
||||
@@ -896,7 +896,7 @@
|
||||
new "HATA"
|
||||
|
||||
# interface.rpy:394
|
||||
old "While [what!q], an error occured:"
|
||||
old "While [what!q], an error occurred:"
|
||||
new "[what!q] sırasında bir hata meydana geldi:"
|
||||
|
||||
# interface.rpy:394
|
||||
@@ -1465,7 +1465,7 @@
|
||||
new "B %d, %Y"
|
||||
|
||||
# updater.rpy:140
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Bir hata meydana geldi:"
|
||||
|
||||
# updater.rpy:142
|
||||
@@ -1913,7 +1913,7 @@ translate turkish strings:
|
||||
new "günlük dosyasının açılması"
|
||||
|
||||
# game/interface.rpy:407
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
# Automatic translation.
|
||||
new "[what!qt] adresindeyken bir hata oluştu:"
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# 00action_file.rpy:26
|
||||
@@ -1134,7 +1134,7 @@ translate ukrainian strings:
|
||||
new "Дані гри було завантажено."
|
||||
|
||||
# renpy/common/00updater.rpy:2078
|
||||
old "An error occured when trying to download game data:"
|
||||
old "An error occurred when trying to download game data:"
|
||||
new "Виникла помилка при спробі завантажити дані гри:"
|
||||
|
||||
# renpy/common/00updater.rpy:2083
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# 00console.rpy:255
|
||||
@@ -156,3 +156,14 @@ translate ukrainian strings:
|
||||
# renpy/common/00console.rpy:813
|
||||
old "Help may display undocumented functions. Please check that the function or\nclass you want to use is documented.\n\n"
|
||||
new "У довідці можуть бути недокументовані функції. Будь ласка, перевірте, чи бажана функція або\nклас задокументовано.\n\n"
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# renpy/common/_developer/developer.rpym:133
|
||||
old " [name!q] [attributes!q] (hidden)"
|
||||
new " [name!q] [attributes!q] (приховано)"
|
||||
|
||||
# renpy/common/_developer/developer.rpym:137
|
||||
old " [name!q] [attributes!q]"
|
||||
new " [name!q] [attributes!q]"
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# 00gltest.rpy:70
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:2
|
||||
@@ -440,3 +440,10 @@ translate ukrainian strings:
|
||||
# gui/game/gui.rpy:461
|
||||
old "## NVL-mode."
|
||||
new "## NVL-режим."
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# gui/game/gui.rpy:331
|
||||
old "## What to do with unscrollable scrollbars in the game menu. \"hide\" hides them, while None shows them."
|
||||
new "## Що робити з не прокручуваними смугами прокрутки у меню гри. Параметр «hide» приховує їх, а «None» показує їх."
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# game/about.rpy:39
|
||||
@@ -706,7 +706,7 @@ translate ukrainian strings:
|
||||
new "Розмір завантаження — 1,8 МБ."
|
||||
|
||||
# game/editor.rpy:211
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Це могло статися через те, що на цій системі не встановлено Java."
|
||||
|
||||
# game/editor.rpy:220
|
||||
@@ -738,7 +738,7 @@ translate ukrainian strings:
|
||||
new "Редагувати [text]."
|
||||
|
||||
# game/editor.rpy:401
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Під час запуску текстового редактора виникла помилка:\n[exception!q]"
|
||||
|
||||
# game/editor.rpy:533
|
||||
@@ -1050,7 +1050,7 @@ translate ukrainian strings:
|
||||
new "відкриття файлу журналу"
|
||||
|
||||
# game/interface.rpy:399
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Під час [what!qt] сталася помилка:"
|
||||
|
||||
# game/interface.rpy:399
|
||||
@@ -1718,7 +1718,7 @@ translate ukrainian strings:
|
||||
new "%d %B, %Y"
|
||||
|
||||
# game/updater.rpy:157
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Сталася помилка:"
|
||||
|
||||
# game/updater.rpy:159
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# gui/game/options.rpy:1
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
translate ukrainian strings:
|
||||
|
||||
# gui/game/screens.rpy:9
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# У цьому файлі міститься сценарій гри.
|
||||
# У цьому файлі міститься сценарій гри.
|
||||
|
||||
# Визначення персонажів для гри.
|
||||
# Аргумент color змінює колір ім’я персонажа.
|
||||
|
||||
@@ -364,7 +364,7 @@
|
||||
new "{b}Khuyến khích{/b} Một trình biên tập có giao diện thân thiện và chức năng hỗ trợ phát triển, chẳng hạn như kiểm tra lỗi chính tả. Editra hiện đang thiếu sự hỗ trợ IME cần thiết để nhập văn bản Trung Quốc, Nhật Bản, và Hàn Quốc. Với Linux Editra cần thêm wxPython."
|
||||
|
||||
# editor.rpy:167
|
||||
old "This may have occured because wxPython is not installed on this system."
|
||||
old "This may have occurred because wxPython is not installed on this system."
|
||||
new "Lỗi xảy ra có thể là do wxPython chưa được cài đặt vào hệ thống."
|
||||
|
||||
# editor.rpy:169
|
||||
@@ -380,7 +380,7 @@
|
||||
new "Cần tải về 1.8 MB tập tin"
|
||||
|
||||
# editor.rpy:182
|
||||
old "This may have occured because Java is not installed on this system."
|
||||
old "This may have occurred because Java is not installed on this system."
|
||||
new "Lỗi xảy ra có thể là do Java chưa được cài đặt vào hệ thống."
|
||||
|
||||
# editor.rpy:191
|
||||
@@ -392,7 +392,7 @@
|
||||
new "Chặn Ren'py mở một trình biên tập văn bản"
|
||||
|
||||
# editor.rpy:359
|
||||
old "An exception occured while launching the text editor:\n[exception!q]"
|
||||
old "An exception occurred while launching the text editor:\n[exception!q]"
|
||||
new "Một lỗi xuất hiện khi đang mở trình biên tập văn bản:\n[exception!q]"
|
||||
|
||||
# editor.rpy:457
|
||||
@@ -608,7 +608,7 @@
|
||||
new "LỖI"
|
||||
|
||||
# interface.rpy:356
|
||||
old "While [what!qt], an error occured:"
|
||||
old "While [what!qt], an error occurred:"
|
||||
new "Trong khi [what!qt], một lỗi xảy ra:"
|
||||
|
||||
# interface.rpy:356
|
||||
@@ -1136,7 +1136,7 @@
|
||||
new "Rìa gần nhất tới sự phát triển của Ren'Py. Nó có thể chứa các tính năng mới nhất hoặc chẳng chạy được luôn."
|
||||
|
||||
# updater.rpy:152
|
||||
old "An error has occured:"
|
||||
old "An error has occurred:"
|
||||
new "Một lỗi đã xảy ra:"
|
||||
|
||||
# updater.rpy:154
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -159,7 +159,7 @@ screen updater:
|
||||
has vbox
|
||||
|
||||
if u.state == u.ERROR:
|
||||
text _("An error has occured:")
|
||||
text _("An error has occurred:")
|
||||
elif u.state == u.CHECKING:
|
||||
text _("Checking for updates.")
|
||||
elif u.state == u.UPDATE_NOT_AVAILABLE:
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -55,7 +55,7 @@ init -1 python in util:
|
||||
|
||||
for subdir, directories, files in os.walk(directory):
|
||||
for fn in directories:
|
||||
if not isinstance(fn, unicode):
|
||||
if not isinstance(fn, str):
|
||||
continue
|
||||
|
||||
fullfn = os.path.join(subdir, fn)
|
||||
@@ -66,7 +66,7 @@ init -1 python in util:
|
||||
yield relfn, True
|
||||
|
||||
for fn in files:
|
||||
if not isinstance(fn, unicode):
|
||||
if not isinstance(fn, str):
|
||||
continue
|
||||
|
||||
fullfn = os.path.join(subdir, fn)
|
||||
|
||||
+11
-16
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
@@ -440,13 +440,12 @@ init python:
|
||||
# Find the presplash and copy it over.
|
||||
presplash = None
|
||||
|
||||
if not PY2:
|
||||
for fn in [ "web-presplash.png", "web-presplash.jpg", "web-presplash.webp" ]:
|
||||
fullfn = os.path.join(project.current.path, fn)
|
||||
for fn in [ "web-presplash.png", "web-presplash.jpg", "web-presplash.webp" ]:
|
||||
fullfn = os.path.join(project.current.path, fn)
|
||||
|
||||
if os.path.exists(fullfn):
|
||||
presplash = fn
|
||||
break
|
||||
if os.path.exists(fullfn):
|
||||
presplash = fn
|
||||
break
|
||||
|
||||
if presplash:
|
||||
os.unlink(os.path.join(destination, "web-presplash.jpg"))
|
||||
@@ -456,20 +455,16 @@ init python:
|
||||
with io.open(os.path.join(WEB_PATH, "index.html"), encoding='utf-8') as f:
|
||||
html = f.read()
|
||||
|
||||
if PY2:
|
||||
html = html.replace("%%TITLE%%", display_name)
|
||||
else:
|
||||
html = html.replace("Ren'Py Web Game", display_name)
|
||||
html = html.replace("Ren'Py Web Game", display_name)
|
||||
|
||||
if presplash:
|
||||
html = html.replace("web-presplash.jpg", presplash)
|
||||
if presplash:
|
||||
html = html.replace("web-presplash.jpg", presplash)
|
||||
|
||||
with io.open(os.path.join(destination, "index.html"), "w", encoding='utf-8') as f:
|
||||
f.write(html)
|
||||
|
||||
if not PY2:
|
||||
generate_web_icons(p, destination)
|
||||
prepare_pwa_files(p, destination)
|
||||
generate_web_icons(p, destination)
|
||||
prepare_pwa_files(p, destination)
|
||||
|
||||
# Zip up the game.
|
||||
|
||||
|
||||
@@ -17,6 +17,8 @@ root = ""
|
||||
|
||||
import renpy
|
||||
|
||||
class BannedException(Exception):
|
||||
pass
|
||||
|
||||
class WebHandler(http.server.BaseHTTPRequestHandler):
|
||||
|
||||
@@ -59,7 +61,13 @@ class WebHandler(http.server.BaseHTTPRequestHandler):
|
||||
None, in which case the caller has nothing further to do.
|
||||
|
||||
"""
|
||||
path = self.translate_path(self.path)
|
||||
|
||||
try:
|
||||
path = self.translate_path(self.path)
|
||||
except BannedException:
|
||||
self.send_error(403, "File not found")
|
||||
return None
|
||||
|
||||
f = None
|
||||
if os.path.isdir(path):
|
||||
parts = urllib.parse.urlsplit(self.path)
|
||||
@@ -192,6 +200,9 @@ class WebHandler(http.server.BaseHTTPRequestHandler):
|
||||
path = root
|
||||
|
||||
for word in words:
|
||||
if word.startswith("."):
|
||||
raise BannedException("Invalid path.")
|
||||
|
||||
if os.path.dirname(word) or word in (os.curdir, os.pardir):
|
||||
# Ignore components that are not a simple file/directory name
|
||||
continue
|
||||
|
||||
@@ -1,45 +0,0 @@
|
||||
_renpy gen/_renpy.c IMG_savepng.c core.c
|
||||
_renpybidi gen/_renpybidi.c renpybidicore.c
|
||||
renpy.audio.renpysound gen/renpy.audio.renpysound.c renpysound_core.c ffmedia.c
|
||||
renpy.audio.filter gen/renpy.audio.filter.c
|
||||
renpy.lexersupport gen/renpy.lexersupport.c
|
||||
renpy.pydict gen/renpy.pydict.c
|
||||
renpy.style gen/renpy.style.c
|
||||
renpy.encryption gen/renpy.encryption.c
|
||||
renpy.compat.dictviews gen/renpy.compat.dictviews.c
|
||||
renpy.styledata.styleclass gen/renpy.styledata.styleclass.c
|
||||
renpy.styledata.stylesets gen/renpy.styledata.stylesets.c
|
||||
renpy.styledata.style_selected_hover_functions gen/renpy.styledata.style_selected_hover_functions.c
|
||||
renpy.styledata.style_selected_idle_functions gen/renpy.styledata.style_selected_idle_functions.c
|
||||
renpy.styledata.style_selected_insensitive_functions gen/renpy.styledata.style_selected_insensitive_functions.c
|
||||
renpy.styledata.style_selected_functions gen/renpy.styledata.style_selected_functions.c
|
||||
renpy.styledata.style_hover_functions gen/renpy.styledata.style_hover_functions.c
|
||||
renpy.styledata.style_idle_functions gen/renpy.styledata.style_idle_functions.c
|
||||
renpy.styledata.style_insensitive_functions gen/renpy.styledata.style_insensitive_functions.c
|
||||
renpy.styledata.style_functions gen/renpy.styledata.style_functions.c
|
||||
renpy.styledata.style_activate_functions gen/renpy.styledata.style_activate_functions.c
|
||||
renpy.styledata.style_selected_activate_functions gen/renpy.styledata.style_selected_activate_functions.c
|
||||
renpy.display.matrix gen/renpy.display.matrix.c
|
||||
renpy.display.render gen/renpy.display.render.c
|
||||
renpy.display.accelerator gen/renpy.display.accelerator.c
|
||||
renpy.display.quaternion gen/renpy.display.quaternion.c
|
||||
renpy.uguu.gl gen/renpy.uguu.gl.c
|
||||
renpy.uguu.uguu gen/renpy.uguu.uguu.c
|
||||
renpy.gl.gldraw gen/renpy.gl.gldraw.c
|
||||
renpy.gl.gltexture gen/renpy.gl.gltexture.c
|
||||
renpy.gl.glenviron_shader gen/renpy.gl.glenviron_shader.c
|
||||
renpy.gl.glrtt_copy gen/renpy.gl.glrtt_copy.c
|
||||
renpy.gl.glrtt_fbo gen/renpy.gl.glrtt_fbo.c
|
||||
renpy.gl2.gl2mesh gen/renpy.gl2.gl2mesh.c
|
||||
renpy.gl2.gl2mesh2 gen/renpy.gl2.gl2mesh2.c
|
||||
renpy.gl2.gl2mesh3 gen/renpy.gl2.gl2mesh3.c
|
||||
renpy.gl2.gl2polygon gen/renpy.gl2.gl2polygon.c
|
||||
renpy.gl2.gl2model gen/renpy.gl2.gl2model.c
|
||||
renpy.gl2.gl2draw gen/renpy.gl2.gl2draw.c
|
||||
renpy.gl2.gl2texture gen/renpy.gl2.gl2texture.c
|
||||
renpy.gl2.gl2shader gen/renpy.gl2.gl2shader.c
|
||||
renpy.gl2.live2dmodel gen/renpy.gl2.live2dmodel.c
|
||||
renpy.text.textsupport gen/renpy.text.textsupport.c
|
||||
renpy.text.texwrap gen/renpy.text.texwrap.c
|
||||
renpy.text.ftfont gen/renpy.text.ftfont.c ftsupport.c ttgsubtable.c
|
||||
renpy.text.hbfont gen/renpy.text.hbfont.c
|
||||
@@ -1 +0,0 @@
|
||||
_renpytfd gen/_renpytfd.c tinyfiledialogs/tinyfiledialogs.c
|
||||
-219
@@ -1,219 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
|
||||
# Copyright 2004-2024 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 print_function
|
||||
|
||||
import platform
|
||||
import sys
|
||||
import os
|
||||
import subprocess
|
||||
|
||||
import future
|
||||
|
||||
# Change to the directory containing this file.
|
||||
BASE = os.path.abspath(os.path.dirname(sys.argv[0]))
|
||||
os.chdir(BASE)
|
||||
|
||||
# Create the gen directory if it doesn't exist.
|
||||
try:
|
||||
os.makedirs("gen")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Generate styles.
|
||||
import generate_styles
|
||||
generate_styles.generate()
|
||||
|
||||
# If RENPY_CC or RENPY_LD are in the environment, and CC or LD are not, use them.
|
||||
def setup_env(name):
|
||||
renpy_name = "RENPY_" + name
|
||||
if (renpy_name in os.environ) and (name not in os.environ):
|
||||
os.environ[name] = os.environ[renpy_name]
|
||||
|
||||
|
||||
setup_env("CC")
|
||||
setup_env("LD")
|
||||
setup_env("CXX")
|
||||
|
||||
import setuplib
|
||||
from setuplib import android, ios, emscripten, raspi, include, library, cython, cmodule, copyfile, find_unnecessary_gen, generate_all_cython, PY2
|
||||
|
||||
# These control the level of optimization versus debugging.
|
||||
setuplib.extra_compile_args = [ "-Wno-unused-function" ]
|
||||
setuplib.extra_link_args = [ ]
|
||||
|
||||
# Detect win32.
|
||||
if platform.win32_ver()[0]:
|
||||
windows = True
|
||||
setuplib.extra_compile_args.append("-fno-strict-aliasing")
|
||||
tfd_libs = [ "comdlg32", "ole32" ]
|
||||
|
||||
else:
|
||||
windows = False
|
||||
tfd_libs = [ ]
|
||||
|
||||
if raspi:
|
||||
setuplib.extra_compile_args.append("-DRASPBERRY_PI")
|
||||
|
||||
include("zlib.h")
|
||||
include("png.h")
|
||||
include("SDL.h", directory="SDL2")
|
||||
include("ft2build.h")
|
||||
include("freetype/freetype.h", directory="freetype2", optional=True) or include("freetype.h", directory="freetype2") # type: ignore
|
||||
include("libavutil/avstring.h", directory="ffmpeg", optional=True) or include("libavutil/avstring.h") # type: ignore
|
||||
include("libavformat/avformat.h", directory="ffmpeg", optional=True) or include("libavformat/avformat.h") # type: ignore
|
||||
include("libavcodec/avcodec.h", directory="ffmpeg", optional=True) or include("libavcodec/avcodec.h") # type: ignore
|
||||
include("libswscale/swscale.h", directory="ffmpeg", optional=True) or include("libswscale/swscale.h") # type: ignore
|
||||
include("GL/glew.h")
|
||||
include("pygame_sdl2/pygame_sdl2.h", directory="python{}.{}".format(sys.version_info.major, sys.version_info.minor))
|
||||
include("hb.h", directory="harfbuzz")
|
||||
|
||||
library("SDL2")
|
||||
library("png")
|
||||
library("avformat")
|
||||
library("avcodec")
|
||||
library("avutil")
|
||||
has_avresample = library("avresample", optional=True)
|
||||
has_swresample = library("swresample", optional=True)
|
||||
has_swscale = library("swscale", optional=True)
|
||||
library("freetype")
|
||||
library("z")
|
||||
has_libglew = library("GLEW", optional=True)
|
||||
has_libglew32 = library("glew32", optional=True)
|
||||
|
||||
if android:
|
||||
sdl = [ 'SDL2', 'GLESv2', 'log' ]
|
||||
png = 'png16'
|
||||
else:
|
||||
sdl = [ 'SDL2' ]
|
||||
png = 'png'
|
||||
|
||||
cubism = os.environ.get("CUBISM", None)
|
||||
if cubism:
|
||||
setuplib.include_dirs.append("{}/Core/include".format(cubism))
|
||||
|
||||
# Modules directory.
|
||||
cython(
|
||||
"_renpy",
|
||||
[ "IMG_savepng.c", "core.c" ],
|
||||
sdl + [ png, 'z', 'm' ])
|
||||
|
||||
cython("_renpybidi", [ "renpybidicore.c" ], [ "fribidi" ])
|
||||
|
||||
if not (android or ios or emscripten):
|
||||
cython("_renpytfd", [ "tinyfiledialogs/tinyfiledialogs.c" ], libs=tfd_libs)
|
||||
|
||||
# Sound.
|
||||
|
||||
sound = [ "avformat", "avcodec", "avutil", "z" ]
|
||||
macros = [ ]
|
||||
|
||||
if has_swresample:
|
||||
sound.insert(3, "swresample")
|
||||
|
||||
if has_avresample:
|
||||
sound.insert(0, "avresample")
|
||||
macros.append(("HAS_RESAMPLE", 1))
|
||||
|
||||
if has_swscale:
|
||||
sound.insert(0, "swscale")
|
||||
|
||||
cython(
|
||||
"renpy.audio.renpysound",
|
||||
[ "renpysound_core.c", "ffmedia.c" ],
|
||||
libs=sdl + sound,
|
||||
define_macros=macros,
|
||||
compile_args=[ "-Wno-deprecated-declarations" ] if ("RENPY_FFMPEG_NO_DEPRECATED_DECLARATIONS" in os.environ) else [ ])
|
||||
|
||||
cython("renpy.audio.filter")
|
||||
|
||||
# renpy
|
||||
cython("renpy.lexersupport")
|
||||
cython("renpy.pydict")
|
||||
cython("renpy.style")
|
||||
|
||||
cython("renpy.encryption")
|
||||
|
||||
# renpy.compat
|
||||
if PY2:
|
||||
cython("renpy.compat.dictviews")
|
||||
|
||||
# renpy.styledata
|
||||
cython("renpy.styledata.styleclass")
|
||||
cython("renpy.styledata.stylesets")
|
||||
|
||||
for p in generate_styles.prefixes:
|
||||
cython("renpy.styledata.style_{}functions".format(p), pyx=setuplib.gen + "/style_{}functions.pyx".format(p))
|
||||
|
||||
# renpy.display
|
||||
cython("renpy.display.matrix")
|
||||
cython("renpy.display.render", libs=[ 'z', 'm' ])
|
||||
cython("renpy.display.accelerator", libs=sdl + [ 'z', 'm' ])
|
||||
cython("renpy.display.quaternion", libs=[ 'm' ])
|
||||
|
||||
cython("renpy.uguu.gl", libs=sdl)
|
||||
cython("renpy.uguu.uguu", libs=sdl)
|
||||
|
||||
cython("renpy.gl.gldraw", libs=sdl)
|
||||
cython("renpy.gl.gltexture", libs=sdl)
|
||||
cython("renpy.gl.glenviron_shader", libs=sdl)
|
||||
cython("renpy.gl.glrtt_copy", libs=sdl)
|
||||
cython("renpy.gl.glrtt_fbo", libs=sdl)
|
||||
|
||||
cython("renpy.gl2.gl2mesh")
|
||||
cython("renpy.gl2.gl2mesh2")
|
||||
cython("renpy.gl2.gl2mesh3")
|
||||
cython("renpy.gl2.gl2polygon")
|
||||
cython("renpy.gl2.gl2model")
|
||||
cython("renpy.gl2.gl2draw", libs=sdl)
|
||||
cython("renpy.gl2.gl2texture", libs=sdl)
|
||||
cython("renpy.gl2.gl2shader", libs=sdl)
|
||||
|
||||
if cubism:
|
||||
cython("renpy.gl2.live2dmodel", libs=sdl)
|
||||
|
||||
# renpy.text
|
||||
cython("renpy.text.textsupport")
|
||||
cython("renpy.text.texwrap")
|
||||
|
||||
cython(
|
||||
"renpy.text.ftfont",
|
||||
[ "ftsupport.c", "ttgsubtable.c" ],
|
||||
libs=sdl + [ 'freetype', 'z', 'm' ])
|
||||
|
||||
if not (PY2 and emscripten):
|
||||
|
||||
cython(
|
||||
"renpy.text.hbfont",
|
||||
[ "ftsupport.c" ],
|
||||
libs=sdl + [ 'harfbuzz', 'freetype', 'z', 'm' ])
|
||||
|
||||
generate_all_cython()
|
||||
find_unnecessary_gen()
|
||||
|
||||
# Figure out the version, and call setup.
|
||||
sys.path.insert(0, '..')
|
||||
|
||||
import renpy
|
||||
|
||||
setuplib.setup("Ren'Py", renpy.version[7:].rstrip('un')) # @UndefinedVariable
|
||||
+29
-4
@@ -1,9 +1,9 @@
|
||||
[tool.pyright]
|
||||
|
||||
include = [
|
||||
"*.py",
|
||||
"renpy/",
|
||||
"module/"
|
||||
include = [
|
||||
"*.py",
|
||||
"renpy/",
|
||||
"src/"
|
||||
]
|
||||
|
||||
exclude = [
|
||||
@@ -21,3 +21,28 @@ reportOptionalIterable = false
|
||||
reportOptionalContextManager = false
|
||||
reportOptionalOperand = false
|
||||
reportMissingModuleSource = false
|
||||
|
||||
|
||||
[tool.cyright]
|
||||
include = [
|
||||
"*.py",
|
||||
"renpy/",
|
||||
"src/"
|
||||
]
|
||||
|
||||
exclude = [
|
||||
"module/build/",
|
||||
]
|
||||
|
||||
ignore = [
|
||||
"renpycoverage.py"
|
||||
]
|
||||
|
||||
reportGeneralTypeIssues = false
|
||||
reportOptionalSubscript = false
|
||||
reportOptionalMemberAccess = false
|
||||
reportOptionalCall = false
|
||||
reportOptionalIterable = false
|
||||
reportOptionalContextManager = false
|
||||
reportOptionalOperand = false
|
||||
reportMissingModuleSource = false
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
# This file is part of Ren'Py. The license below applies to Ren'Py only.
|
||||
# Games and other projects that use Ren'Py may use a different license.
|
||||
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
|
||||
+201
-198
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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,60 +22,90 @@
|
||||
# This file ensures that renpy packages will be imported in the right
|
||||
# order.
|
||||
|
||||
from __future__ import division, absolute_import, with_statement, print_function, unicode_literals
|
||||
from typing import Any
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any, NamedTuple
|
||||
import sys
|
||||
import os
|
||||
import types
|
||||
import site
|
||||
|
||||
# Set up the hook for any renpy __init__ modules to import binary modules from
|
||||
# a libexec directory if it available.
|
||||
# This is relevant only for development RenPy itself, when compiled binaries
|
||||
# are stored in the libexec directory.
|
||||
try:
|
||||
import _renpy # type: ignore
|
||||
|
||||
if getattr(_renpy, "__file__", "built-in") != "built-in":
|
||||
import importlib.util
|
||||
|
||||
libexec : str = os.path.dirname(_renpy.__file__)
|
||||
|
||||
class _LibExecFinder:
|
||||
def __init__(self):
|
||||
self.in_find_spec: bool = False
|
||||
|
||||
def find_spec(self, fullname: str, path, target=None, /):
|
||||
if not fullname.startswith("renpy."):
|
||||
return None
|
||||
|
||||
if self.in_find_spec:
|
||||
return None
|
||||
|
||||
self.in_find_spec = True
|
||||
|
||||
try:
|
||||
spec = importlib.util.find_spec(fullname)
|
||||
finally:
|
||||
self.in_find_spec = False
|
||||
|
||||
if spec is None:
|
||||
return None
|
||||
|
||||
# Is a package.
|
||||
if spec.submodule_search_locations is not None:
|
||||
name = fullname.split(".")
|
||||
spec.submodule_search_locations.append(os.path.join(libexec, *name))
|
||||
|
||||
return spec
|
||||
|
||||
sys.meta_path.insert(0, _LibExecFinder())
|
||||
|
||||
# Add the libexec directory to this module.
|
||||
try:
|
||||
__spec__.submodule_search_locations.append(os.path.join(libexec, "renpy"))
|
||||
__path__ = list(__spec__.submodule_search_locations)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
# All imports should go below renpy.compat.
|
||||
import renpy.compat.pickle as pickle
|
||||
|
||||
# Initial import of the __main__ module. This gets replaced in renpy.py
|
||||
# whatever that module has been imported as.
|
||||
import __main__
|
||||
|
||||
# All imports should go below renpy.compat.
|
||||
|
||||
# Backup object, as it'll be overwritten when renpy.object is imported.
|
||||
_object = object # type: ignore
|
||||
|
||||
def update_path():
|
||||
"""
|
||||
Update the __path__ of package, to import binary modules from a libexec
|
||||
directory.
|
||||
"""
|
||||
import sys
|
||||
import os.path
|
||||
|
||||
name = sys._getframe(1).f_globals["__name__"]
|
||||
package = sys.modules[name]
|
||||
name = name.split(".")
|
||||
|
||||
try:
|
||||
import _renpy
|
||||
if hasattr(_renpy, '__file__') and _renpy.__file__ != "built-in":
|
||||
libexec = os.path.dirname(_renpy.__file__)
|
||||
package.__path__.append(os.path.join(libexec, *name))
|
||||
except ImportError:
|
||||
return
|
||||
|
||||
|
||||
from renpy.compat import PY2, basestring, bchr, bord, chr, open, pystr, range, round, str, tobytes, unicode # *
|
||||
|
||||
|
||||
update_path()
|
||||
|
||||
import renpy.compat.pickle as pickle
|
||||
|
||||
import sys
|
||||
import os
|
||||
import copy
|
||||
import types
|
||||
import site
|
||||
from collections import namedtuple
|
||||
|
||||
################################################################################
|
||||
# Version information
|
||||
################################################################################
|
||||
|
||||
# Version numbers.
|
||||
official: bool
|
||||
nightly: bool
|
||||
version_name: str
|
||||
version: str
|
||||
try:
|
||||
from renpy.vc_version import official, nightly, version_name, version
|
||||
from renpy.vc_version import ( # type: ignore
|
||||
official,
|
||||
nightly,
|
||||
version_name,
|
||||
version,
|
||||
)
|
||||
|
||||
except ImportError:
|
||||
import renpy.versions
|
||||
version_dict = renpy.versions.get_version()
|
||||
@@ -87,7 +117,13 @@ except ImportError:
|
||||
|
||||
official = official and getattr(site, "renpy_build_official", False)
|
||||
|
||||
VersionTuple = namedtuple("VersionTuple", ["major", "minor", "patch", "commit"])
|
||||
|
||||
class VersionTuple(NamedTuple):
|
||||
major: int
|
||||
minor: int
|
||||
patch: int
|
||||
commit: int
|
||||
|
||||
version_tuple = VersionTuple(*(int(i) for i in version.split(".")))
|
||||
|
||||
# A string giving the version number only (8.0.1.123), with a suffix if needed.
|
||||
@@ -102,68 +138,31 @@ elif nightly:
|
||||
version = "Ren'Py " + version_only
|
||||
|
||||
# Other versions.
|
||||
script_version = 5003000
|
||||
savegame_suffix = "-LT1.save"
|
||||
bytecode_version = 1
|
||||
script_version: int = 5003000
|
||||
savegame_suffix: str = "-LT1.save"
|
||||
bytecode_version: int = 1
|
||||
|
||||
################################################################################
|
||||
# Platform Information
|
||||
################################################################################
|
||||
|
||||
# Information about the platform we're running on. We break the platforms
|
||||
# up into 5 groups - windows-like, mac-like, linux-like, android-like,
|
||||
# and ios-like.
|
||||
windows = False
|
||||
macintosh = False
|
||||
linux = False
|
||||
android = False
|
||||
ios = False
|
||||
emscripten = False
|
||||
# up into 6 groups - windows-like, mac-like, linux-like, android-like,
|
||||
# ios-like and web (aka. emscripten).
|
||||
windows: bool = False
|
||||
macintosh: bool = False
|
||||
linux: bool = False
|
||||
android: bool = False
|
||||
ios: bool = False
|
||||
emscripten: bool = False
|
||||
|
||||
# Should we enable experimental features and debugging?
|
||||
experimental = "RENPY_EXPERIMENTAL" in os.environ
|
||||
|
||||
import platform
|
||||
|
||||
|
||||
def get_windows_version():
|
||||
"""
|
||||
When called on windows, returns the windows version.
|
||||
"""
|
||||
|
||||
import ctypes
|
||||
|
||||
class OSVERSIONINFOEXW(ctypes.Structure):
|
||||
_fields_ = [('dwOSVersionInfoSize', ctypes.c_ulong),
|
||||
('dwMajorVersion', ctypes.c_ulong),
|
||||
('dwMinorVersion', ctypes.c_ulong),
|
||||
('dwBuildNumber', ctypes.c_ulong),
|
||||
('dwPlatformId', ctypes.c_ulong),
|
||||
('szCSDVersion', ctypes.c_wchar * 128),
|
||||
('wServicePackMajor', ctypes.c_ushort),
|
||||
('wServicePackMinor', ctypes.c_ushort),
|
||||
('wSuiteMask', ctypes.c_ushort),
|
||||
('wProductType', ctypes.c_byte),
|
||||
('wReserved', ctypes.c_byte)]
|
||||
|
||||
try:
|
||||
|
||||
os_version = OSVERSIONINFOEXW() # type: ignore
|
||||
os_version.dwOSVersionInfoSize = ctypes.sizeof(os_version)
|
||||
retcode = ctypes.windll.Ntdll.RtlGetVersion(ctypes.byref(os_version)) # type: ignore
|
||||
|
||||
# Om failure, assume we have a newer version of windows
|
||||
if retcode != 0:
|
||||
return (10, 0)
|
||||
|
||||
return (os_version.dwMajorVersion, os_version.dwMinorVersion) # type: ignore
|
||||
|
||||
except Exception:
|
||||
return (10, 0)
|
||||
|
||||
|
||||
if platform.win32_ver()[0]:
|
||||
windows = get_windows_version()
|
||||
windows = True
|
||||
elif os.environ.get("RENPY_PLATFORM", "").startswith("ios"):
|
||||
ios = True
|
||||
elif platform.mac_ver()[0]:
|
||||
@@ -175,28 +174,28 @@ elif sys.platform == 'emscripten' or "RENPY_EMSCRIPTEN" in os.environ:
|
||||
else:
|
||||
linux = True
|
||||
|
||||
arch = os.environ.get("RENPY_PLATFORM", "unknown-unknown-unknown").rpartition("-")[2]
|
||||
arch: str = os.environ.get("RENPY_PLATFORM", "unknown-unknown-unknown").rpartition("-")[2]
|
||||
|
||||
# A flag that's true if we're on a smartphone or tablet-like platform.
|
||||
mobile = android or ios or emscripten
|
||||
mobile: bool = android or ios or emscripten
|
||||
|
||||
# A flag that's set to true if the game directory is bundled inside a mac app.
|
||||
macapp = False
|
||||
macapp: bool = False
|
||||
|
||||
################################################################################
|
||||
# Backup Data for Reload
|
||||
################################################################################
|
||||
|
||||
# True if we're done with safe mode checks.
|
||||
safe_mode_checked = False
|
||||
safe_mode_checked: bool = False
|
||||
|
||||
# True if autoreload mode is enabled. This has to live here, because it
|
||||
# needs to survive through an utter restart.
|
||||
autoreload = False
|
||||
autoreload: bool = False
|
||||
|
||||
# A dict that persists through utter restarts. Accessible to all code as
|
||||
# renpy.session.
|
||||
session = { }
|
||||
session: dict[str, Any] = {}
|
||||
|
||||
# A list of modules beginning with "renpy" that we don't want
|
||||
# to backup.
|
||||
@@ -223,7 +222,6 @@ backup_blacklist = {
|
||||
"renpy.test.testmouse",
|
||||
"renpy.test.testparser",
|
||||
"renpy.gl2",
|
||||
"renpy.gl",
|
||||
"renpycoverage",
|
||||
}
|
||||
|
||||
@@ -243,6 +241,7 @@ name_blacklist = {
|
||||
"renpy.savelocation.disk_lock",
|
||||
"renpy.character.TAG_RE",
|
||||
"renpy.display.im.cache",
|
||||
"renpy.display.render.main_thread",
|
||||
"renpy.display.render.blit_lock",
|
||||
"renpy.display.render.IDENTITY",
|
||||
"renpy.loader.auto_lock",
|
||||
@@ -253,10 +252,13 @@ name_blacklist = {
|
||||
"renpy.persistent.MP_instances",
|
||||
"renpy.exports.sdl_dll",
|
||||
"renpy.sl2.slast.serial",
|
||||
"renpy.gl2.assimp.loader",
|
||||
"renpy.gl2.assimp.loader_lock",
|
||||
"renpy.gl2.gl2draw.default_position",
|
||||
}
|
||||
|
||||
class Backup(_object):
|
||||
|
||||
class Backup:
|
||||
"""
|
||||
This represents a backup of all of the fields in the python modules
|
||||
comprising Ren'Py, shortly after they were imported.
|
||||
@@ -278,6 +280,7 @@ class Backup(_object):
|
||||
# A map from module to the set of names in that module.
|
||||
self.names = { }
|
||||
|
||||
def backup(self):
|
||||
for m in sys.modules.values():
|
||||
if m is None:
|
||||
continue
|
||||
@@ -357,14 +360,14 @@ class Backup(_object):
|
||||
|
||||
|
||||
# A backup of the Ren'Py modules after initial import.
|
||||
backup = None
|
||||
backup = Backup()
|
||||
|
||||
################################################################################
|
||||
# Import
|
||||
################################################################################
|
||||
|
||||
|
||||
def plog(level, even, *args):
|
||||
def plog(depth, event, *args):
|
||||
"""
|
||||
Empty version of renpy.plog that is replaced by the real implementation
|
||||
in import_all.
|
||||
@@ -383,12 +386,12 @@ def import_all():
|
||||
# Note: If we add a new module, it should be added at the bottom of this file so it shows up in
|
||||
# code analysis.
|
||||
|
||||
import renpy # @UnresolvedImport
|
||||
import renpy
|
||||
|
||||
import renpy.config
|
||||
import renpy.log
|
||||
|
||||
import renpy.arguments # @UnresolvedImport
|
||||
import renpy.arguments
|
||||
|
||||
import renpy.compat.fixes
|
||||
|
||||
@@ -396,7 +399,7 @@ def import_all():
|
||||
|
||||
import renpy.debug
|
||||
|
||||
# Should probably be early, as we will add it as a base to serialized things.
|
||||
# Should probably be early, as we will add these as a base to serialized things.
|
||||
import renpy.object
|
||||
|
||||
import renpy.game
|
||||
@@ -405,14 +408,12 @@ def import_all():
|
||||
# Adds in the Ren'Py loader.
|
||||
import renpy.loader
|
||||
|
||||
if not PY2:
|
||||
import renpy.py3analysis
|
||||
else:
|
||||
import renpy.py2analysis
|
||||
|
||||
import renpy.pyanalysis
|
||||
import renpy.parameter
|
||||
sys.modules["renpy.py3analysis"] = renpy.pyanalysis
|
||||
|
||||
import renpy.astsupport
|
||||
|
||||
import renpy.parameter
|
||||
import renpy.ast
|
||||
import renpy.atl
|
||||
import renpy.curry
|
||||
@@ -420,6 +421,7 @@ def import_all():
|
||||
import renpy.easy
|
||||
import renpy.encryption
|
||||
import renpy.execution
|
||||
import renpy.tokenizer
|
||||
import renpy.lexer
|
||||
import renpy.loadsave
|
||||
import renpy.savelocation
|
||||
@@ -438,14 +440,14 @@ def import_all():
|
||||
import renpy.versions
|
||||
|
||||
global plog
|
||||
plog = renpy.performance.log # type:ignore
|
||||
plog = renpy.performance.log
|
||||
|
||||
import renpy.styledata
|
||||
|
||||
import renpy.style
|
||||
renpy.styledata.import_style_functions()
|
||||
|
||||
sys.modules[pystr('renpy.styleclass')] = renpy.style
|
||||
sys.modules['renpy.styleclass'] = renpy.style
|
||||
|
||||
import renpy.substitutions
|
||||
import renpy.translation
|
||||
@@ -477,9 +479,8 @@ def import_all():
|
||||
import renpy.text.extras
|
||||
import renpy.text.shader
|
||||
|
||||
sys.modules[pystr('renpy.display.text')] = renpy.text.text
|
||||
sys.modules['renpy.display.text'] = renpy.text.text
|
||||
|
||||
import renpy.gl
|
||||
import renpy.gl2
|
||||
|
||||
import renpy.display.layout
|
||||
@@ -550,6 +551,7 @@ def import_all():
|
||||
import renpy.gl2.gl2shader
|
||||
import renpy.gl2.gl2texture
|
||||
import renpy.gl2.live2d
|
||||
import renpy.gl2.assimp
|
||||
|
||||
import renpy.minstore
|
||||
import renpy.defaultstore
|
||||
@@ -566,13 +568,10 @@ def import_all():
|
||||
|
||||
global six
|
||||
import six
|
||||
sys.modules[pystr('renpy.six')] = six
|
||||
sys.modules['renpy.six'] = six
|
||||
|
||||
# Back up the Ren'Py modules.
|
||||
|
||||
global backup
|
||||
|
||||
backup = Backup()
|
||||
backup.backup()
|
||||
|
||||
post_import()
|
||||
|
||||
@@ -583,7 +582,7 @@ def post_import():
|
||||
of various modules.
|
||||
"""
|
||||
|
||||
import renpy # @UnresolvedImport
|
||||
import renpy
|
||||
|
||||
# Create the store.
|
||||
renpy.python.create_store("store")
|
||||
@@ -595,9 +594,13 @@ def post_import():
|
||||
sys.modules['renpy.store'] = sys.modules['store']
|
||||
|
||||
import subprocess
|
||||
sys.modules[pystr('renpy.subprocess')] = subprocess
|
||||
sys.modules['renpy.subprocess'] = subprocess
|
||||
|
||||
for k, v in renpy.defaultstore.__dict__.items():
|
||||
|
||||
if k in ("__all__", "__name__", "__doc__", "__package__", "__loader__", "__spec__", "__file__", "__cached__"):
|
||||
continue
|
||||
|
||||
renpy.store.__dict__.setdefault(k, v) # type: ignore
|
||||
|
||||
renpy.store.eval = renpy.defaultstore.eval # type: ignore
|
||||
@@ -618,9 +621,6 @@ def reload_all():
|
||||
returned.
|
||||
"""
|
||||
|
||||
# if mobile:
|
||||
# raise Exception("Reloading is not supported on mobile platforms.")
|
||||
|
||||
import renpy
|
||||
|
||||
# Quit audio.
|
||||
@@ -666,7 +666,7 @@ def reload_all():
|
||||
del sys.modules[i]
|
||||
|
||||
# Restore the state of all modules from backup.
|
||||
backup.restore() # type: ignore
|
||||
backup.restore()
|
||||
|
||||
renpy.python.old_py_compile_cache = py_compile_cache
|
||||
|
||||
@@ -677,76 +677,79 @@ def reload_all():
|
||||
# Re-initialize the importer.
|
||||
renpy.loader.init_importer()
|
||||
|
||||
if 1 == 0:
|
||||
store = None # type: Any
|
||||
|
||||
# renpy.store and sub-modules can have names of any type inside.
|
||||
store: Any = None
|
||||
|
||||
|
||||
# Generated by scripts/relative_imports.py, do not edit below this line.
|
||||
if 1 == 0:
|
||||
from . import add_from
|
||||
from . import arguments
|
||||
from . import ast
|
||||
from . import atl
|
||||
from . import audio
|
||||
from . import bootstrap
|
||||
from . import character
|
||||
from . import color
|
||||
from . import compat
|
||||
from . import config
|
||||
from . import curry
|
||||
from . import debug
|
||||
from . import defaultstore
|
||||
from . import display
|
||||
from . import dump
|
||||
from . import easy
|
||||
from . import editor
|
||||
from . import encryption
|
||||
from . import error
|
||||
from . import execution
|
||||
from . import exports
|
||||
from . import game
|
||||
from . import gl
|
||||
from . import gl2
|
||||
from . import lexer
|
||||
from . import lexersupport
|
||||
from . import lint
|
||||
from . import loader
|
||||
from . import loadsave
|
||||
from . import log
|
||||
from . import main
|
||||
from . import memory
|
||||
from . import minstore
|
||||
from . import object
|
||||
from . import parameter
|
||||
from . import parser
|
||||
from . import performance
|
||||
from . import persistent
|
||||
from . import preferences
|
||||
from . import py2analysis
|
||||
from . import py3analysis
|
||||
from . import pyanalysis
|
||||
from . import pydict
|
||||
from . import python
|
||||
from . import revertable
|
||||
from . import rollback
|
||||
from . import savelocation
|
||||
from . import savetoken
|
||||
from . import screenlang
|
||||
from . import script
|
||||
from . import scriptedit
|
||||
from . import sl2
|
||||
from . import statements
|
||||
from . import style
|
||||
from . import styledata
|
||||
from . import substitutions
|
||||
from . import test
|
||||
from . import text
|
||||
from . import translation
|
||||
from . import uguu
|
||||
from . import ui
|
||||
from . import update
|
||||
from . import util
|
||||
from . import vc_version
|
||||
from . import versions
|
||||
from . import warp
|
||||
from . import webloader
|
||||
import typing
|
||||
|
||||
if typing.TYPE_CHECKING:
|
||||
from . import add_from as add_from
|
||||
from . import arguments as arguments
|
||||
from . import ast as ast
|
||||
from . import astsupport as astsupport
|
||||
from . import atl as atl
|
||||
from . import audio as audio
|
||||
from . import bootstrap as bootstrap
|
||||
from . import character as character
|
||||
from . import color as color
|
||||
from . import compat as compat
|
||||
from . import config as config
|
||||
from . import cslots as cslots
|
||||
from . import curry as curry
|
||||
from . import debug as debug
|
||||
from . import defaultstore as defaultstore
|
||||
from . import display as display
|
||||
from . import dump as dump
|
||||
from . import easy as easy
|
||||
from . import editor as editor
|
||||
from . import encryption as encryption
|
||||
from . import error as error
|
||||
from . import execution as execution
|
||||
from . import exports as exports
|
||||
from . import game as game
|
||||
from . import gl2 as gl2
|
||||
from . import lexer as lexer
|
||||
from . import lexersupport as lexersupport
|
||||
from . import lint as lint
|
||||
from . import loader as loader
|
||||
from . import loadsave as loadsave
|
||||
from . import log as log
|
||||
from . import main as main
|
||||
from . import memory as memory
|
||||
from . import minstore as minstore
|
||||
from . import object as object
|
||||
from . import parameter as parameter
|
||||
from . import parser as parser
|
||||
from . import performance as performance
|
||||
from . import persistent as persistent
|
||||
from . import preferences as preferences
|
||||
from . import pyanalysis as pyanalysis
|
||||
from . import pydict as pydict
|
||||
from . import python as python
|
||||
from . import revertable as revertable
|
||||
from . import rollback as rollback
|
||||
from . import savelocation as savelocation
|
||||
from . import savetoken as savetoken
|
||||
from . import screenlang as screenlang
|
||||
from . import script as script
|
||||
from . import scriptedit as scriptedit
|
||||
from . import sl2 as sl2
|
||||
from . import statements as statements
|
||||
from . import style as style
|
||||
from . import styledata as styledata
|
||||
from . import substitutions as substitutions
|
||||
from . import test as test
|
||||
from . import text as text
|
||||
from . import tokenizer as tokenizer
|
||||
from . import translation as translation
|
||||
from . import uguu as uguu
|
||||
from . import ui as ui
|
||||
from . import update as update
|
||||
from . import util as util
|
||||
from . import vc_version as vc_version
|
||||
from . import versions as versions
|
||||
from . import warp as warp
|
||||
from . import webloader as webloader
|
||||
|
||||
+33
-36
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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,26 +19,23 @@
|
||||
# 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 division, absolute_import, with_statement, print_function, unicode_literals
|
||||
from renpy.compat import PY2, basestring, bchr, bord, chr, open, pystr, range, round, str, tobytes, unicode # *
|
||||
|
||||
|
||||
|
||||
import collections
|
||||
from collections import defaultdict
|
||||
from pathlib import Path
|
||||
import renpy
|
||||
import os
|
||||
|
||||
# A map from filename to position, target label pairs.
|
||||
missing = collections.defaultdict(list)
|
||||
missing = defaultdict[str, list[tuple[int, str]]](list)
|
||||
|
||||
|
||||
def report_missing(target, filename, position):
|
||||
def report_missing(target: str, filename: str, number: int):
|
||||
"""
|
||||
Reports that the call statement ending at `position` in `filename`
|
||||
is missing a from clause.
|
||||
"""
|
||||
|
||||
missing[filename].append((position, target))
|
||||
missing[filename].append((number, target))
|
||||
|
||||
|
||||
# Labels that we've created while running add_from.
|
||||
@@ -69,44 +66,43 @@ def generate_label(target):
|
||||
return label
|
||||
|
||||
|
||||
def process_file(fn):
|
||||
def process_file(fn: str, full_fn: str):
|
||||
"""
|
||||
Adds missing from clauses to `fn`.
|
||||
"""
|
||||
|
||||
if not os.path.exists(fn):
|
||||
path = Path(full_fn)
|
||||
if not path.exists():
|
||||
return
|
||||
|
||||
if (lines := renpy.scriptedit.ensure_loaded(full_fn)) is None:
|
||||
return
|
||||
|
||||
edits = missing[fn]
|
||||
edits.sort()
|
||||
edits = iter(edits)
|
||||
next_edit, target = next(edits)
|
||||
|
||||
with open(fn, "rb") as f:
|
||||
data = f.read().decode("utf-8")
|
||||
new_lines = []
|
||||
for lineno, line in lines.items():
|
||||
if lineno == next_edit:
|
||||
code = f" from {generate_label(target)}"
|
||||
full_text = line.with_added_code(code)
|
||||
else:
|
||||
full_text = line.full_text
|
||||
|
||||
# How much of the input has been consumed.
|
||||
consumed = 0
|
||||
new_lines.append(full_text)
|
||||
|
||||
# The output.
|
||||
output = u""
|
||||
new_path = path.with_suffix(f"{path.suffix}.new")
|
||||
with new_path.open("w", encoding="utf-8") as f:
|
||||
f.write("\ufeff")
|
||||
f.writelines(new_lines)
|
||||
|
||||
for position, target in edits:
|
||||
output += data[consumed:position]
|
||||
consumed = position
|
||||
bak_path = path.with_suffix(f"{path.suffix}.bak")
|
||||
bak_path.unlink(missing_ok=True)
|
||||
|
||||
output += " from {}".format(generate_label(target))
|
||||
|
||||
output += data[consumed:]
|
||||
|
||||
with open(fn + ".new", "wb") as f:
|
||||
f.write(output.encode("utf-8"))
|
||||
|
||||
try:
|
||||
os.unlink(fn + ".bak")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
os.rename(fn, fn + ".bak")
|
||||
os.rename(fn + ".new", fn)
|
||||
path.rename(bak_path)
|
||||
new_path.rename(path)
|
||||
|
||||
|
||||
def add_from():
|
||||
@@ -114,8 +110,9 @@ def add_from():
|
||||
renpy.arguments.takes_no_arguments("Adds from clauses to call statements that are missing them.")
|
||||
|
||||
for fn in missing:
|
||||
if fn.startswith(renpy.config.gamedir):
|
||||
process_file(fn)
|
||||
full_fn = renpy.parser.unelide_filename(fn)
|
||||
if full_fn.startswith(renpy.config.gamedir):
|
||||
process_file(fn, full_fn)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
# Copyright 2004-2024 Tom Rothamel <pytom@bishoujo.us>
|
||||
# Copyright 2004-2025 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
|
||||
|
||||
+1263
-1013
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user