This is an automated email from the git hooks/post-receive script. jsonic-guest pushed a commit to annotated tag upstream/12.1 in repository pentobi.
commit 3193c917375bfc2c11539147fbe6f79b36171195 Author: Juhani Numminen <juhaninummin...@gmail.com> Date: Thu Dec 1 09:19:44 2016 +0200 New upstream version 12.1 --- CMakeLists.txt | 4 ++-- INSTALL | 8 ++++---- NEWS | 23 +++++++++++++++++++++++ data/pentobi.desktop.in | 2 +- doc/blksgf/Pentobi-SGF.html | 13 +++++++------ src/libboardgame_sgf/SgfTree.cpp | 2 ++ src/libpentobi_base/BoardUpdater.cpp | 3 ++- src/libpentobi_base/NodeUtil.cpp | 17 +++++++++++++++-- src/libpentobi_base/PentobiSgfUtil.cpp | 6 ++++-- src/libpentobi_base/PentobiTree.cpp | 28 ++++++++++------------------ src/libpentobi_base/PentobiTreeWriter.cpp | 29 ++++++++++++++++++++--------- src/libpentobi_base/PieceInfo.cpp | 2 ++ src/libpentobi_base/PieceInfo.h | 3 +++ src/libpentobi_mcts/State.h | 2 +- src/pentobi/MainWindow.cpp | 9 +++++---- src/pentobi/translations/pentobi_de.ts | 24 ++++++++++++------------ src/pentobi_gtp/Engine.cpp | 10 ---------- src/pentobi_qml/Pentobi.pro | 2 +- src/pentobi_qml/android/AndroidManifest.xml | 2 +- src/pentobi_qml/qml/Button.qml | 2 +- 20 files changed, 116 insertions(+), 75 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a10832a..a05dde2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,8 +1,8 @@ cmake_minimum_required(VERSION 3.0.2) project(Pentobi) -set(PENTOBI_VERSION 12.0) -set(PENTOBI_RELEASE_DATE 2016-04-10) +set(PENTOBI_VERSION 12.1) +set(PENTOBI_RELEASE_DATE 2016-11-30) cmake_policy(SET CMP0043 NEW) diff --git a/INSTALL b/INSTALL index 48c0355..e735080 100644 --- a/INSTALL +++ b/INSTALL @@ -7,7 +7,7 @@ Pentobi requires the Qt libraries (>=5.1). The C++ compiler needs to support certain C++11 features (only features that are already implemented by GCC 4.9 and MSVC 2015). The build system uses CMake (>=3.0.2). -Ubuntu 15.10 provides suitable versions of the required tools and libraries in +Ubuntu 16.04 provides suitable versions of the required tools and libraries in its package repository. They can be installed with the shell command: sudo apt-get install \ @@ -27,7 +27,7 @@ Pentobi can be compiled from the source directory with the shell commands: A thumbnailer plugin for KDE can be built by using the cmake option -DPENTOBI_BUILD_KDE_THUMBNAILER=1. In this case, the KDE development files need to be installed (packages kio-dev and extra-cmake-modules on -Ubuntu 15.10). Note that on Ubuntu 15.10, the plugin will not be found if +Ubuntu 16.04). Note that on Ubuntu 16.04, the plugin will not be found if the default installation prefix /usr/local is used. You need to add QT_PLUGIN_PATH=/usr/local/lib/plugins to /etc/environment. After that, you can enable previews for Blokus game file in the Dolphin file manager in @@ -42,7 +42,7 @@ On Linux, Pentobi can be installed after compilation with the shell command: After installation, the system-wide databases should be updated to make Pentobi appear in the desktop menu and register it as handler for Blokus -files (*.blksgf). On Ubuntu 15.04 with install prefix /usr/local, this can be +files (*.blksgf). On Ubuntu 16.04 with install prefix /usr/local, this can be done by running: sudo update-mime-database /usr/local/share/mime @@ -52,7 +52,7 @@ done by running: == Building the Android version == For building the Android app, there is a QtCreator project file in -src/pentobi_qml/Pentobi.pro. It requires Qt >=5.6. Before compilation, the +src/pentobi_qml/Pentobi.pro. It requires Qt 5.6. Before compilation, the binary translation files need to be generated by using File/Release in Qt Linguist for all TS files in src/pentobi_qml/qml/translations. diff --git a/NEWS b/NEWS index 506fa83..399e69d 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,26 @@ +Version 12.1 (30 Nov 2016) +========================== + +General: + +* Loading a file with a setup position in Nexos did not always work correctly + or could cause a crash. +* SGF files for two-player Callisto did not use B/W properties as documented + but 1/2 as in multi-player variants. Files written by Pentobi 12.0 can still + be read and will be converted if saved again. + +Desktop version: + +* Compilations on Windows is no longer tested or supported. +* Keep Only Position and Keep Only Subtree did not work correctly in Nexos and + in multi-player Callisto. +* Delete All Variations did not mark the file as modified. +* Missing semicolon in desktop entry file (bug #12). +* Fixed ambiguous shortcut overload. +* Saving a file will now remember the directory and use it as a default for + file dialogs. + + Version 12.0 (10 Apr 2016) ========================== diff --git a/data/pentobi.desktop.in b/data/pentobi.desktop.in index 9db78cb..0992025 100755 --- a/data/pentobi.desktop.in +++ b/data/pentobi.desktop.in @@ -4,7 +4,7 @@ GenericName=Computer Opponent for Blokus GenericName[de]=Computer-Gegner für Blokus Comment=Computer opponent for the board game Blokus Comment[de]=Computer-Gegner für das Brettspiel Blokus -Keywords=Blokus;Blokus Duo;Blokus Trigon;Blokus Junior;Nexos;Callisto +Keywords=Blokus;Blokus Duo;Blokus Trigon;Blokus Junior;Nexos;Callisto; Exec=@CMAKE_INSTALL_FULL_BINDIR@/pentobi %f Icon=pentobi Type=Application diff --git a/doc/blksgf/Pentobi-SGF.html b/doc/blksgf/Pentobi-SGF.html index 48c1cba..76b40a9 100644 --- a/doc/blksgf/Pentobi-SGF.html +++ b/doc/blksgf/Pentobi-SGF.html @@ -7,7 +7,7 @@ <body> <h1>Pentobi SGF Files</h1> <div style="font-size:small">Author: Markus Enzenberger<br> -Last modified: 2016-01-16</div> +Last modified: 2016-11-27</div> <p>This document describes the file format for <a href= "http://en.wikipedia.org/wiki/Blokus">Blokus</a> game records as used by the program <a href="http://pentobi.sourceforge.net">Pentobi</a>. The most recent @@ -70,11 +70,12 @@ time left for a color, if the game is played with a time limit for each color. (This is only an example how the properties should be interpreted. Pentobi currently has no support for game clocks.)</p> <p style="font-size:small"><b>Note</b><br> -Old versions of Pentobi (before version 0.2) used the properties <tt>BLUE</tt>, -<tt>YELLOW</tt>, <tt>RED</tt>, <tt>GREEN</tt> in the four-color game variants, -which did not reflect the current state of discussion for SGF 5. Current -versions of Pentobi can still read games containing the old properties but they -are deprecated and should no longer be used.</p> +Pentobi versions before 0.2 used the properties <tt>BLUE</tt>, <tt>YELLOW</tt>, +<tt>RED</tt>, <tt>GREEN</tt> in the four-color game variants, which did not +reflect the current state of discussion for SGF 5. Pentobi 12.0 erroneously +used multi-player properties for two-player Callisto. Current versions of +Pentobi can still read games written by older versions and will convert old +properties.</p> <h2>Coordinate System</h2> <p>Fields on the board (called points in SGF) are identified by a case-insensitive string with a letter for the column followed by a number for diff --git a/src/libboardgame_sgf/SgfTree.cpp b/src/libboardgame_sgf/SgfTree.cpp index 59c0a45..f3c5fb2 100644 --- a/src/libboardgame_sgf/SgfTree.cpp +++ b/src/libboardgame_sgf/SgfTree.cpp @@ -44,6 +44,8 @@ const SgfNode& SgfTree::create_new_child(const SgfNode& node) void SgfTree::delete_all_variations() { + if (has_variations()) + m_modified = true; auto node = &get_root(); while (node) { diff --git a/src/libpentobi_base/BoardUpdater.cpp b/src/libpentobi_base/BoardUpdater.cpp index 465bb11..2a275b6 100644 --- a/src/libpentobi_base/BoardUpdater.cpp +++ b/src/libpentobi_base/BoardUpdater.cpp @@ -27,7 +27,8 @@ namespace { /** List to hold remaining pieces of a color with one entry for each instance of the same piece. */ -typedef ArrayList<Piece, 22> AllPiecesLeftList; +typedef ArrayList<Piece, PieceInfo::max_instances * Piece::max_pieces> +AllPiecesLeftList; /** Helper function used in init_setup. */ void handle_setup_property(const SgfNode& node, const char* id, Color c, diff --git a/src/libpentobi_base/NodeUtil.cpp b/src/libpentobi_base/NodeUtil.cpp index 7ecd023..1b7b513 100644 --- a/src/libpentobi_base/NodeUtil.cpp +++ b/src/libpentobi_base/NodeUtil.cpp @@ -26,6 +26,11 @@ bool get_move(const SgfNode& node, Variant variant, Color& c, MovePoints& points) { string id; + // Pentobi 0.1 used BLUE/YELLOW/RED/GREEN instead of 1/2/3/4 as suggested + // by SGF FF[5]. Pentobi 12.0 erroneosly used 1/2 for two-player Callisto + // instead of B/W. We still want to be able to read files written by older + // versions. They will be converted to the current format by + // PentobiTreeWriter. if (get_nu_colors(variant) == 2) { if (node.has_property("B")) @@ -48,11 +53,19 @@ bool get_move(const SgfNode& node, Variant variant, Color& c, id = "2"; c = Color(1); } + else if (node.has_property("BLUE")) + { + id = "BLUE"; + c = Color(0); + } + else if (node.has_property("GREEN")) + { + id = "GREEN"; + c = Color(1); + } } else { - // Properties BLUE/YELLOW/RED/GREEN were used by Pentobi 0.1 - // Newer versions of Pentobi use 1/2/3/4 as suggested by SGF FF[5] if (node.has_property("1")) { id = "1"; diff --git a/src/libpentobi_base/PentobiSgfUtil.cpp b/src/libpentobi_base/PentobiSgfUtil.cpp index e8c5d41..6a09123 100644 --- a/src/libpentobi_base/PentobiSgfUtil.cpp +++ b/src/libpentobi_base/PentobiSgfUtil.cpp @@ -19,7 +19,8 @@ namespace sgf_util { const char* get_color_id(Variant variant, Color c) { - if (variant == Variant::duo || variant == Variant::junior) + static_assert(Color::range == 4, ""); + if (get_nu_colors(variant) == 2) return c == Color(0) ? "B" : "W"; if (c == Color(0)) return "1"; @@ -33,7 +34,8 @@ const char* get_color_id(Variant variant, Color c) const char* get_setup_id(Variant variant, Color c) { - if (variant == Variant::duo || variant == Variant::junior) + static_assert(Color::range == 4, ""); + if (get_nu_colors(variant) == 2) return c == Color(0) ? "AB" : "AW"; if (c == Color(0)) return "A1"; diff --git a/src/libpentobi_base/PentobiTree.cpp b/src/libpentobi_base/PentobiTree.cpp index 1afe792..594c47b 100644 --- a/src/libpentobi_base/PentobiTree.cpp +++ b/src/libpentobi_base/PentobiTree.cpp @@ -315,6 +315,8 @@ void PentobiTree::set_result(const SgfNode& node, int score) void PentobiTree::set_setup(const SgfNode& node, const Setup& setup) { + auto nu_colors = get_nu_colors(m_variant); + LIBBOARDGAME_ASSERT(nu_colors >= 2 && nu_colors <= 4); remove_property(node, "B"); remove_property(node, "W"); remove_property(node, "1"); @@ -328,28 +330,18 @@ void PentobiTree::set_setup(const SgfNode& node, const Setup& setup) remove_property(node, "A3"); remove_property(node, "A4"); remove_property(node, "AE"); - switch (m_variant) + if (nu_colors == 2) + { + set_setup_property(node, "AB", setup.placements[Color(0)]); + set_setup_property(node, "AW", setup.placements[Color(1)]); + } + else { - case Variant::classic: - case Variant::classic_2: - case Variant::classic_3: - case Variant::trigon: - case Variant::trigon_2: - set_setup_property(node, "A1", setup.placements[Color(0)]); - set_setup_property(node, "A2", setup.placements[Color(1)]); - set_setup_property(node, "A3", setup.placements[Color(2)]); - set_setup_property(node, "A4", setup.placements[Color(3)]); - break; - case Variant::trigon_3: set_setup_property(node, "A1", setup.placements[Color(0)]); set_setup_property(node, "A2", setup.placements[Color(1)]); set_setup_property(node, "A3", setup.placements[Color(2)]); - break; - default: - LIBBOARDGAME_ASSERT(m_variant == Variant::duo - || m_variant == Variant::junior); - set_setup_property(node, "AB", setup.placements[Color(0)]); - set_setup_property(node, "AW", setup.placements[Color(1)]); + if (nu_colors > 3) + set_setup_property(node, "A4", setup.placements[Color(3)]); } set_player(node, setup.to_play); } diff --git a/src/libpentobi_base/PentobiTreeWriter.cpp b/src/libpentobi_base/PentobiTreeWriter.cpp index 7e3d551..660b4b3 100644 --- a/src/libpentobi_base/PentobiTreeWriter.cpp +++ b/src/libpentobi_base/PentobiTreeWriter.cpp @@ -27,6 +27,7 @@ PentobiTreeWriter::~PentobiTreeWriter() void PentobiTreeWriter::write_property(const string& id, const vector<string>& values) { + auto nu_colors = get_nu_colors(m_variant); // Replace obsolete move property IDs or multi-valued move properties // as used by early versions of Pentobi if (id == "BLUE" || id == "YELLOW" || id == "GREEN" || id == "RED" @@ -36,16 +37,11 @@ void PentobiTreeWriter::write_property(const string& id, { string new_id; if (id == "BLUE") - new_id = "1"; + new_id = (nu_colors == 2 ? "B" : "1"); else if (id == "YELLOW") new_id = "2"; else if (id == "GREEN") - { - if (m_variant == Variant::duo || m_variant == Variant::junior) - new_id = "2"; - else - new_id = "4"; - } + new_id = (nu_colors == 2 ? "W" : "4"); else if (id == "RED") new_id = "3"; else @@ -61,9 +57,24 @@ void PentobiTreeWriter::write_property(const string& id, new_values.push_back(val); libboardgame_sgf::TreeWriter::write_property(new_id, new_values); } + return; + } + // Pentobi 12.0 versions erroneously used multi-player properties for + // two-player Callisto. + if (nu_colors == 2) + { + if (id == "1") + { + libboardgame_sgf::TreeWriter::write_property("B", values); + return; + } + if (id == "2") + { + libboardgame_sgf::TreeWriter::write_property("W", values); + return; + } } - else - libboardgame_sgf::TreeWriter::write_property(id, values); + libboardgame_sgf::TreeWriter::write_property(id, values); } //----------------------------------------------------------------------------- diff --git a/src/libpentobi_base/PieceInfo.cpp b/src/libpentobi_base/PieceInfo.cpp index e61ba57..663fb35 100644 --- a/src/libpentobi_base/PieceInfo.cpp +++ b/src/libpentobi_base/PieceInfo.cpp @@ -93,6 +93,8 @@ PieceInfo::PieceInfo(const string& name, const PiecePoints& points, m_transforms(&transforms), m_name(name) { + LIBBOARDGAME_ASSERT(nu_instances > 0); + LIBBOARDGAME_ASSERT(nu_instances <= PieceInfo::max_instances); if (log_piece_creation) LIBBOARDGAME_LOG("Creating transformations for piece ", name, ' ', points); diff --git a/src/libpentobi_base/PieceInfo.h b/src/libpentobi_base/PieceInfo.h index c375945..416fb5f 100644 --- a/src/libpentobi_base/PieceInfo.h +++ b/src/libpentobi_base/PieceInfo.h @@ -43,6 +43,9 @@ public: points occurs in Trigon. */ static const unsigned max_scored_size = 6; + /** Maximum number of instances of a piece per player. */ + static const unsigned max_instances = 3; + typedef ArrayList<CoordPoint, max_size> Points; diff --git a/src/libpentobi_mcts/State.h b/src/libpentobi_mcts/State.h index 59db091..84fd37a 100644 --- a/src/libpentobi_mcts/State.h +++ b/src/libpentobi_mcts/State.h @@ -86,7 +86,7 @@ public: bool gen_children(Tree::NodeExpander& expander, Float root_val); - void start_playout() { }; + void start_playout() { } /** Generate a playout move. @return @c false if end of game was reached, and no move was diff --git a/src/pentobi/MainWindow.cpp b/src/pentobi/MainWindow.cpp index 5e50df2..e6bf341 100644 --- a/src/pentobi/MainWindow.cpp +++ b/src/pentobi/MainWindow.cpp @@ -758,7 +758,7 @@ void MainWindow::createActions() connect(m_actionFindMove, SIGNAL(triggered()), SLOT(findMove())); m_actionFindNextComment = createAction(tr("Find Next &Comment")); - m_actionFindNextComment->setShortcut(QKeySequence::FindNext); + m_actionFindNextComment->setShortcut(QString("F3")); connect(m_actionFindNextComment, SIGNAL(triggered()), SLOT(findNextComment())); @@ -1819,7 +1819,7 @@ void MainWindow::genMove(bool playSingleMove) m_actionPlay->setEnabled(false); m_actionPlaySingleMove->setEnabled(false); m_actionInterrupt->setEnabled(true); - showStatus(tr("The computer is thinking...")); + showStatus(tr("Computer is thinking...")); clearPiece(); clear_abort(); m_lastRemainingSeconds = 0; @@ -2681,6 +2681,7 @@ void MainWindow::saveAs() file = QFileDialog::getSaveFileName(this, tr("Save"), file, getFilter()); if (! file.isEmpty()) { + rememberDir(file); if (save(file)) { m_game.clear_modified(); @@ -2706,7 +2707,7 @@ void MainWindow::searchCallback(double elapsedSeconds, double remainingSeconds) return; m_lastRemainingSeconds = seconds; text = - tr("The computer is thinking... (max. %1 seconds remaining)") + tr("Computer is thinking... (up to %1 seconds remaining)") .arg(seconds); } else @@ -2716,7 +2717,7 @@ void MainWindow::searchCallback(double elapsedSeconds, double remainingSeconds) return; m_lastRemainingMinutes = minutes; text = - tr("The computer is thinking... (max. %1 minutes remaining)") + tr("Computer is thinking... (up to %1 minutes remaining)") .arg(minutes); } QMetaObject::invokeMethod(statusBar(), "showMessage", Q_ARG(QString, text), diff --git a/src/pentobi/translations/pentobi_de.ts b/src/pentobi/translations/pentobi_de.ts index f6b55a9..029a4c8 100644 --- a/src/pentobi/translations/pentobi_de.ts +++ b/src/pentobi/translations/pentobi_de.ts @@ -487,10 +487,6 @@ <translation>Kein Kommentar gefunden</translation> </message> <message> - <source>The computer is thinking...</source> - <translation>Der Computer denkt ...</translation> - </message> - <message> <source>Blokus games (*.blksgf);;All files (*)</source> <translation>Blokus-Partien (*.blksgf);;Alle Dateien (*)</translation> </message> @@ -685,14 +681,6 @@ <translation>Nur Teilbaum behalten</translation> </message> <message> - <source>The computer is thinking... (max. %1 seconds remaining)</source> - <translation>Der Computer denkt ... (max. %1 Sekunden verbleibend)</translation> - </message> - <message> - <source>The computer is thinking... (max. %1 minutes remaining)</source> - <translation>Der Computer denkt ... (max. %1 Minuten verbleibend)</translation> - </message> - <message> <source>[*]%1</source> <translation>[*]%1</translation> </message> @@ -971,6 +959,18 @@ <source>&Level (Callisto, 3 Players)</source> <translation>Spielst&ufe (Callisto, 3 Spieler)</translation> </message> + <message> + <source>Computer is thinking... (up to %1 seconds remaining)</source> + <translation>Computer denkt ... (maximal %1 Sekunden verbleibend)</translation> + </message> + <message> + <source>Computer is thinking... (up to %1 minutes remaining)</source> + <translation>Computer denkt ... (maximal %1 Minuten verbleibend)</translation> + </message> + <message> + <source>Computer is thinking...</source> + <translation>Computer denkt ...</translation> + </message> </context> <context> <name>RatedGamesList</name> diff --git a/src/pentobi_gtp/Engine.cpp b/src/pentobi_gtp/Engine.cpp index 3dfc4c6..07734c3 100644 --- a/src/pentobi_gtp/Engine.cpp +++ b/src/pentobi_gtp/Engine.cpp @@ -16,17 +16,7 @@ namespace pentobi_gtp { using libboardgame_gtp::Failure; -using libboardgame_util::ArrayList; -using libpentobi_base::Board; -using libpentobi_base::Color; -using libpentobi_base::Grid; -using libpentobi_base::Move; -using libpentobi_base::MoveList; -using libpentobi_base::PieceInfo; -using libpentobi_base::Point; using libpentobi_mcts::Float; -using libpentobi_mcts::Move; -using libpentobi_mcts::State; //----------------------------------------------------------------------------- diff --git a/src/pentobi_qml/Pentobi.pro b/src/pentobi_qml/Pentobi.pro index 3e48c77..e626184 100644 --- a/src/pentobi_qml/Pentobi.pro +++ b/src/pentobi_qml/Pentobi.pro @@ -4,7 +4,7 @@ QT += qml quick svg concurrent INCLUDEPATH += .. CONFIG += c++11 -QMAKE_CXXFLAGS += -DVERSION=\"\\\"12.0\\\"\" +QMAKE_CXXFLAGS += -DVERSION=\"\\\"12.1\\\"\" QMAKE_CXXFLAGS += -DPENTOBI_LOW_RESOURCES android { QMAKE_CXXFLAGS_RELEASE += -DLIBBOARDGAME_DISABLE_LOG diff --git a/src/pentobi_qml/android/AndroidManifest.xml b/src/pentobi_qml/android/AndroidManifest.xml index 9c366d9..0dfff3f 100644 --- a/src/pentobi_qml/android/AndroidManifest.xml +++ b/src/pentobi_qml/android/AndroidManifest.xml @@ -1,5 +1,5 @@ <?xml version="1.0"?> -<manifest package="net.sf.pentobi" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="12.0" android:versionCode="12000" android:installLocation="auto"> +<manifest package="net.sf.pentobi" xmlns:android="http://schemas.android.com/apk/res/android" android:versionName="12.1" android:versionCode="12001" android:installLocation="auto"> <application android:hardwareAccelerated="true" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="Pentobi" android:icon="@drawable/icon"> <activity android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation" android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="@string/app_name" android:screenOrientation="portrait" android:launchMode="singleTop"> <intent-filter> diff --git a/src/pentobi_qml/qml/Button.qml b/src/pentobi_qml/qml/Button.qml index 41c65e8..7263301 100644 --- a/src/pentobi_qml/qml/Button.qml +++ b/src/pentobi_qml/qml/Button.qml @@ -12,7 +12,7 @@ Controls2.Button { label: Image { sourceSize { width: Screen.pixelDensity < 5 ? 22 : 44 - height: sourceSize.height + height: width } anchors.centerIn: parent source: imageSource -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-games/pentobi.git _______________________________________________ Pkg-games-commits mailing list Pkg-games-commits@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-games-commits