hzrd149 / nostrudel

A sandbox for exploring nostr
https://nostrudel.ninja/
MIT License
122 stars 34 forks source link

feat(nip-64): Display Chess (PGN) messages #184

Open theborakompanioni opened 2 months ago

theborakompanioni commented 2 months ago

In order for NIP-64 to be approved, it needs to be implemented in two clients. Would nostrudel be interested in displaying kind := 64 as chess board in the web interface?

The spec is quite simple and straightforward–so it should be rather easy. It would need to include a dependency on a library capable of drawing chess boards. If you are interested, I'll try to come up with a PR. Please, let me know :pray:

hzrd149 commented 2 months ago

I am interested in adding chess to the app but Id like to make sure its interoperable Could NIP-64 and PGN format be used to play a live game over nostr or is it simply to stored recorded games on nostr?

Also if its to play a live games id like to get your thoughts on this https://github.com/hzrd149/chessnut I built it a while go and its far from perfect but I think it has a good event structure to create a chain of "game-states"

theborakompanioni commented 2 months ago

Hey @hzrd149!

That's great news–nice to hear.

Also if its to play a live games id like to get your thoughts on this https://github.com/hzrd149/chessnut I built it a while go and its far from perfect but I think it has a good event structure to create a chain of "game-states"

Wow.. damn.. chessnut seems nice. Seems to be very well thought out and sophisticated. Will definitely dig into it as soon as time allows. Just wow. :rocket:

I am interested in adding chess to the app but Id like to make sure its interoperable Could NIP-64 and PGN format be used to play a live game over nostr or is it simply to stored recorded games on nostr?

This is really just the most simple solution I could imagine to display messages as chess boards in clients. I thought about adding the game mechanics as well, but that would have been too challenging for any client to adopt and so I decided to not pursue it any further. JesterUI currently still uses plain FEN strings and can easily be gamed–not optimal (in fact: very stupid). But to answer your question: I am sure it can be used to actually include more advanced game mechanics and play live games as well… however, the idea of the NIP is just for other clients to display "finished" games, e.g. chessnut, JesterUI and any other chess app on nostr could submit kind := 64 messages to be displayed in nostrudel, damus, primal, etc.. The actual games will probably use replaceable, ephemeral or expiring events (or any other useful nostr base feature)–and I did not want to force this on any downstream app or developer. Also, sending full PGN messages for game mechanics feels quite wasteful.. there are definitely more lightweight solutions. Hope you can somehow follow my thoughts. What do you think about it?

hzrd149 commented 2 months ago

If its just to display published games then that should be really easy to add. although where do you imagine displaying them. It wouldn't be hard to add them to the main timeline but that might get distracting and difficult to find old games

theborakompanioni commented 2 months ago

If its just to display published games then that should be really easy to add. although where do you imagine displaying them. It wouldn't be hard to add them to the main timeline but that might get distracting and difficult to find old games

I could imagine, for example, that clients do not dump games into a main timeline, but rather display a small chess piece on pubkeys that sent kind :=64 messages in the last ~14 days or so. But I think there is such a great amount of possibilities that I really have no suggestions for clients on how they do it. The most important thing–I think!–is that they are capable of drawing chessboards and display games.