TASEmulators / TASEmulators/BizHawk

Always be recording a movie

Open
#3,061 2 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

App: EmuHawk Meta Request: Feature/Enhancement
Dominant language
C#
Stars
2.8k
Forks
468
PR merge metrics
No merged PRs in 30d

Description

No more will you say "Wish I got that on tape!" (or more likely "Wish I could reproduce that!")

Blocked by:

  • #2522 and other general sloppiness in the frontend
  • #2976 (need to put non-inputlog things in movie files somewhere)
  • special cases everywhere for NullHawk, probably

Doing this would also enable what I'm calling a "time-tree" model for SaveRAM and savestates, where casual play essentially behaves like TAStudio w.r.t. rewinding, but with the possibility of also autosaving every "leaf" in the "time tree" i.e. true un-loadstate. Such a model would necessarily give each tree and branch some sort of identifier, resolving #2175, #2437, and #2484. (TAS Editor appears to have a similar model for its branches? #568 Why was that not copied in TAStudio to begin with?)

Always recording would mean current behaviour of some cores w.r.t. mandating BIOS for recording would need to change. See #3763.

An open question is what to do about DeterministicEmulation (which I'd like to rename) when EmuHawk is always recording. Maybe it could be a frontend setting, but then movies made with it disabled (InaccPerfHacksAllowed = true) may not play back correctly. Maybe always recording could be a frontend setting, and the user has to directly choose between it and performance hacks.

adelikat says:

InputLog class (as compared to Movie class)

The input log object will be a fast and minimal movie implementation. The idea is that underneath the hood, bizhawk could always be recording. This log would be saved into a specific place. It would always be going unless the user is officially recording a movie. The key is that it has to be fast and not be a drain on resources, since a user could be playing literally for days. It must not get in the way of the casual user experience.

backup movie bool - false always
istext = false (always binary movies)
if guid doesn't match - off
checktimelines - off
int maxframes - if exceeds then increment file name, add a savestate to new movie, and start logging
--this will need logic for loading a state before this new movie, it should know how to go back to a previous movie

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

Start by reading the mentioned InputLog and Movie classes and the EmuHawk frontend behavior; review blockers #2522, #2976, and #3763 first. Done would require a decided design and an implementation that records continuously without harming casual use, including the stated rollover and prior-movie/state behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
desktop, tooling
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.