Repository navigation
v0.6.6
v0.6.6 - gameStage memory reader migrated to static address
Eliminates junk values in Score Attack pre-song menus, surfaces three previously-invisible game stages, and lays the groundwork for flag-driven pause detection.
Highlights
game_stage.txtno longer reports junk strings in Score Attack pre-song menus (song select, song options, tuner). Previously these screens reported garbled file path fragments and other unrelated buffer contents.- Three new game stages now visible for the first time:
las_pause,nsp_pause,nsp_tuner. These exist in Rocksmith but were silently dropped by the previous reader. - No changes to addons, Discord RPC, song logging, or Nonstop Play transition handling. Existing consumers continue working unchanged.
What changed
The previous reader walked a four-hop pointer chain ([0x18, 0x18, 0xC, 0x14] from a base pointer) into a transient per-screen UI struct. That struct gets reused or torn down across game state changes, which is why menu states returned garbage and pause stages for LaS / NSP were never seen -the chain simply wasn't pointing at the right cell when those stages were active.
gameStage is now read directly from the canonical .data-section buffer at Rocksmith2014.exe+0xF5F7C9 (Remastered). This is the cell Rocksmith's UI code writes for the current displayed stage; the same place that powers the in-game UI text. Tracks correctly across all observed states.
Behavior worth knowing
Rocksmith does not update the gameStage cell on pause → resume or pause → restart transitions. The cell continues to read *_pause until the user navigates back to a menu or starts a different song. This is engine behavior, not a reader bug.
Addons that need actual play/pause state should consult game_state (the SnifferState) rather than parsing gameStage strings– game_state derives play/pause from song-timer behavior, not gameStage strings, and handles this correctly.
Compatibility
- Verified on: Rocksmith 2014 Remastered.
- Beta and Learn-And-Play builds: memory offsets back-derived using the standard
+0x3080/+0x4080Beta→Remastered / Beta→LaP shift convention. Untested on those builds. If gameStage misbehaves on Beta or LaP (always empty, always garbage), the new offset is the most likely suspect.
Also in this release
- Line-ending hygiene. Both
RockSnifferandRockSnifferLibrepos now have.gitattributespinning LF on checkout regardless of platform. Eliminates CRLF/LF mismatch warnings when extracting source archives between Linux and Windows. No effect on the built binary.
Discovery credit
The static gameStage buffer was discovered using Cheat Engine string-scan for known stage names (gcpre, sa_pause) with the game running, then narrowing the candidate addresses by which one round-tripped correctly across mode and menu transitions.
Acknowledgments
Thanks to kokolihapihvi (upstream RockSniffer maintainer) for cross-referencing the original reverse-engineering notes that helped narrow the search.