diff --git a/.efrocachemap b/.efrocachemap
index 38dca9b6..89a6ee07 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -2584,7 +2584,7 @@
"build/assets/ba_data/textures/zoeIconColorMask.pvr": "https://files.ballistica.net/cache/ba1/0a/8d/df4804e5754b784269a07c1ddf93",
"build/assets/ba_data/textures/zoeIconColorMask_preview.png": "https://files.ballistica.net/cache/ba1/47/fd/459aad49c8af5d1e8bd778b863c3",
"build/assets/ba_data/textures/zoeIcon_preview.png": "https://files.ballistica.net/cache/ba1/ff/85/bc6154691d91a10bd05eb6553988",
- "build/assets/mac_disk_image/dmgbuild_settings.py": "https://files.ballistica.net/cache/ba1/52/80/5abc16af08f61367f56fa557b4a7",
+ "build/assets/mac_disk_image/dmgbuild_settings.py": "https://files.ballistica.net/cache/ba1/d0/31/7a0814b3d25351f6f681ec0f3baf",
"build/assets/pylib-android/__future__.py": "https://files.ballistica.net/cache/ba1/e4/c1/8204c9a658ed7a66e73578e1aec3",
"build/assets/pylib-android/__hello__.py": "https://files.ballistica.net/cache/ba1/22/0b/ed30fa72b96613d06c660d4383d0",
"build/assets/pylib-android/_aix_support.py": "https://files.ballistica.net/cache/ba1/27/f4/57854d91066a4a0035edc1c74a29",
@@ -4080,18 +4080,18 @@
"build/prefab/full/linux_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/7b/c1/2dfb7c5fc6a31dd4ac4be9ef69bb",
"build/prefab/full/linux_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/af/9b/8de9876d0e3db5ccc49ce80c8e2a",
"build/prefab/full/linux_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/16/63/7bedf858ae0dc1e91acf76c1cbd6",
- "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/15/69/0aed1da6e8988e46fd85e0b0b16c",
+ "build/prefab/full/mac_arm64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/76/d8/e2d3ae9228e1dd7b8fdbfcb676e0",
"build/prefab/full/mac_arm64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/cc/d0/f0c1c32c948f5349e91071107d9a",
- "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/16/d9/cb7a9fff79a562baf4729f5b44f3",
+ "build/prefab/full/mac_arm64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/51/2c/23125061df4f8d2c62bac5787979",
"build/prefab/full/mac_arm64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/fc/34/1623d3a8d0ff13a71f819300c091",
- "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/2e/c6/4c618fc31c73ccef2e7d8d14ec7e",
+ "build/prefab/full/mac_x86_64_gui/debug/ballisticakit": "https://files.ballistica.net/cache/ba1/dd/8d/c73ee71bfd88d0af120ff17d551b",
"build/prefab/full/mac_x86_64_gui/release/ballisticakit": "https://files.ballistica.net/cache/ba1/84/38/e6f2c8c7607161c76e7c2d65ffd1",
- "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/59/d0/a56cc7c46a195e874186aff2545f",
+ "build/prefab/full/mac_x86_64_server/debug/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/7b/ea/d4b485f9f702619046631f74fcc2",
"build/prefab/full/mac_x86_64_server/release/dist/ballisticakit_headless": "https://files.ballistica.net/cache/ba1/08/dd/98f18c4d39850dafbf3efdfbc305",
- "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/0b/4e/c41ed0ba45b3db377a3f6fe2b591",
- "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/54/51/221829a5b4814bb15c9fb7550e2d",
- "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/b6/f5/289a7c3980b8b10785cf3e7a0c84",
- "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/f9/25/5a367595c2f116a5f4c5ff5badea",
+ "build/prefab/full/windows_x86_gui/debug/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/bb/dc/546b55bf1e7cfa297dbc74f3b335",
+ "build/prefab/full/windows_x86_gui/release/BallisticaKit.exe": "https://files.ballistica.net/cache/ba1/83/8a/bb8485797aae51bca7edcf62dc96",
+ "build/prefab/full/windows_x86_server/debug/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/d1/2d/9850c8bc21b31c627386fa44c96a",
+ "build/prefab/full/windows_x86_server/release/dist/BallisticaKitHeadless.exe": "https://files.ballistica.net/cache/ba1/b4/fb/efce666ea6a479f1310d9aa27300",
"build/prefab/lib/linux_arm64_gui/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/98/32/43c61f1e11520f764158cf0e76d2",
"build/prefab/lib/linux_arm64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/ca/65/cba463f21a8f76c5bbfe27cae124",
"build/prefab/lib/linux_arm64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/73/20/119211f1700bb5a410cedf4e76f2",
@@ -4108,14 +4108,14 @@
"build/prefab/lib/mac_x86_64_gui/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/90/9b/94f733c3a48691e02240e04dc792",
"build/prefab/lib/mac_x86_64_server/debug/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/2e/c7/873af48627997b6fab4b2c4ba6bc",
"build/prefab/lib/mac_x86_64_server/release/libballistica_plus.a": "https://files.ballistica.net/cache/ba1/3a/94/4780fada10f0fc3f43a54f29c86f",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/09/9c/85764402b35843e1057494c867dd",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/38/22/b1ba8ab84ecedb8870fd7f122747",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/2a/10/a06ea64b81cc17db35bee9c037c3",
- "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/85/b4/a1fcedeacc282d005fa2c052dcbb",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/0a/1a/de3dc9cd57640e657814826048be",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/dc/97/4f50384b1dbd7972c04278b5c52c",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/28/db/2894bb975eae0b909e78c33aacaa",
- "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/7a/38/764a2c23aa26bf3ce1b549100fd2",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/e5/c9/1fafb53497e7d4ff19ecddc31d09",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/98/26/04e281a4cfa6a334abcb7e79dcbe",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/46/8b/eaee1191df159ad37a437429bbd9",
+ "build/prefab/lib/windows/Debug_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/82/fc/bbd1be0784b9d4ad46aa7da5dc24",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.lib": "https://files.ballistica.net/cache/ba1/c7/e7/a74ee82202fb7ae828f5066d1c79",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitGenericPlus.pdb": "https://files.ballistica.net/cache/ba1/f5/c3/eac894e0bfaacf4ec4740d54869d",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.lib": "https://files.ballistica.net/cache/ba1/d1/9f/f5e35440c800af9f002c795a2814",
+ "build/prefab/lib/windows/Release_Win32/BallisticaKitHeadlessPlus.pdb": "https://files.ballistica.net/cache/ba1/ff/fc/b6ff2a5bf8c73e1a5fa987944548",
"src/assets/ba_data/python/babase/_mgen/__init__.py": "https://files.ballistica.net/cache/ba1/52/c6/c11130af7b10d6c0321add5518fa",
"src/assets/ba_data/python/babase/_mgen/enums.py": "https://files.ballistica.net/cache/ba1/38/c3/1dedd5e74f2508efc5974c8815a1",
"src/ballistica/base/mgen/pyembed/binding_base.inc": "https://files.ballistica.net/cache/ba1/4e/07/87dd93e7ef29b8b78d0b4791d6f8",
diff --git a/.idea/ballisticakit.iml b/.idea/ballisticakit.iml
index e0bf8510..45327b93 100644
--- a/.idea/ballisticakit.iml
+++ b/.idea/ballisticakit.iml
@@ -34,6 +34,7 @@
+
@@ -73,4 +74,4 @@
-
+
\ No newline at end of file
diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml
index 7752a7dd..b9eb3330 100644
--- a/.idea/dictionaries/ericf.xml
+++ b/.idea/dictionaries/ericf.xml
@@ -67,6 +67,7 @@
alarmsound
alibaba
alibname
+ alldeps
allerrors
allobjc
allobjs
@@ -81,6 +82,7 @@
anamorphosis
andr
androidaddr
+ androideabi
androidstudiocode
anim
animcurve
@@ -100,6 +102,7 @@
apis
apiversion
apks
+ apntzcreds
apost
appath
appathout
@@ -110,10 +113,13 @@
appengine
appiconset
appid
+ appintentsmetadataprocessor
appinvite
appkit
applescript
appletv
+ appletvos
+ appletvsimulator
appmode
appname
appnameupper
@@ -125,10 +131,13 @@
apptimer
apptimers
apputils
+ archbase
archivepath
archivepathbase
+ archos
archs
argh
+ argindex
argparse
argsjoined
argstr
@@ -197,14 +206,18 @@
bacfg
backgrounded
backgrounding
+ backported
backporting
backwin
baclassic
bacloud
bacloudcmd
bacommon
+ bacoremeta
badguy
baenv
+ bafoobar
+ bafoobarmeta
bafoundation
bainternal
ballistica
@@ -217,15 +230,21 @@
bameta
bametainternal
baplus
+ baplusmeta
barcolor
barebones
bargs
bascenev
baseaddr
+ basebasename
baseh
+ baseheaders
baseimps
basemult
+ basenames
+ baseplatform
basepos
+ basepylib
baservnode
basespaz
basetime
@@ -263,6 +282,7 @@
bgdynamics
bgmodel
bgrn
+ bgrp
bgterrain
bgtex
bgthread
@@ -270,7 +290,9 @@
binc
bincfg
bindcode
+ bindir
bindvals
+ binpath
bisectmodule
bitcode
blarg
@@ -305,6 +327,8 @@
botspawnpts
bottlenecked
bottype
+ bpath
+ bpcolor
bpos
bpresult
brandassets
@@ -336,6 +360,11 @@
builddir
buildfile
buildfilename
+ buildfiles
+ buildline
+ buildlockname
+ buildlocks
+ buildmode
buildnum
buildserver
buildtype
@@ -351,6 +380,7 @@
cacert
cachable
cachebasename
+ cachedir
cacheentry
cachefile
cachemap
@@ -363,6 +393,7 @@
callargs
callname
callnode
+ callproc
cameraflash
camerashake
campaignname
@@ -371,6 +402,7 @@
caplog
capturetheflag
carentity
+ casefix
cashregistersound
cbegin
cbgn
@@ -383,13 +415,16 @@
ccind
ccode
ccompiler
+ cdirname
cdrk
cdull
cdval
cend
centeuro
centiseconds
+ certfile
certifi
+ certpass
cfconfig
cfenv
cfgdict
@@ -399,6 +434,7 @@
cfgpath
cfgs
cfgui
+ cfield
cflags
cfuncs
cgitb
@@ -429,6 +465,7 @@
checktype
childanntype
childanntypes
+ childid
childnode
childtype
childtypes
@@ -439,6 +476,7 @@
chromebooks
chunksize
cjkcodecs
+ clangstatcache
classline
classmethod
classmethods
@@ -474,8 +512,11 @@
cmath
cmathmodule
cmds
+ cmdspath
+ cmdsraw
cmembers
cmodel
+ cmodule
cmodules
cmpf
cmplen
@@ -489,6 +530,7 @@
codeop
collapsable
collidemodel
+ collisionmesh
colordiff
colorpicker
colorsys
@@ -498,6 +540,7 @@
comms
compat
compileall
+ compilearch
compileassetcatalog
compilec
compilelocations
@@ -525,6 +568,7 @@
contextvarsmodule
controlsguide
conv
+ converticonsetfile
convertlocationval
cookiejar
cooldown
@@ -553,6 +597,8 @@
cpplintcodefull
cpplintfull
cpplintmodule
+ cpresource
+ cpresources
cpuinfo
cpus
cpython
@@ -563,6 +609,7 @@
creditslist
credstr
cresult
+ cruftpath
cryptmodule
cryptosimple
cspbd
@@ -582,6 +629,7 @@
curdir
curhash
curhashes
+ currenthash
curstate
curtime
curtimestr
@@ -624,6 +672,7 @@
deek
defs
defsline
+ defslines
deivit
depchecks
depcls
@@ -637,6 +686,7 @@
dereferencing
deregistering
deregistration
+ derq
descpos
desctype
dest
@@ -645,6 +695,7 @@
devicename
devtool
dffc
+ dfile
dgram
dhave
dheadless
@@ -677,10 +728,13 @@
dliwk
dlldir
dlls
+ dmacosx
dmake
dmgname
dmitry
dmodule
+ dmstatedir
+ dmstatepath
dmypy
dname
dnames
@@ -694,6 +748,7 @@
dofilter
domreg
domsg
+ doneclr
dont
doplay
doraise
@@ -719,7 +774,10 @@
dstattr
dstbase
dstdata
+ dstdir
+ dstdirfull
dstdirname
+ dstent
dstfile
dstfin
dstjson
@@ -728,9 +786,13 @@
dstnode
dstpath
dstpathfull
+ dstrootsl
dstrootvar
dsts
+ dsttime
+ dsttimestr
dstvar
+ dsymutil
dtest
dtime
dualteamscore
@@ -745,6 +807,7 @@
dummyval
dumpminlog
dups
+ dusing
dval
dxml
dynload
@@ -818,6 +881,7 @@
ericfroemling
ericsson's
errcount
+ errfile
errname
errno
errored
@@ -860,6 +924,8 @@
exportoptionspath
exporttype
exporttypestr
+ expsrc
+ extractappintentsmetadata
extradata
extraflagmat
extrahash
@@ -867,6 +933,7 @@
exts
f'baseval
f'chmod
+ f'dstbase
f'final
f'fixme
factoryclass
@@ -875,6 +942,7 @@
fakeshake
fallbacks
farthestpt
+ fatstdlib
faulthandler
fback
fbase
@@ -883,14 +951,19 @@
fcntl
fcntlmodule
fcode
+ fcodefin
fcontents
fcount
fdata
fdcount
fdesc
fdict
+ fdirs
fdout
featureset
+ featuresetdef
+ featuresets
+ featuresettest
fecfc
feedparser
fentry
@@ -930,6 +1003,7 @@
filterval
finalhash
finalmaterials
+ finalpath
finfo
firebase
firestore
@@ -937,6 +1011,7 @@
firstline
firstpartykey
flac
+ flagindex
flagmat
flagmaterial
flagmats
@@ -959,8 +1034,10 @@
fnmatch
fnode
fnum
+ fobjc
foof
foos
+ foov
fooval
fopen
forcetype
@@ -978,6 +1055,7 @@
fparts
fpath
fpathrel
+ fpaths
fpathshort
fprint
fproject
@@ -995,12 +1073,21 @@
froemling
frombuffer
fromini
+ fsarg
+ fsconfigpath
fsdf
+ fset
+ fsetname
+ fsets
fsettings
+ fsmetapackagename
+ fsname
+ fspackagename
fsplit
fsrc
fstab
fstat
+ fstestspackagename
fstrs
fsum
ftime
@@ -1056,8 +1143,10 @@
gearvr
genchangelog
gencmd
+ gencount
gendocs
gendummymodule
+ generatedsymfile
genericpath
genmapjson
genstartercache
@@ -1120,12 +1209,15 @@
ghnc
gioacchino
gitattributes
+ gitfiledir
gitignore
+ gitignored
gitignorelines
gitignoreraw
gitignores
gitlog
gitlogcore
+ gitpath
globalns
globalsnode
gmake
@@ -1142,6 +1234,7 @@
gpio
gprev
gpsui
+ gradians
gradlepath
gradlew
graphlib
@@ -1149,6 +1242,7 @@
grpentry
grpkey
grpmodule
+ grpname
grps
grpval
grumbledorf
@@ -1161,6 +1255,7 @@
handlemessage
hant
hashfilename
+ hashfiles
hashlines
hashobj
hashopenssl
@@ -1228,8 +1323,10 @@
iconutil
ident
idevices
+ ifdef
ifeq
ifneq
+ ignorevar
iiarcade
iiiiisssi
iircade
@@ -1249,6 +1346,7 @@
imgw
importlines
incentivized
+ includelines
includetest
incmd
incr
@@ -1274,6 +1372,7 @@
initialplayerinfos
initing
inits
+ inittab
inmobi
inpath
inpaths
@@ -1304,6 +1403,7 @@
ioprepping
ioreg
ipaddress
+ iphonesimulator
ipos
iprof
isatty
@@ -1399,6 +1499,7 @@
lbval
lbzip
lcfg
+ lchmod
lcolor
lcrypto
ldpi
@@ -1413,8 +1514,10 @@
levelno
levelnos
levelstr
+ lffi
lfull
lfval
+ libballistica
libballisticakit
libbz
libbzip
@@ -1447,6 +1550,7 @@
lindex
lindexorig
linearstep
+ linebegin
linebits
lineheight
linemax
@@ -1512,6 +1616,7 @@
lsbo
lsbt
lshort
+ lsplits
lsprof
lsqlite
lsregister
@@ -1547,6 +1652,8 @@
malhotra
mallimportedby
mandir
+ manfile
+ manprivpath
mantype
manualtab
mapdata
@@ -1567,7 +1674,9 @@
mathnode
mathutils
maxdepth
+ maxlines
maxlinks
+ maxparts
maxpathlen
maxtries
maxval
@@ -1624,6 +1733,7 @@
mmapmodule
mmult
mname
+ mnames
mnode
mnpp
modder
@@ -1632,6 +1742,8 @@
modestr
modeval
modpack
+ modstr
+ modtime
modtimes
moduledir
modulefinder
@@ -1640,6 +1752,7 @@
modutils
moola
mopaque
+ morecnt
moreso
mpath
mrmaxmeier
@@ -1710,7 +1823,9 @@
mywidget
namecap
namedarg
+ namel
nametext
+ nameu
nameval
nboxes
nbuffer
@@ -1735,6 +1850,8 @@
newnode
newpath
newtoken
+ newuuid
+ newuuids
nextcall
nextfilenum
nextlevel
@@ -1794,6 +1911,7 @@
objcount
objid
objname
+ objpath
objs
objset
objsizes
@@ -1819,7 +1937,10 @@
oldbook
olde
oldlady
+ oldpath
oldtoken
+ olduuid
+ olduuids
onln
onscreencountdown
onscreenkeyboard
@@ -1852,9 +1973,11 @@
outdata
outdelay
outdict
+ outdir
outext
outfilename
outfilepath
+ outfiles
outhashpath
outmsg
outname
@@ -1879,6 +2002,7 @@
pandoc
pandroid
parallelized
+ parentpath
parsermodule
parsetok
partyqueue
@@ -1886,21 +2010,27 @@
passnode
passthrough
passwd
+ patchpaths
patcomp
+ pathbar
pathcapture
pathdst
pathlib
pathlist
pathnames
pathparts
+ pathsegs
pathsrc
pathstonames
pathtmp
pathwonky
patsubst
pausable
+ pbasename
pbrowser
pbtn
+ pbxgrp
+ pbxgrps
pbxproj
pcall
pchild
@@ -1917,6 +2047,7 @@
perma
perrdetail
phandle
+ phasename
phasers
phasescriptexecution
phello
@@ -1929,6 +2060,7 @@
pipname
pipvers
pkey
+ pkgdir
pkgutil
platstr
playercast
@@ -1967,6 +2099,8 @@
plvel
pmats
pname
+ pnamel
+ pnameu
pngs
pnode
podcasts
@@ -1982,6 +2116,7 @@
popuptext
positionadjusted
posixpath
+ posixshmem
posixsubprocess
posonlyargs
postinit
@@ -2008,7 +2143,9 @@
precommand
precompiling
preconfig
+ predeclare
predeclares
+ predecs
preexec
prefablib
preflightfast
@@ -2022,6 +2159,7 @@
premult
premultiplied
premultiply
+ prepass
prepdata
preprocessing
prereq
@@ -2046,6 +2184,8 @@
processinfoplistfile
processpch
processpchplusplus
+ processproductpackaging
+ processproductpackagingder
procs
profileindex
profilekey
@@ -2055,12 +2195,16 @@
projbasename
projconfig
projdir
+ projectconfig
projectpath
projectroot
+ projname
projpath
projprefix
projroot
projs
+ projsrc
+ projtxt
promocode
proxykey
prtb
@@ -2089,6 +2233,7 @@
punchmats
punchpos
punchsound
+ pupdatedata
pupgrade
purply
pushcall
@@ -2118,6 +2263,7 @@
pybuild
pybuildapple
pycache
+ pycfgpath
pycharm's
pycharmbin
pycharmfull
@@ -2146,6 +2292,7 @@
pylintscripts
pylintscriptsfast
pylintscriptsfull
+ pymodulenames
pyobjc
pyoffs
pypaths
@@ -2215,6 +2362,7 @@
reqs
reqtype
reqtypes
+ requireable
resample
resetbtn
resetinput
@@ -2264,6 +2412,8 @@
rspobj
rsptypes
rstr
+ rsync's
+ rsyncver
rtest
rtnetlink
rtxt
@@ -2319,6 +2469,7 @@
scproxy
screenmessage
scriptdirs
+ scriptdst
scriptfiles
scriptsdir
scrlw
@@ -2401,10 +2552,13 @@
showsubseconds
shroom
shutil
+ signingconfig
+ signingconfigname
sigsetjmp
simplesubclasses
simpletype
sincelaunch
+ sincestr
singledispatch
singledispatchmethod
sirplus
@@ -2430,6 +2584,7 @@
socketmodule
socketserver
softdefault
+ softreq
somevar
sortname
soundtrackname
@@ -2460,18 +2615,22 @@
specialchar
specialoffer
spinoff
+ spinoff's
+ spinoffconfig
spinoffdata
spinoffs
spinup
splayer
splitlen
splitnumstr
+ spwd
squadcore
srcabs
srcattr
srcdata
srcdir
srcfolder
+ srcgrp
srcid
srcjson
srcname
@@ -2483,6 +2642,8 @@
srcpy
srcpydata
srcstr
+ srctime
+ srctimestr
srctxt
sred
sshd
@@ -2515,6 +2676,7 @@
stdspaz
stedit
steelseries
+ stgdict
stickman
storable
storagename
@@ -2548,6 +2710,7 @@
subdirs
subfieldpath
subfolders
+ submpath
subname
subpath
subpaths
@@ -2574,6 +2737,12 @@
swht
swidth
swiftc
+ swiftcompile
+ swiftdriver
+ swiftdriverjobdiscovery
+ swiftemitmodule
+ swiftgeneratepch
+ swiftmergegeneratedheaders
swip
swipsound
sylw
@@ -2652,6 +2821,7 @@
testcapi
testcapimodule
testclass
+ testclinic
testconsole
testd
testdl
@@ -2676,6 +2846,7 @@
testsoundtrack
testtask
testthread
+ testtype
testval
testwith
texcoords
@@ -2695,6 +2866,8 @@
this'll
thislinelen
thismodule
+ thisname
+ thispath
threadlocals
threadpool
threadtype
@@ -2711,6 +2884,7 @@
timestring
timestrval
timetype
+ timevalfin
tipstext
titletext
tkinval
@@ -2724,6 +2898,7 @@
tnode
tntspawner
tntspawnpos
+ tomllib
toolconfigs
toolconfigsrc
toolsdir
@@ -2731,6 +2906,7 @@
topkilledcount
toplevel
toplevelfiles
+ toplevelname
totaldudes
totalobjmb
totalobjsize
@@ -2743,6 +2919,8 @@
tournamententry
tournamentscores
tpartial
+ tpath
+ tpathsegs
tpexl
tpimport
tpimportex
@@ -2781,6 +2959,7 @@
tvalue
tvos
twidth
+ tword
twrths
txtactor
txtl
@@ -2797,6 +2976,7 @@
typeshed
typestr
tzdiff
+ tzinfo
tzinfos
tzoffset
tzpath
@@ -2863,6 +3043,7 @@
usid
utcnow
utimensat
+ uuidentry
uuidmodule
uval
valanntype
@@ -2915,6 +3096,7 @@
waaah
waittime
wanttype
+ warnstr
warntype
wasdead
wasn
@@ -2985,9 +3167,12 @@
xcarchive
xcassets
xcframework
+ xcft
+ xcode's
xcodebuild
xcodebuildverbose
xcoderun
+ xcodesortkey
xcpretty
xcprojpath
xcrun
diff --git a/.idea/inspectionProfiles/Default.xml b/.idea/inspectionProfiles/Default.xml
index 4e8b4a5b..ff8542f6 100644
--- a/.idea/inspectionProfiles/Default.xml
+++ b/.idea/inspectionProfiles/Default.xml
@@ -112,6 +112,7 @@
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b92c6806..3d7bf9c9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -105,7 +105,7 @@
revamped these in 1.5, and, after working with them for a few years, I feel
that having a single time(), timer(), and Timer() call with a variety of
arguments influencing behavior is unwieldy, so I'll be splitting things out
- into a few seperate and simplified versions. Details follow.
+ into a few separate and simplified versions. Details follow.
- There is now the concept of 'app-time'. This was previously called '
real-time'. It is basically time that has elapsed while the app is actively
running. It never jumps ahead or goes backwards and it stops progressing while
@@ -168,7 +168,7 @@
basically using the new 'display-time' concept). The engine should now be
better at maintaining smooth looking animation at other frame-rates. Please
holler if you see otherwise. Note this doesn't affect the issue where pure SDL
- builds like PC/Linux are locked to 60fps; that's a seperate thing.
+ builds like PC/Linux are locked to 60fps; that's a separate thing.
- You can set env-var `BA_DEBUG_LOG_DISPLAY_TIME=1` to get display-time stat
logs to make sure things are working smoothly on your setup.
- The engine no longer requires that ba_data and other required files exist in
@@ -185,7 +185,7 @@
- The `-exec` command-line arg has been renamed to be either `--exec` or `-e`.
- Added a command arg accessible via `--command` or `-c`. Unlike the exec arg
which runs as part of the app event loop, this command runs *instead* of the
- normal event loop. It can be thought of as analagous to the `-c` arg for the
+ normal event loop. It can be thought of as analogous to the `-c` arg for the
Python interpreter. This provides a clean way to do things like introspect
ballistica's binary modules without having to worry about data files being
present or about exiting the app after the command runs. The app simply
@@ -201,7 +201,7 @@
ba.app.run()'`.
- Related to the above, it is now possible for `ba.app.python_directory_app`,
`ba.app.python_directory_user`, and `ba.app.python_directory_app_site` to be
- None if ballisticia is being run in a non-standard environment setup. Just
+ None if ballistica is being run in a non-standard environment setup. Just
something to watch out for.
- The `ba` module is no longer imported by default. Since most modding will go
through other modules now such as `bascenev` or `bauiv1` it seemed odd to be
@@ -1559,7 +1559,7 @@
### 1.4.100 (14264)
- added a 'playlistCode' option in the server config which corresponds with
- playlist codes added in Ballisticakit 1.4.100 (used for sharing playlists with
+ playlist codes added in BombSquad 1.4.100 (used for sharing playlists with
friends). Now you can create a custom playlist, grab a code for it, and easily
use it in a dedicated server.
diff --git a/ballisticakit-cmake/.idea/dictionaries/ericf.xml b/ballisticakit-cmake/.idea/dictionaries/ericf.xml
index b911946b..e61ef3f1 100644
--- a/ballisticakit-cmake/.idea/dictionaries/ericf.xml
+++ b/ballisticakit-cmake/.idea/dictionaries/ericf.xml
@@ -44,6 +44,7 @@
alext
alibaba
alibname
+ alldeps
allerrors
allobjc
allobjs
@@ -56,6 +57,7 @@
alsa
alsoft
anchorx
+ androideabi
animcurve
aniso
annarg
@@ -69,9 +71,13 @@
aparsed
apientry
apiversion
+ apntzcreds
apost
appcomponent
appconfig
+ appintentsmetadataprocessor
+ appletvos
+ appletvsimulator
appmode
appname
appnameupper
@@ -81,6 +87,9 @@
apptime
apptimer
apptimers
+ archbase
+ archos
+ argindex
argsjoined
argstr
armcap
@@ -106,11 +115,15 @@
babasemeta
backgrounded
backgrounding
+ backported
backporting
backtraces
backwin
baclassic
+ bacoremeta
baenv
+ bafoobar
+ bafoobarmeta
bainternal
ballistica
ballistica's
@@ -120,11 +133,17 @@
bameta
bametainternal
baplus
+ baplusmeta
barebones
bargs
bascenev
baseaddr
+ basebasename
+ baseheaders
baseimps
+ basenames
+ baseplatform
+ basepylib
basetime
basetimer
basetype
@@ -150,10 +169,13 @@
bezanson
bgdynamics
bgra
+ bgrp
bigendian
bilinear
bindcode
+ bindir
bindvals
+ binpath
binpow
bitcount
bitdepth
@@ -187,6 +209,8 @@
bootstrappy
bootsubprocess
bouyancy
+ bpath
+ bpcolor
bppv
bpresult
bresult
@@ -208,6 +232,11 @@
bucketnum
bufs
buildconfig
+ buildfiles
+ buildline
+ buildlockname
+ buildlocks
+ buildmode
buildnumber
buttondown
buttonmouse
@@ -215,6 +244,7 @@
buttonwidget
bwst
cacert
+ cachedir
cadata
cafile
calced
@@ -223,6 +253,7 @@
caled
callargs
callbackobj
+ callproc
camalign
camelback
camerashake
@@ -230,6 +261,7 @@
capitan
caplog
cargs
+ casefix
cbegin
cbgn
cbresults
@@ -238,12 +270,16 @@
ccind
ccontext
ccylinder
+ cdirname
cend
centiseconds
+ certfile
certifi
+ certpass
cfgdict
cfgdir
cfgpath
+ cfield
changeme
charn
charnum
@@ -256,12 +292,14 @@
checksummed
childanntype
childanntypes
+ childid
childtype
childtypes
childval
chrono
chunksize
cjief
+ clangstatcache
classdict
classline
cleanupcheck
@@ -274,7 +312,10 @@
cmakelist
cmath
cmds
+ cmdspath
+ cmdsraw
cmdvals
+ cmodule
cmodules
cmplen
codedata
@@ -284,8 +325,10 @@
collapseable
collidable
collider
+ collisionmesh
columnwidget
comms
+ compilearch
compileassetcatalog
compilec
compilemetalfile
@@ -295,6 +338,7 @@
connectattr
containerwidget
controlfp
+ converticonsetfile
cooldown
coopscore
copypng
@@ -306,6 +350,8 @@
cout
cpel
cpplint
+ cpresource
+ cpresources
cptr
cpuid
crashenv
@@ -316,6 +362,7 @@
cresult
crom
crosswire
+ cruftpath
crvel
cryptosimple
csize
@@ -329,6 +376,7 @@
ctargetref
ctracker
cubemap
+ currenthash
curtime
curv
cutef
@@ -359,6 +407,7 @@
deallocation
debugger's
deek
+ defslines
deinit
deltaval
demangle
@@ -370,6 +419,7 @@
deregistering
deregistration
dernit
+ derq
desctype
destdir
dets
@@ -377,6 +427,7 @@
dfba
dffc
dfff
+ dfile
dfmt
dictval
didn
@@ -390,11 +441,15 @@
dlife
dliwk
dllpath
+ dmacosx
dmake
dmgname
+ dmstatedir
+ dmstatepath
dname
dncm
dobell
+ doneclr
doneptr
doraise
dosomething
@@ -410,15 +465,24 @@
dsound
dstabs
dstattr
+ dstbase
+ dstdir
+ dstdirfull
+ dstent
dstnode
dstpath
dstr
+ dstrootsl
+ dsttime
+ dsttimestr
+ dsymutil
dtest
dummymodules
dummyret
dummyval
dummyvalid
dumpminlog
+ dusing
dval
dxgi
dynamicdata
@@ -456,6 +520,7 @@
ericf
ericsson
ericsson's
+ errfile
errname
erroring
escval
@@ -479,10 +544,13 @@
expl
exportlist
exporttypestr
+ expsrc
+ extractappintentsmetadata
extradata
extrahash
extrascale
exts
+ f'dstbase
facepts
fairydust
fakeshake
@@ -491,15 +559,21 @@
fastldlt
fastlsolve
fastltsolve
+ fatstdlib
faulthandler
fbos
fcntl
+ fcodefin
fdata
fdcount
+ fdirs
fdirx
fdiry
fdirz
featureset
+ featuresetdef
+ featuresets
+ featuresettest
fentry
fenv
fesetround
@@ -519,10 +593,12 @@
filterdoc
filterstr
filterval
+ finalpath
finishedptr
firstpartykey
fjco
fjcoiwef
+ flagindex
flipbit
floinkdingle
floooff
@@ -532,13 +608,16 @@
fname
fnode
fnumc
+ fobjc
focuswindow
+ foov
fopen
fourcc
fovs
fovx
fovy
fpath
+ fpaths
framebuffers
framedef
frameldefs
@@ -552,6 +631,15 @@
fromini
frompos
frontmost
+ fsarg
+ fsconfigpath
+ fset
+ fsetname
+ fsets
+ fsmetapackagename
+ fsname
+ fspackagename
+ fstestspackagename
fsum
ftos
ftou
@@ -576,6 +664,8 @@
gearvr
genchangelog
gencmd
+ gencount
+ generatedsymfile
getactivity
getattro
getattrofunc
@@ -621,6 +711,9 @@
gettime
gettotalrefcount
getuisound
+ gitfiledir
+ gitignored
+ gitpath
gles
glext
globalns
@@ -628,9 +721,11 @@
googleplaytab
gpgs
gqualstr
+ gradians
graphlib
grav
grisha
+ grpname
gstate
gthm
guiddef
@@ -641,6 +736,7 @@
halign
handfull
handlemessage
+ hashfiles
hastouchscreen
hatmotion
haveint
@@ -679,6 +775,8 @@
ifaddr
ifaddrs
ifdebug
+ ifdef
+ ignorevar
iiiiisss
iiiiisssi
iircade
@@ -688,6 +786,7 @@
imayushsaini
importlines
incentivized
+ includelines
indata
inet
infoset
@@ -712,6 +811,7 @@
ioprepped
ioprepping
ioreg
+ iphonesimulator
iscoroutinefunction
iserverget
iserverput
@@ -771,14 +871,17 @@
lastline
lastvalid
lbzip
+ lchmod
leaderboard
leaderboards
lenval
levelno
levelnos
levelstr
+ lffi
lgui
lhalf
+ libballistica
libbz
libbzip
libutf
@@ -786,6 +889,7 @@
lightshad
linearsize
linearstep
+ linebegin
linemax
linestart
linkstoryboards
@@ -812,6 +916,7 @@
lrintf
lscope
lshort
+ lsplits
lsregister
lstr
lsync
@@ -839,6 +944,8 @@
makelevel
malhotra
mallocs
+ manfile
+ manprivpath
mantype
manualtab
maskhigh
@@ -847,6 +954,8 @@
mastervers
matchlines
maximus
+ maxlines
+ maxparts
maxpathlen
maxtries
maxwait
@@ -881,11 +990,15 @@
mmacosx
mmask
mmdevapi
+ mnames
modder
modders
modelview
+ modstr
+ modtime
moduletype
momemtary
+ morecnt
moreso
mqrspec
msaa
@@ -920,6 +1033,8 @@
mystatspage
mywidget
namecap
+ namel
+ nameu
nameval
nbuffer
ndebug
@@ -944,6 +1059,8 @@
newname
newnode
newtoken
+ newuuid
+ newuuids
nextchar
ninjafightplug
nitpicky
@@ -983,6 +1100,7 @@
objcount
objexists
objid
+ objpath
objset
objsizes
objtoyaml
@@ -999,7 +1117,10 @@
oldbook
olde
oldname
+ oldpath
oldtoken
+ olduuid
+ olduuids
onslaughtplug
oooo
ooooooo
@@ -1033,6 +1154,8 @@
ourself
ourstanding
outdict
+ outdir
+ outfiles
outmsg
outpath
outputter
@@ -1044,14 +1167,21 @@
pairsj
pairss
parameteriv
+ parentpath
passcode
+ patchpaths
+ pathbar
pathcapture
pathdst
pathlist
pathparts
+ pathsegs
pathsrc
pathwonky
pausable
+ pbasename
+ pbxgrp
+ pbxgrps
pcommands
pdataclass
pdoc
@@ -1063,10 +1193,12 @@
pflags
pgmout
phandle
+ phasename
phasescriptexecution
piplist
pipvers
pixelformat
+ pkgdir
platstr
playerspaztype
playpause
@@ -1075,6 +1207,8 @@
pluginsettings
plugnames
pname
+ pnamel
+ pnameu
podcast
podcasts
popd
@@ -1082,6 +1216,7 @@
positivex
positivey
positivez
+ posixshmem
posonlyargs
postinit
postrun
@@ -1095,10 +1230,12 @@
preconfig
predeclare
predeclares
+ predecs
prefs
preloaded
preloads
premult
+ prepass
prepdata
prereq
prerun
@@ -1115,13 +1252,19 @@
processinfoplistfile
processpch
processpchplusplus
+ processproductpackaging
+ processproductpackagingder
profilers
prog
proj
projbasename
projdir
+ projectconfig
+ projname
projpath
projprefix
+ projsrc
+ projtxt
prolly
proxykey
prtb
@@ -1141,6 +1284,7 @@
pulseaudio
punchmomentumlinear
punchthrough
+ pupdatedata
pushcall
putbits
putbitshigh
@@ -1151,6 +1295,7 @@
pwin
pwsz
pybuildapple
+ pycfgpath
pycommand
pyconfig
pycontext
@@ -1158,6 +1303,7 @@
pyhome
pylib
pylibpath
+ pymodulenames
pyobj
pyobjs
pythondevmode
@@ -1214,6 +1360,7 @@
rené
reprfunc
repro
+ requireable
rerase
resends
resetbtn
@@ -1242,6 +1389,8 @@
rsplen
rspobj
rsptypes
+ rsync's
+ rsyncver
rtest
rtypes
rtypevar
@@ -1261,6 +1410,7 @@
scenepacket
scenetime
screenmessage
+ scriptdst
scrollwidget
scutil
sddata
@@ -1309,10 +1459,13 @@
shouldnt
showbuffer
shufflable
+ signingconfig
+ signingconfigname
signsubscale
sigsetjmp
simd
simpletype
+ sincestr
sisssssssss
sixteenbits
slist
@@ -1326,6 +1479,7 @@
sockaddr
soffs
softdefault
+ softreq
solaris
sortname
sourcenode
@@ -1333,16 +1487,22 @@
spaz
spead
sphrand
+ spinoff's
+ spinoffconfig
spinup
spivak
+ spwd
srcabs
srcattr
srcfolder
+ srcgrp
srcid
srcname
srcpath
srcpaths
srcsz
+ srctime
+ srctimestr
sresult
sscanf
ssize
@@ -1375,6 +1535,7 @@
stephane
stepnum
stepsize
+ stgdict
storagenames
storecmd
stot
@@ -1395,6 +1556,7 @@
subentities
subfieldpath
subitems
+ submpath
subpaths
subplatform
subscale
@@ -1404,6 +1566,12 @@
sval
swidth
swiftc
+ swiftcompile
+ swiftdriver
+ swiftdriverjobdiscovery
+ swiftemitmodule
+ swiftgeneratepch
+ swiftmergegeneratedheaders
symbolification
syscalls
sysresponse
@@ -1429,12 +1597,14 @@
templatefs
tempvec
tenum
+ testclinic
testint
testinternalcapi
testnode
testresponse
testrunnable
testtask
+ testtype
texel
texqualstr
textcolor
@@ -1445,6 +1615,8 @@
theres
thislinelen
thismodule
+ thisname
+ thispath
threadlocals
threadname
threadpool
@@ -1459,10 +1631,13 @@
timesteps
timetype
timetypes
+ timevalfin
tkinval
tlog
tmpmat
tomer
+ tomllib
+ toplevelname
topos
totalobjmb
totalobjsize
@@ -1471,6 +1646,8 @@
tournamentbutton
toutf
tpartial
+ tpath
+ tpathsegs
tpexl
tpimport
tpimportex
@@ -1503,10 +1680,12 @@
tvos
tweakage
twidth
+ tword
twotimer
twst
typeobj
typestr
+ tzinfo
tzoffset
tzpath
uber
@@ -1537,6 +1716,7 @@
userspace
usid
uther
+ uuidentry
uuidmodule
uuids
uval
@@ -1576,6 +1756,7 @@
wack
wakeups
walisser
+ warnstr
wasdebug
wasn
watte
@@ -1616,9 +1797,12 @@
wvmpth
xbone
xcframework
+ xcft
xclamped
+ xcode's
xcodebuildverbose
xcoderun
+ xcodesortkey
xcrun
xdiff
xdist
diff --git a/src/assets/ba_data/python/baenv.py b/src/assets/ba_data/python/baenv.py
index f7928e00..be97fbb9 100644
--- a/src/assets/ba_data/python/baenv.py
+++ b/src/assets/ba_data/python/baenv.py
@@ -24,8 +24,6 @@ from typing import TYPE_CHECKING
from efro.log import setup_logging, LogLevel
if TYPE_CHECKING:
- from typing import Any
-
from efro.log import LogHandler
# Build number and version of the ballistica binary we expect to be
diff --git a/tools/batools/project/_checks.py b/tools/batools/project/_checks.py
index 4f4135d0..72b2e9d3 100755
--- a/tools/batools/project/_checks.py
+++ b/tools/batools/project/_checks.py
@@ -15,7 +15,6 @@ from efrotools import get_public_license, PYVER
if TYPE_CHECKING:
from batools.project._updater import ProjectUpdater
- from batools.featureset import FeatureSet
def _get_legal_notice_private() -> str:
diff --git a/tools/batools/spinoff/_context.py b/tools/batools/spinoff/_context.py
index af75b5e6..60673db7 100644
--- a/tools/batools/spinoff/_context.py
+++ b/tools/batools/spinoff/_context.py
@@ -27,7 +27,7 @@ from batools.spinoff._state import (
)
if TYPE_CHECKING:
- from typing import Callable, Any, Iterable
+ from typing import Callable, Iterable
from batools.project import ProjectUpdater
@@ -77,7 +77,7 @@ class SpinoffContext:
# By default, if dst files have their modtimes changed but
# still line up with src files, we can recover. But one may
# choose to error in that case to track down things mucking
- # with dst files when they shouldnt' be.
+ # with dst files when they shouldn't be.
self.strict = False
self._mode = mode
@@ -216,7 +216,7 @@ class SpinoffContext:
# not manage itself (to prevent accidentally working in such places).
self.src_write_paths = set[str]()
- # Paths wwhich will NOT be gitignored/etc. (in dst format)
+ # Paths which will NOT be gitignored/etc. (in dst format)
self.dst_write_paths = set[str]()
# Special set of paths managed by spinoff but ALSO stored in git in
@@ -580,6 +580,8 @@ class SpinoffContext:
def _generate_env_hash(self) -> None:
# pylint: disable=cyclic-import
from efrotools import get_files_hash
+
+ # noinspection PyUnresolvedReferences
import batools.spinoff
import batools.project
@@ -1570,7 +1572,7 @@ class SpinoffContext:
except Exception:
self._execution_error = True
print(
- (f"Error removing file: '{dst_path_full}'."),
+ f"Error removing file: '{dst_path_full}'.",
file=sys.stderr,
)
return removed_f_count
@@ -1654,7 +1656,7 @@ class SpinoffContext:
out = set[str]()
assert self._src_git_files is not None
for gitpath in self._src_git_files:
- # If omit-path contians this one or any component is found
+ # If omit-path contains this one or any component is found
# in omit-names, pretend it doesn't exist.
if _any_path_contains(self._src_omit_paths_expanded, gitpath):
continue # Omitting
@@ -1795,8 +1797,8 @@ class SpinoffContext:
do_backport = False
- src_datab: bytes | None
- dst_datab: bytes | None
+ src_datab: bytes | None = None
+ dst_datab: bytes | None = None
src_data: str | None = None
dst_data: str | None = None
diff --git a/tools/batools/spinoff/_main.py b/tools/batools/spinoff/_main.py
index fe1f949d..164189a0 100644
--- a/tools/batools/spinoff/_main.py
+++ b/tools/batools/spinoff/_main.py
@@ -133,7 +133,7 @@ def _do_create(src_root: str | None, dst_root: str) -> None:
from efrotools import getconfig
import batools.spinoff
- # Note: in our case dst_root is actualy what becomes the src project
+ # Note: in our case dst_root is actually what becomes the src project
# should clean up these var names to make that clearer.
if src_root is not None:
raise CleanError('This only works on src projects.')
diff --git a/tools/batools/xcodeproject.py b/tools/batools/xcodeproject.py
index c0290650..4d820ce3 100644
--- a/tools/batools/xcodeproject.py
+++ b/tools/batools/xcodeproject.py
@@ -12,6 +12,7 @@ from pbxproj import XcodeProject
from pbxproj.pbxextensions import TreeType, PBXGroup
# Need to patch XcodeProject slightly to support .cc files.
+# noinspection PyProtectedMember
xcft = XcodeProject._FILE_TYPES # pylint: disable=protected-access
if '.cc' not in xcft:
xcft['.cc'] = xcft['.cpp']
diff --git a/tools/efro/util.py b/tools/efro/util.py
index a36c2d70..16faf5a4 100644
--- a/tools/efro/util.py
+++ b/tools/efro/util.py
@@ -25,7 +25,7 @@ except ModuleNotFoundError:
if TYPE_CHECKING:
import asyncio
from efro.call import Call as Call # 'as Call' so we re-export.
- from typing import Any, Callable, NoReturn
+ from typing import Any, Callable
T = TypeVar('T')
ValT = TypeVar('ValT')
diff --git a/tools/efrotools/pybuild.py b/tools/efrotools/pybuild.py
index 25171cfa..f011b82e 100644
--- a/tools/efrotools/pybuild.py
+++ b/tools/efrotools/pybuild.py
@@ -14,7 +14,7 @@ from typing import TYPE_CHECKING
from efrotools import readfile, writefile, replace_exact
if TYPE_CHECKING:
- from typing import Any
+ pass
# Python version we build here (not necessarily same as we use in repo).
PY_VER_ANDROID = '3.11'