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

One small starting point could be a lexicon (combined with something like Astro) for presskit sites:

2 Likes

@trezy.codes I’d be interested or at least curious to contribute / assist. Is there anything on the current todo-list or a repo tracking work that one could get involved with?

1 Like

This is definitely interesting! I’m currently prototyping something tangentially-related - an internet ranking service for rhythm games built on top of atproto. It’s got juuust a few too many domain-specific requirements (score profiles in rhythm games include a lot of stats, and which stats are included varies by game!) to be ergonomic for a generic leaderboard, but linking between gggg.g game records and this system’s game records could be very nice! I’ll look into it if I get this ball rolling.

2 Likes

One of my favorite things about ATProto lexicons is that they can be “stacked.” You can read more about it in the Lexicon Style Guide, but the idea is that you can use a sidecar to extend a base record. As an example, we could imagine that the Pentaract lexicon for a high score looks like this:

{
  "id": "games.gamesgamesgamesgames.score",
  "defs": {
    "main": {
      "type": "record",
      "record": {
        "type": "object",
        "properties": {
          "game": {
            "type": "ref",
            "ref": "games.gamesgamesgamesgames.game"
          },
          "score": { "type": "string" }
        }
      }
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}

It’s a pretty sparse record, I imagine the actual lexicon will have more fields than this, but whatever - it’s a contrived example. Now you define a new lexicon for your rhythm game that tracks the number of beats in each category (perfect, great, good, etc):

{
  "id": "games.rhythm.score",
  "defs": {
    "main": {
      "type": "record",
      "record": {
        "type": "object",
        "properties": {
          "perfectCount": { "type": "integer" },
          "greatCount": { "type": "integer" },
          "goodCount": { "type": "integer" },
          "totalCount": { "type": "integer" },
          "song": {
            "type": "ref",
            "ref": "games.rhythm.song",
          }
        }
      }
    }
  },
  "$type": "com.atproto.lexicon.schema",
  "lexicon": 1
}

When you create a new high score for a user, you actually create 2 records with the same rkey: one with games.gamesgamesgamesgames.highScore, one with games.rhythm.highScore. On the back end it’s slightly more work. What’s cool, though, is that any application that uses the base record — we’ll imagine a website that allows a user to see all of the scores they have in ATProto across all games — will still display the base score data. If you just use your own lexicon, no version of a user’s scores from your game will show up on that website. Applications can also update to use your rhythm game score lexicon later, OR you can submit an RFC to create a base rhythm game score lexicon to the Pentaract lexicons.

I don’t have a good task list together yet, but it’s deffo something I should work on. If I get it together soon, I’ll let you know!

I don’t know how I missed this comment! It’s such a good one. To address your concern about signing records, I think the best bet right now is the attestation spec that @ngerakines.me wrote last year. It allows records to be signed for verification, preventing things like inserting your own arbitrary records, manipulating records, or copying a record from or to somebody else’s repository.

I think the Discord style rich presence would be awesome, and may actually be the first piece of the lexicons I work on after I have the Pentaract PoC up-and-running. It’s a small piece of the puzzle that could provide for significant user-facing impact (imagine enabling rich presence directly on Bluesky - go to your account and see “@jaystevens.me is currently playing Factorio” or whatever).

At least a few of the items on your list are already on my radar. Others (store, parties/sessions, chat) are further out just because there’s a lot of pieces to figure out to make them work. I’m excited about the challenge, tho!

2 Likes

I’ve updated the lexicon repo to add a bunch of documentation for contributing. The main method of contribution is going to be creating an RFC to define what a lexicon should look like, then once an RFC is accepted we can move on to PRs to get those lexicons added.

I’ve also created an issue with a list of lexicons/RFCs that are on my radar. I’d love to get more community involvement here, so I wanted to open this up for other people to start working on.

I’m going to ping a handful of people that have specifically stated they’d like to contribute to make sure they see this:
@kanoki.net, @spookalucca.tv, @lemmaeof.gay, @temportalflux.bsky.social

2 Likes

Moved this to Lexicon Community from the general Discussion as we set things up here for more lexicon discussions. And added the tag gaming for good measure.

Shouldn’t have any impact on the thread :stuck_out_tongue:

4 Likes

I didn’t realize until today that the “Lexicon Community” category is specifically for community.lexicon discussions. This isn’t intended to join the community.lexicon family, so is that really the right category?

It’s not for just community.lexicon. Anything lexicon related is great.

If you want to have a dedicated category for Pentaract we can set that up - or just get started by tagging pentaract

The domain is one thing that LC has available, but bringing your own domain is fine.

1 Like

Nope, I don’t think Pentaract needs its own category. I just wanted to make sure it wasn’t getting lumped in with things that were unrelated.

1 Like