1 2
5 6
Lioncache
Any
Joined: 2/23/2022
Posts: 3
Location: Canada
benstephens1000 wrote:
Below is a breakdown of what's happening in the header. It should be noted that the input count is what handles all timing related stuff. That field can be converted into seconds by dividing it by 234 which comes straight from the Citra source code. I have tested this pretty extensively and confirmed that it is very accurate. Input count can also be converted to frames by multiplying it by 0.255689103308912 and rounding to the nearest integer. This is not currently in the Citra source code, but it is based on extensive testing done by me that I'm working on getting merged into the main Citra branch. Basically all of my documentation can be found here. Once again, I feel I'm a guest here, mostly, so I would never ask anyone to take this on for me. I will be working to see what I can throw together based on what I know.
nice big bendian diagram lol (great work on the TAS!)
Joined: 7/26/2014
Posts: 14
Lioncache wrote:
benstephens1000 wrote:
Below is a breakdown of what's happening in the header. It should be noted that the input count is what handles all timing related stuff. That field can be converted into seconds by dividing it by 234 which comes straight from the Citra source code. I have tested this pretty extensively and confirmed that it is very accurate. Input count can also be converted to frames by multiplying it by 0.255689103308912 and rounding to the nearest integer. This is not currently in the Citra source code, but it is based on extensive testing done by me that I'm working on getting merged into the main Citra branch. Basically all of my documentation can be found here. Once again, I feel I'm a guest here, mostly, so I would never ask anyone to take this on for me. I will be working to see what I can throw together based on what I know.
nice big bendian diagram lol (great work on the TAS!)
That's fucking funny. And yeah, the TAS was great. Couldn't have been done without citra and its contributors though.
Lioncache
Any
Joined: 2/23/2022
Posts: 3
Location: Canada
Yashichi wrote:
Lioncache wrote:
benstephens1000 wrote:
Below is a breakdown of what's happening in the header. It should be noted that the input count is what handles all timing related stuff. That field can be converted into seconds by dividing it by 234 which comes straight from the Citra source code. I have tested this pretty extensively and confirmed that it is very accurate. Input count can also be converted to frames by multiplying it by 0.255689103308912 and rounding to the nearest integer. This is not currently in the Citra source code, but it is based on extensive testing done by me that I'm working on getting merged into the main Citra branch. Basically all of my documentation can be found here. Once again, I feel I'm a guest here, mostly, so I would never ask anyone to take this on for me. I will be working to see what I can throw together based on what I know.
nice big bendian diagram lol (great work on the TAS!)
That's fucking funny. And yeah, the TAS was great. Couldn't have been done without citra and its contributors though.
Agreed. without an emulator the TAS couldn't have existed very easily (or at all)
Samsara
She/They
Senior Judge, Site Admin, Expert player (2239)
Joined: 11/13/2006
Posts: 2822
Location: Northern California
Just in case people check this thread but not the front page for some insane reason, Citra is now accepted for site submissions! And that Ocarina of Time 3D TAS was submitted! This is exciting!!! I am very excited!!!
TASvideos Admin and acting Senior Judge 💙 Currently unable to dedicate a lot of time to the site, taking care of family. Now infrequently posting on Bluesky
warmCabin wrote:
You shouldn't need a degree in computer science to get into this hobby.
Joined: 9/25/2016
Posts: 23
Just wanted to throw some updates in here as I continue to work on some new projects (that I'm not ready to go into detail on yet). First off, I have gotten a proper frame counter working in Citra which as of now is merged into the latest nightly builds. This should hopefully be very helpful for anyone wanting to work on TAS stuff. One issue I outlined in my Ocarina of Time 3D submission notes involves not being able to perform input on the first frame after loading a savestate. For whatever reason, this only seems to happen when using generic controllers for i.e. anything that isn't keyboard or a gamecube controller. I have still not figured out what difference between how these inputs are handled is causing this to happen, but I will continue to investigate. In the meantime, I have had a lot of success mapping keyboard inputs to a controller using Joy2Key. This won't work for analog circle pad or c-stick inputs, but it's a decent workaround for the time being. Some users on discord expressed issues with desyncs previously, but I hadn't really experienced these issues until messing with a couple of other games recently. Thus far, these issues have only come about while running in New 3DS mode with games that take advantage of the c-stick and extra shoulder buttons. It's possible that there is another form of these desyncs that can occur, but this is the only type of issue I've run into. The good news, is that I have been able to easily and consistently correct every one of these desyncs that I have encountered with some minor hex editing. Basically, Citra movie files record different types of inputs at the same rate they are polled. This means that circle pad, button, and touch screen inputs are always recorded 234 times a second but the input group that handles the New 3DS inputs is usually polled at a different rate. It seems that sometimes the order at which these input types are recorded gets messed up. This means that the when the order should be BUTTONS -> TOUCH -> NEW 3DS, the order can occasionally be recorded as NEW 3DS -> BUTTONS -> TOUCH. I have not found the root of this issue, but seems to be caused by saving and loading states as I have never had it occur during a movie that was created without using savestates. Because of this and the fact that the polling rate for each input type should be consistent for any given movie regardless of the inputs used as long as it's the same game being played, the easiest way I have found to remedy this is to record a long movie with no savestates and then compare it to the movie file with the desync. Below is an example of what I look for: Desync: Some explanation on what you're seeing here - the first chunk of 7 bytes shown outlined in purple are the New 3DS inputs. You can tell this because this chunk starts with 05. The next chunk is the button inputs outlined in green which always starts with 00. Finally, touch inputs outlined in orange, starting with 01. This order these the inputs were recorded at at this specific point in the movie file can then be read as NEW 3DS -> BUTTONS -> TOUCH. However, in this particular situation, this order desyncs. When comparing this exact address with a movie file using the same game, this point in the movie file will look like this. Sync: The order of these three chunks of data have been rearranged. This will most likely result in the inputs during this frame being dropped any of the input types that were misplaced. In this example, the movie playback will be expecting button inputs but will instead read the New 3DS inputs. Then when it's expecting touch inputs on the next chunk, it will receive button inputs. So on and so forth. Fixing this desync is as easy as finding the area where the order of your movie file conflicts with the order of a base movie file which did not load savestates. On the topic of hex editing, I have been working on a template to use with 010 Hex Editor that should make reading CTM files a little easier. It won't be nearly as useable as TAStudio, but it should be helpful for TASing. I'm still messing with making the template universal, but so far it only works for certain games. I'll post updates as I improve it.
Joined: 7/17/2012
Posts: 543
Location: Switzerland
Very interesting! I have always used Citra in New 3DS mode. As discussed in this topic there are games that systematically desync (see my posts in this topic or test the CTM I uploaded (link in my signature, as already mentioned)). So one of the solutions would be to not activate the New 3DS mode for games that can work without it? Your template would be very useful for anyone who wants to try TASing with CItra!
My Citra 3DS rerecording movie files test repositery: https://cutt.ly/vdM0jzl Youtube playlist "Citra Tests": https://cutt.ly/AdM0wg9 http://www.youtube.com/user/phoenix1291
Joined: 9/25/2016
Posts: 23
phoenix1291 wrote:
As discussed in this topic there are games that systematically desync (see my posts in this topic or test the CTM I uploaded (link in my signature, as already mentioned)).
I am working to recreate/diagnose some of these issues, and in doing so I am finding some inconsistencies with you CTM files compared to the ones that I am making. The strangest one happens in Majora's Mask 3D where the order of your CTM file immediately seems to deviate from the ones I make. Any chance you could send screenshots of all of your settings so that I can see if something specifically has been causing this?
phoenix1291 wrote:
Your template would be very useful for anyone who wants to try TASing with CItra!
As of now, I have a template that works with parsing every input type found in a CTM file except New 3DS/Circle Pad Pro inputs. The challenge here is that the polling rate for this input type changes on a game-by-game basis. I am still working to implement something here that won't break half the time and isn't a complete nightmare. That being said, my code in general is pretty amateur at best. I'm going to continue to clean it up, but I will hopefully have something that is at least consistently functional in a week or so.
Joined: 7/17/2012
Posts: 543
Location: Switzerland
benstephens1000 wrote:
Any chance you could send screenshots of all of your settings so that I can see if something specifically has been causing this?
Sure: https://drive.google.com/drive/folders/1v6yL-ZO9p6ncEG_kMmpOZBtLSbrXJC91?usp=sharing For Majora's Mask, I dumped with ThreeSD the EU and US versions from my 3DS, I use the US version. I haven't retested with the .3ds version. I also put in the screenshots folder a screenshot of the games I use in App format (dumped from my 3DS with ThreeSD).
My Citra 3DS rerecording movie files test repositery: https://cutt.ly/vdM0jzl Youtube playlist "Citra Tests": https://cutt.ly/AdM0wg9 http://www.youtube.com/user/phoenix1291
Joined: 9/25/2016
Posts: 23
phoenix1291 wrote:
For Majora's Mask, I dumped with ThreeSD the EU and US versions from my 3DS, I use the US version. I haven't retested with the .3ds version. I also put in the screenshots folder a screenshot of the games I use in App format (dumped from my 3DS with ThreeSD).
I still haven't really figured out what going on here, it really feels like these movie files have been corrupted someone. I will continue to investigate. I have also found a strange bug where some of your movie files do not record the last poll cycle on the last frame. This has never happened to me. Don't know if this would actually affect anything. Regardless, I think I have this CTM parser in a functional enough state to share: https://github.com/benstephens56/Citra-Movie-File-Parser/releases/tag/v1.0 This template file is used with 010 Editor, which is technically a paid hex editing software, however, there is a 30 day free trial which can be extended upon expiration by reinstalling the software. 010 Editor is very robust and has a lot of tools and options to play around with. Its template file format is one of the main reasons I chose it for this particular use case. To use it, just open a CTM file and then load the template using Templates -> Open Template (Ctrl + F5), followed by Templates -> Run Template (F5). This will color code the hex data by frame and will display CTM input data and metadata in the results panel. Any of these fields can be edited from the results panel easily. However, editing inputs isn't as simple as changing the number in the results panel. Each input type in any given frame will need to be manually edited in the hex as of now. I don't think this template format is going to make it possible to edit inputs ever. This tool is more so used as an easy way to read back inputs to see what's going on in a movie file. In the future, I would like to create my own software that makes this possible, but my skill level just isn't there yet. So yeah, this isn't TAStudio, and it's not going to be, but it's at least better than nothing.
Post subject: Nintendo 3DS emulator shut down
Evan0512
He/Him
Joined: 10/18/2017
Posts: 171
Location: San Francisco
I found some bad news that the Citra emulator is discontinued because Nintendo sued the developer of the Nintendo Switch emulator yuzu that also developed Citra for $2.4 million, and piracy is the main reason why Nintendo forced to shut down the Nintendo Switch and Nintendo 3DS emulators.
Planned runs: Marble Madness (Arcade, Genesis J, GG/SMS) Proposed: Ecco the Dolphin (Genesis, GG/SMS, CD: regular, camera freeze) Ecco: The Tides of Time (Genesis, GG/SMS, CD; normal mode) Mario Kart DS (all cups, all missions) In progress: Grand Poo World 3 (all exits hard mode)
Joined: 7/17/2012
Posts: 543
Location: Switzerland
Evan0512 wrote:
I found some bad news that the Citra emulator is discontinued because Nintendo sued the developer of the Nintendo Switch emulator yuzu that also developed Citra for $2.4 million, and piracy is the main reason why Nintendo forced to shut down the Nintendo Switch and Nintendo 3DS emulators.
Yes, it's a shame about Yuzu. But what about Citra and her integration into Bizhawk? There are still other emulators for the Switch, but for the 3ds???? Will Bizhawk continue to integrate Citra or not?
My Citra 3DS rerecording movie files test repositery: https://cutt.ly/vdM0jzl Youtube playlist "Citra Tests": https://cutt.ly/AdM0wg9 http://www.youtube.com/user/phoenix1291
Dimon12321
He/Him
Editor, Reviewer, Experienced player (596)
Joined: 4/5/2014
Posts: 1223
Location: Romania
phoenix1291 wrote:
But what about Citra and her integration into Bizhawk? There are still other emulators for the Switch, but for the 3ds???? Will Bizhawk continue to integrate Citra or not?
As far as I know, judging by what people say in Discord, the integration remains in tact. Everything that has changed for us is that Citra itself will not get any updates. Bizhawk doesn't keep the functionality which may accompany piracy, only cores of other emulators to play games. BTW, it was claimed that Citra will not be stopped from being accepted for TAS sumbissions. I found nothing. A lot of links lead to various emulators for Nintendo 3DS, not of. I asked about it in Discord, but got no answer. I don't think it makes much sense to cancel the work half-way through. People say that Citra is already integrated in Bizhawk (not in dev builds, but in a separate branch), but it occasionally crashes. All we can do is wish CasualPokePlayer and other members more patience and passion to finish it, to have Citra repeated the fate of Dolphin for Bizhawk.
TASing is like making a film: only the best takes are shown in the final movie.
Emulator Coder, Judge, Experienced player (729)
Joined: 2/26/2020
Posts: 783
Location: California
People say that Citra is already integrated in Bizhawk (not in dev builds, but in a separate branch)
This is not true, the 3DS core is implemented on the master branch and in dev builds for months, and has never been something on a separate branch.
1 2
5 6