Introducing The Pentaract: A Comprehensive Set of Video Game Lexicons for ATProto

Some of you already know that I’ve been working on-and-off on a lexicon for video games. I figured it would be a good idea to put the lexicon up for further discussion, and to make sure I’m headed down the right path with things.

But why?

Last year, the video games industry experienced a significant upheaval when radical groups leveraged moral panic to pressure payment processors, which in turn pressured games platforms to remove NSFW applications. This resulted in a lot of underrepresented developers being further marginalized, and made it increasingly obvious that developers need an avenue to own, manage, and distribute their own games without interference from a centralized authority like Steam, Itch, or payment processors.

I’m excited to share the video game lexicons I’ve been developing. These lexicons provide a structure to standardize and manage game data in a decentralized, user-owned manner. While this doesn’t directly solve any specific issue in the games industry, it provides a strong foundation on top of which many solutions can be built.

I’m looking for any and all feedback, from technical to user perspectives.

For those unfamiliar with ATProto

ATProto is the decentralized protocol that backs Bluesky. You may want to review the links below before digging into the rest of the post.

Overview

The games.gamesgamesgamesgames.* lexicon namespace is intended to create a comprehensive system for cataloging games, as well as their metadata and relationships. This allows developers to create and maintain their own game records on ATProto while ensuring consistency and interoperability across applications.

Here’s a handful of projects that could be built on top of the game lexicon:

  • A games.gamesgamesgamesgames.score record could define a data structure for scores, allowing games to store a user’s scores in their repo. This could be extended by a sidecar lexicon that adds something like a S/A/B/C tier ranking.
  • A games.gamesgamesgamesgames.license record could allow digital games stores to sign and save game licenses into a user’s repo.
  • A games.gamesgamesgamesgames.binary record could allow DRM-free binary(s) for a game purchased by a user to be stored in the user’s repo.

None of these ideas are fleshed out, or even things I desire to build; they’re just concepts that would require a standard game lexicon to exist and before they could be built in a way that they’d be truly decentralizable.

What exists now

I’ve created a base set of lexicons that are already published to represent a tiny slice of a game’s data. This currently includes:

  • base - Includes:
    • name - The name of the game
    • summary - A summary of the game
    • modes - An array of different modes that can be played (Battle Royale, Co-operative, MMO, Multiplayer; full list available in the lexicon)
    • type - The type of game property this record represents (Game, DLC, Mod; full list available in the lexicon)
  • listGames and getGame - Queries for retrieving a list of games or a specific game
  • putGame - Procedure for publishing a game

Questions

Does this base structure make sense?

Specifically, I’m curious about the structure of the type and modes fields on games.gamesgamesgamesgames.game. type uses a ref to an enum, but it feels awkward. modes is the same as type, but it’s an array of enums. From a technical perspective, does this make sense? If this is the right way to go, I’ll quickly add the following fields (also taken from IGDB):

  • genres - Fighting, Music, Platform, Puzzle, etc
  • playerPerspectives - First Person, Third Person, Virtual Reality (VR), etc
  • themes - Action, Horror, Kids, Party, etc

How should we handle release dates?

A game may have multiple release dates which differ by region, platform, status, etc. This is the structure I’m currently planning for:

{
  "releaseDate": {
    "type": "object",
    "properties": {
      "releasedAt": {
        "type": "string",
        "format": "datetime"
      },
      "platform": {
        "type": "string"
      },
      "region": {
        "type": "string"
      },
      "status": {
        "type": "string"
      }
    }
  }
}

The only non-obvious field there is status, which would represent the release state (i.e. Beta, Early Access, Released, etc, reference Release Date Status from IGDB).

Art and other images?

I’m currently planning for capsuleArts, keyArts, and screenshots fields to handle some of the typical images that are associated with a game. We’ll also need a trailers field.

How are others handling arbitrary image fields? blobs are obviously the way to go, but are there any serious concerns to be considered from the technical side?

What’s next?

I’ve already started work on a website to operate as an alternative to IGDB using this data from ATProto. Once these lexicons are reviewed and fleshed out, I’ll get it published, making it easy for developers and publishers to start publishing their games on protocol.

After the IGDB alternative is settled, I’m hoping to dig into the issue of distribution. I’d like to figure out what it looks like to distribute games on protocol.

References

Lexicon data

Narratives

8 Likes

Hey @trezy.codes this is fantastic and this is exactly within the sphere of ideas I’ve been tossing around in my head.

Some background: I’m a volunteer community manager for InfiniteBacklog.net, a game tracking and collection community (think Letterboxd for gamers). I’ve been vaguely conceptualizing how our community could integrate ATProto in various ways.

We have a strong relationship with IGDB, and our team has done a massive amount of data work cleaning up IGDB’s database, particularly with obscure and retro games.

I’m not sure how I can help yet, but I do know that I want to be involved. Being that IGDB is ultimately owned by Amazon, and they could pull the rug out at any time, I believe this work is of critical importance.

I’m going to point the owner/devs of InfiniteBacklog to this thread as well.

I envision a day that a site like InfiniteBacklog could be built entirely on ATproto.

Thanks for your work and vision!

4 Likes

@trezy.codes Why games.gamesgamesgamesgames.game and not something like community.lexicon.games.*? I feel like the community lexicons need more love they just aren’t getting lol.

Anywho, keeping an eye on this one as it’s relevant to my interests lol.

3 Likes

The more the merrier! Feedback on the work I’m doing is probably the most valuable help right now, but I’m open to any and all contributions.

I share your vision of having entire platforms backed by this decentralized, developer-owned data. I’m planning to build my own IGDB alternative as a PoC, but I’d be ecstatic to see IGDB, InfiniteBacklog, etc use that as a reference implementation to hand control of a game’s data back to the game’s owners.

Even better, once they start building on this decentralized data, sites like InfiniteBacklog could define their own sidebar lexicons to enable things like reviews and lists. It’s a big lift to be sure, but I think it’s the best thing we can do for the future and security of the industry.

Thanks so much for your feedback. :heart:

3 Likes

1. Dev mode

I wanted to be able to iterate on my early lexicons, and I didn’t know how that would impact other lexicons in lexicon.community. TBF I didn’t do much research into it either, but I figured it would be much easier to push random changes to my own system than it would be to rely on those changes being pushed to a repo that I don’t control.

2. Data ownership

I have a concept of ingesting a lot of early data that will be owned by the gamesgamesgamesgames.games repo. Think retro and indie games that don’t have a presence on ATProto, or whose creators no longer exist. These data for these games still deserve to exist in this universe, so they would be stored in the gamesgamesgamesgames.games repo, and available for the owners to claim and migrate to their own repo at a later time if they so choose.

3. It’s funny

When we were first workshopping the idea of the lexicon, @knowtheory.net posted a video where they loaded up Namecheap and just kept adding games to the domain until they found one that was available. I laughed really hard at that video and after noodling on it for not nearly as long as I probably should have, I bought the domain. Now it makes me giggle every time I look at it, and shouldn’t we all do things that bring us little joys?

7 Likes

All for little joys in life we don’t get enough of that nowadats!

1 Like

Also not sure of the format or whatever but I know that you can get the GiantBomb archive of games at giant-bomb-wiki/data/fulldatadump.gz at main · Giant-Bomb-Dot-Com/giant-bomb-wiki · GitHub their API has been down since they became creator owned and had to moving hosting solutions.

edit

I looked it’s some sort of dump from media wiki, I wonder how quickly Claude could convert the whole thing over to something more usuful.

3 Likes

THANK YOU for saying it. We NEED more whimsy and joy in our work. The world needs whimsy.

”I named it gamesgamesgamesgames.games because that made me laugh” is the best possible answer :joy:

5 Likes

That’s an awesome resource. I’ll deffo dig into it when I start populating records. Thanks so much for sharing it. :heart:

I’ve written more data parsers in my career than I can count, so no need for Claude here. :wink:

3 Likes

Thank you so much for posting and starting a conversation. These issues are all supremely important for the reasons you stated and more. I see multiple opportunity spaces:

  • game vending: listing and purchasing copies/licenses to games, versions etc
  • Game reviewing: user ratings and testimonies
  • Game activity: storing achievements, progress, scores etc

Each of these have new potential in the atmosphere to address real harms in the current ecosystem of payment processors and the Valve monopoly. I also see huge value in preservation possible here. Game activity in the PDS means a game can go away and be revived later and I still have all my save slots. I can bring my save slots cross platform. These are big domains to work with and there are lots of proofs of concept to play with. I look forward to the work and hope to see you at ATmosphereConf this March!

7 Likes

Oh yeah! I want to see roguelike and angband-style bones files in my PDS!

2 Likes

I would like a Steam Workshop where every modder gets to host their own mods. Then every player can label the mods so others can find them, use the labels to establish compatibility and so-on

4 Likes

Yeah, @spookalucca.tv mentioned mods on Bluesky! I love the idea of mod creators having ownership of their mods, too. There’s a lot of logistics to figure out for this sort of system, but it’d be very neat to make it available for game devs to implement easily.

5 Likes

FYI @iame.li / @natalie.sh for Stream.place stream catgories

might also be a good place to pull in @barrycarlyon.co.uk as he straddles a lot of Streaming Space / Gaming space as a Twitch Ambassador (Dev) & and IGDB Admin and Manages infra structure for a lot of streamers

2 Likes

I’ve just been sort of spitballing stream-of-consciousness things I’ve been thinking about. Not fleshed out, just back-of-napkin stuff:

  • Lexicon considerations for speedrunners.
  • Completion Time
  • Record Times
  • Achievements
    – Achievements (locked)
    – Achievements (earned)
  • Considerations for edge cases like Retro Achievements (a platform that retroactively adds achievements to games and platforms that never supported them, such as NES).
1 Like

There needs to be some relationship management between Modders and Developers (and Publishers), like there is between Devs and Pubs.

Modders should own their mods, yes, but there are sometimes legal complications with Mods. Different publishers and developers have different policies on modding and what is allowed and what isn’t. And then there’s the issue of someone making a “nazi mod” for your game and skinning a bunch of characters in SS uniforms or whatever.

So yeah, we’ll want to think that through. Giving publishers and developers a way to de-list mods as unofficial or problematic, without giving them the ability to destroy data. Maybe they can report those kinds of problematic mods to the host PDS (not a guaranteed fix, but something at least)

Lots to consider, but it’s a new type of “relationship” to consider for sure, not just a data structure!

2 Likes

Minor, mostly insignificant update: I removed the procedure lexicons (getGame, listGames, putGame). I realized it doesn’t make sense to define these globally — at least not right now. If I make a Pentaract AppView publicly available in the future, publishing these lexicons will make sense for other applications to consume and manipulate data. For now, it makes more sense to not define these lexicons and allow platforms to define their own methods and structures for these procedures.

I have also been noodling about this. If my job allowed me to, I would make an integration for Unreal. The Unreal OnlineSubsystem is a natural place for something like this; I wrote an in-house implementation at work a while back.

My real dream is to use it for matchmaking. Both as a “party finder” service as well as things like an “SOS Beacon” that players could light to add people to an ongoing match (I believe Helldivers has something like this; there’s also the Fuel Rats in Elite Dangerous that I think uses a Discord bot).

It would also be nice to store friends lists/recent players + achievements + high scores. My one caveat is that it would be better if we had some way of having the server “sign” records for achievements/scores so that it can be verified that you earned them and didn’t insert them into your own record.

Another nice-to-have would be rich text like what is seen on Discord; e.g. “Playing as Mario on Final Destination”.

The Unreal docs I linked earlier I think provide a good reference for what sort of interface this should have, outside of store + mods support:

  • Achievements
  • Friends
  • Leaderboards
  • User Accounts
  • Presence
  • Purchases
  • Store
  • Parties and Sessions
  • Cloud Saves
  • Voice Chat?

I can see arguments for dropping some of these, but at the same time there’s a reason why the Epic implementation has ‘em all.

On a different note, I don’t know if I like the games.gamesgamesgamesgames domain, if only because it’s unclear how many times I need to write “games”. :wink:

3 Likes

I’ve gotten a lot of questions from game devs asking a very reasonable question:

How can I, a game developer, make use of ATProto in my games?

So I wrote an article to help address this in a way that makes more sense for game developers, especially those that don’t know (or care) much about ATProto:

3 Likes

matchmaking is such a great use case! A very simple demonstration is live at https://tictactoe.firehose.games/ using a first-in-line matching algo. The capabilities for more advanced matchmaking are vast.

2 Likes