Releases: codingncaffeine/Emutastic
Releases · codingncaffeine/Emutastic
Emutastic v1.0.1
What's New in v1.0.1
Video Recording for 3D Games
- Record any game — Video recording now works for all 3D/hardware-rendered games including Dreamcast, GameCube, N64, PSP, and 3DS. Previously only 2D games supported recording
- Zero-performance-impact capture — Uses Windows.Graphics.Capture at the compositor level with no GPU readback, so gameplay performance is unaffected
- Hardware-accelerated encoding — MediaTranscoder handles BGRA to H.264 conversion on the GPU, producing compact MP4 files without CPU overhead
- No extra downloads — Unlike FFmpeg for 2D games, 3D recording uses built-in Windows APIs with nothing additional to install
- Instant stop — Stopping a recording returns control immediately instead of blocking the UI
Custom Media Folders
- Screenshots folder — Choose where screenshots are saved via Preferences > Folders. The app still creates per-console and per-game subfolders inside your chosen directory
- Recordings folder — Choose where video recordings are saved. Same organized subfolder structure, your choice of root location
- Default paths shown — Each folder picker shows where files go if no custom folder is set
Bug Fixes
- Fixed keyboard input for 3D games — F9 and other hotkeys now work correctly when Vulkan or OpenGL overlay windows have focus
- Fixed overlay power button — The power button image in the game overlay was missing after the Windows 10 API integration
- Fixed overlay freezing during recording — The HUD overlay no longer freezes or vanishes when starting/stopping a recording
Full Changelog: v1.0.0...v1.0.1
Full Changelog: v1.0.0...v1.0.1
Emutastic v1.0.0
What's New in v1.0.0
Import System Overhaul
- First-run directory picker — Choose where Emutastic stores data before anything is created at the default path
- Serial import queue — OpenEmu-style batched import where new batches append and progress accumulates instead of resetting
- ROM hash cache — MD5 results persist across database rebuilds, eliminating multi-GB rehashing on reimport
- Existing artwork discovery — Detects 2D, 3D, and ScreenScraper artwork already on disk before attempting network fetches
- Save state discovery — Matches .json metadata to imported games to reconnect existing save states
- Faster imports — File counting and import loop run off the UI thread, pre-loaded HashSet for duplicate checking
Arcade Support
- FBNeo is the primary arcade core — Streamlined to FBNeo + Geolith (Neo Geo). Removed fbalpha2012 variants and all MAME cores
- Fixed arcade archive import — ZIP files containing only .bin chip dumps no longer trigger the wrong import path. Multi-file arcade and Neo Geo archives now import correctly as-is instead of failing extraction
- MAME artwork fallback — Arcade artwork lookups check the MAME thumbnail repository when FBNeo thumbnails aren't available
Neo Geo Pocket
- DAT file support — Neo Geo Pocket and Neo Geo Pocket Color DAT files available in Preferences for one-click download
- Fixed import misidentification — Archives with unrecognized ROM extensions now try folder name detection before defaulting to Arcade
- NGPC support — Neo Geo Pocket Color added to manufacturer, color, and box art ratio maps
Recording
- Improved video quality — Recording encoding quality increased from CRF 23 to CRF 18 for sharper pixel art capture
Bug Fixes
- Fixed artwork retry loop — Automatic artwork fetch no longer retries the same 300+ games every launch. The attempt counter now properly increments when ScreenScraper finds 2D art but libretro cover art isn't available, and when fetch exceptions occur
- Reduced auto-retry cap — Artwork fetch stops after 2 failed attempts instead of 3. Use the manual fetch button if a server was temporarily down
- Lazy artwork cache — ArtworkService cache index now loads off the UI thread to avoid blocking app startup
- Chunked artwork refresh — Large artwork repair passes yield to the UI thread periodically to prevent freezing
- N64 close crash resolved — Nintendo 64 games now close cleanly without crashing
Performance
- O(1) game lookup — MainViewModel uses a dictionary index instead of linear scans for RefreshGame operations
- Simplified cache updates — Console cache sync during import no longer triggers unnecessary WPF layout passes
Known Issues
- CD-i analog stick — The SAME CDi core maps analog input to digital thresholds internally. Full analog support would require modifying the core source
- Suikoden I → II cross-game saves — PlayStation memory card sharing between games is not yet implemented
- Neo Geo Pocket — Import fixes are new and could use wider testing from users with NGP libraries
- Vectrex overlays — Some overlay PNGs may not align perfectly at non-native resolutions
Roadmap
- CD-i analog fix — Investigate SAME CDi core modification for true analog stick support
- Cross-game memory card sharing — Shared .srm UI for PlayStation games that transfer save data
- Fast forward / rewind — Speed control and rewind buffer
- Cheat codes — Libretro cheat API support
- Sorting and filtering — Sort library by year, rating, last played, play count
- Game manuals / media viewer — View scanned manuals and supplemental media
Getting Started
- Download and extract the zip
- Run Emutastic.exe (click "More info" → "Run anyway" if SmartScreen blocks it)
- Open Preferences → Cores / Extras and download cores for the systems you want to play
- Download all DAT files — without them, disc images and some cartridge ROMs may be assigned to the wrong system during import
- Download SDL3.dll for controller name detection
- Check Preferences → System Files for any required BIOS files
- Drag and drop ROMs onto the library to import
Full Changelog: v0.9.9...v1.0.0
Emutastic v0.9.8
What's New
Shader Effects
- Post-processing shaders — 7 GPU-accelerated pixel shader presets: CRT Scanlines, Game Boy (DMG), Game Boy (DMG LCD), Game Boy Pocket, LCD Grid, Smooth, and None
- Overlay integration — Cycle through shaders from the in-game cog menu
- Per-game persistence — Shader selection saved and restored automatically per game
- Resolution-aware — CRT and LCD shaders update scanline density when the core changes resolution
- HW-render guard — Shader button hidden for Vulkan/OpenGL cores where it doesn't apply
Backup
- Backup folder — Set a folder in Preferences > Library to back up battery saves, save states, and library database on demand
- Restore from backup — One-click restore with confirmation dialog
Favorites
- Grouped by console — Favorites display with console headers matching the save states layout
- View toggles — 2D/3D box art and grid/list toggles work within favorites view
Library Navigation
- Scroll position memory — Scroll position saved and restored per library view
- Keyboard navigation — Arrow keys move between game cards, Enter opens game details
Preferences Polish
- Single-BIOS inline display — Consoles with only one BIOS show it inline without extra click
- Core Options grouped by manufacturer — Core Options tab moved next to Cores/Extras, consoles grouped by manufacturer
- FDS controller image — Scaled down 30% to match other systems
Performance
- Fix UI freezes — Bulk metadata updates use O(1) dictionary lookup instead of O(n²) scans; artwork repair batches UI callbacks
- Artwork retry cap — Automatic artwork fetch stops after 3 failed attempts per game
- Image cache — Game card artwork cached in memory with WeakReference, eliminating repeated decode on scroll
- Faster database reads — Column ordinals cached once per query instead of per-row lookups
- Faster console switching — Pre-built console caches use single GroupBy pass
Architecture
- CommunityToolkit.Mvvm — MainViewModel uses ObservableObject, [ObservableProperty] source generators, and relay commands
- Artwork service extraction — All artwork fetch logic extracted from MainWindow into ArtworkFetchService
- Navigation commands — 30+ sidebar buttons converted from Click handlers to XAML Command bindings
N64 Vulkan Fixes
- Fix relaunch crash — Closing and immediately reopening an N64 game no longer crashes
- Fix window resize crash — Swapchain recreation debounced to fire once after resizing stops
- In-game HUD overlay — Power/pause/save/settings pill displays correctly above Vulkan swapchain
- Clean teardown — Proper context_destroy → retro_unload_game → retro_deinit sequence