skyline icon indicating copy to clipboard operation
skyline copied to clipboard

Per-Title MetaData (PTMD)

Open PixelyIon opened this issue 3 years ago • 1 comments

Design Goals

  • Provide relevant information about a title: The data should consist of everything relevant to the user for the purposes of emulating a title, it should be concise and avoid unnecessary noise at the same time.
  • Fully in-app: All data should be accessible completely from inside the application, the user should not need to navigate outside the application to get an overview of the game. An exception to this is bug reports where the user can be led to a back-end for that.
  • Up-to-date data: The data should be nearly always up-to-date with a notification for stale data which can be acted upon to replace it with new data.
  • Quality Control: We do not want the data to be low-quality with everything from spelling errors to vague descriptions.

Architecture

Structured data for application

The data should be a JSON with a schema, this allows a simple implementation on the back-end and much better UI integration as opposed to free-form data. Any descriptions of a game's behavior can be documented in detail outside of this.

Format
  • Name with Title ID: The name of the title alongside it's Title ID as assigned by Nintendo
  • GitHub Discussion: A link to the GitHub Discussion for the title
  • Playability Rating: A simple rating system denoting the overall playability of a title at the moment, every user can suggest a rating here which will be weighed up according to how recent it is and updated accordingly.
    • Crash/Frozen: The game either crashes or freezes early into boot
    • Intro/Menu: The game boots to the intro or menu but cannot get past that
    • In-game with major bugs: The game has bugs which range from extreme auditory/visual disruptions to it not being completed without the use of cheats or saves
    • In-game with minor bugs: The game has bugs but they don't significantly affect the experience, minor auditory/visual disruptions are acceptable
    • Perfect: The game has no known bugs in it's behavior
  • Issues: A list of all issues with the title, they should be synchronized with GitHub Discussions on where the issues will be filed and link to it from a checklist of all issues for a particular title. When an issue is closed it should be reflected in-app but the entries may remain on the list for historical reference. Adding an issue should be possible from in-app which should redirect a user to an appropriate GitHub Discussions page where they can fill information in.
    • Workarounds: If an issue has a workaround, it should be presented alongside the issue. It should support being able to link directly to a specific cheat/save in a programmatic manner.
  • Emulation Notes: A general list of notes for a better experience while emulating the game, this might not be required in-practice due to it being redundant with issues and their workarounds.
  • Cheats: A list of cheats for a title, this may supplement an external cheat database and with cheats which are oriented towards emulation or Skyline specifically. It should not be used to include entries which are already in the external cheat database redundantly.
  • Saves: A list of save files for a title, it can be simple NAND dumps from a title donated by users. It should be allowed for users to directly upload their current NAND for a title as a donation which will then be approved and provided accordingly.

Trusted Users

A group of trusted users should be created which will provide authoritative feedback on if a piece of contributed content is up to our standards. They need to manually accept every change proposed to the PTMD, this may be automated at a later stage but will require manual work initially.

Trusted users will also have a larger voice in the playability status for a game, on an issue being fixed a game will be marked as out-of-date. If a trusted user has said title, they will be encouraged to test it and update the rating in accordance to the performance after fixing the bug.


GitHub as back-end

The data should be stored in a GitHub repository on a per-title basis in a human-readable format such as Markdown alongside the saves and other assets. It's format should be fixed as mentioned prior (which can be enforced using a linter) that will be parsed by the application.

We can also use jsDelivr as our CDN for all data as long as it's in a GitHub repository, this significantly reduces the server load which might be present by serving content directly from a server.

Any content which is updated from the app must be done through a bot which can make the appropriate PRs and commits for updating data which the aforementioned trusted users will be responsible for merging.


Further Suggestions

  • Controller Section: A fixed-format supported controller definition, this can be easily retrieved programmatically from the game. This section could also include recommended input configurations for a particular game.
  • Tie rating to issues: The playability rating could be a function of the amount of issues with each issue having a severity which affects the degree to which it doesn't work. This approach has a pitfall of issues not being filed due to the lack of popularity of a game and the rating being inaccurate.

PixelyIon avatar Feb 18 '21 08:02 PixelyIon

I approve.

IvarWithoutBones avatar Feb 18 '21 13:02 IvarWithoutBones