diff --git a/.efrocachemap b/.efrocachemap
index f968205e..b6dd77ac 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -3934,14 +3934,14 @@
"assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f",
"build/prefab/linux-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/ac/96/c3b9934061393fe09cc90ff24b8d",
"build/prefab/linux-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/38/2b/5641b3b40846f74f232771ac0457",
- "build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/fd/10/7681acdbd8feccb27175d6ab8609",
- "build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/fd/72/faa94ff6532a95c121fcb5a4f788",
- "build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/97/99/5ba65477f8b846beb98d146a1d2c",
- "build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/dd/5d/f8c5b24579236bef5209d7089044",
- "build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/ba/af/659cd48bd1be9b22ba3006ccb5f9",
- "build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/45/1e/cea9badaf52032adb40e6c3b5e21",
- "build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/9c/53/c0a2b1c2ee30397db0eb367b688c",
- "build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/8b/a1/c3471ecf846cce50d9220f7214c3",
- "build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/fa/95/87cc2ad7f0e780b02cd9ac633d3d",
- "build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/31/6f/9a29e7100425f8a364208ba40f4f"
+ "build/prefab/linux/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/12/0a/ea925f186b90fc6825826a172ff4",
+ "build/prefab/linux/release/ballisticacore": "https://files.ballistica.net/cache/ba1/33/c6/eef5bce22b04b76d250086bf0f8e",
+ "build/prefab/mac-server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/bf/9c/f478ef45dd97e24820875692febf",
+ "build/prefab/mac-server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/d1/a1/1abc324a112757d413b783b4604f",
+ "build/prefab/mac/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/a0/1b/926ca3d53ed7b3a5c915f6cef903",
+ "build/prefab/mac/release/ballisticacore": "https://files.ballistica.net/cache/ba1/e2/1c/b15ca147f7fde42f92c7178bc8b1",
+ "build/prefab/windows-server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/ec/cd/23e1c5e72dc5ec432f1d4453246c",
+ "build/prefab/windows-server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/ff/a9/3aac029e7bf8511eb3cf0a40a454",
+ "build/prefab/windows/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/a0/04/8274ec50900ee6ba4bc68960f074",
+ "build/prefab/windows/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/98/9f/1a878cf5afa75ce59130ecf39d3b"
}
\ No newline at end of file
diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml
index a1496dc2..53679d5c 100644
--- a/.idea/dictionaries/ericf.xml
+++ b/.idea/dictionaries/ericf.xml
@@ -29,8 +29,8 @@
achname
achs
acinstance
- ack
ack'ed
+ ack
acked
acks
acnt
@@ -151,8 +151,8 @@
bacommon
badguy
bafoundation
- ballistica
ballistica's
+ ballistica
ballisticacore
ballisticacorecb
bamaster
@@ -793,8 +793,8 @@
gamedata
gameinstance
gamemap
- gamepad
gamepad's
+ gamepad
gamepadadvanced
gamepads
gamepadselect
@@ -1177,8 +1177,8 @@
lsqlite
lssl
lstart
- lstr
lstr's
+ lstr
lstrs
lsval
ltex
@@ -1803,8 +1803,8 @@
sessionname
sessionplayer
sessionplayers
- sessionteam
sessionteam's
+ sessionteam
sessionteams
sessiontype
setactivity
@@ -1853,6 +1853,7 @@
snakeshadow
sname
snode
+ sockaddr
socketmodule
socketserver
somevar
@@ -2134,8 +2135,8 @@
txtw
typeargs
typecheck
- typechecker
typechecker's
+ typechecker
typedval
typeshed
typestr
diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc
index 3bbb99db..6ffc85c2 100644
--- a/src/ballistica/ballistica.cc
+++ b/src/ballistica/ballistica.cc
@@ -29,7 +29,7 @@
namespace ballistica {
// These are set automatically via script; don't change here.
-const int kAppBuildNumber = 20194;
+const int kAppBuildNumber = 20195;
const char* kAppVersion = "1.5.26";
const char* kBlessingHash = nullptr;
@@ -40,6 +40,7 @@ int g_early_log_writes{10};
Thread* g_main_thread{};
AppGlobals* g_app_globals{};
AppConfig* g_app_config{};
+AppInternal* g_app_internal{};
App* g_app{};
Account* g_account{};
Game* g_game{};
@@ -81,7 +82,7 @@ TextGraphics* g_text_graphics{};
auto BallisticaMain(int argc, char** argv) -> int {
try {
// Even at the absolute start of execution we should be able to
- // phone home on errors. Set BA_CRASH_TEST=1 to test this.
+ // phone home on errors. Set env var BA_CRASH_TEST=1 to test this.
if (const char* crashenv = getenv("BA_CRASH_TEST")) {
if (!strcmp(crashenv, "1")) {
FatalError("Fatal-Error-Test");
@@ -93,6 +94,7 @@ auto BallisticaMain(int argc, char** argv) -> int {
// -------------------------------------------------------------------------
g_app_globals = new AppGlobals(argc, argv);
+ g_app_internal = CreateAppInternal();
g_platform = Platform::Create();
g_platform->PostInit();
g_account = new Account();
diff --git a/src/ballistica/ballistica.h b/src/ballistica/ballistica.h
index b615fa98..b8b7a0e7 100644
--- a/src/ballistica/ballistica.h
+++ b/src/ballistica/ballistica.h
@@ -119,6 +119,7 @@ extern Account* g_account;
extern App* g_app;
extern AppConfig* g_app_config;
extern AppGlobals* g_app_globals;
+extern AppInternal* g_app_internal;
extern Audio* g_audio;
extern AudioServer* g_audio_server;
extern BGDynamics* g_bg_dynamics;
@@ -151,6 +152,10 @@ auto GetUniqueSessionIdentifier() -> const std::string&;
/// Have our main threads/modules all been inited yet?
auto IsBootstrapped() -> bool;
+/// Create/init our internal (non-public) parts.
+auto CreateAppInternal() -> AppInternal*;
+auto AppInternalGameThreadInit() -> void;
+
/// Does it appear that we are a blessed build with no known user-modifications?
auto IsUnmodifiedBlessedBuild() -> bool;
diff --git a/src/ballistica/core/types.h b/src/ballistica/core/types.h
index 3fe73091..0457d6e5 100644
--- a/src/ballistica/core/types.h
+++ b/src/ballistica/core/types.h
@@ -40,6 +40,7 @@ class Account;
class App;
class AppConfig;
class AppGlobals;
+class AppInternal;
class AreaOfInterest;
class Audio;
class AudioServer;