Skip to content

v0.6.6

Choose a tag to compare

@github-actions github-actions released this 10 May 20:39

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.txt no 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 / +0x4080 Beta→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 RockSniffer and RockSnifferLib repos now have .gitattributes pinning 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.