Skip to content

BoneFish v5.0.0

Choose a tag to compare

@github-actions github-actions released this 05 Jul 09:51

v5.0.0 - Apply & Restart, Dark Game Fix, Flag Verification & Auto-Optimize Guard

Release date: 2026-07-05

Major release — menambahkan Apply & Restart Roblox, memperbaiki root cause game gelap, verifikasi flag otomatis, dan proteksi AutoOptimizeService terhadap preset user.

New Features — 🚀 Apply & Restart Roblox

Tombol baru di halaman Fast Flags yang memungkinkan user menerapkan semua flag dan restart Roblox dalam satu klik.

Cara kerja:

  1. User pilih preset / atur flag sesuai keinginan
  2. Klik 🚀 Apply & Restart Roblox
  3. Konfirmasi dialog muncul
  4. Otomatis: Save FastFlag + Settings → Kill Roblox + system tray → Launch BoneFish bootstrapper
  5. Settings window tertutup, bootstrapper mengambil alih

Yang dilakukan:

  • Save semua App.FastFlags dan App.Settings ke disk
  • Kill proses RobloxPlayerBeta dan RobloxCrashHandler (async, UI tidak freeze)
  • Signal BoneFish-WatcherExitEvent untuk clean up system tray
  • Launch BoneFish.exe -player untuk restart dengan flag baru
  • Tutup settings window agar tidak ada 2 window aktif

New Features — ✅ FastFlag Verification (VerifyAndNotify)

Setiap kali user mengapply preset, sistem sekarang membaca kembali ClientAppSettings.json dari disk dan menghitung jumlah flag yang berhasil ditulis.

Contoh notifikasi:

  • ✅ Ultra Low aktif — 32 FastFlag berhasil ditulis ke disk.
  • ✅ Balanced aktif — 28 FastFlag berhasil ditulis ke disk.
  • ✅ Potato Mode aktif — 41 FastFlag berhasil ditulis ke disk.
  • ✅ Stable aktif — 25 FastFlag berhasil ditulis ke disk.

Tujuan: memastikan user yakin flag sudah benar-benar tersimpan sebelum restart.

New Features — ⏳ Loading Indicator

ProgressRing + teks "Menerapkan preset..." muncul saat user mengklik preset, menggantikan tombol sementara. Snackbar timeout dinaikkan dari 3 detik ke 5 detik agar user sempat membaca verifikasi.

Bug Fixes — 🌑 Game Gelap (Root Cause Found & Fixed)

Penyebab sesungguhnya ditemukan dengan membaca file ClientAppSettings.json yang BENAR-BENAR ada di disk (bukan hanya di kode):

Flag di Disk Nilai Sebelumnya Dampak
DFIntDebugFRMQualityLevelOverride 1 FRM minimum → lighting pipeline rusak total
FIntRenderShadowIntensity 0 Semua bayangan dimatikan → area gelap
DFFlagDebugPauseVoxelizer True Voxelizer dimatikan → baked lighting mati
FIntCSGVoxelizerFadeRadius 0 Tidak ada transisi lighting

3 flag terakhir (shadow=0 + voxelizer pause + fade=0) bersama FRM=1 MEMATIKAN seluruh pipeline lighting Roblox — bukan hanya mengurangi, tapi benar-benar mematikan. Ini menyebabkan game (terutama horror/RPG seperti Phasmophobia) menjadi hitam di area yang seharusnya terang.

Fix yang diterapkan:

  1. ExtremePerformance preset (FastFlagsViewModel.cs):

    • FRM: 13 (masih sangat ringan, tapi preserve lighting pipeline)
    • HAPUS FIntRenderShadowIntensity = 0 (shadow biarkan default Roblox)
    • HAPUS DFFlagDebugPauseVoxelizer = True (voxelizer biarkan jalan)
    • HAPUS FIntCSGVoxelizerFadeRadius = 0 (fade biarkan default)
  2. AutoOptimizeService (AutoOptimizeService.cs):

    • FRM: 13 (sama, untuk auto-detected low-end)
    • HAPUS 3 flag shadow/voxelizer yang sama
  3. UltraLow preset (FastFlagsViewModel.cs):

    • FRM: 15 (sedikit lebih tinggi dari Extreme, preserve lighting)

Bug Fixes — 💾 Save Order Bug (Preset Tidak Tersimpan ke Disk)

Root cause: Di ApplyUltraLowSpecPreset() dan ApplyExtremePerformancePreset(), SelectedPreset di-set SETELAH App.Settings.Save(). Jadi nama preset tidak pernah tertulis ke disk.

Akibat: Saat bootstrapper restart, AutoOptimizeService.CheckAndApply() baca SelectedPerformancePreset dari disk → preset tidak ditemukan → OVERWRITE semua flag user dengan FRM=1 + shadow=0 + voxelizer=True → game gelap.

Fix: Pindahkan SelectedPreset = "..." SEBELUM App.Settings.Save() di kedua method. Sekarang preset tertulis ke disk SEBELUM save, sehingga bootstrapper membaca nilai yang benar.

Bug Fixes — 🛡️ AutoOptimizeService Overwrite Guard

Root cause: ApplyAggressiveOptimizations() di AutoOptimizeService.cs berjalan setiap kali BoneFish launch dan OVERWRITE preset pilihan user — memaksa FRM=1, shadow=0, voxelizer=True meskipun user sudah memilih preset lain.

Fix: Early-return check di ApplyAggressiveOptimizations(): jika user sudah memilih preset manual (UltraLow/Balanced/Stable/ExtremePerformance), skip semua aggressive overrides dan return. Preset user dihormati.

Bug Fixes — 🔁 Auto-Upgrade Downgrade Loop pada HandleUpgrade()

Gejala: Dialog InstallChecker_VersionLessThanInstalled ("Versi BoneFish yang kamu jalankan adalah versi lama…") muncul tiap kali launch untuk user yang menjalankan BoneFish dari staging path auto-updater (%localappdata%\Temp\BoneFish\Updates\BoneFish.exe). Bukan cuma spam dialog — kalau user klik Yes, kode HandleUpgrade() di Installer.cs tetap lanjut ke File.Copy(Paths.Process, Paths.Application, true), yaitu staging binary di-copy ke lokasi install canonical. Kalau staging binary lebih lama dari installed, install canonical di-downgrade. Launch berikutnya: dialog fire lagi → user klik Yes → downgrade lagi. Loop tak berhingga sampai user secara manual hapus staging binary atau reinstall penuh.

Akar masalah: Di HandleUpgrade(), logika lama memblok File.Copy hanya kalau MD5 paths cocok atau kalau user klik No pada dialog. Untuk auto-upgrade session, dialog tetap ditampilkan (tidak di-skip meskipun isAutoUpgrade=true), dan setelah Yes, tidak ada cek apakah currentVer < existingVer (running < installed) — yang justru adalah kondisi downgrade yang harus di-block.

Fix yang diterapkan di Bloxstrap/Installer.cs HandleUpgrade():

  1. Pre-dialog early-return khusus auto-upgrade. Jika isAutoUpgrade=true AND currentVer < existingVer, langsung return sebelum dialog pertama sempat fire. Tidak ada File.Copy, tidak ada downgrade, tidak ada yes/no dialog.
  2. Log informatif 4 baris menggantikan dialog — user bisa langsung baca dari BoneFish_*.log apa yang terjadi dan bagaimana cara recover:
    • Versi running vs installed
    • Path staging vs path install
    • Penyebab umum (stale staging binary dari versi sebelumnya)
    • Solusi: hapus staging binary atau reinstall untuk membuat install canonical jadi build aktif
  3. Manual downgrade flow tetap utuh. Untuk run non-auto-upgrade (user klik kanan exe dari folder atau dari shortcut ke lokasi lama), dialog "older version" tetap ditampilkan dengan perilaku existing — supaya user tetap aware kalau mereka sengaja menjalankan binary lama.

Skenario yang sekarang ter-handle benar:

Skenario Sebelum fix Sesudah fix
Auto-upgrade dengan staging lebih lama (running < installed) Dialog Yes/No → kalau Yes, install canonical DOWNGRADE → loop Silent abort + log informatif + no copy
Auto-upgrade dengan staging lebih baru (running > installed) Quiet upgrade — sudah benar sebelumnya Quiet upgrade — tetap
Auto-upgrade dengan staging = installed (MD5 match) Early-return no-op — sudah benar sebelumnya Early-return no-op — tetap
Manual run dengan binary lebih lama dari install Dialog Yes/No — sudah benar sebelumnya Dialog Yes/No — tetap (perilaku existing dipertahankan)

Cara recover user yang sudah terkena downgrade loop:

  1. Delete %localappdata%\Temp\BoneFish\Updates\BoneFish.exe
  2. Run installer BoneFish dari canonical install location (%localappdata%\Programs\BoneFish\BoneFish.exe) — sekarang akan rebuild staging fresh dengan versi sama dengan install
  3. Atau reinstall penuh via unins000.exe + install dari distribusi terbaru

Performance Presets — Deskripsi Lengkap

BoneFish menyediakan 5 preset performa untuk menyesuaikan Roblox dengan spesifikasi perangkat:

🤖 Auto-Optimize (Default)

  • Target: Semua spesifikasi
  • Filosofi: Deteksi hardware otomatis, apply optimasi yang sesuai
  • Yang diatur: FRM=21, Texture=Level0, MSAA=x1, Mesh=LOD0, D3D11, Disable Animations, Low Memory Mode
  • Cocok untuk: User yang tidak ingin repot atur manual

🛡️ Stable

  • Target: Semua spesifikasi, prioritaskan stabilitas
  • Filosofi: Auto-Optimize base + Network optimization + Nonaktifkan background updates
  • Yang diatur: Sama seperti Auto-Optimize + Network flags (No Delay) + BackgroundUpdates=False + FakeBorderlessFullscreen=False
  • Cocok untuk: User yang sering crash/freeze, ingin pengalaman paling stabil

🐌 Ultra Low-Spec

  • Target: PC kentang (2 core, 2-4GB RAM, Intel HD)
  • Filosofi: Aggressif tapi TIDAK mematikan lighting
  • Yang diatur: FRM=5, Texture=Level0, MSAA=x1, LOD=250, FPS=30, LightUpdates=4, Compositor=1, Animations Off, Low Memory Mode
  • Cocok untuk: Laptop lawas, PC integrated graphics, ingin main Roblox di spek minimum

🥔 Extreme Performance (Potato Mode)

  • Target: PC paling lemah (2 core, <4GB RAM, no GPU dedicated)
  • Filosofi: Maksimal performa, pertahankan VISIBILITAS game
  • Yang diatur: FRM=3, Texture=Level0, MSAA=x1, LOD=250/500/750, FPS=24-60 (configurable), LightUpdates=4, Compositor=1, Telemetry Off, Animations Off, Low Memory Mode
  • Yang TIDAK dilakukan (perubahan dari v4.4.0):
    • ❌ TIDAK mematikan shadow (sebelumnya FIntRenderShadowIntensity=0 → game gelap)
    • ❌ TIDAK pause voxelizer (sebelumnya DFFlagDebugPauseVoxelizer=True → lighting baked mati)
    • ❌ TIDAK paksa Voxel lighting (merusak game ShadowMap/Future)
    • ❌ TIDAK disable PostFx (visual game rusak)
    • ❌ TIDAK ubah SkyGray (atmosphere berubah)
    • ❌ TIDAK ubah LightAttenuation (model lighting berubah)
  • Cocok untuk: Device paling lemah yang ingin tetap bisa MELIHAT game dengan jelas

⚖️ Balanced

  • Target: Mid-range PC (4 core, 8GB RAM)
  • Filosofi: Keseimbangan antara performa dan visual
  • Yang diatur: FRM=15, Texture=Level1, MSAA=x2, Mesh=LOD1, Lighting=Default, Network flags
  • Cocok untuk: PC menengah yang ingin performa lebih tanpa mengorbankan visual terlalu banyak

Night Vision Mode 🌙

Mode opsional yang menerangkan area gelap di game secara client-side.

Cara kerja:

  • FFlagFastGPULightCulling3=True — GPU light culling efisien, area gelap jadi lebih terang
  • FFlagNewLightAttenuation=True — model attenuation "lembut", cahaya menyebar lebih jauh
  • FIntRenderLocalLightUpdatesMax=8 — senter/torch update lebih sering

Efek: Area gelap / senter game terasa lebih terang. Pemain lain dan server TIDAK melihat perubahan apapun.

Toggle: Settings → Fast Flags → Night Vision card → klik untuk aktif/nonaktifkan

FPS Monitor Overlay 📊

Overlay transparan yang menampilkan FPS real-time, frame time, dan status game.

Fitur:

  • FPS counter berbasis ETW (Event Tracing for Windows) — akurat, bukan WPF render frames
  • Color coding: Hijau (≥60 FPS), Kuning (30-59 FPS), Merah (<30 FPS)
  • Draggable — geser ke posisi manapun, posisi tersimpan
  • Persistent mode — tetap aktif meski keluar game
  • Vulkan detection — informasi jika game pakai Vulkan (ETW tidak bisa baca)
  • Low-end throttle — update interval naik ke 2 detik untuk hemat CPU

Toggle: Settings → Experimental → Enable FPS Monitor

Anti Not-Responding System

Sistem 3-layer proteksi terhadap freeze/crash di perangkat low-end:

Layer 1 — FastFlags (sebelum Roblox launch):

  • DFIntMaxActiveAnimationTracks=32 — potong Lua GC pressure (default 200+)
  • FIntRenderLocalLightFadeInMs=0 — hapus light fade work di main thread
  • FFlagDebugDisableTelemetry* — eliminasi background telemetry wakeups

Layer 2 — Process Priority (800ms setelah Roblox start):

  • Roblox process → AboveNormal priority
  • Windows scheduler beri lebih banyak CPU time

Layer 3 — RAM Trim (device <5GB RAM):

  • EmptyWorkingSet() pada semua non-critical background processes
  • Bebaskan RAM fisik untuk Roblox
  • System-critical processes (svchost, dwm, explorer) di-skip
  • Bonus: BoneFish pin ke core 0 di dual-core untuk kurangi L2 cache contention

Changelog (Technical)

Files changed:

  • Bloxstrap/UI/ViewModels/Settings/FastFlagsViewModel.cs:

    • Added ApplyAndRestartRobloxCommand + ApplyAndRestartRoblox() (async void, Task.Run for process kill)
    • Added RequestCloseWindowEvent for settings window close
    • Added IsApplying/IsNotApplying loading state
    • Added VerifyAndNotify() method — reads back JSON, shows flag count
    • Fixed save order: SelectedPreset before App.Settings.Save() in UltraLow + ExtremePerformance
    • ExtremePerformance: FRM 1→3, removed shadow/voxelizer flags
    • UltraLow: FRM 1→5
    • All preset methods: Notify()VerifyAndNotify() for verification
  • Bloxstrap/UI/Elements/Settings/Pages/FastFlagsPage.xaml:

    • Added 🚀 Apply & Restart Roblox CardAction button with "SAVE + RESTART" badge
    • Added loading indicator (ProgressRing + text) bound to IsApplying
    • Increased snackbar timeout from 3000 to 5000ms
  • Bloxstrap/UI/Elements/Settings/Pages/FastFlagsPage.xaml.cs:

    • Added RequestCloseWindowEvent handler → Window.Close()
  • Bloxstrap/Integrations/AutoOptimizeService.cs:

    • Added early-return in ApplyAggressiveOptimizations(): skip if user has manual preset
    • FRM: 1→3 for aggressive optimizations
    • Removed: FIntRenderShadowIntensity=0, DFFlagDebugPauseVoxelizer=True, FIntCSGVoxelizerFadeRadius=0
  • Bloxstrap/Bloxstrap.csproj:

    • Version bump: 4.4.0 → 5.0.0