TASEmulators / TASEmulators/BizHawk

(NESHawk) Implement OAM decay

Open
#4,569 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Core: NesHawk Inaccuracy
Dominant language
C#
Stars
2.8k
Forks
468
PR merge metrics
No merged PRs in 30d

Description

On the NES, OAM is implemented using dynamic RAM rather than static RAM. This causes OAM to slowly decay into random data if not refreshed.

NESHawk does not emulate this. This is a problem because it is possible to create a test ROM that can detect emulators because of this. This also means it is possible to create a homebrew game that will not run on most emulators, making them unTASable.

As this effect is unpredictable and happens at inconsistent times, I suggest adding the option to enable them, as well as the seed and decay rate (as sync settings of course).

More info about it here.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The issue names no files or tests. Start by locating NESHawk's PPU/OAM implementation, then read the linked NESdev dynamic-RAM-decay reference. Done should include configurable decay behavior with seed, decay rate, and synchronization settings, plus coverage showing the behavior can be enabled and reproduced.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
game-dev
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.