Skip to content

Conversation

@TheMartianLife
Copy link
Contributor

SteamDB app page links to a few games using this

Brief explanation of the change

If a game is made in Unity and IL2CPP is used, the usual YarnSpinner.dll will not be present. Instead, depending on what parts of Yarn Spinner have been used, new .dat files will be emitted with these patterns.

As Yarn Spinner is primarily an unpaid project, and we use no analytics, getting an accurate read on how many people use the tool is one of our primary ways of keeping track of the project. We are super, super grateful that a tool like SteamDB exists.

This should detect games like The Berlin Apartment which are currently false negatives.
@xPaw
Copy link
Member

xPaw commented Jun 9, 2025

Can this be reduced to one file, surely there's some part that is always required? Also you forgot $ in the regex

@TheMartianLife
Copy link
Contributor Author

TheMartianLife commented Jun 9, 2025

Can this be reduced to one file, surely there's some part that is always required? Also you forgot $ in the regex

I’ve added the $. As far as the pattern goes, it depends on how permissive you would like to be:

  • We can check for anything that starts with YarnSpinner or Yarn, but because we only own the copyright for Yarn Spinner there is not way to be sure random tools don’t declare a Yarn namespace (though I don’t know of any, and we’ve never heard of any).
  • We can check for something like (?:YarnSpinner|Yarn\.System)(?:\.|\w|-|_)*\.dll(?:-resources\.dat)? but I noticed no other patterns in this file used such permissive wildcards.
  • We can check like the current pattern for exactly the four files we know of.

I’m happy to change it to whichever you prefer :)

@TheMartianLife
Copy link
Contributor Author

I've pushed a version which instead uses Yarn(?:-|_|\s|\.)?(?:Spinner|System) which moves everything into a single-line pattern and I think is permissive enough without getting false positives from e.g. Facebook's Yarn tool or JS yarn or similar which could be present in projects from other engines.

@Lifeismana
Copy link
Collaborator

(?:-|_|\s|\.) is not something we want to have
from what i can see, there isn't a shared file between il2cpp & non il2cpp versions
you'll want keep the Yarn_Spinner[] = (?:^|/)YarnSpinner\.dll$ line
just choose one in (?:Buffers|Memory|Numerics\.Vectors) from (?:^|/)Yarn\.System\.(?:Buffers|Memory|Numerics\.Vectors)\.dll-resources.dat$ that you had (Maybe "Memory" bc it's the shortest?)

@TheMartianLife
Copy link
Contributor Author

(?:-|_|\s|\.) is not something we want to have from what i can see, there isn't a shared file between il2cpp & non il2cpp versions you'll want keep the Yarn_Spinner[] = (?:^|/)YarnSpinner\.dll$ line just choose one in (?:Buffers|Memory|Numerics\.Vectors) from (?:^|/)Yarn\.System\.(?:Buffers|Memory|Numerics\.Vectors)\.dll-resources.dat$ that you had (Maybe "Memory" bc it's the shortest?)

Yes, that does seem to be the case. Until recently, we believed IL2CPP made it impossible to detect Yarn Spinner. We then noticed these three files (Buffers, Memory, Numerics.Vectors) in a few projects, but we are still not certain if all three are always emitted.

I'll just pick one for now and if we notice anything weird in the future I'll PR again. Thanks so much! :)

@xPaw xPaw merged commit b3a3cb3 into SteamDatabase:main Jun 10, 2025
2 checks passed
@github-project-automation github-project-automation bot moved this from To Triage to Done in File rules Jun 10, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

3 participants