Phase 7: netfox + godot-jolt stack upgrade

Stack installed:
- netfox v1.35.3 (core + extras + noray + internals)
- godot-jolt v0.16.0-stable

Architecture:
- Server: ENet transport (works headless, no netfox deps)
- Client/Editor: netfox rollback (RollbackSynchronizer, TickInterpolator)

New/modified:
- docs/migration-netfox-plan.md — migration architecture
- scripts/network/network_manager.gd — netfox-aware ENet fallback
- scripts/network/player.gd — clean base player
- client/characters/player_netfox.gd — rollback player w/ WeaponManager
- client/characters/input/player_net_input.gd — BaseNetInput subclass
- client/characters/character/fps_character_controller.gd — netfox input feed
- client/weapons/ — weapon data, registry, TacticalWeaponHitscan, WeaponManager
- client/scripts/round_replicator.gd — client-side round state bridge
- server/scripts/round_manager.gd — improved state machine
- server/scripts/plugin_api/plugin_manager.gd — refined plugin system
- config: enemy_tag, ally_tag for meatball targeting

Removed: old C++ SimulationServer GDExtension (replaced by netfox rollback)
This commit is contained in:
2026-07-02 17:38:50 -04:00
parent e2dc429caa
commit e7299b17e9
3237 changed files with 523530 additions and 18 deletions
@@ -0,0 +1,9 @@
import sys
__all__ = ['tomllib']
if sys.version_info >= (3, 11):
import tomllib
else: # pragma: no cover
import tomli as tomllib
@@ -0,0 +1,27 @@
from __future__ import annotations
import shutil
import sys
from typing import TYPE_CHECKING, Any, Callable
if TYPE_CHECKING:
from _typeshed import ExcInfo, StrOrBytesPath
from typing_extensions import TypeAlias
# Same as shutil._OnExcCallback from typeshed
_OnExcCallback: TypeAlias = Callable[[Callable[..., Any], str, BaseException], object]
def shutil_rmtree(
path: StrOrBytesPath,
ignore_errors: bool = False,
onexc: _OnExcCallback | None = None,
) -> None:
if sys.version_info >= (3, 12):
return shutil.rmtree(path, ignore_errors, onexc=onexc)
def _handler(fn: Callable[..., Any], path: str, excinfo: ExcInfo) -> None:
if onexc:
onexc(fn, path, excinfo[1])
return shutil.rmtree(path, ignore_errors, onerror=_handler)
@@ -0,0 +1,13 @@
from __future__ import annotations
import sys
if sys.version_info >= (3, 12, 4):
# Python 3.13 should support `.pth` files encoded in UTF-8
# See discussion in https://github.com/python/cpython/issues/77102
PTH_ENCODING: str | None = "utf-8"
else:
from .py39 import LOCALE_ENCODING
# PTH_ENCODING = "locale"
PTH_ENCODING = LOCALE_ENCODING
@@ -0,0 +1,9 @@
import sys
# Explicitly use the ``"locale"`` encoding in versions that support it,
# otherwise just rely on the implicit handling of ``encoding=None``.
# Since all platforms that support ``EncodingWarning`` also support
# ``encoding="locale"``, this can be used to suppress the warning.
# However, please try to use UTF-8 when possible
# (.pth files are the notorious exception: python/cpython#77102, pypa/setuptools#3937).
LOCALE_ENCODING = "locale" if sys.version_info >= (3, 10) else None