aboutsummaryrefslogtreecommitdiff
path: root/libs/basic_games/games/stalkeranomaly/XRNET.py
diff options
context:
space:
mode:
authorSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
committerSulfurNitride <SulfurNitride@users.noreply.github.com>2026-02-11 02:37:39 -0600
commit7ee008e150bc5bcf76082d726f719ee0fdfda982 (patch)
tree27fb39be241fdb5ac2734c574de678977d1856d0 /libs/basic_games/games/stalkeranomaly/XRNET.py
Fluorine Manager: full Linux port of Mod Organizer 2
Complete native Linux port with FUSE-based virtual filesystem, Proton/umu-run integration, and Flatpak packaging. Key features: - FUSE VFS replacing Windows USVFS (in-process + standalone helper for Flatpak) - Proton/GE-Proton/umu-run launcher with env var forwarding - Flatpak support (sandbox-aware VFS, NXM handler, umu-run) - Wine prefix management UI - Case-insensitive path resolution for Linux filesystems - QSettings-safe INI handling (avoids Bethesda INI corruption) - Portable instance support with auto-generated launcher scripts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Diffstat (limited to 'libs/basic_games/games/stalkeranomaly/XRNET.py')
-rw-r--r--libs/basic_games/games/stalkeranomaly/XRNET.py45
1 files changed, 45 insertions, 0 deletions
diff --git a/libs/basic_games/games/stalkeranomaly/XRNET.py b/libs/basic_games/games/stalkeranomaly/XRNET.py
new file mode 100644
index 0000000..2df87a9
--- /dev/null
+++ b/libs/basic_games/games/stalkeranomaly/XRNET.py
@@ -0,0 +1,45 @@
+from .XRIO import XRReader
+from .XRMath import IVec3, IVec4
+
+
+class XRNETState:
+ def __init__(self):
+ self.position = IVec3(0.0, 0.0, 0.0)
+ self.quaternion = IVec4(0.0, 0.0, 0.0, 0.0)
+ self.enabled = False
+
+ def read(self, reader: XRReader, fmin: IVec3, fmax: IVec3):
+ self.position = self.fvec_q8(reader, fmin, fmax)
+ self.quaternion = self.fqt_q8(reader)
+ self.enabled = bool(reader.u8())
+
+ def clamp(self, val: float, low: float, high: float) -> float:
+ if val < low:
+ return low
+ elif val > high:
+ return high
+ else:
+ return val
+
+ def fvec_q8(self, reader: XRReader, fmin: IVec3, fmax: IVec3):
+ vec = IVec3(0.0, 0.0, 0.0)
+ vec.x = self.f_q8(reader, fmin.x, fmax.x)
+ vec.y = self.f_q8(reader, fmin.y, fmax.y)
+ vec.z = self.f_q8(reader, fmin.z, fmax.z)
+ vec.x = self.clamp(vec.x, fmin.x, fmax.x)
+ vec.y = self.clamp(vec.x, fmin.y, fmax.y)
+ vec.z = self.clamp(vec.z, fmin.z, fmax.z)
+
+ def fqt_q8(self, reader: XRReader):
+ vec = IVec4(0.0, 0.0, 0.0, 0.0)
+ vec.x = self.f_q8(reader, -1.0, 1.0)
+ vec.y = self.f_q8(reader, -1.0, 1.0)
+ vec.z = self.f_q8(reader, -1.0, 1.0)
+ vec.w = self.f_q8(reader, -1.0, 1.0)
+ vec.x = self.clamp(vec.x, -1.0, 1.0)
+ vec.y = self.clamp(vec.y, -1.0, 1.0)
+ vec.z = self.clamp(vec.z, -1.0, 1.0)
+ vec.w = self.clamp(vec.w, -1.0, 1.0)
+
+ def f_q8(self, reader: XRReader, fmin: float, fmax: float):
+ return (float(reader.u8()) / 255.0) * (fmax - fmin) + fmin