bitburner-official / bitburner-src

Bitburner source code.
Other
847 stars 274 forks source link

Feature Request: Unlock Steam Achievements Only When Triggered, Not on Save Load #1652

Open cmfrydos opened 2 months ago

cmfrydos commented 2 months ago

Problem:

Currently, whenever a save game is loaded, all unlocked achievements from that save are automatically synced to Steam. This can be problematic if you're loading a save file from another player or from a different playthrough, as it unintentionally grants achievements and disrupts your own achievement progression.

Proposed Solution:

Instead of syncing all unlocked achievements upon loading a save, Steam achievements should only be unlocked when the in-game conditions for those achievements are met in real-time. This means that achievements would trigger and sync only when the player personally accomplishes the required tasks during their session, not retroactively based on the state of the save.

Why This Matters:

d0sboots commented 2 months ago

I agree with the desirability of this feature, and the proposed solution. However, it will/would require significant rework of how achievements are handled, in particular across the browser/electron boundary. Also, I think we would need a "sync achievements to Steam" button on the achievements page, to handle edge cases where something got wrong/stuck, otherwise people could "miss" the window of having an achievement be granted and then be unable to get it.

catloversg commented 2 months ago

Instead of syncing all unlocked achievements upon loading a save, Steam achievements should only be unlocked when the in-game conditions for those achievements are met in real-time. This means that achievements would trigger and sync only when the player personally accomplishes the required tasks during their session, not retroactively based on the state of the save.

What will happen if the game cannot contact Steam servers when the player satisfies the condition of the achievement and then they do not satisfy it anymore? For example:

cmfrydos commented 2 months ago

Also, I think we would need a "sync achievements to Steam" button on the achievements page, to handle edge cases where something got wrong/stuck

I agree with that, this would also solve the scenario CatLover was describing, and would be a nice addition to the proposal.

d0sboots commented 2 months ago

What will happen if the game cannot contact Steam servers when the player satisfies the condition of the achievement and then they do not satisfy it anymore?

Currently, our in-game achievements are one-way: once achieved, they can't be lost. And steam achievements are granted based on these.

My proposal would be to keep this general design, but also track achievements earned in the current session. Steam achievements would be granted from those instead. This limits the impact of network issues to "only if longer than the play session."

Having a toast or prompt on load prompting to grant the unsynced achievements might also be better than in the achievements screen.