Collective development of a server for variants

I think this is where the passing prisoners kicks in.

So once you no longer wish to play moves on the board you pass, probably before killing off your groups.

If N is larger than 160000 say and you get to that situation where the opponent has no legal moves other than passing, then you can trade passing stones until one player hits the capture (prisoner) limit. Or you could agree to end the game early since at that stage the person with the most captures will win, if there’s no special circumstances on the board that could possibly flip it.

There’s a game on BGA called blooms, like Go on a hex board but you have two colours of stones. There is a capture limit, and players take turns filling in their territories at the end, except moves that kill their groups, and because suicides are legal and there’s no passing, they then trade suicidal moves, one stone in an eye say, which seems functionally similar to giving a prisoner while passing, until the capture limit is reached.

1 Like

Thanks to @benjito, our server now has Capture Go. :partying_face:

And I want to take this opportunity to point out, that adding a new variant can be relatively simple.
The main part of the new feature is basically this nice piece of code:

import { Baduk } from "../baduk";

export class Capture extends Baduk {
  playMove(move: { 0: string } | { 1: string }): void {
    super.playMove(move);
    if (this.captures[0]) {
      this.phase = "gameover";
      this.result = "B+Capture";
    }
    if (this.captures[1]) {
      this.phase = "gameover";
      this.result = "W+Capture";
    }
  }
}

If someone is interested in what else was necessary to add the variant, take a look at the Capture go by benjaminpjones · Pull Request #84 · benjaminpjones/govariants · GitHub

7 Likes

It’s been forever since this last major update, and there’s definitely less raw JSON in the UI at this point:

Before

After

Changelog

  • More coherent error messages for moves (#81)
  • [variant] Capture Go (#84)
  • Pagination for the game list (#88), thanks @Jon_Ko!
  • Improved seat selection (#91), thanks @Jon_Ko!
  • Game creation forms (#92), thanks @martin3141!
  • Persistent user sessions (#93) thanks @Jon_Ko!
  • Ko detection (#94)
  • Username/password login (#98)
  • Remove game JSON from UI (#101)
  • Show graphical boards in the game list instead of game ID (#102)
  • [variant] Chess (#105)

Up Next

  • More variants!
  • Game clocks - @martin3141 has already laid some solid groundwork :smiling_face:
  • Analysis (or just game replay)
  • ??? Let us know if there are features that would make the app compelling. I’m stewing on email notifications or game chat but neither seems trivial to implement :sweat_smile:
7 Likes

Three ideas:

  • Circular go

Circular go is just a particular case of BadukWithAbstractBoard, where the board is this one:
roundgo
It’s very popular in France, we usually have a tournament held during the summer go camp. One particularity of the board is that every intersection has four liberties. There is a page on senseis but it doesn’t have a lot of information: Round Board at Sensei's Library

  • Tetris go

This is go, but on your turn you are forbidden to play any move that would create a group of exactly four stones. Three stones is okay, five stones is okay, but four stones is forbidden. This variant has been popular for years but it has been mentionned recently in one of Drako’s Go videos, so it might become even more popular now: What's TETRIS GO?! Super fun Weiqi Baduk Go Variant!! - YouTube

  • Some way to play on a general abstract board?

Currently there is only “rectangular” and “polygonal”, but what if the user was allowed to supply a description of any graph, and play on that graph? Then anyone could contribute graphs, without requiring any programming experience.

7 Likes

Done!

Yes, this would be great! I’m thinking an ugly text-based input will be easy, a nice graphical board editor might be a heavier lift.

Oh nice! So each ring has the same number of points, just offset by a half angle?

For anyone interested in implementing and adding this geometry to the badukWithAbstractBoard options, check out BadukBoardAbstract.ts.

I added a GitHub issue for both of these :grinning:

4 Likes

Suggestion: Asli

Asli is a new game where a group is captured when it has no free path to any other friendly group. It’s like Go from another planet. It has very simple rules and cannot end in a cycle unless players cooperate.

4 Likes

Yes, actually one way to think of this is that there is only one line, wrapped up on itself.

Indeed if you start on an intersection, and then move to one of its neighbours, and then you always exit intersections by the opposite edge that you arrived at, then your path is going to take you through every intersection exactly once, before you arrive back at your starting point.

The version that we have printed in lots of copies in France has 81 intersections, but any square number should be possible with the same logic

I’ll try to find a more mathy/logical description of the graph.

4 Likes

Oblivion go: each placed stone evaporates after a certain number of moves.
For example; in a 9x9 game you usually play about 40 moves. But it would become a totally different (end)game if each stone would disappear after 30 moves after it has been placed on the board. Vital points are suddenly open for the opponent. The endgame would certainly be more vivid than in normal games.

1 Like

Welp. The first paragraph is correct, but the second paragraph is obviously false. If you follow that path then you are going to go through every intersection twice before you arrive back at the same starting point in the same direction that you started; but you’ll encounter the starting point for the second time long before you have encountered all intersections.

So one way to describe the graph should be to number the 81 intersections with numbers 0-160, with two numbers refering to each intersection; and if an intersection is represented by the two numbers i and j then it is adjacent to the four intersections i-1, i+1, j-1 and j+1; and if I can find the formula j = f(i) then that’ll describe the graph.

4 Likes

Also great for learning sabaki(!) and living/attacking techniques. ^^

Sometimes I have had games on OGS by creating the starting position, then forking the game to create the correct starting position in the opening.
Like this: Partie terminée (online-go.com)

(That variant requires White to live within 139 moves (or 99 for a more difficult game, it can be adjusted))

But it would be nice to have a govariants variant for kill-all go as it is such a helpful type of variant! ^^

2 Likes

While we’re listing variants
Escape Go:

White starts with Tengen and black with four star points. White wins if they connect Tengen with the border, black wins by preventing it.

2 Likes

The ability to combine more than one variant. Some variants might be incompatible, but most seem compatible. For instance, being able to choose the board (regular grid, polygonal, circular…) sounds mostly independent from other rule modifications (phantom, capture, parallel, tetris…).

If you do implement this, then I think it would be great to still be able to choose pre-made combinations that correspond to major variants.

3 Likes

Okay, so here is the goban for circular go as a grid:

  • The two points marked A count as the same intersection, same for B, C, D (there are 81 intersections in total).
  • D12 is adjacent to M4 and H16 is adjacent to Q8.

And on that page you can find the goban as an annulus, which is more pretty for humans but less easy for programming: Hannoverscher Go-Verein e.V.

4 Likes

I think I got pretty close!

Adding new geometries actually isn’t very hard, thanks to @martin3141’s original design :slight_smile:


BTW thanks everyone for all the variant ideas! There are a lot on the list now! The list is possibly growing faster than three people can handle :sweat_smile: Friendly reminder that the code is open-source, and contributions are welcome. Happy to help get started if anyone is interested!

7 Likes

Nice!

6 Likes

Haha yeesh that’s crowded! I fudged the radii of the inner and outer rings- might have to rethink that…

2 Likes

I think it’s good as it is. It’s inevitable on a circular board to have less room for stones on the inner circles, so either the stones have a varying diameter, which is super weird, or the stones on the outer circle will feel too small, or the stones on the inner circle will feel too large.

The compromise of having a bit of overlap in the inner circle is okay I think - and this is a very extreme example of a 4x4 board. On the 9x9 board it’s much less of an issue.

6 Likes

I think the two parameters:

  • number of rings;
  • number of nodes per ring

are inverted for circular go.

When I ask for 3 rings with 9 nodes per ring I get:

Also, the default parameters are 4, 4, which is way too small for any reasonable game.

4 Likes

Put in some quick fixes:

  • circular defaults to 9x9
  • swapped the labels (if you look at the code you will see how I mixed that up :joy:)

Thanks for running it through its paces! I see a lot of pretty boards on the main page now :blush:

5 Likes
  • I think right now it’s not possible to see the game’s parameters on the game’s page (variant name, komi, etc)? That would be good to have.

  • The front page doesn’t seem to adapt to the dimensions of my window; in particular there are always two columns, even if there is room for about 4 columns in my window:

Screenshot

2 Likes