Repository navigation
v0.3.29 — Issue #47: v0.107.0 ModManager async lowering 호환 (mod 로드 hotfix)
6/5 베타 v0.107.0 업데이트 후 게임 실행 시 검은 화면 해결
게임 브랜치 전환(안정판↔베타) 직후 PLAY 누르면 검은 화면 해결
Mod 로드 정상 구동 확인
무엇이 바뀌었나
v0.3.28 의 critical regression hotfix [#47]. v0.3.28 install 후 외부 mods 가 로드되지 않던 문제 fix. v0.3.28 사용자는 이 v0.3.29 install 한 번이면 정상 복구 (세이브·로그인·진행도 보존).
핵심 변경
src/STS2Mobile/Patches/ExternalModsFileIo.cs (신규) + src/STS2Mobile/Patches/ModLoaderPatches.cs:
- v0.107.0 sts2.dll 의
ModManager.Initialize가sync void→async Task Initialize(IModManagerFileIo fileIo, ModSettings?, SemanticVersion?)로 시그니처 변경됨. async lowering 으로 메서드 body 의ldstr "mods"가 컴파일러 생성 state machine (<Initialize>d__N.MoveNext()) 안으로 옮겨졌고, 기존 transpiler 가 main body 만 보고 매칭 실패 → external mods 무시. - v0.3.28 의 [#44] fix 가 dst sts2.dll 을 v0.107.0 로 정상 갱신하면서 이 transpiler 실패가 노출 (v0.3.27 이하에서는 dst dll 이 옛 v0.106 stale 이라 매칭 우연히 성공).
Fix (transpiler → wrapper 전환)
- 신규
ExternalModsFileIo : IModManagerFileIo(5 메서드:GetFilesAt,GetDirectoriesAt,FileExists,DirectoryExists,OpenStream). path 가 게임의 "mods" 디렉토리 또는 그 하위면AppPaths.ExternalModsDir(/storage/emulated/0/StS2LauncherMM/Mods) 로 redirect — 표준 .NETSystem.IOAPI 사용해 외부 storage absolute path 100% 호환. 그 외 path 는 inner 위임. ModLoaderPatches: 기존 IL transpiler 제거. Harmony prefix 로Initialize의ref IModManagerFileIo fileIo를 wrapper 로 swap. interface 시그니처가 stable 한 한 게임이 IL 모양·async 여부 또 바꿔도 동작.
보존되는 것
세이브 데이터, Steam 로그인 토큰, 게임 진행도, mods 폴더 — 모두 보존. install -r (in-place upgrade), keystore 동일.
알려진 비호환
NFeedbackScreenOpener._Ready패치 1건 FAILED — pre-existing, 부팅·플레이 무관. 별도 fix 예정.
업그레이드
StS2Launcher-v0.3.29.apk 다운로드 → 기존 설치 위에 그대로 install.
검증된 디바이스
- SM-F966N (Galaxy Z Fold 7), Android 16, Adreno 830 —
[Mods] Redirected ModManager.Initialize fileIo -> /storage/emulated/0/StS2LauncherMM/Mods출력, 게임 측--- RUNNING MODDED! --- Loaded 6 mods확인. v0.3.28 의 transpiler 경고 ([Mods] Warning: could not locate "mods" ldstr) 사라짐. 메인 메뉴 진입 정상.