Reverted experimental fix as game checks dll byte changes.
This commit is contained in:
@@ -49,10 +49,6 @@ from .self_update import (
|
||||
rollback_launcher_update,
|
||||
update_check_to_dict,
|
||||
)
|
||||
from .world_fix import (
|
||||
create_world_fix_status_target,
|
||||
read_world_fix_status,
|
||||
)
|
||||
|
||||
|
||||
def build_parser() -> argparse.ArgumentParser:
|
||||
@@ -147,8 +143,8 @@ def build_parser() -> argparse.ArgumentParser:
|
||||
action="store_true",
|
||||
dest="publisher_dll",
|
||||
help=(
|
||||
"diagnostic fallback: disable the in-memory post-login world fix "
|
||||
"(the publisher DLL is always used)"
|
||||
"compatibility option retained for older scripts; publisher code is "
|
||||
"always used without the retired world fix"
|
||||
),
|
||||
)
|
||||
play.add_argument("--dry-run", action="store_true")
|
||||
@@ -357,10 +353,10 @@ def _login_diagnostics(paths: AppPaths, timeout_seconds: float, as_json: bool) -
|
||||
print(f"game.dll: {report.game_dll}")
|
||||
if report.game_dll_sha256:
|
||||
print(f"DLL SHA-256: {report.game_dll_sha256}")
|
||||
world_fix_status = "ready" if report.world_fix_helper_ready else "not ready"
|
||||
print(f"World fix: {world_fix_status} ({report.world_fix_helper})")
|
||||
if report.world_fix_helper_sha256:
|
||||
print(f"Helper SHA: {report.world_fix_helper_sha256}")
|
||||
world_fix_status = "enabled" if report.world_fix_enabled else "retired"
|
||||
print(f"World fix: {world_fix_status}")
|
||||
if report.world_fix_disabled_reason:
|
||||
print(f"Reason: {report.world_fix_disabled_reason}")
|
||||
if report.runtime_kind:
|
||||
print(f"Runtime: {report.runtime_kind} ({report.runtime_path or 'unknown path'})")
|
||||
else:
|
||||
@@ -634,6 +630,9 @@ def _play_locked(
|
||||
skip_runtime_setup: bool,
|
||||
as_json: bool,
|
||||
) -> int:
|
||||
# The legacy flag is retained for command-line compatibility. V21 performs
|
||||
# periodic module-code checks, so every production launch is publisher-pristine.
|
||||
_ = publisher_dll
|
||||
settings = _load_or_default_settings(paths, persist=not dry_run)
|
||||
source = _source_game(paths, settings, game_dir)
|
||||
overlay = None
|
||||
@@ -654,12 +653,6 @@ def _play_locked(
|
||||
patterns=("log_*.txt",),
|
||||
)
|
||||
game_started_ns = time.time_ns()
|
||||
world_fix_status_target = None
|
||||
if not dry_run and not publisher_dll:
|
||||
world_fix_status_target = create_world_fix_status_target(
|
||||
paths.game_save,
|
||||
game_started_ns,
|
||||
)
|
||||
try:
|
||||
outcome = run_game(
|
||||
paths,
|
||||
@@ -667,8 +660,7 @@ def _play_locked(
|
||||
selection,
|
||||
runner,
|
||||
use_gamebox=not no_box,
|
||||
use_world_fix=not publisher_dll,
|
||||
world_fix_status_target=world_fix_status_target,
|
||||
use_world_fix=False,
|
||||
)
|
||||
except KeyboardInterrupt:
|
||||
current_game_log = _current_game_log(
|
||||
@@ -678,26 +670,13 @@ def _play_locked(
|
||||
)
|
||||
if current_game_log is not None and not as_json:
|
||||
_print_interrupted_game_log(current_game_log)
|
||||
world_fix_status = read_world_fix_status(
|
||||
world_fix_status_target,
|
||||
game_started_ns,
|
||||
)
|
||||
if world_fix_status is not None and not as_json:
|
||||
print(
|
||||
f"World-fix status: {str(world_fix_status['status'])} "
|
||||
f"({str(world_fix_status['path'])})",
|
||||
file=sys.stderr,
|
||||
)
|
||||
raise
|
||||
current_game_log = _current_game_log(
|
||||
native_log_directory,
|
||||
native_log_baseline,
|
||||
game_started_ns,
|
||||
)
|
||||
world_fix_status = read_world_fix_status(
|
||||
world_fix_status_target,
|
||||
game_started_ns,
|
||||
)
|
||||
world_fix_status = None
|
||||
_emit(
|
||||
{
|
||||
"ok": outcome.returncode == 0,
|
||||
@@ -738,6 +717,11 @@ def _current_game_log(
|
||||
"import_scene_threw": analysis.import_scene_threw,
|
||||
"failed_import_scenes": analysis.failed_import_scenes,
|
||||
"stage_without_new_stage": analysis.stage_without_new_stage,
|
||||
"module_code_sync_error": analysis.module_code_sync_error,
|
||||
"module_code_sync_left": analysis.module_code_sync_left,
|
||||
"module_code_sync_right": analysis.module_code_sync_right,
|
||||
"module_code_sync_delta": analysis.module_code_sync_delta,
|
||||
"banned_code_1": analysis.banned_code_1,
|
||||
"stage_without_new_stage_events": [
|
||||
event.to_dict()
|
||||
for event in analysis.events
|
||||
@@ -754,7 +738,13 @@ def _current_game_log(
|
||||
|
||||
def _print_interrupted_game_log(report: dict[str, object]) -> None:
|
||||
print(f"\nCurrent game log: {report['path']}", file=sys.stderr)
|
||||
if report["load_texture_to_material_failed"]:
|
||||
if report["module_code_sync_error"]:
|
||||
print(
|
||||
"Detected a publisher module-integrity mismatch; the game was launched "
|
||||
"with publisher-pristine code in this launcher version.",
|
||||
file=sys.stderr,
|
||||
)
|
||||
elif report["load_texture_to_material_failed"]:
|
||||
print(
|
||||
"Detected a texture/material failure while loading the game world.",
|
||||
file=sys.stderr,
|
||||
|
||||
Reference in New Issue
Block a user