Ferrum development journal · Part 4 of 19
Following a Game Through Its Opening Video
A game's opening sequence connected video formats, input timing, and its own state machine. Fixing the picture was only part of getting past it.
A game's opening video seems like it should be a simple milestone: play the video, let it finish, and get to the next screen. The actual work turned out to involve the media samples, the game's own logic, and the timing of the input used to move through its setup.
During this phase, the Hollow Knight investigation followed the opening sequence into the game's code rather than assuming that every stall was a rendering problem. The video work included details such as the advertised image format, the stride of a frame, and the size of the sample being handed to the next component. If those disagree, the application can have data without getting the picture it expects.
Input had a similar requirement. Sending a key isn't the same as proving that the game received the right press and release at the right point in its frame loop. A setup prompt can depend on state that isn't obvious from a screenshot. The tests needed to distinguish a key that was delivered, a prompt that accepted it, and the game actually advancing.
That changed how I wanted to approach these problems. Rather than repeatedly send input and hope the next screen appeared, the work followed the condition the game was waiting for. When the media path and the state transition were both understood, there was a much more useful explanation for what still blocked progress.
The August 19–20 work should be read as that investigation and repair period. Later entries record the opening sequence advancing; I wouldn't pull that later result backward and describe every earlier run as successful. Some observations and initial explanations had to be corrected along the way.
For the eventual user, the desired result is ordinary: the opening finishes and the game responds. For the port, this was a good reminder that a visible image, a running process, and a completed application transition are three different things to verify.
Ferrum development journal
View the journalLive19 entries so far·Updated New (19 entries updated in the last 14 days)
- Part 1Bringing FEX to macOS: The First Windows Program
- Part 2From Return Values to Pixels and Sound
- Part 3Building More of the Windows Runtime
- Part 4Following a Game Through Its Opening Video
- Part 5Installers, Saves, Fonts, and the Parts Around the Game
- Part 6Game Progress and Measuring the Right Thing
- Part 7Building the 32-Bit Graphics Path
- Part 8Making Memory, Files, and Graphics State Agree
- Part 9DirectX 12, Shader Caches, and the Steam Startup Work
- Part 10Working on Presentation and Controller Input
- Part 11A Launcher and a Freeze That Wasn't the Presenter
- Part 12Portal Reaches a Command Stream, With the Frame Still Ahead
- Part 13Correcting the Ferrum Progress Report
- Part 14Recovering the Project and Resuming Real Tests
- Part 15Making Memory Protection and Lifetime Tests More Useful
- Part 16Getting Wine's Real 32-Bit Startup to Run
- Part 17Making the Launcher Own Its Storage and Processes
- Part 18A Real Archive Roundtrip and Better File Behavior
- Part 19Asynchronous I/O and the Bytes a Cancelled Write Keeps