diff --git a/.efrocachemap b/.efrocachemap
index d0507870..f231197e 100644
--- a/.efrocachemap
+++ b/.efrocachemap
@@ -3932,40 +3932,40 @@
"assets/build/windows/Win32/ucrtbased.dll": "https://files.ballistica.net/cache/ba1/b5/85/f8b6d0558ddb87267f34254b1450",
"assets/build/windows/Win32/vc_redist.x86.exe": "https://files.ballistica.net/cache/ba1/1c/e1/4a1a2eddda2f4aebd5f8b64ab08e",
"assets/build/windows/Win32/vcruntime140d.dll": "https://files.ballistica.net/cache/ba1/50/8d/bc2600ac9491f1b14d659709451f",
- "build/prefab/full/linux_arm64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/71/4a/57093a4dcd015962a1a6b5b5445c",
- "build/prefab/full/linux_arm64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b3/ca/afc9114024f9eace77d92a4f58d3",
- "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/29/35/5e6c98d1082f21df1f8464304f2e",
- "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/21/fc/91edc2dd43b5590475e89126b0ef",
- "build/prefab/full/linux_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c8/02/91db6909ac1ae066863f736e0e4f",
- "build/prefab/full/linux_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/ac/37/0fecba7ab0879a97a6db0f25397e",
- "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/6e/45/ad8007e0409154f1d86222aa7cf3",
- "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/4c/3e/ec9440531bcb7740dcb0f619aaf4",
- "build/prefab/full/mac_arm64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/57/75/945a9b017f520a31717b33c08756",
- "build/prefab/full/mac_arm64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/b2/4a/a728e62c4b4b917dd50ed7fe6b3d",
- "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/55/df/1b594e5da2cbbf9af5baaf8e1c2e",
- "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/9c/44/e337b62e35664ba68c5280113563",
- "build/prefab/full/mac_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/f7/4a/0913e44a567b3382e83cf3cc974b",
- "build/prefab/full/mac_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/4b/6c/099af5c8a20dd5ff6f705aeffe56",
- "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/33/f4/29f5c9f40cc459a1ff9b2f590831",
- "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cd/f5/b18f0af9516828418d1a6b52cfed",
- "build/prefab/full/windows_x86/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/c1/22/f0e4b6ca115b54caeb3db91cebba",
- "build/prefab/full/windows_x86/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/9f/ee/7ca526bc4b5c5bb6f3a11225b93c",
- "build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/b0/bc/1b3edecc7f84e968c6e4f37d684f",
- "build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/9c/77/8b85643ae7e78b60953b3a6d4a05",
- "build/prefab/lib/linux_arm64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/3e/ed/4bfd68ab3ff6a6fbcb45118506a2",
+ "build/prefab/full/linux_arm64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/b0/d7/24342e98d034071f2b7e758f6ad3",
+ "build/prefab/full/linux_arm64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/15/b9/283697524fd145a82d07896cb103",
+ "build/prefab/full/linux_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/28/55/bf5c45962c2546e3ee3ab29699a5",
+ "build/prefab/full/linux_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/2e/55/9d88c3f8b2f81dadd71556a5f5a9",
+ "build/prefab/full/linux_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/c0/58/8c56ef4020936c0b038a3e97989c",
+ "build/prefab/full/linux_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/76/c3/dc3b86bb4808f62b5cb1b52869ca",
+ "build/prefab/full/linux_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/cf/95/f90763272edcfdeff466869b7b1b",
+ "build/prefab/full/linux_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/b3/c9/8142691865cbadfe9aa5f877ab0d",
+ "build/prefab/full/mac_arm64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/b5/c0/950b9a835cfe61e57ce3e75151e4",
+ "build/prefab/full/mac_arm64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/93/56/582749266831fb8c4e1d2350ae39",
+ "build/prefab/full/mac_arm64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/72/5d/bcab78126983ce1effc042961f3a",
+ "build/prefab/full/mac_arm64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/22/05/369c8aeb1df2840d4196ad721d23",
+ "build/prefab/full/mac_x86_64/debug/ballisticacore": "https://files.ballistica.net/cache/ba1/41/1e/dcc3596268cccfadbf3bdde83f96",
+ "build/prefab/full/mac_x86_64/release/ballisticacore": "https://files.ballistica.net/cache/ba1/c4/ca/4aaa4497be67887dae3299f99bf7",
+ "build/prefab/full/mac_x86_64_server/debug/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/89/e1/5767f709124f71b2ba54f5ba120f",
+ "build/prefab/full/mac_x86_64_server/release/dist/ballisticacore_headless": "https://files.ballistica.net/cache/ba1/3c/87/19a4d5ccc73507a54911b5e0a44c",
+ "build/prefab/full/windows_x86/debug/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/44/b2/129b5e75753e1a3e540d5ec6147b",
+ "build/prefab/full/windows_x86/release/BallisticaCore.exe": "https://files.ballistica.net/cache/ba1/5d/71/0e16a0cbbe894122b34a7ea90547",
+ "build/prefab/full/windows_x86_server/debug/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/25/4b/ff892aed0e05ef23f2d63b4356ba",
+ "build/prefab/full/windows_x86_server/release/dist/ballisticacore_headless.exe": "https://files.ballistica.net/cache/ba1/f3/de/5d8129e6c294ec8390067688f401",
+ "build/prefab/lib/linux_arm64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/8c/39/85f77a12d141db9af737df376913",
"build/prefab/lib/linux_arm64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a1/a1/3b82daf3a84bfaf3d64d166cac3a",
- "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/92/ee/9b3a93adf75e2e540a5b2a7be1da",
+ "build/prefab/lib/linux_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7a/fc/38e48816e9d9cd64baebbb30deb6",
"build/prefab/lib/linux_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/b7/2d/82d4dc9c175bbf68a88944ac2c78",
- "build/prefab/lib/linux_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/99/ce/1661bd6ec468f937ef451bfac3af",
+ "build/prefab/lib/linux_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a7/f5/c1e90eff3b8f02fa812f89bf66fe",
"build/prefab/lib/linux_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/02/49/3b28ad61d548c23e6780c4f88bed",
- "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/ba/80/5a4776dcadf74874fd2ba2937207",
+ "build/prefab/lib/linux_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/07/99/9f5c09f44372348c267fb39ddd05",
"build/prefab/lib/linux_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/63/83/0ffe340483547e20baa8fd1293b9",
- "build/prefab/lib/mac_arm64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1e/cd/d10a7156e2b2b79f26e41a002f99",
- "build/prefab/lib/mac_arm64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a0/21/804895588f97a69efdc86742fca7",
- "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/d9/50/a416353a80b1bae135e5cbd76a92",
- "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/05/c3/cdc1a7c27ed0fe4c036ce629a33b",
- "build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/57/b8/3adfff8172e1d3c8785d83fca55f",
- "build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/75/f8/ec9fbd64c72c9da0cbab206f1ed6",
- "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/4e/f1/76d9bb8017b9ada36cd065698c4a",
- "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e2/b8/8bf21c62f2b5f620f26662f6d966"
+ "build/prefab/lib/mac_arm64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/a5/a1/ca42c662cac3c6285cbcc2c7885b",
+ "build/prefab/lib/mac_arm64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/e6/b3/91da761495aa2303d1b0e5b02094",
+ "build/prefab/lib/mac_arm64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/1b/f2/b4eb460cee9f2e75c94c61dd0e24",
+ "build/prefab/lib/mac_arm64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/52/ff/637bbb859b4ccc73f34f7a77903f",
+ "build/prefab/lib/mac_x86_64/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/7c/78/c981aaec70ca0072587506509c62",
+ "build/prefab/lib/mac_x86_64/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/33/96/d1755c352b6cbf7921e145f651e7",
+ "build/prefab/lib/mac_x86_64_server/debug/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/64/0f/b4560263bce797949caa824d11cd",
+ "build/prefab/lib/mac_x86_64_server/release/libballisticacore_internal.a": "https://files.ballistica.net/cache/ba1/50/16/62b4e23c92d31a053913f450a302"
}
\ No newline at end of file
diff --git a/.idea/dictionaries/ericf.xml b/.idea/dictionaries/ericf.xml
index 6c885280..7a37fde8 100644
--- a/.idea/dictionaries/ericf.xml
+++ b/.idea/dictionaries/ericf.xml
@@ -711,6 +711,7 @@
feedparser
ffaeff
ffap
+ fflush
fhash
fhashes
fhdr
@@ -1334,6 +1335,7 @@
modutils
moola
mopaque
+ moreso
mpath
mrmaxmeier
msbuild
@@ -2194,6 +2196,7 @@
timemin
timeremaining
timestep
+ timesteps
timestring
timestrval
timetype
@@ -2279,6 +2282,7 @@
uname
unbounds
uncollectible
+ underruns
unforunate
unimported
uninferrable
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f58c665a..4c51fec9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,4 @@
-### 1.6.0 (20308)
+### 1.6.0 (20326)
- Revamped netcode significantly. We still don't have client-prediction, but things should (hopefully) feel much lower latency now.
- Added network debug graphs accessible by hitting F8.
- Added private parties functionality (cloud hosted parties with associated codes making it easier to play with friends)
@@ -15,6 +15,7 @@
- Binary -cfgdir option now properly allows any path, not just './ba_root'.
- Additional server-wrapper options such as disabling auto-restart and automatic restarts on config file changes.
- Running a `_ba.connect_to_party` command via the -exec arg should now do the right thing.
+- Fixed possible crash due to buffer under/overruns in `Utils::precalc_rands_*`.
### 1.5.29 (20246)
- Exposed ba method/class initing in public C++ layer.
diff --git a/ballisticacore-cmake/.idea/dictionaries/ericf.xml b/ballisticacore-cmake/.idea/dictionaries/ericf.xml
index d2859507..5ddafca1 100644
--- a/ballisticacore-cmake/.idea/dictionaries/ericf.xml
+++ b/ballisticacore-cmake/.idea/dictionaries/ericf.xml
@@ -313,6 +313,7 @@
ffffff
fffffff
fffffffffifff
+ fflush
fgets
fieldname
fieldpath
@@ -567,6 +568,7 @@
modelview
moduletype
momemtary
+ moreso
mqrspec
msaa
mult
@@ -671,6 +673,7 @@
ostype
ourself
ourstanding
+ outpath
outputter
outval
outvalue
@@ -930,6 +933,7 @@
timeformat
timerlist
timestep
+ timesteps
timetype
timetypes
tmpmat
@@ -966,6 +970,7 @@
uncas
unchecking
underrun
+ underruns
unformatted
unichar
unichars
diff --git a/src/ballistica/ballistica.cc b/src/ballistica/ballistica.cc
index 5aa3a07b..5deddedd 100644
--- a/src/ballistica/ballistica.cc
+++ b/src/ballistica/ballistica.cc
@@ -21,7 +21,7 @@
namespace ballistica {
// These are set automatically via script; don't change here.
-const int kAppBuildNumber = 20326;
+const int kAppBuildNumber = 20327;
const char* kAppVersion = "1.6.0";
// Our standalone globals.
diff --git a/src/ballistica/generic/utils.cc b/src/ballistica/generic/utils.cc
index d2c9812d..aa293002 100644
--- a/src/ballistica/generic/utils.cc
+++ b/src/ballistica/generic/utils.cc
@@ -31,7 +31,7 @@ namespace ballistica {
#endif
#if USE_BAKED_RANDS
-float Utils::precalc_rands_1[kPrecalcRandsCount] = {
+float Utils::precalc_rands_1_[kPrecalcRandsCount] = {
0.00424972f, 0.0470216f, 0.545227f, 0.538243f, 0.214183f, 0.627205f,
0.194698f, 0.917583f, 0.468622f, 0.0779965f, 0.304211f, 0.773231f,
0.522742f, 0.378898f, 0.404598f, 0.468434f, 0.081512f, 0.408348f,
@@ -54,7 +54,7 @@ float Utils::precalc_rands_1[kPrecalcRandsCount] = {
0.0674501f, 0.000782927f, 0.607129f, 0.116035f, 0.67095f, 0.692934f,
0.276618f, 0.137535f, 0.771033f, 0.278625f, 0.686023f, 0.873823f,
0.254666f, 0.75378f};
-float Utils::precalc_rands_2[kPrecalcRandsCount] = {
+float Utils::precalc_rands_2_[kPrecalcRandsCount] = {
0.425019f, 0.29261f, 0.623541f, 0.241628f, 0.772656f, 0.434116f,
0.295335f, 0.814317f, 0.122326f, 0.887651f, 0.873536f, 0.692463f,
0.730894f, 0.142115f, 0.0722184f, 0.977652f, 0.971393f, 0.111517f,
@@ -77,7 +77,7 @@ float Utils::precalc_rands_2[kPrecalcRandsCount] = {
0.634341f, 0.158655f, 0.0157559f, 0.195268f, 0.663882f, 0.148622f,
0.118159f, 0.552174f, 0.757064f, 0.854851f, 0.991449f, 0.349681f,
0.17858f, 0.774876f};
-float Utils::precalc_rands_3[kPrecalcRandsCount] = {
+float Utils::precalc_rands_3_[kPrecalcRandsCount] = {
0.29369f, 0.894838f, 0.857948f, 0.04309f, 0.0296678f, 0.180115f,
0.694884f, 0.227017f, 0.936936f, 0.746493f, 0.511976f, 0.231185f,
0.1333f, 0.524805f, 0.774586f, 0.395971f, 0.206664f, 0.274414f,
@@ -101,9 +101,9 @@ float Utils::precalc_rands_3[kPrecalcRandsCount] = {
0.895885f, 0.391311f, 0.976098f, 0.473118f, 0.286659f, 0.0946781f,
0.402437f, 0.347471f};
#else // USE_BAKED_RANDS
-float Utils::precalc_rands_1[kPrecalcRandsCount];
-float Utils::precalc_rands_2[kPrecalcRandsCount];
-float Utils::precalc_rands_3[kPrecalcRandsCount];
+float Utils::precalc_rands_1_[kPrecalcRandsCount];
+float Utils::precalc_rands_2_[kPrecalcRandsCount];
+float Utils::precalc_rands_3_[kPrecalcRandsCount];
#endif // USE_BAKED_RANDS
Utils::Utils() {
@@ -149,9 +149,9 @@ Utils::Utils() {
#else
// set up our precalculated rand vals
for (int i = 0; i < kPrecalcRandsCount; i++) {
- precalc_rands_1[i] = static_cast(rand()) / RAND_MAX; // NOLINT
- precalc_rands_2[i] = static_cast(rand()) / RAND_MAX; // NOLINT
- precalc_rands_3[i] = static_cast(rand()) / RAND_MAX; // NOLINT
+ precalc_rands_1_[i] = static_cast(rand()) / RAND_MAX; // NOLINT
+ precalc_rands_2_[i] = static_cast(rand()) / RAND_MAX; // NOLINT
+ precalc_rands_3_[i] = static_cast(rand()) / RAND_MAX; // NOLINT
}
#endif
huffman_ = std::make_unique();
diff --git a/src/ballistica/generic/utils.h b/src/ballistica/generic/utils.h
index 72e2c4d0..710ade18 100644
--- a/src/ballistica/generic/utils.h
+++ b/src/ballistica/generic/utils.h
@@ -337,11 +337,23 @@ class Utils {
return false;
}
- /// Simple lists of pre-calculated random values between 0 and 1
- /// (with no particular distribution)
- static float precalc_rands_1[];
- static float precalc_rands_2[];
- static float precalc_rands_3[];
+ // Simple lists of pre-calculated random values between 0 and 1
+ // (with no particular distribution)
+ static float precalc_rand_1(int index) {
+ assert(index >= 0);
+ assert(index < kPrecalcRandsCount);
+ return precalc_rands_1_[index];
+ }
+ static float precalc_rand_2(int index) {
+ assert(index >= 0);
+ assert(index < kPrecalcRandsCount);
+ return precalc_rands_2_[index];
+ }
+ static float precalc_rand_3(int index) {
+ assert(index >= 0);
+ assert(index < kPrecalcRandsCount);
+ return precalc_rands_3_[index];
+ }
auto huffman() -> Huffman* { return huffman_.get(); }
// FIXME - move to a nice math-y place
@@ -358,6 +370,9 @@ class Utils {
}
private:
+ static float precalc_rands_1_[];
+ static float precalc_rands_2_[];
+ static float precalc_rands_3_[];
std::unique_ptr huffman_;
};
diff --git a/src/ballistica/graphics/camera.cc b/src/ballistica/graphics/camera.cc
index 43cd8b4e..fb5b3ac9 100644
--- a/src/ballistica/graphics/camera.cc
+++ b/src/ballistica/graphics/camera.cc
@@ -650,16 +650,16 @@ void Camera::Update(millisecs_t elapsed) {
if (!IsVRMode()) {
smooth_speed_.x += elapsed * rand_component
* (-0.5f
- + Utils::precalc_rands_1[(real_time / rand_incr_1)
- % kPrecalcRandsCount]);
+ + Utils::precalc_rand_1((real_time / rand_incr_1)
+ % kPrecalcRandsCount));
smooth_speed_.y += elapsed * rand_component
* (-0.5f
- + Utils::precalc_rands_2[(real_time / rand_incr_2)
- % kPrecalcRandsCount]);
+ + Utils::precalc_rand_2((real_time / rand_incr_2)
+ % kPrecalcRandsCount));
smooth_speed_.z += elapsed * rand_component
* (-0.5f
- + Utils::precalc_rands_3[(real_time / rand_incr_3)
- % kPrecalcRandsCount]);
+ + Utils::precalc_rand_3((real_time / rand_incr_3)
+ % kPrecalcRandsCount));
}
if (RandomFloat() < 0.1f && !IsVRMode()) {
@@ -706,18 +706,18 @@ void Camera::Update(millisecs_t elapsed) {
// Jostle the camera occasionally if we're shaking.
if (i % iterations == 0 && shake_amount_ > 0.0001f) {
shake_amount_ *= 0.97f;
- shake_vel_.x += 0.05f * shake_amount_
- * (0.5f
- - Utils::precalc_rands_1[real_time % 122 * i
- % kPrecalcRandsCount]);
- shake_vel_.y += 0.05f * shake_amount_
- * (0.5f
- - Utils::precalc_rands_2[real_time % 323 * i
- % kPrecalcRandsCount]);
+ shake_vel_.x +=
+ 0.05f * shake_amount_
+ * (0.5f
+ - Utils::precalc_rand_1(real_time % 122 * i % kPrecalcRandsCount));
+ shake_vel_.y +=
+ 0.05f * shake_amount_
+ * (0.5f
+ - Utils::precalc_rand_2(real_time % 323 * i % kPrecalcRandsCount));
shake_vel_.z +=
0.05f * shake_amount_
* (0.5f
- - Utils::precalc_rands_3[real_time % 76 * i % kPrecalcRandsCount]);
+ - Utils::precalc_rand_3(real_time % 76 * i % kPrecalcRandsCount));
}
for (int j = 0; j < iterations; j++) {
diff --git a/src/ballistica/graphics/net_graph.cc b/src/ballistica/graphics/net_graph.cc
index 977c34d3..b9aa4d4f 100644
--- a/src/ballistica/graphics/net_graph.cc
+++ b/src/ballistica/graphics/net_graph.cc
@@ -96,9 +96,9 @@ void NetGraph::Draw(RenderPass* pass, double time, double x, double y, double w,
VertexSimpleFull* v = vertex_buffer->elements.data();
for (auto&& s : impl_->samples) {
double t = s.first;
- double val = s.second;
+ double sval = s.second;
double vx = x + w * ((t - t_left) / t_width);
- double vy = y + h * ((val - v_bottom) / v_height);
+ double vy = y + h * ((sval - v_bottom) / v_height);
v->position[0] = static_cast(vx);
v->position[1] = static_cast(y);
v->position[2] = 0.0f;
diff --git a/src/ballistica/scene/node/flag_node.cc b/src/ballistica/scene/node/flag_node.cc
index 9f28a480..d3c39432 100644
--- a/src/ballistica/scene/node/flag_node.cc
+++ b/src/ballistica/scene/node/flag_node.cc
@@ -616,13 +616,13 @@ void FlagNode::UpdateFlagMesh() {
if (explicit_bool(do_wind)) {
flag_velocities_[top_right].x +=
wind_vec.x * kWindStrength
- * (Utils::precalc_rands_1[wind_rand_ % kPrecalcRandsCount] - 0.3f);
+ * (Utils::precalc_rand_1(wind_rand_ % kPrecalcRandsCount) - 0.3f);
flag_velocities_[top_right].y +=
wind_vec.y * kWindStrength
- * (Utils::precalc_rands_2[wind_rand_ % kPrecalcRandsCount] - 0.3f);
+ * (Utils::precalc_rand_2(wind_rand_ % kPrecalcRandsCount) - 0.3f);
flag_velocities_[top_right].z +=
wind_vec.z * kWindStrength
- * (Utils::precalc_rands_3[wind_rand_ % kPrecalcRandsCount] - 0.3f);
+ * (Utils::precalc_rand_3(wind_rand_ % kPrecalcRandsCount) - 0.3f);
}
UpdateSpringPoint(top_left, top_right, kFlagCanvasScaleX);
UpdateSpringPoint(bot_left, bot_right, kFlagCanvasScaleX);
diff --git a/src/ballistica/scene/node/prop_node.cc b/src/ballistica/scene/node/prop_node.cc
index a6cf0aea..ef7f6419 100644
--- a/src/ballistica/scene/node/prop_node.cc
+++ b/src/ballistica/scene/node/prop_node.cc
@@ -314,8 +314,8 @@ void PropNode::SetBody(const std::string& val) {
int64_t gti = scene()->stepnum();
dQFromAxisAndAngle(
iq, 0.05f, 1, 0,
- Utils::precalc_rands_1[(stream_id() + gti) % kPrecalcRandsCount]
- * 360.0f * (kPi / 180.0f));
+ Utils::precalc_rand_1((stream_id() + gti) % kPrecalcRandsCount) * 360.0f
+ * (kPi / 180.0f));
dBodySetQuaternion(body_->body(), iq);
}
}
diff --git a/src/ballistica/scene/node/scorch_node.cc b/src/ballistica/scene/node/scorch_node.cc
index 7ae09d8e..608fccd6 100644
--- a/src/ballistica/scene/node/scorch_node.cc
+++ b/src/ballistica/scene/node/scorch_node.cc
@@ -75,7 +75,7 @@ void ScorchNode::Draw(FrameDef* frame_def) {
c.Translate(position_[0], position_[1], position_[2]);
c.Scale(o * size_ * rand_size_[0], o * size_ * rand_size_[1],
o * size_ * rand_size_[2]);
- c.Rotate(Utils::precalc_rands_1[id() % kPrecalcRandsCount] * 360.0f, 0, 1, 0);
+ c.Rotate(Utils::precalc_rand_1(id() % kPrecalcRandsCount) * 360.0f, 0, 1, 0);
c.DrawModel(g_media->GetModel(SystemModelID::kScorch));
c.PopTransform();
c.Submit();
diff --git a/src/ballistica/scene/node/shield_node.cc b/src/ballistica/scene/node/shield_node.cc
index 187a8cb6..0a4d0f06 100644
--- a/src/ballistica/scene/node/shield_node.cc
+++ b/src/ballistica/scene/node/shield_node.cc
@@ -243,12 +243,12 @@ void ShieldNode::Draw(FrameDef* frame_def) {
c.MultMatrix((om * m).m);
float s = radius_ * 0.53f;
c.Scale(s, s, s);
- c.Rotate(Utils::precalc_rands_1[rot_count_ % kPrecalcRandsCount] * 360, 0,
- 1, 0);
+ c.Rotate(Utils::precalc_rand_1(rot_count_ % kPrecalcRandsCount) * 360, 0, 1,
+ 0);
float r2 =
r_scale_
* (0.97f
- + 0.05f * Utils::precalc_rands_2[rot_count_ % kPrecalcRandsCount]);
+ + 0.05f * Utils::precalc_rand_2(rot_count_ % kPrecalcRandsCount));
c.Scale(r2, r2, r2);
c.DrawModel(g_media->GetModel(SystemModelID::kShield),
kModelDrawFlagNoReflection);
@@ -261,8 +261,8 @@ void ShieldNode::Draw(FrameDef* frame_def) {
c2.PushTransform();
c2.MultMatrix((om * m).m);
c2.Scale(s, s, s);
- c2.Rotate(Utils::precalc_rands_1[rot_count_ % kPrecalcRandsCount] * 360,
- 0, 1, 0);
+ c2.Rotate(Utils::precalc_rand_1(rot_count_ % kPrecalcRandsCount) * 360, 0,
+ 1, 0);
c2.Scale(r2, r2, r2);
c2.DrawModel(g_media->GetModel(SystemModelID::kShield));
c2.PopTransform();
@@ -274,8 +274,8 @@ void ShieldNode::Draw(FrameDef* frame_def) {
c2.PushTransform();
c2.MultMatrix((om * m).m);
c2.Scale(s, s, s);
- c2.Rotate(Utils::precalc_rands_1[rot_count_ % kPrecalcRandsCount] * 360,
- 0, 1, 0);
+ c2.Rotate(Utils::precalc_rand_1(rot_count_ % kPrecalcRandsCount) * 360, 0,
+ 1, 0);
float sc = r2 * 1.1f;
c2.Scale(sc, sc, sc);
c2.DrawModel(g_media->GetModel(SystemModelID::kShield));
diff --git a/src/ballistica/scene/node/spaz_node.cc b/src/ballistica/scene/node/spaz_node.cc
index fb9817b8..63a5195d 100644
--- a/src/ballistica/scene/node/spaz_node.cc
+++ b/src/ballistica/scene/node/spaz_node.cc
@@ -3057,8 +3057,8 @@ void SpazNode::Step() {
// 0,1,0,
// std::max(-0.5f,std::min(0.5f,a_vel_y_smoothed_more_*-0.07f)));
} else if (gti % 30 == 0
- && Utils::precalc_rands_1[(gti + stream_id() * 3 + 143)
- % kPrecalcRandsCount]
+ && Utils::precalc_rand_1((gti + stream_id() * 3 + 143)
+ % kPrecalcRandsCount)
> 0.9f) {
// otherwise, look around occasionally..
// else if (getScene()->stepnum()%30 == 0 and
@@ -3069,17 +3069,17 @@ void SpazNode::Step() {
head_turning = true;
dQFromAxisAndAngle(
neck_joint_->qrel,
- Utils::precalc_rands_1[(stream_id() - gti)
- % (kPrecalcRandsCount - 3)]
+ Utils::precalc_rand_1((stream_id() + gti)
+ % (kPrecalcRandsCount - 3))
* 0.05f,
- Utils::precalc_rands_2[(stream_id() + 42 * gti)
- % kPrecalcRandsCount],
- Utils::precalc_rands_3[(stream_id() + 3 * gti)
- % (kPrecalcRandsCount - 1)]
+ Utils::precalc_rand_2((stream_id() + 42 * gti)
+ % kPrecalcRandsCount),
+ Utils::precalc_rand_3((stream_id() + 3 * gti)
+ % (kPrecalcRandsCount - 1))
* 0.05f,
1.5f
- * (Utils::precalc_rands_2[(stream_id() + gti)
- % kPrecalcRandsCount]
+ * (Utils::precalc_rand_2((stream_id() + gti)
+ % kPrecalcRandsCount)
- 0.5f));
// dQFromAxisAndAngle(neck_joint_->qrel,
// RandomFloat()*0.05f,
@@ -6190,7 +6190,7 @@ void SpazNode::SetShattered(int val) {
shatter_lower = 0.6f;
} else if (last_hit_was_punch_) {
// Punches mostly take heads off or break torsos in half.
- if (Utils::precalc_rands_2[(stream_id() * 31 + 112) % kPrecalcRandsCount]
+ if (Utils::precalc_rand_2((stream_id() * 31 + 112) % kPrecalcRandsCount)
> 0.3f) {
shatter_neck = 0.9f;
shatter_pelvis = 0.1f;
@@ -6210,24 +6210,24 @@ void SpazNode::SetShattered(int val) {
// in kid-friendly mode, don't shatter anything..
if (explicit_bool(true)) {
float rand1 =
- Utils::precalc_rands_1[(stream_id() * 3 + 1) % kPrecalcRandsCount];
+ Utils::precalc_rand_1((stream_id() * 3 + 1) % kPrecalcRandsCount);
float rand2 =
- Utils::precalc_rands_2[(stream_id() * 2 + 111) % kPrecalcRandsCount];
+ Utils::precalc_rand_2((stream_id() * 2 + 111) % kPrecalcRandsCount);
float rand3 =
- Utils::precalc_rands_3[(stream_id() * 4 + 7) % kPrecalcRandsCount];
+ Utils::precalc_rand_3((stream_id() * 4 + 7) % kPrecalcRandsCount);
float rand4 =
- Utils::precalc_rands_1[(stream_id() * 7 + 78) % kPrecalcRandsCount];
- float rand5 = Utils::precalc_rands_3[(stream_id()) % kPrecalcRandsCount];
+ Utils::precalc_rand_1((stream_id() * 7 + 78) % kPrecalcRandsCount);
+ float rand5 = Utils::precalc_rand_3((stream_id()) % kPrecalcRandsCount);
float rand6 =
- Utils::precalc_rands_2[(stream_id() / 2 + 17) % kPrecalcRandsCount];
+ Utils::precalc_rand_2((stream_id() / 2 + 17) % kPrecalcRandsCount);
float rand7 =
- Utils::precalc_rands_1[(stream_id() * 10) % kPrecalcRandsCount];
+ Utils::precalc_rand_1((stream_id() * 10) % kPrecalcRandsCount);
float rand8 =
- Utils::precalc_rands_3[(stream_id() * 17 + 2) % kPrecalcRandsCount];
+ Utils::precalc_rand_3((stream_id() * 17 + 2) % kPrecalcRandsCount);
float rand9 =
- Utils::precalc_rands_2[(stream_id() * 13 + 22) % kPrecalcRandsCount];
+ Utils::precalc_rand_2((stream_id() * 13 + 22) % kPrecalcRandsCount);
float rand10 =
- Utils::precalc_rands_2[(stream_id() + 19) % kPrecalcRandsCount];
+ Utils::precalc_rand_2((stream_id() + 19) % kPrecalcRandsCount);
// Head/mid-torso are most common losses.
if (rand1 < shatter_neck) shatter_damage_ |= kNeckJointBroken;