ChainSwordCS / ChirunoMod

A continuation of HzMod, made for Chokistream. A utility background process for the Nintendo 3DS, purpose-built for screen-streaming over WiFi.
GNU General Public License v3.0
19 stars 0 forks source link

Smash 3DS: while paused, the top screen isn't properly captured. #14

Open ChainSwordCS opened 1 month ago

ChainSwordCS commented 1 month ago

Note: unless otherwise stated, assume I'm talking about 2D mode. I'll add more details about 3D mode later.

The visible effect of this issue is the image sorta flickering at irregular intervals, as shown in this video:

https://github.com/user-attachments/assets/6a48c9e6-1179-4339-a091-e8f2faea84ba

Specifically for this video, here are TGA->PNG screenshots of the two images being flickered between:

Screenshot 2024-10-10 05-17-48 Screenshot 2024-10-10 05-17-49

This issue affects ChirunoMod v0.3, and probably all other release versions. This issue is also known to affect HzMod v.2017.05.05, and has not yet been tested in other versions of HzMod.

I'll provide more details here eventually. But to make a long story short, the game seems to do anti-aliasing in a somewhat unusual way. Well, I don't know exactly how unusual it is, but from my experience it seems at least uncommon for a 3DS game.

I don't know if this only applies while paused, but I checked and it doesn't seem to happen in any other places. For example, looking at individual Trophies, this issue is not at all present there.

Interestingly, based on my testing, this issue occurs on version 1.1.7, but doesn't occur on version 1.0.0. As an aside: when played on New 3DS, version 1.1.7 seems to have some anti-aliasing that is more complex than what 1.0.0 has.

I have not yet tested whether this occurs on Old 3DS, or if it only occurs on New 3DS.

I suspect it's an intersection of two issues:

  1. A timing issue; ChirunoMod doesn't even attempt to sync with VSync.
  2. An unknown issue with the target framebuffer that ChirunoMod is capturing /reading from. Like, quirks with however that framebuffer is used, modified, and written-to by the game. I'm fuzzy on the details about this, I haven't thoroughly investigated it yet.
ChainSwordCS commented 1 month ago

Possibly related to #13