diff --git a/build.sbt b/build.sbt index 31ad542c..923400d5 100644 --- a/build.sbt +++ b/build.sbt @@ -2,7 +2,7 @@ name := "strategygames" organization := "org.playstrategy" -version := "10.2.1-pstrat175" +version := "10.2.1-pstrat176" scalaVersion := "2.13.10" diff --git a/src/main/scala/chess/variant/Variant.scala b/src/main/scala/chess/variant/Variant.scala index 9229b37b..d6c3171b 100644 --- a/src/main/scala/chess/variant/Variant.scala +++ b/src/main/scala/chess/variant/Variant.scala @@ -17,9 +17,12 @@ abstract class Variant private[variant] ( ) { val fishnetKey = key match { - case "fiveCheck" => "5check" - case "noCastling" => "nocastle" - case _ => key + case "threeCheck" => "3check" + case "fiveCheck" => "5check" + case "noCastling" => "nocastle" + case "racingKings" => "racingkings" + case "kingOfTheHill" => "kingofthehill" + case _ => key // defaults to chess in fairystockfish if unknown } def pieces: Map[Pos, Piece] diff --git a/src/main/scala/fairysf/Api.scala b/src/main/scala/fairysf/Api.scala index 292acc87..406b01f8 100644 --- a/src/main/scala/fairysf/Api.scala +++ b/src/main/scala/fairysf/Api.scala @@ -68,7 +68,7 @@ object Api { // at the moment // NOTE: this means we can't use this API to test chess related things // only the variants we support - val variant = Variant.byFairySFName(position.variant()) + val variant = Variant.byFishnetKey(position.variant()) def makeMoves(movesList: List[String]): Position = if (movesList.isEmpty) this @@ -133,7 +133,7 @@ object Api { } def positionFromVariant(variant: Variant): Position = - new FairyPosition(new FairyStockfish.Position(variant.fairysfName.name)) + new FairyPosition(new FairyStockfish.Position(variant.fishnetKey)) def positionFromVariantName(variantName: String): Position = new FairyPosition(new FairyStockfish.Position(variantName)) diff --git a/src/main/scala/fairysf/format/Forsyth.scala b/src/main/scala/fairysf/format/Forsyth.scala index bb3a8134..b3e2db57 100644 --- a/src/main/scala/fairysf/format/Forsyth.scala +++ b/src/main/scala/fairysf/format/Forsyth.scala @@ -45,7 +45,7 @@ object Forsyth { Some(History(currentTurn = uciMove.toList)) ) } else (fen, None, None) - val apiPosition = Api.positionFromVariantNameAndFEN(variant.fairysfName.name, fsfFen.value) + val apiPosition = Api.positionFromVariantNameAndFEN(variant.fishnetKey, fsfFen.value) Some( Situation( Board( diff --git a/src/main/scala/fairysf/variant/Amazons.scala b/src/main/scala/fairysf/variant/Amazons.scala index ed843470..adcd87cc 100644 --- a/src/main/scala/fairysf/variant/Amazons.scala +++ b/src/main/scala/fairysf/variant/Amazons.scala @@ -12,7 +12,7 @@ case object Amazons key = "amazons", name = "Amazons", standardInitialPosition = true, - fairysfName = FairySFName("amazons"), + fishnetKey = "amazons", boardSize = Board.Dim10x10 ) { @@ -152,7 +152,7 @@ case object Amazons } override def valid(board: Board, strict: Boolean): Boolean = - Api.validateFEN(fairysfName.name, board.apiPosition.fen.value) + Api.validateFEN(fishnetKey, board.apiPosition.fen.value) override def staleMate(situation: Situation): Boolean = false override def specialEnd(situation: Situation): Boolean = situation.board.apiPosition.legalMoves.isEmpty diff --git a/src/main/scala/fairysf/variant/BreakthroughTroyka.scala b/src/main/scala/fairysf/variant/BreakthroughTroyka.scala index 3182f487..7a852f48 100644 --- a/src/main/scala/fairysf/variant/BreakthroughTroyka.scala +++ b/src/main/scala/fairysf/variant/BreakthroughTroyka.scala @@ -9,7 +9,7 @@ case object BreakthroughTroyka key = "breakthroughtroyka", name = "Breakthrough", standardInitialPosition = true, - fairysfName = FairySFName("breakthrough"), + fishnetKey = "breakthrough", boardSize = Board.Dim8x8 ) { diff --git a/src/main/scala/fairysf/variant/Flipello.scala b/src/main/scala/fairysf/variant/Flipello.scala index add12ae8..bff2f3a2 100644 --- a/src/main/scala/fairysf/variant/Flipello.scala +++ b/src/main/scala/fairysf/variant/Flipello.scala @@ -9,7 +9,7 @@ case object Flipello key = "flipello", name = "Flipello", standardInitialPosition = true, - fairysfName = FairySFName("ps-flipello"), + fishnetKey = "ps-flipello", boardSize = Board.Dim8x8 ) { diff --git a/src/main/scala/fairysf/variant/Flipello10.scala b/src/main/scala/fairysf/variant/Flipello10.scala index 86b581a8..fe7307a6 100644 --- a/src/main/scala/fairysf/variant/Flipello10.scala +++ b/src/main/scala/fairysf/variant/Flipello10.scala @@ -9,7 +9,7 @@ case object Flipello10 key = "flipello10", name = "Flipello10", standardInitialPosition = true, - fairysfName = FairySFName("ps-flipello10"), + fishnetKey = "ps-flipello10", boardSize = Board.Dim10x10 ) { diff --git a/src/main/scala/fairysf/variant/MiniBreakthroughTroyka.scala b/src/main/scala/fairysf/variant/MiniBreakthroughTroyka.scala index ebf5bb5e..d7a05748 100644 --- a/src/main/scala/fairysf/variant/MiniBreakthroughTroyka.scala +++ b/src/main/scala/fairysf/variant/MiniBreakthroughTroyka.scala @@ -10,7 +10,7 @@ case object MiniBreakthroughTroyka key = "minibreakthroughtroyka", name = "Mini Breakthrough", standardInitialPosition = true, - fairysfName = FairySFName("ps-minibreakthrough"), + fishnetKey = "ps-minibreakthrough", boardSize = Board.Dim5x5 ) { diff --git a/src/main/scala/fairysf/variant/MiniShogi.scala b/src/main/scala/fairysf/variant/MiniShogi.scala index defe2f6b..be6b20fa 100644 --- a/src/main/scala/fairysf/variant/MiniShogi.scala +++ b/src/main/scala/fairysf/variant/MiniShogi.scala @@ -10,7 +10,7 @@ case object MiniShogi key = "minishogi", name = "Mini Shogi", standardInitialPosition = true, - fairysfName = FairySFName("minishogi"), + fishnetKey = "minishogi", boardSize = Board.Dim5x5 ) { diff --git a/src/main/scala/fairysf/variant/MiniXiangqi.scala b/src/main/scala/fairysf/variant/MiniXiangqi.scala index c397b766..31bab99a 100644 --- a/src/main/scala/fairysf/variant/MiniXiangqi.scala +++ b/src/main/scala/fairysf/variant/MiniXiangqi.scala @@ -9,7 +9,7 @@ case object MiniXiangqi key = "minixiangqi", name = "Mini Xiangqi", standardInitialPosition = true, - fairysfName = FairySFName("ps-minixiangqi"), + fishnetKey = "ps-minixiangqi", boardSize = Board.Dim7x7 ) { diff --git a/src/main/scala/fairysf/variant/Shogi.scala b/src/main/scala/fairysf/variant/Shogi.scala index de5c1f8b..f06d5288 100644 --- a/src/main/scala/fairysf/variant/Shogi.scala +++ b/src/main/scala/fairysf/variant/Shogi.scala @@ -10,7 +10,7 @@ case object Shogi key = "shogi", name = "Shogi", standardInitialPosition = true, - fairysfName = FairySFName("shogi"), + fishnetKey = "shogi", boardSize = Board.Dim9x9 ) { diff --git a/src/main/scala/fairysf/variant/Variant.scala b/src/main/scala/fairysf/variant/Variant.scala index 2885ee60..8f456ac9 100644 --- a/src/main/scala/fairysf/variant/Variant.scala +++ b/src/main/scala/fairysf/variant/Variant.scala @@ -9,15 +9,13 @@ import strategygames.fairysf.format.{ FEN, Forsyth, Uci } import strategygames.fairysf.format.pgn.Binary import strategygames.{ GameFamily, Player } -case class FairySFName(val name: String) - // Correctness depends on singletons for each variant ID abstract class Variant private[variant] ( val id: Int, val key: String, val name: String, val standardInitialPosition: Boolean, - val fairysfName: FairySFName, + val fishnetKey: String, val boardSize: Board.BoardSize ) { @@ -48,11 +46,11 @@ abstract class Variant private[variant] ( def perfId: Int def perfIcon: Char - def initialFen: FEN = Api.initialFen(fairysfName.name) + def initialFen: FEN = Api.initialFen(fishnetKey) - lazy val position: Api.Position = Api.positionFromVariantName(this.fairysfName.name) + lazy val position: Api.Position = Api.positionFromVariantName(fishnetKey) - def pieces: Map[Pos, Piece] = Api.pieceMapFromFen(fairysfName.name, initialFen.value) + def pieces: Map[Pos, Piece] = Api.pieceMapFromFen(fishnetKey, initialFen.value) def exportBoardFen(board: Board): FEN = board.apiPosition.fen @@ -239,7 +237,7 @@ abstract class Variant private[variant] ( board def valid(board: Board, @nowarn strict: Boolean): Boolean = - Api.validateFEN(fairysfName.name, Forsyth.exportBoard(board)) + Api.validateFEN(fishnetKey, Forsyth.exportBoard(board)) val roles: List[Role] = Role.all @@ -291,8 +289,8 @@ object Variant { val byKey = all map { v => (v.key, v) } toMap - val byFairySFName = all map { v => - (v.fairysfName.name, v) + val byFishnetKey = all map { v => + (v.fishnetKey, v) } toMap val default = Shogi diff --git a/src/main/scala/fairysf/variant/Xiangqi.scala b/src/main/scala/fairysf/variant/Xiangqi.scala index d36f8fcd..978a2c75 100644 --- a/src/main/scala/fairysf/variant/Xiangqi.scala +++ b/src/main/scala/fairysf/variant/Xiangqi.scala @@ -9,7 +9,7 @@ case object Xiangqi key = "xiangqi", name = "Xiangqi", standardInitialPosition = true, - fairysfName = FairySFName("ps-xiangqi"), + fishnetKey = "ps-xiangqi", boardSize = Board.Dim9x10 ) { diff --git a/src/main/scala/variant/Variant.scala b/src/main/scala/variant/Variant.scala index 5c635d00..f5a5542a 100644 --- a/src/main/scala/variant/Variant.scala +++ b/src/main/scala/variant/Variant.scala @@ -351,7 +351,7 @@ object Variant { extends Variant( id = v.id, key = v.key, - fishnetKey = v.fairysfName.name, + fishnetKey = v.fishnetKey, name = v.name, standardInitialPosition = v.standardInitialPosition ) { diff --git a/src/test/scala/fairysf/AmazonsApiTest.scala b/src/test/scala/fairysf/AmazonsApiTest.scala index f8f03807..074ca8c5 100644 --- a/src/test/scala/fairysf/AmazonsApiTest.scala +++ b/src/test/scala/fairysf/AmazonsApiTest.scala @@ -180,7 +180,7 @@ class AmazonsApiTest extends FairySFTest { } "be valid" in { // NOTE: this test only makes sense at the API level, because we can convert it - val name = variant.Amazons.fairysfName.name + val name = variant.Amazons.fishnetKey val initialFen = Api.toFairySFFen(name, variant.Amazons.initialFen.value) FairyStockfish.validateFEN(name, initialFen) must_== true } diff --git a/src/test/scala/fairysf/BoardApiTest.scala b/src/test/scala/fairysf/BoardApiTest.scala index a10faf36..160783c9 100644 --- a/src/test/scala/fairysf/BoardApiTest.scala +++ b/src/test/scala/fairysf/BoardApiTest.scala @@ -9,7 +9,7 @@ class FairyStockfishBoardApiTest extends Specification with ValidatedMatchers { val position = Api.positionFromVariant(variant.Shogi) "be valid" in { Api.validateFEN( - variant.Shogi.fairysfName.name, + variant.Shogi.fishnetKey, variant.Shogi.initialFen.value ) must_== true } @@ -37,7 +37,7 @@ class FairyStockfishBoardApiTest extends Specification with ValidatedMatchers { } "be valid" in { Api.validateFEN( - variant.Xiangqi.fairysfName.name, + variant.Xiangqi.fishnetKey, variant.Xiangqi.initialFen.value ) must_== true } diff --git a/src/test/scala/fairysf/FairyStockfishTest.scala b/src/test/scala/fairysf/FairyStockfishTest.scala index 7336e17d..4d2217ef 100644 --- a/src/test/scala/fairysf/FairyStockfishTest.scala +++ b/src/test/scala/fairysf/FairyStockfishTest.scala @@ -21,7 +21,7 @@ class FairyStockfishTest extends Specification with ValidatedMatchers { "Shogi initial fen" should { "be valid" in { FairyStockfish.validateFEN( - variant.Shogi.fairysfName.name, + variant.Shogi.fishnetKey, variant.Shogi.initialFen.value ) must_== true } @@ -30,7 +30,7 @@ class FairyStockfishTest extends Specification with ValidatedMatchers { "Shogi initial fen minus middle rank" should { "be invalid" in { FairyStockfish.validateFEN( - variant.Shogi.fairysfName.name, + variant.Shogi.fishnetKey, "lnsgkgsnl/1r5b1/ppppppppp/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL[] w - - 0 1" ) must_== false } @@ -39,7 +39,7 @@ class FairyStockfishTest extends Specification with ValidatedMatchers { "Random string" should { "be invalid fen" in { FairyStockfish.validateFEN( - variant.Shogi.fairysfName.name, + variant.Shogi.fishnetKey, "I'm a Shogi FEN! (not)" ) must_== false }