Merge branch 'efroemling:master' into master

This commit is contained in:
Vishal 2023-07-11 07:20:25 +05:30 committed by GitHub
commit 2974f74e4d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 212 additions and 68 deletions

96
.efrocachemap generated
View File

@ -421,10 +421,10 @@
"build/assets/ba_data/audio/zoeOw.ogg": "https://files.ballistica.net/cache/ba1/74/be/fe45a8417e95b6a2233c51992a26",
"build/assets/ba_data/audio/zoePickup01.ogg": "https://files.ballistica.net/cache/ba1/48/ab/8cddfcde36a750856f3f81dd20c8",
"build/assets/ba_data/audio/zoeScream01.ogg": "https://files.ballistica.net/cache/ba1/2b/46/8aedfa8741090247f04eb9e6df55",
"build/assets/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/7a/57/60b86e6ab02f04afe4af903cf6cb",
"build/assets/ba_data/data/langdata.json": "https://files.ballistica.net/cache/ba1/a1/f9/645b8c7e1e99dd11446bc77005da",
"build/assets/ba_data/data/languages/arabic.json": "https://files.ballistica.net/cache/ba1/83/87/06fc7255ebf8a895ad37d2dfa13d",
"build/assets/ba_data/data/languages/belarussian.json": "https://files.ballistica.net/cache/ba1/57/68/d03a19b9035cfae7cdc5377d889a",
"build/assets/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/25/f1/d88c72fbeeb121340244bc935df4",
"build/assets/ba_data/data/languages/chinese.json": "https://files.ballistica.net/cache/ba1/b6/00/924583b899165757f412eef0dd01",
"build/assets/ba_data/data/languages/chinesetraditional.json": "https://files.ballistica.net/cache/ba1/50/4c/4fb39f065b1a2f0320026a2e1b92",
"build/assets/ba_data/data/languages/croatian.json": "https://files.ballistica.net/cache/ba1/76/65/32c67af5bd0144c2d63cab0516fa",
"build/assets/ba_data/data/languages/czech.json": "https://files.ballistica.net/cache/ba1/f3/ce/219840946cb8f9aa6d3e25927ab3",
@ -434,30 +434,30 @@
"build/assets/ba_data/data/languages/esperanto.json": "https://files.ballistica.net/cache/ba1/0e/39/7cfa5f3fb8cef5f4a64f21cda880",
"build/assets/ba_data/data/languages/filipino.json": "https://files.ballistica.net/cache/ba1/cb/49/1739273c68c82cebca0aee16d6c9",
"build/assets/ba_data/data/languages/french.json": "https://files.ballistica.net/cache/ba1/51/89/e01389f8153497b56fbf0fa069c2",
"build/assets/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/22/a4/452043a401252ca66b703ce5d4aa",
"build/assets/ba_data/data/languages/german.json": "https://files.ballistica.net/cache/ba1/54/97/54d2a530d825200c6126be56df5c",
"build/assets/ba_data/data/languages/gibberish.json": "https://files.ballistica.net/cache/ba1/23/6f/8547ba09722b7c7f5b8333986984",
"build/assets/ba_data/data/languages/greek.json": "https://files.ballistica.net/cache/ba1/a6/5d/78f912e9a89f98de004405167a6a",
"build/assets/ba_data/data/languages/hindi.json": "https://files.ballistica.net/cache/ba1/88/ee/0cda537bab9ac827def5e236fe1a",
"build/assets/ba_data/data/languages/hungarian.json": "https://files.ballistica.net/cache/ba1/00/ba/cf1b8bb9f7914f64647d4665b0a8",
"build/assets/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/0d/59/18149137b31721efe131d89689c6",
"build/assets/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/ac/03/2e4a2322a96e3d6d5e2aa3ae327d",
"build/assets/ba_data/data/languages/indonesian.json": "https://files.ballistica.net/cache/ba1/58/3b/ae1ecc04375cee089a82359110b7",
"build/assets/ba_data/data/languages/italian.json": "https://files.ballistica.net/cache/ba1/67/44/40ada7b8e76adceb2129d7668df6",
"build/assets/ba_data/data/languages/korean.json": "https://files.ballistica.net/cache/ba1/bd/c1/3f8632adda5517059323d928f192",
"build/assets/ba_data/data/languages/malay.json": "https://files.ballistica.net/cache/ba1/83/25/62ce997fc70704b9234c95fb2e38",
"build/assets/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/f4/1d/3524c00d2e8e8c4613ebdf1493b4",
"build/assets/ba_data/data/languages/persian.json": "https://files.ballistica.net/cache/ba1/0e/46/0cb71876e02d361e11db64640831",
"build/assets/ba_data/data/languages/polish.json": "https://files.ballistica.net/cache/ba1/a6/a7/4a9a289fa1b97847c9a2578c112b",
"build/assets/ba_data/data/languages/portuguese.json": "https://files.ballistica.net/cache/ba1/99/b2/7c598c90fd522132af3536aef0ee",
"build/assets/ba_data/data/languages/romanian.json": "https://files.ballistica.net/cache/ba1/ae/eb/dd54f65939c2facc6ac50c117826",
"build/assets/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/9a/c0/a2ff20e53f7d22037a9c8211a362",
"build/assets/ba_data/data/languages/russian.json": "https://files.ballistica.net/cache/ba1/aa/99/f9f597787fe4e09c8ab53fe2e081",
"build/assets/ba_data/data/languages/serbian.json": "https://files.ballistica.net/cache/ba1/d7/45/2dd72ac0e51680cb39b5ebaa1c69",
"build/assets/ba_data/data/languages/slovak.json": "https://files.ballistica.net/cache/ba1/27/96/2d53dc3f7dd4e877cd40faafeeef",
"build/assets/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/f2/7a/b0eb0a0b68e25d3a3fb1ec436645",
"build/assets/ba_data/data/languages/spanish.json": "https://files.ballistica.net/cache/ba1/bd/5e/80c74f96bb50d270396d437d6750",
"build/assets/ba_data/data/languages/swedish.json": "https://files.ballistica.net/cache/ba1/77/d6/71f10613291ebf9c71da66f18a18",
"build/assets/ba_data/data/languages/tamil.json": "https://files.ballistica.net/cache/ba1/c7/fc/5ed7bd686839ec1a867763248cf9",
"build/assets/ba_data/data/languages/thai.json": "https://files.ballistica.net/cache/ba1/33/f6/3753c9af9a5b238d229a0bf23fbc",
"build/assets/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/e2/6a/07fa9a25878ee89807ce9962edf9",
"build/assets/ba_data/data/languages/turkish.json": "https://files.ballistica.net/cache/ba1/0a/97/f1f948f6587ea7d40b639aba67ce",
"build/assets/ba_data/data/languages/ukrainian.json": "https://files.ballistica.net/cache/ba1/97/4a/399422e3061fdd82f66591283397",
"build/assets/ba_data/data/languages/venetian.json": "https://files.ballistica.net/cache/ba1/e4/74/5c85bc56487bb715712c8b90a1eb",
"build/assets/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/54/44/fd36756645564c42bb597de6377e",
"build/assets/ba_data/data/languages/vietnamese.json": "https://files.ballistica.net/cache/ba1/92/1c/d1e50f60fe3e101f246e172750ba",
"build/assets/ba_data/data/maps/big_g.json": "https://files.ballistica.net/cache/ba1/1d/d3/01d490643088a435ce75df971054",
"build/assets/ba_data/data/maps/bridgit.json": "https://files.ballistica.net/cache/ba1/6a/ea/74805f4880cc11237c5734a24422",
"build/assets/ba_data/data/maps/courtyard.json": "https://files.ballistica.net/cache/ba1/4b/83/6554c8949bcd2ae382f5e3c1a9cc",
@ -950,7 +950,7 @@
"build/assets/ba_data/python-site-packages/certifi/__main__.py": "https://files.ballistica.net/cache/ba1/ef/02/e73f8581609df189a9f61aca365b",
"build/assets/ba_data/python-site-packages/certifi/cacert.pem": "https://files.ballistica.net/cache/ba1/6a/c2/9a6bccca11cd2ed7e16e27dfccec",
"build/assets/ba_data/python-site-packages/certifi/core.py": "https://files.ballistica.net/cache/ba1/1b/50/5388f1475fabd1b60031f985271c",
"build/assets/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/11/61/88cec81052958f4f98239d4bf3ca",
"build/assets/ba_data/python-site-packages/typing_extensions.py": "https://files.ballistica.net/cache/ba1/08/4d/93bb609d798a3930dfb5e25eba59",
"build/assets/ba_data/python-site-packages/yaml/__init__.py": "https://files.ballistica.net/cache/ba1/55/7c/37ea8dbd4fa4d6dac97f399b6fdd",
"build/assets/ba_data/python-site-packages/yaml/composer.py": "https://files.ballistica.net/cache/ba1/ce/f8/71e1f5f99ba2a7c44941b70afb06",
"build/assets/ba_data/python-site-packages/yaml/constructor.py": "https://files.ballistica.net/cache/ba1/8a/15/e361e34b79491c81553bb3534062",
@ -1535,10 +1535,10 @@
"build/assets/ba_data/textures/fontExtras.dds": "https://files.ballistica.net/cache/ba1/7a/b1/1df1b3a3daa651dfad34219b89f5",
"build/assets/ba_data/textures/fontExtras.ktx": "https://files.ballistica.net/cache/ba1/30/c3/c8ca2cdf1209ff177017bb10f0a8",
"build/assets/ba_data/textures/fontExtras.pvr": "https://files.ballistica.net/cache/ba1/fd/3b/0bd902c30e4b7aa5fe00e1eec4be",
"build/assets/ba_data/textures/fontExtras2.dds": "https://files.ballistica.net/cache/ba1/82/c4/9af5f739a4be74084c8b98a892b0",
"build/assets/ba_data/textures/fontExtras2.ktx": "https://files.ballistica.net/cache/ba1/77/f7/55e108b8b910890c14cd58445d73",
"build/assets/ba_data/textures/fontExtras2.pvr": "https://files.ballistica.net/cache/ba1/f7/ea/f0f444e39269dbe1f2af1bff310b",
"build/assets/ba_data/textures/fontExtras2_preview.png": "https://files.ballistica.net/cache/ba1/f2/7c/50b10075a47e994651f71362c31c",
"build/assets/ba_data/textures/fontExtras2.dds": "https://files.ballistica.net/cache/ba1/18/06/3a12912dadc9528afd90d1cf2369",
"build/assets/ba_data/textures/fontExtras2.ktx": "https://files.ballistica.net/cache/ba1/36/da/7f6cfbfb8d32fb14371de0a8f660",
"build/assets/ba_data/textures/fontExtras2.pvr": "https://files.ballistica.net/cache/ba1/7a/4e/8e64ac05313b1782fb5b958150d0",
"build/assets/ba_data/textures/fontExtras2_preview.png": "https://files.ballistica.net/cache/ba1/f5/bc/05c8c34cb3ff7284e9edab7b8bcd",
"build/assets/ba_data/textures/fontExtras3.dds": "https://files.ballistica.net/cache/ba1/4f/ce/73998583207fd7692a816e3d86b0",
"build/assets/ba_data/textures/fontExtras3.ktx": "https://files.ballistica.net/cache/ba1/13/d6/1e663088bc97c1fa906a46ed5955",
"build/assets/ba_data/textures/fontExtras3.pvr": "https://files.ballistica.net/cache/ba1/56/ba/c0d5f8672f36e1408a1e57cdd3d3",
@ -2024,10 +2024,10 @@
"build/assets/ba_data/textures/powerupCurse.ktx": "https://files.ballistica.net/cache/ba1/1a/ff/b566a1541cd6b8a205c9f9ce0e0d",
"build/assets/ba_data/textures/powerupCurse.pvr": "https://files.ballistica.net/cache/ba1/0f/cf/b698996ed2f3d229a749b6a7c69e",
"build/assets/ba_data/textures/powerupCurse_preview.png": "https://files.ballistica.net/cache/ba1/02/28/6c025525cd062b4628d86c3bc339",
"build/assets/ba_data/textures/powerupHealth.dds": "https://files.ballistica.net/cache/ba1/6c/bb/41de1ad1769a83daaf9cfa002aaa",
"build/assets/ba_data/textures/powerupHealth.ktx": "https://files.ballistica.net/cache/ba1/be/3e/20cf450dfdf91ec942e670a90e7c",
"build/assets/ba_data/textures/powerupHealth.pvr": "https://files.ballistica.net/cache/ba1/96/46/fac09bce61bfc23cc6e4e911925d",
"build/assets/ba_data/textures/powerupHealth_preview.png": "https://files.ballistica.net/cache/ba1/78/25/665d072b231467c4afb9e522f294",
"build/assets/ba_data/textures/powerupHealth.dds": "https://files.ballistica.net/cache/ba1/87/34/f39c75cdee5596e0e778df1df99e",
"build/assets/ba_data/textures/powerupHealth.ktx": "https://files.ballistica.net/cache/ba1/63/83/c4a1b9c69522b8bd10a30087953d",
"build/assets/ba_data/textures/powerupHealth.pvr": "https://files.ballistica.net/cache/ba1/4a/d6/05bba6256986a257c6c2a19ca641",
"build/assets/ba_data/textures/powerupHealth_preview.png": "https://files.ballistica.net/cache/ba1/ab/f8/dcc44e2e3f066fe3829e710f23e1",
"build/assets/ba_data/textures/powerupIceBombs.dds": "https://files.ballistica.net/cache/ba1/fe/b7/9bef011126f00c3c09336cf7bb5e",
"build/assets/ba_data/textures/powerupIceBombs.ktx": "https://files.ballistica.net/cache/ba1/a8/95/ba95b76380c6c155ec941e39afe2",
"build/assets/ba_data/textures/powerupIceBombs.pvr": "https://files.ballistica.net/cache/ba1/14/54/cac99049f66bf3347182aa6e555e",
@ -4068,26 +4068,26 @@
"build/assets/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/2d/ef/5335207d41b21b9823f6805997f1",
"build/assets/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/b0/8a/55e2e77623fe657bea24f223a3ae",
"build/assets/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/86/5b/2af4d1e26a1a8073c89acb06e599",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/cc/c6/e6492f9eeb1c6904ad745abe6eee",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/08/19/389fd56c41b7ecaa5a8ce0030038",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/2e/36/d7de8b609ed2ac99d1e0d5de0ec3",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/68/0d/768d03448e5a5d4531dd1a11ebd9",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/ba/6f/5c4982d5026eb61c97cdd2029b69",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/5f/b0/3fce5a36c251f4090efa8d5c17f6",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/41/76/508f80aa2cad4248be0f644ac577",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/e2/8c/71a04c5829575d085aef4e36a77f",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/7b/54/9ce0ec8bba97ea1f75cd052b1297",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/ab/c8/e638cf97e0f18c247c87c453d017",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/99/45/15b0d8dbbbb3e52cc276648f53d8",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/60/ff/8ad1713b4fbd20d43b3a791095b3",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/96/aa/42b3c8920db0dbded8d76d2d6fd8",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/c2/ed/95e885a5bc785a1e595c74ff76dc",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/6b/fd/47f2cc5db0f479a4889f5548c8af",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/6d/ab/bb8b72e8764292d17803fbecfcb0",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/d3/16/32b28e3f953a28d532cbda4fa0e7",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/3c/81/bb7118b850cc521415a287021c2e",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/ae/31/406d6a632a0d4f227de9679f04b8",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/12/c3/99d9b24b558789690fabaa197a82",
"build/prefab/full/linux_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/59/35/c9ba716b720aedc7d54e9c83fdc4",
"build/prefab/full/linux_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/f8/58/e1200d725edb25877ddb03beb5ea",
"build/prefab/full/linux_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/7b/2f/61d28afa0a9675add2c51e6dfd00",
"build/prefab/full/linux_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/41/b8/6b4a0592bcf8c92aa2d1412a7288",
"build/prefab/full/linux_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/0f/62/44f31d9bc7547754a8c79ec17141",
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/e1/85/b3dd2968bd85c2e0c449fe036111",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/60/89/7d935c2046c494e588ce6761125e",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/06/e4/4a46b2659ff56e018190240de396",
"build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/c4/0d/50883b77f756641fbd80092d35b7",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/34/2f/a6deb8563e4cd29dff8f11c788bb",
"build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/e7/cc/431b21630eb325f068d472dad763",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/b9/b9/33463ca1f078854d2e015df65b66",
"build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/e9/80/b1483328b1ae0876fa63dbde529b",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/9f/19/9ed55ca8ed416273415024a58191",
"build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/d6/08/e08e3380f18c5dd476ad0bf082f3",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/e4/6a/525b520d455f042bff170f663319",
"build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/bb/22/2f948b1a6b5aac27e91f40ee6f06",
"build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/4e/8c/f9b308b586a926bf855dba2e2509",
"build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/4f/22/3a06c12dac1628f0761afb421122",
"build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/b9/3a/e6a05acad4ea2325df5eae6c3fc8",
"build/prefab/lib/linux_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/be/19/b5458933dfc7371d91ecfcd2e06f",
"build/prefab/lib/linux_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/4e/48/123b806cbe6ddb3d9a8368bbb4f8",
"build/prefab/lib/linux_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/be/19/b5458933dfc7371d91ecfcd2e06f",
@ -4104,16 +4104,16 @@
"build/prefab/lib/mac_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/7e/fa/291fd7e935502ced7e99b8c8f7f0",
"build/prefab/lib/mac_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/e1/cb/7e8440699e59e8646da25aa5782b",
"build/prefab/lib/mac_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/7e/fa/291fd7e935502ced7e99b8c8f7f0",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/91/4c/b20cd911b2433714a20ba59cad48",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/af/f0/4c40cb48cca4dea5260eab386c06",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/14/21/faad84cb65e511ae7bc37d251550",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/c8/08/9eccb255c73f2741eec30b7f9fe3",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/57/fa/b7a7684cb6c6acfe6fb2b83baf44",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/5e/19/bf51579c19796fe240183763a7d8",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/21/c8/f3e146692272201d04c292298727",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/66/e3/1759502456fee8c367b316c97c0c",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/de/7c/be80b73558c5ce768b0084926910",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/e5/a1/644901f5d239aeab9fb976f79ffd",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/33/6e/5d5eb648ccb1646eaef4c626caa8",
"build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/7a/1f/24348f323cfe76d907ef9d4b554e",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/95/0b/2bd52e8669d06f0a6729f1c2d8e0",
"build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/a2/41/48a2c40099e3a27f283b3de9d5b5",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/e7/af/912d52ca415fe16b893eb4b92e70",
"build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/d4/63/45858118d88aca3ed4f3bfec9cca",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "https://files.ballistica.net/cache/ba1/f8/85/fed7f2ed98ff2ba271f9dbe3391c",
"src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/48/4b/e6974f0a4d14be8213dc00d971c3",
"src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/f8/cd/3af311ac63147882590123b78318",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "https://files.ballistica.net/cache/ba1/3e/7a/203e2a5d2b5bb42cfe3fd2fe16c2",
"src/ballistica/base/mgen/pyembed/binding_base_app.inc": "https://files.ballistica.net/cache/ba1/c2/f2/cb8d052d76a1f4abe163cab2276e",
"src/ballistica/classic/mgen/pyembed/binding_classic.inc": "https://files.ballistica.net/cache/ba1/3c/eb/412513963f0818ab39c58bf292e3",

View File

@ -422,6 +422,7 @@
<w>cbresults</w>
<w>cbtn</w>
<w>cbtnoffs</w>
<w>cbuf</w>
<w>ccfgs</w>
<w>ccind</w>
<w>ccode</w>
@ -939,6 +940,7 @@
<w>expectedsig</w>
<w>explodable</w>
<w>explodey</w>
<w>explodinary</w>
<w>exportlist</w>
<w>exportoptions</w>
<w>exportoptionspath</w>
@ -1861,6 +1863,7 @@
<w>namecap</w>
<w>namedarg</w>
<w>namel</w>
<w>namepre</w>
<w>nametext</w>
<w>nameu</w>
<w>nameval</w>
@ -2867,6 +2870,7 @@
<w>termcolors</w>
<w>termios</w>
<w>testbuffer</w>
<w>testbuild</w>
<w>testcall</w>
<w>testcallable</w>
<w>testcapi</w>
@ -3190,6 +3194,7 @@
<w>wintdir</w>
<w>wintype</w>
<w>wmsbe</w>
<w>wonkiness</w>
<w>wonkypaths</w>
<w>wonkysuffix</w>
<w>woohoo</w>
@ -3201,6 +3206,7 @@
<w>woutdir</w>
<w>wpath</w>
<w>wprjp</w>
<w>wreadlink</w>
<w>wref</w>
<w>writeauxiliaryfile</w>
<w>writeclasses</w>

View File

@ -1,8 +1,16 @@
### 1.7.22 (build 21154, api 8, 2023-06-28)
### 1.7.22 (build 21159, api 8, 2023-07-10)
- Fixed a very rare race condition when launching threads or sending synchronous
cross-thread messages. This was manifesting as one out of several thousand
server launches hanging.
- Changed health box from a red cross to a green cross (turns out games aren't
supposed to use red crosses for health for legal reasons).
- Cleaned up how Android sets up its OpenGL context; it should be more flexible
with the config formats it allows may might fix rare cases of graphics setup
failing (such as with latest Android emulator for me). Please holler if you
see any graphics wonkiness with this update.
- Added SoK's explodinary icon to the game's custom text drawing because SoK is
awesome.
### 1.7.21 (build 21152, api 8, 2023-06-27)

View File

@ -277,6 +277,7 @@
<w>cbgn</w>
<w>cbresults</w>
<w>cbtnoffs</w>
<w>cbuf</w>
<w>ccdd</w>
<w>ccind</w>
<w>ccontext</w>
@ -562,6 +563,7 @@
<w>expbool</w>
<w>expectedsig</w>
<w>expl</w>
<w>explodinary</w>
<w>exportlist</w>
<w>exporttypestr</w>
<w>expsrc</w>
@ -1071,6 +1073,7 @@
<w>mywidget</w>
<w>namecap</w>
<w>namel</w>
<w>namepre</w>
<w>nameu</w>
<w>nameval</w>
<w>nbuffer</w>
@ -1648,6 +1651,7 @@
<w>templatefs</w>
<w>tempvec</w>
<w>tenum</w>
<w>testbuild</w>
<w>testclinic</w>
<w>testint</w>
<w>testinternalcapi</w>
@ -1841,6 +1845,7 @@
<w>worldspace</w>
<w>woutdir</w>
<w>wprjp</w>
<w>wreadlink</w>
<w>writeauxiliaryfile</w>
<w>wspath</w>
<w>wsroot</w>

View File

@ -28,7 +28,7 @@ if TYPE_CHECKING:
# Build number and version of the ballistica binary we expect to be
# using.
TARGET_BALLISTICA_BUILD = 21154
TARGET_BALLISTICA_BUILD = 21159
TARGET_BALLISTICA_VERSION = '1.7.22'
_g_env_config: EnvConfig | None = None

View File

@ -525,9 +525,9 @@ class EditProfileWindow(bui.Window):
bui.SpecialChar.GAME_CIRCLE_LOGO,
bui.SpecialChar.OUYA_LOGO,
bui.SpecialChar.LOCAL_ACCOUNT,
bui.SpecialChar.ALIBABA_LOGO,
bui.SpecialChar.OCULUS_LOGO,
bui.SpecialChar.NVIDIA_LOGO,
bui.SpecialChar.V2_LOGO,
]
]
)

View File

@ -1259,7 +1259,7 @@ void Assets::InitSpecialChars() {
special_char_strings_[SpecialChar::kTrophy0b] = "\xee\x80\xAE";
special_char_strings_[SpecialChar::kTrophy4] = "\xee\x80\xAF";
special_char_strings_[SpecialChar::kLocalAccount] = "\xee\x80\xB0";
special_char_strings_[SpecialChar::kAlibabaLogo] = "\xee\x80\xB1";
special_char_strings_[SpecialChar::kExplodinaryLogo] = "\xee\x80\xB1";
special_char_strings_[SpecialChar::kFlagUnitedStates] = "\xee\x80\xB2";
special_char_strings_[SpecialChar::kFlagMexico] = "\xee\x80\xB3";

View File

@ -56,18 +56,30 @@ void InputDevice::RequestPlayer() {
last_input_time_millisecs_ =
static_cast<millisecs_t>(g_base->logic->display_time() * 1000.0);
// Tracking down a bug.
BA_PRECONDITION_FATAL(delegate_.Exists());
delegate_->RequestPlayer();
}
// If we're attached to a remote player, ship completed packets every now and
// then.
void InputDevice::Update() { delegate_->Update(); }
void InputDevice::Update() {
// Tracking down a bug.
BA_PRECONDITION_FATAL(delegate_.Exists());
delegate_->Update();
}
auto InputDevice::AttachedToPlayer() const -> bool {
// Tracking down a bug.
BA_PRECONDITION_FATAL(delegate_.Exists());
return delegate_->AttachedToPlayer();
}
void InputDevice::DetachFromPlayer() { delegate_->DetachFromPlayer(); }
void InputDevice::DetachFromPlayer() {
// Tracking down a bug.
BA_PRECONDITION_FATAL(delegate_.Exists());
delegate_->DetachFromPlayer();
}
void InputDevice::UpdateLastInputTime() {
// Keep our own individual time, and also let
@ -83,6 +95,8 @@ void InputDevice::InputCommand(InputType type, float value) {
// Make note that we're being used in some way.
UpdateLastInputTime();
// Tracking down a bug.
BA_PRECONDITION_FATAL(delegate_.Exists());
delegate_->InputCommand(type, value);
}

View File

@ -44,7 +44,10 @@ class InputDeviceDelegate : public Object {
/// An input-device-delegate should never outlive its input_device;
/// our accessor returns a reference to show this does not need
/// to be checked.
auto input_device() const -> InputDevice& { return *input_device_; }
auto input_device() const -> InputDevice& {
BA_PRECONDITION_FATAL(input_device_.Exists());
return *input_device_;
}
void set_input_device(InputDevice* device);
auto InputDeviceExists() const -> bool { return input_device_.Exists(); }

View File

@ -83,6 +83,15 @@
#error no BA_PLATFORM_CLASS defined for this platform
#endif
// A call that can be used by custom built native libraries (Python, etc.)
// to forward along debug messages to us.
// FIXME: Reconcile this with our existing C++ version. This one does not
// require the engine to be spun up so it better suited for things like
// debugging native libs.
extern "C" {
void BallisticaLowLevelDebugLog(const char* msg) {}
}
namespace ballistica::core {
auto CorePlatform::Create() -> CorePlatform* {

View File

@ -10,6 +10,11 @@
namespace ballistica::core {
static void LowLevelPythonDebugLog(const char* msg) {
assert(g_core);
g_core->platform->DebugLog(msg);
}
void CorePython::ApplyBaEnvConfig() {
// Fetch the env-config (creates it if need be).
auto envcfg = objs().Get(core::CorePython::ObjID::kBaEnvGetConfigCall).Call();
@ -21,6 +26,11 @@ void CorePython::InitPython() {
assert(g_core->InMainThread());
assert(g_buildconfig.monolithic_build());
// Install our low level logger in our custom Python builds.
#ifdef PY_HAVE_BALLISTICA_LOW_LEVEL_DEBUG_LOG
Py_BallisticaLowLevelDebugLog = LowLevelPythonDebugLog;
#endif
// Flip on some extra runtime debugging options in debug builds.
// https://docs.python.org/3/library/devmode.html#devmode
int dev_mode{g_buildconfig.debug_build()};

View File

@ -39,7 +39,7 @@ auto main(int argc, char** argv) -> int {
namespace ballistica {
// These are set automatically via script; don't modify them here.
const int kEngineBuildNumber = 21154;
const int kEngineBuildNumber = 21159;
const char* kEngineVersion = "1.7.22";
auto MonolithicMain(const core::CoreConfig& core_config) -> int {
@ -63,6 +63,9 @@ auto MonolithicMain(const core::CoreConfig& core_config) -> int {
// import it first thing even if we don't explicitly use it.
l_core = core::CoreFeatureSet::Import(&core_config);
// TEMP - bug hunting.
l_core->platform->DebugLog("mm1");
// If a command was passed, simply run it and exit. We want to act
// simply as a Python interpreter in that case; we don't do any
// environment setup (aside from the bits core does automatically such
@ -75,6 +78,9 @@ auto MonolithicMain(const core::CoreConfig& core_config) -> int {
exit(success ? 0 : 1);
}
// TEMP - bug hunting.
l_core->platform->DebugLog("mm2");
// Ok, looks like we're doing a standard monolithic-mode app run.
// -------------------------------------------------------------------------
@ -87,6 +93,9 @@ auto MonolithicMain(const core::CoreConfig& core_config) -> int {
// those modules get loaded from in the first place.
l_core->python->MonolithicModeBaEnvConfigure();
// TEMP - bug hunting.
l_core->platform->DebugLog("mm3");
// We need the base feature-set to run a full app but we don't have a hard
// dependency to it. Let's see if it's available.
l_base = l_core->SoftImportBase();
@ -98,6 +107,9 @@ auto MonolithicMain(const core::CoreConfig& core_config) -> int {
// Phase 2: "The pieces are moving."
// -------------------------------------------------------------------------
// TEMP - bug hunting.
l_core->platform->DebugLog("mm4");
// Spin up all app machinery such as threads and subsystems. This gets
// things ready to rock, but there's no actual rocking quite yet.
l_base->StartApp();
@ -106,6 +118,9 @@ auto MonolithicMain(const core::CoreConfig& core_config) -> int {
// Phase 3: "We come to it at last; the great battle of our time."
// -------------------------------------------------------------------------
// TEMP - bug hunting.
l_core->platform->DebugLog("mm5");
// At this point we unleash the beast and then simply process events
// until the app exits (or we return from this function and let the
// environment do that part).

View File

@ -212,7 +212,7 @@ enum class SpecialChar {
kTrophy0b,
kTrophy4,
kLocalAccount,
kAlibabaLogo,
kExplodinaryLogo,
kFlagUnitedStates,
kFlagMexico,
kFlagGermany,

View File

@ -8,12 +8,10 @@ from __future__ import annotations
import os
import logging
import asyncio
from typing import TYPE_CHECKING, overload
from typing import TYPE_CHECKING, overload, assert_type
from dataclasses import dataclass
from typing_extensions import assert_type
import pytest
from efro.error import CleanError, RemoteError, CommunicationError
from efro.dataclassio import ioprepped
from efro.message import (

View File

@ -11,7 +11,7 @@ import datetime
import itertools
from enum import Enum
from collections import deque
from dataclasses import dataclass
from dataclasses import dataclass, field
from typing import TYPE_CHECKING, Annotated
from threading import Thread, current_thread, Lock
@ -92,6 +92,14 @@ class LogEntry:
level: Annotated[LogLevel, IOAttrs('l')]
time: Annotated[datetime.datetime, IOAttrs('t')]
# We support arbitrary string labels per log entry which can be
# incorporated into custom log processing. To populate this, our
# LogHandler class looks for a 'labels' dict passed in the optional
# 'extra' dict arg to standard Python log calls.
labels: Annotated[
dict[str, str], IOAttrs('la', store_default=False)
] = field(default_factory=dict)
@ioprepped
@dataclass
@ -300,13 +308,13 @@ class LogHandler(logging.Handler):
return False
def emit(self, record: logging.LogRecord) -> None:
# pylint: disable=too-many-branches
if __debug__:
starttime = time.monotonic()
# Called by logging to send us records.
# Special case: filter out this common extra-chatty category.
# TODO - perhaps should use a standard logging.Filter for this.
# TODO - kill this.
if (
self._suppress_non_root_debug
and record.name != 'root'
@ -324,6 +332,12 @@ class LogHandler(logging.Handler):
record.args
)
# Note: just assuming types are correct here, but they'll be
# checked properly when the resulting LogEntry gets exported.
labels: dict[str, str] | None = getattr(record, 'labels', None)
if labels is None:
labels = {}
if fast_path:
if __debug__:
formattime = echotime = time.monotonic()
@ -334,6 +348,7 @@ class LogHandler(logging.Handler):
record.levelno,
record.created,
record,
labels,
)
)
else:
@ -350,10 +365,14 @@ class LogHandler(logging.Handler):
# make tight debugging harder.
if self._echofile is not None:
ends = LEVELNO_COLOR_CODES.get(record.levelno)
namepre = (
f'{TerminalColor.WHITE.value}{record.name}:'
f'{TerminalColor.RESET.value} '
)
if ends is not None:
self._echofile.write(f'{ends[0]}{msg}{ends[1]}\n')
self._echofile.write(f'{namepre}{ends[0]}{msg}{ends[1]}\n')
else:
self._echofile.write(f'{msg}\n')
self._echofile.write(f'{namepre}{msg}\n')
self._echofile.flush()
if __debug__:
@ -366,6 +385,7 @@ class LogHandler(logging.Handler):
record.levelno,
record.created,
msg,
labels,
)
)
@ -408,6 +428,7 @@ class LogHandler(logging.Handler):
levelno: int,
created: float,
message: str | logging.LogRecord,
labels: dict[str, str],
) -> None:
try:
# If they passed a raw record here, bake it down to a string.
@ -422,6 +443,7 @@ class LogHandler(logging.Handler):
time=datetime.datetime.fromtimestamp(
created, datetime.timezone.utc
),
labels=labels,
)
)
except Exception:
@ -640,6 +662,9 @@ def setup_logging(
had_previous_handlers = bool(logging.root.handlers)
logging.basicConfig(
level=lmap[level],
# format='%(name)s: %(message)s',
# We dump *only* the message here. We pass various log record bits
# around and format things fancier where they end up.
format='%(message)s',
handlers=[loghandler],
force=True,

View File

@ -239,7 +239,7 @@ def get_code_filenames(projroot: Path, include_generated: bool) -> list[str]:
out = sorted(codefilenames)
# Watch for breakage.
if not out:
if places and not out:
print(
'WARNING: get_code_filename returning no results;'
' is something broken?',
@ -358,7 +358,7 @@ def get_script_filenames(projroot: Path) -> list[str]:
out = sorted(list(f for f in filenames if 'flycheck_' not in f))
# Watch for breakage.
if not out:
if places and not out:
print(
'WARNING: get_script_filename returning no results;'
' is something broken?',

View File

@ -646,7 +646,13 @@ def patch_modules_setup(python_dir: str, baseplatform: str) -> None:
def android_patch() -> None:
"""Run necessary patches on an android archive before building."""
patch_modules_setup('.', 'android')
# _patch_setup_file('android', '?', '?')
# Add our low level debug call.
_patch_py_h()
# Use that call...
_patch_py_wreadlink_test()
# _patch_py_ssl()
@ -704,6 +710,51 @@ def android_patch_ssl() -> None:
writefile(fname, txt)
def _patch_py_wreadlink_test() -> None:
fname = 'Python/fileutils.c'
txt = readfile(fname)
txt = replace_exact(
txt,
" cbuf[res] = '\\0'; /* buf will be null terminated */",
(
' char dlog[256];\n'
' snprintf(dlog, sizeof(dlog), "hello world res=%d mpl=%d",'
' (int)res, (int)MAXPATHLEN);\n'
' Py_BallisticaLowLevelDebugLog(dlog);\n'
" cbuf[res] = '\\0'; /* buf will be null terminated */"
),
)
writefile(fname, txt)
def _patch_py_h() -> None:
fname = 'Include/fileutils.h'
txt = readfile(fname)
txt = replace_exact(
txt,
'\n#ifdef __cplusplus\n}\n',
(
'\n'
'/* ericf hack for debugging */\n'
'#define PY_HAVE_BALLISTICA_LOW_LEVEL_DEBUG_LOG\n'
'extern void (*Py_BallisticaLowLevelDebugLog)(const char* msg);\n'
'\n'
'#ifdef __cplusplus\n}\n'
),
)
writefile(fname, txt)
fname = 'Python/fileutils.c'
txt = readfile(fname)
txt = replace_exact(
txt,
' _Py_END_SUPPRESS_IPH\n}',
' _Py_END_SUPPRESS_IPH\n}\n\n'
'void (*Py_BallisticaLowLevelDebugLog)(const char* msg) = NULL;\n',
)
writefile(fname, txt)
def _patch_py_ssl() -> None:
# UPDATE: this is now included in Python as of 3.10.6; woohoo!
if bool(True):