Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[pull] master from magcius:master #129

Merged
merged 104 commits into from
Nov 22, 2024
Merged

Conversation

pull[bot]
Copy link

@pull pull bot commented Nov 21, 2024

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.1)

Can you help keep this open source service alive? 💖 Please sponsor : )

Nothing is fully working yet, but all of the main classes are in place
* Mostly implemented TVariableValue
* Mostly implemented TAdaptor
* Filled out some missing enum values related to TCamera
* Void, Immediate, and Time TVariableValue updates are supported
* Implemented JStudio::TObject base class

Next TODOs:
* Implement TFunctionValue
* Implement FVB parsing
* Uncommented update() and remove()
* Fixed up some errors preventing Camera data updates
Implemented most of the skeleton of FVB, although still missing implementations for most of the various function variable implementations.
…y through to the Demo camera, and they seem reasonable.

- Fixed some issues in the BSpline interpolation implementation
…otation.

Confirmed that the camera position (both eye and target) are working as expected with demo51.stb (the Wind Waker opening cutscene). Woo!
…ce NaNs at the end of the sequence

I was incorrectly checking for an invalid curKeyIdx (because of the `/ 2`) which was skipping the end-of-list check and attempting to interpolate off the end of the array.
It currently overrides the camera parameters in d_s_play.execute(), but this is not correct. I need to find the proper place/method for this.
Adjacent to the array of SceneDescs there is now an array of DemoDescs. Contains the name, arc file, stb index, origin, and rotation. All the data needed to load and play the demo, except for the scene it is expected to be in.
Resuming the demo will snap the camera back to the demo camera
Also made dStage_roomStatus_c a member of dStage_roomStatus_c, instead of its parent class.

This is closer to the structure of the game, which will make it easier to add roomControl features in upcoming commits
The LBNK section of the Room info contains a u8 for each of the 12 layers. This int is the index of the Demo arc that the stage expects to be loaded for that layer (or 0xFF for no arc).

For instance, Outset Island (Room 44 of 'sea') specifies 0x02 in LBNK[0]. It expects Objects/Demo02.arc to be loaded. Demo events will then load demos using filenames that map into that arc.

In the game, this occurs just after dStage_dt_c_roomLoader() is called, during phase 2 of dScnRoom_Create().
They were extracted from the game using a modified version of the excellent wwrando/wwlib/stage_searcher.py script from LagoLunatic. Most of this data comes from the PLAY action of the PACKAGE actor in an event from a Stage's event_list.dat. This action has properties for the room and layer that these cutscenes are designed for. HOWEVER, this data is often missing.

It has been reconstructed by cross-referencing each Room's lbnk section (which points to a Demo*.arc file for each layer), the .stb files contained in each of those Objects/Demo*.arc files, and the FileName attribute from the event action.
This also adds support for playing cutscenes in Scenes with multiple rooms loaded (e.g. Great Sea)
That file is not present in Stage/Ocean/Stage.arc, it must a be a leftover. I've re-arranged the logic for loading demos to match the game and support the fallback-to-Stage behavior in case I can find counter.stb somewhere later
Now we just call demo.remove() when a cutscene is triggered. The game has no mechanism for this, it just assumes no demo is playing when one is started (seems fair)
…ting for user input

But for now, we just suspend for one frame and then continue.

- Added the "Control" object to TControl
  - This can be controlled by the STB file and is used to set the suspend state when waiting for user input (e.g. when a message is being displayed)
  - Parser now handles -1 object type (control)
- Added suspend support
Put `debugger` statements in place to catch first usages of None and Plateau interpolation so that they can be confirmed working
The "Stolen Sister" cutscene in Outset can now complete
The game attaches animation classes during `draw()` and then immediately removes them. Noclip uses a separate, nondestructive, style of animation logic.
Changed one use case to use the new name
- Added "Cutscenes" category with the Wind Waker section
- Currently all cutscenes are listed
- Clicking one will load the correct Scene and begin playing the demo
When a demo is complete enough to be worth viewing, move it to the sceneDescs list
Added public/private to data members
Remove some redundant type info when using =
Cutscene (demo) support for Wind Waker
@pull pull bot added the ⤵️ pull label Nov 21, 2024
@pull pull bot merged commit 6e3fb61 into A-SunsetMkt-Forks:master Nov 22, 2024
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant