Revert "Feature/continuumatrice product migration"
|
|
@ -15,14 +15,11 @@ option(WARNING_AS_ERROR "Treat warnings as errors in debug builds" ON)
|
|||
# Check for translation updates
|
||||
option(UPDATE_TRANSLATIONS "Update translations on compile" OFF)
|
||||
# Compile Cockatrice
|
||||
option(WITH_CLIENT "Build Continuumatrice client" ON)
|
||||
option(WITH_CLIENT "Build Cockatrice client" ON)
|
||||
# Compile Oracle
|
||||
option(WITH_ORACLE "Build legacy upstream Magic-card Oracle importer (not Continuumatrice data)" OFF)
|
||||
if(WITH_ORACLE)
|
||||
message(FATAL_ERROR "The upstream Oracle importer fetches Magic data and cannot be distributed as Continuumatrice. Build with -DWITH_ORACLE=OFF; use your own card XML.")
|
||||
endif()
|
||||
option(WITH_ORACLE "Build Cockatrice card database tool (Oracle)" ON)
|
||||
# Compile Servatrice
|
||||
option(WITH_SERVER "Build Continuum-Servatrice dedicated multiplayer server" ON)
|
||||
option(WITH_SERVER "Build Cockatrice server (Servatrice)" OFF)
|
||||
# Compile tests
|
||||
option(TEST "Build tests" OFF)
|
||||
# Build with AddressSanitizer and UndefinedBehaviorSanitizer
|
||||
|
|
@ -95,7 +92,7 @@ endif()
|
|||
|
||||
# A project name is needed for CPack
|
||||
# Version can be overriden by git tags, see cmake/getversion.cmake
|
||||
project("Continuumatrice" VERSION 3.2.0)
|
||||
project("Cockatrice" VERSION 3.2.0)
|
||||
|
||||
# Set release name if not provided via env/cmake var
|
||||
if(NOT DEFINED GIT_TAG_RELEASENAME)
|
||||
|
|
@ -296,17 +293,17 @@ if(MSVC)
|
|||
endif()
|
||||
|
||||
# Package builder
|
||||
set(CPACK_PACKAGE_CONTACT "Continuum Universes Studio")
|
||||
set(CPACK_PACKAGE_CONTACT "Zach Halpern <zach@cockatrice.us>")
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "${PROJECT_NAME}")
|
||||
set(CPACK_PACKAGE_VENDOR "Continuum Universes Studio")
|
||||
set(CPACK_PACKAGE_VENDOR "Cockatrice Development Team")
|
||||
set(CPACK_PACKAGE_DESCRIPTION
|
||||
"Continuumatrice is the Continuum Universes card-game client, independently packaged from the upstream Cockatrice project. It supports local games and compatible multiplayer servers."
|
||||
"Cockatrice is an open-source, multiplatform application for playing tabletop card games over a network. The program's server design prevents users from manipulating the game for unfair advantage. The client also provides a single-player mode, which allows users to brew while offline."
|
||||
)
|
||||
set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE")
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR "${PROJECT_VERSION_MAJOR}")
|
||||
set(CPACK_PACKAGE_VERSION_MINOR "${PROJECT_VERSION_MINOR}")
|
||||
set(CPACK_PACKAGE_VERSION_PATCH "${PROJECT_VERSION_PATCH}")
|
||||
set(CPACK_PACKAGE_FILE_NAME "Continuumatrice-${PROJECT_VERSION}-${CMAKE_SYSTEM_NAME}")
|
||||
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_VERSION_FILENAME}")
|
||||
|
||||
if(UNIX)
|
||||
if(APPLE)
|
||||
|
|
@ -323,10 +320,10 @@ if(UNIX)
|
|||
# linux
|
||||
if(CPACK_GENERATOR STREQUAL "RPM")
|
||||
set(CPACK_RPM_PACKAGE_LICENSE "GPLv2")
|
||||
set(CPACK_RPM_MAIN_COMPONENT "continuumatrice")
|
||||
set(CPACK_RPM_MAIN_COMPONENT "cockatrice")
|
||||
set(CPACK_RPM_PACKAGE_REQUIRES "protobuf, qt6-qtimageformats, qt6-qtmultimedia, qt6-qtsvg, qt6-qttools")
|
||||
set(CPACK_RPM_PACKAGE_GROUP "Amusements/Games")
|
||||
set(CPACK_RPM_PACKAGE_URL "https://github.com/Continuum-Universes-Studio/Continuumatrice")
|
||||
set(CPACK_RPM_PACKAGE_URL "http://github.com/Cockatrice/Cockatrice")
|
||||
# stop directories from making package conflicts
|
||||
set(CPACK_RPM_EXCLUDE_FROM_AUTO_FILELIST_ADDITION
|
||||
/usr/share/applications
|
||||
|
|
@ -341,7 +338,7 @@ if(UNIX)
|
|||
set(CPACK_GENERATOR DEB)
|
||||
set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON)
|
||||
set(CPACK_DEBIAN_PACKAGE_SECTION "games")
|
||||
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "https://github.com/Continuum-Universes-Studio/Continuumatrice")
|
||||
set(CPACK_DEBIAN_PACKAGE_HOMEPAGE "http://github.com/Cockatrice/Cockatrice")
|
||||
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt6multimedia6, libqt6svg6, qt6-image-formats-plugins, qt6-qpa-plugins")
|
||||
set(CPACK_DEBIAN_PACKAGE_RECOMMENDS "libqt6sql6-mysql") # for connecting servatrice to a mysql db
|
||||
endif()
|
||||
|
|
@ -373,7 +370,7 @@ elseif(WIN32)
|
|||
# All three applications are packaged into the same directory on Windows, so
|
||||
# this is the union of their Qt module lists, not just the client's: Servatrice
|
||||
# contributes Qt6Sql.dll and Oracle contributes nothing the client lacks, and a
|
||||
# client-only manifest leaves Qt6Sql.dll unasserted even though continuum-servatrice.exe
|
||||
# client-only manifest leaves Qt6Sql.dll unasserted even though servatrice.exe
|
||||
# is installed next to cockatrice.exe and cannot start without it.
|
||||
#
|
||||
# A statically linked Qt module ships no runtime DLL, so requiring one would
|
||||
|
|
@ -445,16 +442,13 @@ if(WITH_CLIENT)
|
|||
endif()
|
||||
|
||||
if(WITH_SERVER)
|
||||
# Keep the inherited source tree stable while generating the native product
|
||||
# build directory. The compiled program is build/continuum-servatrice/continuum-servatrice.
|
||||
add_subdirectory(servatrice "${CMAKE_BINARY_DIR}/continuum-servatrice")
|
||||
set(CPACK_INSTALL_CMAKE_PROJECTS "ContinuumServatrice;ContinuumServatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
|
||||
add_subdirectory(servatrice)
|
||||
set(CPACK_INSTALL_CMAKE_PROJECTS "Servatrice;Servatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
|
||||
endif()
|
||||
|
||||
if(WITH_CLIENT)
|
||||
# Source directory keeps its history; output no longer inherits "cockatrice".
|
||||
add_subdirectory(cockatrice "${CMAKE_BINARY_DIR}/continuumatrice")
|
||||
set(CPACK_INSTALL_CMAKE_PROJECTS "Continuumatrice;Continuumatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
|
||||
add_subdirectory(cockatrice)
|
||||
set(CPACK_INSTALL_CMAKE_PROJECTS "Cockatrice;Cockatrice;ALL;/" ${CPACK_INSTALL_CMAKE_PROJECTS})
|
||||
endif()
|
||||
|
||||
if(WIN32 AND WITH_CLIENT)
|
||||
|
|
|
|||
218
README.md
|
|
@ -1,80 +1,188 @@
|
|||
# Continuumatrice
|
||||
<p align='center'><img src=https://cloud.githubusercontent.com/assets/9874850/7516775/b00b8e36-f4d1-11e4-8da4-3df294d01f86.png></p>
|
||||
|
||||
**Continuumatrice** is a standalone, open-source desktop card-game client for **Continuum Universes**, developed by **Continuum Universes Studio** and based on the Cockatrice C++/Qt project.
|
||||
---
|
||||
|
||||
It is **not** your normal Magic: The Gathering Cockatrice installation. Continuumatrice has an independent executable, application ID, Linux launcher, card database, deck directory, settings, cache, window branding, and URL scheme. It also supports Limbo, Refuge, and Oblivion as additional card piles.
|
||||
<p align='center'>
|
||||
<a href="#cockatrice"><b>Cockatrice</b></a> <b>|</b>
|
||||
<a href="#download-">Download</a> <b>|</b>
|
||||
<a href="#related-repositories">Related</a> <b>|</b>
|
||||
<a href="#community-resources-">Community</a> <b>|</b>
|
||||
<a href="#contribute">Contribute</a> <b>|</b>
|
||||
<a href="#build--">Build</a> <b>|</b>
|
||||
<a href="#run">Run</a>
|
||||
</p>
|
||||
|
||||
> **Status:** Active fork development. Features and packaging changes in draft pull requests are not released or validated until built and tested.
|
||||
---
|
||||
|
||||
## What's different
|
||||
<br><pre><p align='center'>
|
||||
<b>To get started with Cockatrice ⇢ [view our webpage](https://cockatrice.github.io/)</b>
|
||||
<b>To get support, or suggest changes to the app ⇢ [file an issue](https://github.com/Cockatrice/Cockatrice/issues) ([How?](https://github.com/Cockatrice/Cockatrice/wiki/How-to-Create-a-GitHub-Ticket-Regarding-Cockatrice))</b><br>
|
||||
<b>To learn about the app and its code ⇢ [read our code documentation](https://cockatrice.github.io/docs/)</b>
|
||||
<b>To help with development ⇢ learn [how to contribute](#contribute)</b>
|
||||
</pre><p><br>
|
||||
|
||||
- Front, Support, Command battlefield bands with theme overrides
|
||||
- Limbo, Refuge, and Oblivion as real server-backed public piles
|
||||
- Independent profile: `~/.local/share/Continuumatrice` and `~/.cache/Continuumatrice` by default on Linux
|
||||
- Independent URL handler: `continuumatrice://` (does not claim `cockatrice://`)
|
||||
- Own app icon, name and install identity; regular Cockatrice remains untouched
|
||||
- No built-in Magic card import or Scryfall download list by default
|
||||
- Card data supplied by your own Cockatrice XML v4-compatible files and images; the XML schema is still inherited from Cockatrice
|
||||
- Matching fork client/server required for the three new pile-zone names
|
||||
|
||||
**Game rules are not automatically enforced** by the generic tabletop client. These piles are functional card containers, not an implementation of Continuum Universes rules themselves.
|
||||
# Cockatrice
|
||||
|
||||
## Build on openSUSE Tumbleweed
|
||||
Cockatrice is an open-source, multiplatform application for playing tabletop card games over a network. The program's server design prevents users from manipulating the game for unfair advantage. The client also provides a single-player mode, which allows users to brew while offline.<br><br>
|
||||
This project uses <kbd>C++</kbd> and the <kbd>Qt</kbd> libraries.<br>
|
||||
|
||||
Install development packages for Qt 6, Protobuf, a C++20 compiler, CMake and Ninja. Refer to [Linux installation notes](doc/continuumatrice-linux-install.md) for the dependency setup.
|
||||
|
||||
# Download [](https://tooomm.github.io/github-release-stats/?username=Cockatrice&repository=Cockatrice&search=0)
|
||||
|
||||
Downloads are available for **stable releases** and the current **beta version** in development.
|
||||
There is no strict release schedule for either of them.
|
||||
<br><pre>
|
||||
Latest <kbd>stable</kbd> release:
|
||||
[](https://github.com/cockatrice/cockatrice/releases/latest)  [](https://tooomm.github.io/github-release-stats/?username=Cockatrice&repository=Cockatrice&search=0)
|
||||
</pre><pre>
|
||||
Latest <kbd>beta</kbd> version:
|
||||
[](https://github.com/cockatrice/cockatrice/releases)  [](https://tooomm.github.io/github-release-stats/?username=Cockatrice&repository=Cockatrice&search=0) [](https://github.com/Cockatrice/Cockatrice/pulls?q=is%3Apr+is%3Aclosed)
|
||||
<sub><i>While incorporating the latest fixes and features, beta builds may not be stable or contain new bugs!</i></sub>
|
||||
<sub><b><i>Please report any findings and open new issues when testing them!</i></b></sub>
|
||||
</pre>
|
||||
|
||||
# Related Repositories
|
||||
|
||||
- [Magic-Token](https://github.com/Cockatrice/Magic-Token): File with MtG token data for use in Cockatrice
|
||||
- [Magic-Spoiler](https://github.com/Cockatrice/Magic-Spoiler): Code to generate MtG spoiler data from [MTGJSON](https://github.com/mtgjson/mtgjson) for use in Cockatrice
|
||||
- [cockatrice.github.io](https://github.com/Cockatrice/cockatrice.github.io): Code of the official Cockatrice webpage
|
||||
- [io.github.Cockatrice.cockatrice](https://github.com/flathub/io.github.Cockatrice.cockatrice): Configuration of our Linux `flatpak` package hosted at [Flathub](https://flathub.org/en/apps/io.github.Cockatrice.cockatrice)
|
||||
- [Webatrice](https://github.com/Cockatrice/Webatrice): Web client for Cockatrice servers (TypeScript / React)
|
||||
|
||||
|
||||
# Community Resources [](https://discord.gg/3Z9yzmA)
|
||||
|
||||
Join our [Discord community](https://discord.gg/3Z9yzmA) to connect with other project contributors (`#dev` channel) or fellow users of the app. Come here to talk about the application, features, or just to hang out.
|
||||
- [Official Website](https://cockatrice.github.io)
|
||||
- [Official Wiki](https://github.com/Cockatrice/Cockatrice/wiki)
|
||||
- [Official Discord](https://discord.gg/3Z9yzmA)
|
||||
- [reddit r/Cockatrice](https://reddit.com/r/cockatrice)
|
||||
|
||||
> [!IMPORTANT]
|
||||
> For support regarding specific servers, please contact that server's admin/mods and use their dedicated communication channels rather than contacting the team building the software.
|
||||
|
||||
|
||||
# Contribute
|
||||
<p>
|
||||
<a href="#code">Code</a> <b>|</b>
|
||||
<a href="#documentation-">Documentation</a> <b>|</b>
|
||||
<a href="#translation-">Translation</a>
|
||||
</p>
|
||||
|
||||
#### Repository Activity
|
||||

|
||||
|
||||
<details>
|
||||
<summary><b>Kudos to all our amazing contributors ❤️</b></summary>
|
||||
<br>
|
||||
<a href="https://github.com/Cockatrice/Cockatrice/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=Cockatrice/Cockatrice" />
|
||||
</a><br>
|
||||
<sub><i>Made with <a href="https://contrib.rocks">contrib.rocks</a></i></sub>
|
||||
</details>
|
||||
|
||||
### Code
|
||||
|
||||
To commit code to the project, please review our [Contribution Guidelines](https://github.com/Cockatrice/Cockatrice/blob/master/.github/CONTRIBUTING.md) first.<br>
|
||||
We maintain two tags for contributors to easier find issues to potentially work on:
|
||||
- [](https://github.com/Cockatrice/Cockatrice/issues?utf8=%E2%9C%93&q=is%3Aopen%20is%3Aissue%20label%3A%22Good%20first%20issue%22%20)<br>
|
||||
Issues tagged in this way provide a simple way to get started. They don't require much experience to be worked on.
|
||||
- [](https://github.com/Cockatrice/Cockatrice/issues?utf8=%E2%9C%93&q=is%3Aopen%20is%3Aissue%20label%3A%22Help%20Wanted%22%20)<br>
|
||||
This tag is used for issues that we are looking for somebody to pick up. Often this is for feature suggestions we support, but don't have the time to work on ourselves.
|
||||
|
||||
For both tags, we're willing to provide help to contributors in showing them where and how they can make changes, as well as code reviews for submitted changes.<br>
|
||||
We'll happily advice on how best to implement a feature, or we can show you where the codebase is doing something similar before you get too far along - put a note on an issue you want to discuss more on!
|
||||
|
||||
You can also have a look at our `Todo List` in our [Code Documentation](https://cockatrice.github.io/docs) or search the repo for [`\todo` comments](https://github.com/search?q=repo%3ACockatrice%2FCockatrice%20%5Ctodo&type=code).
|
||||
|
||||
### Documentation [](https://github.com/Cockatrice/Cockatrice/actions/workflows/documentation-build.yml?query=event%3Arelease+event%3Aworkflow_dispatch)
|
||||
|
||||
There are various places where useful information for different needs are maintained:
|
||||
- [Official Code Documentation](https://cockatrice.github.io/docs/)
|
||||
- [Official Wiki](https://github.com/Cockatrice/Cockatrice/wiki) `Community supported`
|
||||
- [Official Webpage](https://cockatrice.github.io/)
|
||||
- [Official README](https://github.com/Cockatrice/Cockatrice/blob/master/README.md) `This file`
|
||||
- [Official CONTRIBUTING](https://github.com/Cockatrice/Cockatrice/blob/master/.github/CONTRIBUTING.md)
|
||||
|
||||
Cockatrice tries to use the [Google Developer Documentation Style Guide](https://developers.google.com/style/) to ensure consistent documentation.
|
||||
We encourage everybody to improve the documentation by suggesting edits based on this guide.
|
||||
|
||||
### Translation [](https://explore.transifex.com/cockatrice/cockatrice/)
|
||||
|
||||
Cockatrice uses Transifex to manage translations. You can help us bring <kbd>Cockatrice</kbd> and <kbd>Oracle</kbd> to your language and just adjust single wordings right from within your browser by visiting our [Transifex project page](https://explore.transifex.com/cockatrice/cockatrice/). The [Webatrice](https://github.com/seavor/Webatrice) web client manages its own translations in its repo.<br>
|
||||
|
||||
Check out our [Translator FAQ](https://github.com/Cockatrice/Cockatrice/wiki/Translation-FAQ) for more information about getting involved, and join a group of hundreds of others!<br>
|
||||
|
||||
|
||||
# Build [](https://github.com/Cockatrice/Cockatrice/actions/workflows/desktop-build.yml?query=branch%3Amaster+event%3Apush) [](https://github.com/Cockatrice/Cockatrice/actions/workflows/docker-release.yml?query=branch%3Amaster+event%3Apush)
|
||||
|
||||
Dependencies: *(for minimum versions search our [CMake file](https://github.com/Cockatrice/Cockatrice/blob/master/CMakeLists.txt))*
|
||||
- [Qt](https://www.qt.io/developers/)
|
||||
- [protobuf](https://github.com/protocolbuffers/protobuf)
|
||||
- [CMake](https://www.cmake.org/)
|
||||
|
||||
Oracle can *optionally* use some packages to load compressed card files:
|
||||
- [xz](https://tukaani.org/xz/)
|
||||
- [zlib](https://www.zlib.net/)
|
||||
|
||||
<br>
|
||||
|
||||
**Basic compilation steps:**
|
||||
```bash
|
||||
git clone https://github.com/Continuum-Universes-Studio/Continuumatrice.git
|
||||
cd Continuumatrice
|
||||
|
||||
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
|
||||
-DWITH_CLIENT=ON -DWITH_SERVER=ON -DWITH_ORACLE=OFF
|
||||
|
||||
cmake --build build --target continuumatrice continuum-servatrice --parallel 16
|
||||
./build/continuumatrice/continuumatrice
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
```
|
||||
|
||||
The `cockatrice` CMake target is a backwards-compatible **build alias**, not the generated executable. An old `build/cockatrice/cockatrice` binary may still exist if you compiled an earlier version: it is stale, not Continuumatrice.
|
||||
You can then
|
||||
- Create a Cockatrice installation inside the `release` folder:
|
||||
```bash
|
||||
make install
|
||||
```
|
||||
- Or make an installation package specific to your system:
|
||||
```bash
|
||||
make package
|
||||
```
|
||||
|
||||
To install under an appropriate prefix:
|
||||
> [!NOTE]
|
||||
> Detailed compiling instructions can be found in the Cockatrice wiki at [Compiling Cockatrice](https://github.com/Cockatrice/Cockatrice/wiki/Compiling-Cockatrice)
|
||||
|
||||
```bash
|
||||
cmake --install build
|
||||
```
|
||||
<br>
|
||||
|
||||
Inspect `CMAKE_INSTALL_PREFIX` before installing, particularly on a machine that already has Cockatrice. The fork does not install or remove `/usr/bin/cockatrice` or the upstream `cockatrice.desktop`.
|
||||
The following flags (with their non-default values) can be passed to `cmake`:
|
||||
| Flag | Description |
|
||||
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `-DWITH_SERVER=1` | Build <kbd>Servatrice</kbd> server |
|
||||
| `-DWITH_CLIENT=0` | Don't build <kbd>Cockatrice</kbd> client |
|
||||
| `-DWITH_ORACLE=0` | Don't build <kbd>Oracle</kbd> card database tool |
|
||||
| `-DCMAKE_BUILD_TYPE=Debug` | Compile in debug mode<br> Enables extra logging output, debug symbols, and much more verbose compiler warnings |
|
||||
| `-DWARNING_AS_ERROR=0` | Don't treat compilation warnings as errors in debug mode |
|
||||
| `-DUPDATE_TRANSLATIONS=1` | Configure `make` to update the translation .ts files for new strings in the source code<br> **Note:** `make clean` will remove the .ts files |
|
||||
| `-DTEST=1` | Enable regression tests<br> **Note:** `make test` to run tests, *googletest* will be downloaded if not available |
|
||||
|
||||
## Card catalogue
|
||||
> [!TIP]
|
||||
> Build code documentation ([Doxygen](https://www.doxygen.nl)) according to our [configuration](https://github.com/Cockatrice/Cockatrice/blob/master/Doxyfile) into `/docs`:
|
||||
> ```bash
|
||||
> doxygen Doxyfile
|
||||
> ```
|
||||
|
||||
The fork accepts XML version 4 for the time being. An empty `cards.xml` is created on a fresh profile; store your Continuum Universes sets in `~/.local/share/Continuumatrice/customsets/`, then reload the card database.
|
||||
|
||||
Images live under `~/.local/share/Continuumatrice/pics/`. Custom graphics and themed pile icons are supported; no MTG catalogue is required.
|
||||
# Run
|
||||
|
||||
- [Card XML and assets](doc/continuumatrice-card-data.md)
|
||||
- [Special piles and theme icons](doc/continuumatrice-special-piles.md)
|
||||
- [Battlefield bands](doc/continuumatrice-battlefield.md)
|
||||
- [Linux coexistence with Cockatrice](doc/continuumatrice-linux-install.md)
|
||||
<kbd>Cockatrice</kbd> is the game client<br>
|
||||
<kbd>Oracle</kbd> fetches card data<br>
|
||||
<kbd>Servatrice</kbd> is the server<br>
|
||||
|
||||
## Independent product boundary
|
||||
#### Docker
|
||||
|
||||
The fork **must not** use upstream Cockatrice software-update releases, automatically import Magic card databases, register `.cod` as its own file type, or interfere with the original Cockatrice installation. A native Continuumatrice card importer and full multi-platform release validation are separate engineering work.
|
||||
You can build an image & deploy a <kbd>Servatrice</kbd> (Cockatrice server) container using [Docker](https://www.docker.com/resources/what-container/) and our Dockerfile yourself.<br>
|
||||
|
||||
Legacy class names, the `cockatrice/` source directory, `libcockatrice_*` internal libraries, Protobuf protocol, and inherited card XML root element remain for source and wire compatibility; they do not represent the installed product name.
|
||||
For more details, look into our wiki section on [Setting up Servatrice](https://github.com/Cockatrice/Cockatrice/wiki/Setting-up-Servatrice#using-docker).<br>
|
||||
You'll also find more hints on our **pre-build image** there, or the **docker-compose** file which will configure and run both a MySQL server and Servatrice.
|
||||
|
||||
## License and upstream attribution
|
||||
|
||||
Continuumatrice is derived from [Cockatrice](https://github.com/Cockatrice/Cockatrice), originally developed by the Cockatrice contributors. Existing copyright headers, contribution history and upstream license obligations are retained. See [LICENSE](LICENSE). The Continuumatrice modifications are maintained by Continuum Universes Studio.
|
||||
# License [](https://github.com/Cockatrice/Cockatrice/blob/master/LICENSE)
|
||||
|
||||
This is an independent fork, **not** an official Cockatrice release.
|
||||
|
||||
## Host Continuum-Servatrice
|
||||
|
||||
This repository includes the full dedicated multiplayer server, **Continuum-Servatrice**, built with the `continuum-servatrice` CMake target (default `WITH_SERVER=ON`). Its build output is `build/continuum-servatrice/continuum-servatrice`. Use the standalone `continuum_servatrice` MySQL database and the provided server-specific SQL schema/config; do not reuse MTG Servatrice's database or tables.
|
||||
|
||||
[Dedicated server hosting and database instructions](doc/continuum-servatrice-hosting.md)
|
||||
|
||||
## In-match Essence pools
|
||||
|
||||
Each player has a server-authoritative **16-type Essence pool** (`M S O G E A Q C J B R L V T P N`), starting at zero. The match displays all balances beside the battlefield with quick gain/spend/set controls. Essence isn't generated by drawing land cards, and there is no automatic per-turn resource refill or cost spending until actual CCG gameplay rules define those mechanics. Continuum-Servatrice and the local server both use the same counter protocol and state.
|
||||
|
||||
[In-match Essence resource pools and test checklist](doc/continuumatrice-match-essence.md)
|
||||
Cockatrice is free software, licensed under the [GPLv2](https://github.com/Cockatrice/Cockatrice/blob/master/LICENSE).
|
||||
|
|
|
|||
|
|
@ -51,18 +51,65 @@
|
|||
<true/>
|
||||
|
||||
<!-- ========================= -->
|
||||
<!-- URL SCHEME (continuumatrice://) -->
|
||||
<!-- FILE TYPE (.cod) SUPPORT -->
|
||||
<!-- ========================= -->
|
||||
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>org.cockatrice.deck</string>
|
||||
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Cockatrice Deck</string>
|
||||
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<array>
|
||||
<string>cod</string>
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Cockatrice Deck</string>
|
||||
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Default</string>
|
||||
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>org.cockatrice.deck</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<!-- ========================= -->
|
||||
<!-- URL SCHEME (cockatrice://) -->
|
||||
<!-- ========================= -->
|
||||
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleURLName</key>
|
||||
<string>Continuumatrice URL Scheme</string>
|
||||
<string>Cockatrice URL Scheme</string>
|
||||
|
||||
<key>CFBundleURLSchemes</key>
|
||||
<array>
|
||||
<string>continuumatrice</string>
|
||||
<string>cockatrice</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
|
|
|
|||
|
|
@ -105,9 +105,9 @@ Var SentryOutput
|
|||
!define MUI_HEADERIMAGE
|
||||
!define MUI_HEADERIMAGE_BITMAP "${NSIS_SOURCE_PATH}\cmake\headerimage.bmp"
|
||||
!define MUI_HEADERIMAGE_UNBITMAP "${NSIS_SOURCE_PATH}\cmake\headerimage.bmp"
|
||||
!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Continuumatrice.$\r$\n$\r$\nClick Next to continue."
|
||||
!define MUI_FINISHPAGE_RUN "$INSTDIR/continuumatrice.exe"
|
||||
!define MUI_FINISHPAGE_RUN_TEXT "Run 'Continuumatrice' now"
|
||||
!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of Cockatrice.$\r$\n$\r$\nClick Next to continue."
|
||||
!define MUI_FINISHPAGE_RUN "$INSTDIR/cockatrice.exe"
|
||||
!define MUI_FINISHPAGE_RUN_TEXT "Run 'Cockatrice' now"
|
||||
!define MUI_ICON "${NSIS_SOURCE_PATH}\cockatrice\resources\appicon.ico"
|
||||
|
||||
!define MUI_PAGE_CUSTOMFUNCTION_PRE SkipIfReinstall
|
||||
|
|
@ -141,7 +141,7 @@ Page Custom PortableModePageCreate PortableModePageLeave
|
|||
; user's machine can be diagnosed after the fact. Kept in $TEMP rather than in
|
||||
; $INSTDIR because the previous version's uninstaller removes the whole install
|
||||
; directory part-way through an upgrade. Read it back with:
|
||||
; notepad %TEMP%\Continuumatrice-installer.log
|
||||
; notepad %TEMP%\Cockatrice-installer.log
|
||||
!macro CockLog text
|
||||
Push "${text}"
|
||||
Call CockLogWrite
|
||||
|
|
@ -206,7 +206,7 @@ FunctionEnd
|
|||
|
||||
Function .onInit
|
||||
|
||||
StrCpy $InstallLogPath "$TEMP\Continuumatrice-installer.log"
|
||||
StrCpy $InstallLogPath "$TEMP\Cockatrice-installer.log"
|
||||
; No backup has been taken yet; RestoreUserDataAfterUninstall must be a no-op
|
||||
; until BackupUserDataBeforeUninstall sets this after actually copying something.
|
||||
StrCpy $DataBackupDir ""
|
||||
|
|
@ -232,22 +232,22 @@ FileClose $LogHandle
|
|||
|
||||
${If} ${NSIS_IS_64_BIT} == 1 #NSIS 64bit
|
||||
${IfNot} ${RunningX64}
|
||||
MessageBox MB_OK|MB_ICONSTOP "This version of Continuumatrice requires a 64-bit Windows system."
|
||||
MessageBox MB_OK|MB_ICONSTOP "This version of Cockatrice requires a 64-bit Windows system."
|
||||
Abort
|
||||
${EndIf}
|
||||
StrCpy $NormalDestDir "$ProgramFiles64\Continuumatrice"
|
||||
StrCpy $NormalDestDir "$ProgramFiles64\Cockatrice"
|
||||
SetRegView 64
|
||||
${Else} #NSIS 32bit
|
||||
${If} ${RunningX64}
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION \
|
||||
"You are about to install a 32-bit version of Continuumatrice on a 64-bit Windows system.$\n\
|
||||
"You are about to install a 32-bit version of Cockatrice on a 64-bit Windows system.$\n\
|
||||
We advise you to use the correct 64-bit installer instead to get around potential issues.$\n$\n\
|
||||
Download from our webpage: https://github.com/Continuum-Universes-Studio/Continuumatrice"
|
||||
Download from our webpage: https://cockatrice.github.io"
|
||||
${EndIf}
|
||||
StrCpy $NormalDestDir "$ProgramFiles\Continuumatrice"
|
||||
StrCpy $NormalDestDir "$ProgramFiles\Cockatrice"
|
||||
${EndIf}
|
||||
|
||||
StrCpy $PortableDestDir "$Desktop\ContinuumatricePortable"
|
||||
StrCpy $PortableDestDir "$Desktop\CockatricePortable"
|
||||
|
||||
${GetParameters} $9
|
||||
|
||||
|
|
@ -337,7 +337,7 @@ ${EndIf}
|
|||
; Then make sure no *other* application instance is still running (and holding
|
||||
; file locks) before the previous version is uninstalled. The probe names them
|
||||
; and the user is asked to close them; nothing is force-stopped without that
|
||||
; answer, because Continuumatrice may hold an unsaved deck and Oracle writes the card
|
||||
; answer, because Cockatrice may hold an unsaved deck and Oracle writes the card
|
||||
; database in place. On /R the old version is about to be removed, so an answer
|
||||
; the probe cannot give cancels the upgrade before it starts rather than after it.
|
||||
; Only needed this early for /R, where AutoUninstallIfNeeded runs below; for
|
||||
|
|
@ -365,7 +365,7 @@ ${EndIf}
|
|||
|
||||
; The uninstaller logs to its own file: the installer truncates its log on every run, so
|
||||
; sharing one would mean either side erasing the other's account of a failed upgrade.
|
||||
StrCpy $InstallLogPath "$TEMP\Continuumatrice-uninstaller.log"
|
||||
StrCpy $InstallLogPath "$TEMP\Cockatrice-uninstaller.log"
|
||||
FileOpen $LogHandle "$InstallLogPath" w
|
||||
FileClose $LogHandle
|
||||
!insertmacro CockLogUn "=================================================================="
|
||||
|
|
@ -380,7 +380,7 @@ Function RequireAdmin
|
|||
UserInfo::GetAccountType
|
||||
Pop $8
|
||||
${If} $8 != "admin"
|
||||
MessageBox MB_ICONSTOP "You need administrator rights to install Continuumatrice"
|
||||
MessageBox MB_ICONSTOP "You need administrator rights to install Cockatrice"
|
||||
SetErrorLevel 740 ;ERROR_ELEVATION_REQUIRED
|
||||
Abort
|
||||
${EndIf}
|
||||
|
|
@ -471,7 +471,7 @@ SetShellVarContext all
|
|||
;
|
||||
; --- 32-bit uninstall ---
|
||||
SetRegView 32
|
||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "QuietUninstallString"
|
||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString"
|
||||
|
||||
; On the /R path the updater passes /D=<appDir>, so $INSTDIR already is the old
|
||||
; install dir. Publish it for the backup/restore pair below.
|
||||
|
|
@ -491,7 +491,7 @@ done32:
|
|||
; --- 64-bit uninstall ---
|
||||
${If} ${RunningX64}
|
||||
SetRegView 64
|
||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "QuietUninstallString"
|
||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString"
|
||||
|
||||
StrCpy $OldInstallDir $INSTDIR
|
||||
!insertmacro CockLog "uninstall (64-bit): '$R0 _?=$OldInstallDir'"
|
||||
|
|
@ -516,7 +516,7 @@ FunctionEnd
|
|||
; that did not get a usable _?= copies itself to %TEMP%, starts that copy and exits, so
|
||||
; ExecWait returns at once while the copy keeps deleting - and it finishes after this
|
||||
; window has closed, removing the version that was just installed. Waiting for
|
||||
; continuumatrice.exe to disappear covers both cases, and stops with a message instead of
|
||||
; cockatrice.exe to disappear covers both cases, and stops with a message instead of
|
||||
;
|
||||
; When the payload is still there after the wait, $OldUninstallExit decides: a non-zero
|
||||
; code means the uninstaller was cancelled or failed, and the install aborts saying so.
|
||||
|
|
@ -552,10 +552,10 @@ ${OrIf} $OldUninstallExit == "launch-failed"
|
|||
${EndIf}
|
||||
StrCpy $R2 0
|
||||
old_uninstall_wait:
|
||||
IfFileExists "$OldInstallDir\continuumatrice.exe" 0 old_uninstall_gone
|
||||
IfFileExists "$OldInstallDir\cockatrice.exe" 0 old_uninstall_gone
|
||||
IntOp $R2 $R2 + 1
|
||||
${If} $R2 > 60
|
||||
!insertmacro CockLog "old uninstall: $OldInstallDir still holds continuumatrice.exe after 30 s (uninstaller exit=$OldUninstallExit)"
|
||||
!insertmacro CockLog "old uninstall: $OldInstallDir still holds cockatrice.exe after 30 s (uninstaller exit=$OldUninstallExit)"
|
||||
; The uninstaller's own account of what it skipped or why it stopped lives in its
|
||||
; separate log; copy it here so the report sent from AbortInstall carries it.
|
||||
Call AppendUninstallerLog
|
||||
|
|
@ -574,7 +574,7 @@ ${If} $R2 > 60
|
|||
; them, which NSIS Delete passes over silently. Free them and remove what is left.
|
||||
Call RemoveOldPayloadLeftovers
|
||||
; The removal reports success only when every payload executable is gone and the
|
||||
; DLL/Plugins purge came back clean; continuumatrice.exe alone would hide a locked
|
||||
; DLL/Plugins purge came back clean; cockatrice.exe alone would hide a locked
|
||||
; oracle.exe or a stale DLL the new payload is about to be written over.
|
||||
${If} $OldPayloadRemoved != "1"
|
||||
StrCpy $AbortReason \
|
||||
|
|
@ -594,7 +594,7 @@ old_uninstall_gone:
|
|||
${If} $R2 > 0
|
||||
; ExecWait returned while the old payload was still there: that uninstaller
|
||||
; copied itself to %TEMP%, and the copy is still working through its file list.
|
||||
; continuumatrice.exe is gone before the rest of it, so let the copy settle before
|
||||
; cockatrice.exe is gone before the rest of it, so let the copy settle before
|
||||
; the sections below start writing files it would otherwise remove.
|
||||
Sleep 1000
|
||||
!insertmacro CockLog "old uninstall: ExecWait returned early, settled 1 s after $R2 * 500 ms"
|
||||
|
|
@ -622,20 +622,20 @@ Function RemoveOldPayloadLeftovers
|
|||
StrCpy $INSTDIR $OldInstallDir
|
||||
StrCpy $R2 0
|
||||
rop_loop:
|
||||
SetFileAttributes "$INSTDIR\continuumatrice.exe" NORMAL
|
||||
SetFileAttributes "$INSTDIR\continuumatrice-legacy-oracle.exe" NORMAL
|
||||
SetFileAttributes "$INSTDIR\continuum-servatrice.exe" NORMAL
|
||||
Delete "$INSTDIR\continuumatrice.exe"
|
||||
Delete "$INSTDIR\continuumatrice-legacy-oracle.exe"
|
||||
Delete "$INSTDIR\continuum-servatrice.exe"
|
||||
SetFileAttributes "$INSTDIR\cockatrice.exe" NORMAL
|
||||
SetFileAttributes "$INSTDIR\oracle.exe" NORMAL
|
||||
SetFileAttributes "$INSTDIR\servatrice.exe" NORMAL
|
||||
Delete "$INSTDIR\cockatrice.exe"
|
||||
Delete "$INSTDIR\oracle.exe"
|
||||
Delete "$INSTDIR\servatrice.exe"
|
||||
Delete "$INSTDIR\qt.conf"
|
||||
Call RetryDllPurge
|
||||
; $R0 is RetryDllPurge's verdict (1 = a DLL or the Plugins directory survived).
|
||||
; Every payload executable has to be gone as well: a locked oracle.exe or
|
||||
; servatrice.exe is just as fatal to the install that follows as continuumatrice.exe.
|
||||
IfFileExists "$INSTDIR\continuumatrice.exe" rop_retry
|
||||
IfFileExists "$INSTDIR\continuumatrice-legacy-oracle.exe" rop_retry
|
||||
IfFileExists "$INSTDIR\continuum-servatrice.exe" rop_retry
|
||||
; servatrice.exe is just as fatal to the install that follows as cockatrice.exe.
|
||||
IfFileExists "$INSTDIR\cockatrice.exe" rop_retry
|
||||
IfFileExists "$INSTDIR\oracle.exe" rop_retry
|
||||
IfFileExists "$INSTDIR\servatrice.exe" rop_retry
|
||||
${If} $R0 == 0
|
||||
Goto rop_done
|
||||
${EndIf}
|
||||
|
|
@ -664,15 +664,15 @@ Function RemoveOldPayloadLeftovers
|
|||
Pop $INSTDIR
|
||||
FunctionEnd
|
||||
|
||||
; Copies the old uninstaller's log ($TEMP\Continuumatrice-uninstaller.log) into this
|
||||
; Copies the old uninstaller's log ($TEMP\Cockatrice-uninstaller.log) into this
|
||||
; installer's log, so the report AbortInstall sends shows what the uninstaller did.
|
||||
; Uninstallers older than this log simply have no file; that is logged too.
|
||||
Function AppendUninstallerLog
|
||||
ClearErrors
|
||||
FileOpen $UninstLogHandle "$TEMP\Continuumatrice-uninstaller.log" r
|
||||
FileOpen $UninstLogHandle "$TEMP\Cockatrice-uninstaller.log" r
|
||||
${If} ${Errors}
|
||||
${OrIf} $UninstLogHandle == ""
|
||||
!insertmacro CockLog "uninstaller log: not found at $TEMP\Continuumatrice-uninstaller.log"
|
||||
!insertmacro CockLog "uninstaller log: not found at $TEMP\Cockatrice-uninstaller.log"
|
||||
Return
|
||||
${EndIf}
|
||||
!insertmacro CockLog "uninstaller log begin ----------------------------------------"
|
||||
|
|
@ -712,7 +712,7 @@ FunctionEnd
|
|||
; (warnAboutDataPathsInProgramDir), which only exists after the first launch of
|
||||
; the new client.
|
||||
;
|
||||
; The 32-bit and 64-bit uninstall blocks below share $TEMP\ContinuumatriceDataBackup.
|
||||
; The 32-bit and 64-bit uninstall blocks below share $TEMP\CockatriceDataBackup.
|
||||
; When both are registered with different InstallLocations, backing up the second
|
||||
; directory into the first one's backup would restore the first dir's files into
|
||||
; the second one. BackupUserDataBeforeUninstall therefore starts over when
|
||||
|
|
@ -744,7 +744,7 @@ ${EndIf}
|
|||
; installer run - $DataBackupDir is empty until the first backup of this run,
|
||||
; so the second call in sequence (32-bit then 64-bit uninstall) still merges.
|
||||
${If} $DataBackupDir == ""
|
||||
RMDir /r "$TEMP\ContinuumatriceDataBackup"
|
||||
RMDir /r "$TEMP\CockatriceDataBackup"
|
||||
${EndIf}
|
||||
; The 32-bit and 64-bit uninstall blocks share one backup dir. When the second
|
||||
; block points at a different directory, merging would restore the first dir's
|
||||
|
|
@ -756,7 +756,7 @@ ${If} $DataBackupDir != ""
|
|||
${AndIf} $DataBackupForDir != ""
|
||||
${AndIf} $OldInstallDir != $DataBackupForDir
|
||||
!insertmacro CockLog "pre-uninstall backup: old dir changed ($DataBackupForDir -> $OldInstallDir), starting a fresh backup"
|
||||
RMDir /r "$TEMP\ContinuumatriceDataBackup"
|
||||
RMDir /r "$TEMP\CockatriceDataBackup"
|
||||
StrCpy $DataBackupDir ""
|
||||
StrCpy $DataBackupDone ""
|
||||
StrCpy $LooseDecksBackupDone ""
|
||||
|
|
@ -764,7 +764,7 @@ ${AndIf} $OldInstallDir != $DataBackupForDir
|
|||
${EndIf}
|
||||
${If} ${FileExists} "$OldInstallDir\portable.dat"
|
||||
${AndIf} ${FileExists} "$OldInstallDir\data"
|
||||
StrCpy $DataBackupDir "$TEMP\ContinuumatriceDataBackup"
|
||||
StrCpy $DataBackupDir "$TEMP\CockatriceDataBackup"
|
||||
StrCpy $DataBackupDone "1"
|
||||
!insertmacro CockLog "pre-uninstall backup: copying $OldInstallDir\data (downloaded pics excluded)"
|
||||
DetailPrint "Backing up portable user data before removing previous version..."
|
||||
|
|
@ -805,7 +805,7 @@ ${OrIf} ${FileExists} "$OldInstallDir\*.dec"
|
|||
${OrIf} ${FileExists} "$OldInstallDir\*.dek"
|
||||
${OrIf} ${FileExists} "$OldInstallDir\*.mwDeck"
|
||||
${If} $DataBackupDir == ""
|
||||
StrCpy $DataBackupDir "$TEMP\ContinuumatriceDataBackup"
|
||||
StrCpy $DataBackupDir "$TEMP\CockatriceDataBackup"
|
||||
${EndIf}
|
||||
StrCpy $LooseDecksBackupDone "1"
|
||||
!insertmacro CockLog "pre-uninstall backup: copying loose deck files"
|
||||
|
|
@ -839,7 +839,7 @@ backup_subdirs_loop:
|
|||
${EndIf}
|
||||
${If} ${FileExists} "$OldInstallDir\$DataBackupFindName\*.*"
|
||||
${If} $DataBackupDir == ""
|
||||
StrCpy $DataBackupDir "$TEMP\ContinuumatriceDataBackup"
|
||||
StrCpy $DataBackupDir "$TEMP\CockatriceDataBackup"
|
||||
${EndIf}
|
||||
StrCpy $InstallSubdirsBackupDone "1"
|
||||
!insertmacro CockLog "pre-uninstall backup: copying subdir $OldInstallDir\$DataBackupFindName"
|
||||
|
|
@ -922,7 +922,7 @@ ${AndIf} $LooseDeckNoticeShown != "1"
|
|||
${If} $LooseDecksBackupDone == "1"
|
||||
${OrIf} $InstallSubdirsBackupDone == "1"
|
||||
StrCpy $LooseDeckNoticeShown "1"
|
||||
MessageBox MB_OK|MB_ICONINFORMATION "Your decks or data folders were stored inside the Continuumatrice install folder ($OldInstallDir), which the previous version's uninstaller deletes.$\n$\nThey have been restored from a backup to that folder (loose deck files ending in .txt are not backed up - move those manually). If you install to a different folder, they are moved there automatically. Please move them out of the install folder afterwards (Settings -> General -> Paths) so a future uninstall cannot delete them again."
|
||||
MessageBox MB_OK|MB_ICONINFORMATION "Your decks or data folders were stored inside the Cockatrice install folder ($OldInstallDir), which the previous version's uninstaller deletes.$\n$\nThey have been restored from a backup to that folder (loose deck files ending in .txt are not backed up - move those manually). If you install to a different folder, they are moved there automatically. Please move them out of the install folder afterwards (Settings -> General -> Paths) so a future uninstall cannot delete them again."
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
done:
|
||||
|
|
@ -989,7 +989,7 @@ done:
|
|||
FunctionEnd
|
||||
|
||||
; --- Running instance handling ---
|
||||
; Continuumatrice, Oracle and Servatrice must not be running while files are
|
||||
; Cockatrice, Oracle and Servatrice must not be running while files are
|
||||
; replaced or deleted. A still-running process holds locks on its .exe and
|
||||
; Qt runtime DLLs, so a silent upgrade could otherwise end up with a mix of
|
||||
; old and new Qt DLLs next to the new executable, failing with
|
||||
|
|
@ -1030,7 +1030,7 @@ FunctionEnd
|
|||
; the image lookup matches on the directory a process runs from, so it does not
|
||||
; widen that set.
|
||||
;
|
||||
; Nothing is force-stopped without the user asking for it: Continuumatrice may be holding
|
||||
; Nothing is force-stopped without the user asking for it: Cockatrice may be holding
|
||||
; an unsaved deck or showing a "really leave this game?" confirmation, Oracle writes
|
||||
; the card database in place and can be killed mid-write, and Servatrice may be serving
|
||||
; a game. A close is a request, made automatically because that is what the user started
|
||||
|
|
@ -1050,14 +1050,14 @@ FunctionEnd
|
|||
; What the user does instead when they say no: the prompt's other answer stops the run, so they
|
||||
; are told how to get past the same wall next time. Also used by the abort dialogs, which is
|
||||
; where the answer to "why did it stop" ends up.
|
||||
!define AFTER_CLOSING_GUIDANCE "Answer the confirmation Continuumatrice may be showing - open it from the notification area if it is hidden there - and use Task Manager for a program that would not end."
|
||||
!define AFTER_CLOSING_GUIDANCE "Answer the confirmation Cockatrice may be showing - open it from the notification area if it is hidden there - and use Task Manager for a program that would not end."
|
||||
|
||||
; The escape hatch for a user who would rather not force-close anything: the same release,
|
||||
; downloaded and run by hand once Continuumatrice is closed. Every abort dialog shows this and
|
||||
; downloaded and run by hand once Cockatrice is closed. Every abort dialog shows this and
|
||||
; offers to open the page, so an update that cannot free the files still leaves the user a
|
||||
; way forward that does not end in Task Manager.
|
||||
!define LATEST_RELEASE_URL "https://github.com/Continuumatrice/Continuumatrice/releases/latest"
|
||||
!define MANUAL_UPDATE_GUIDANCE "To update safely instead, close Continuumatrice and download the latest installer from:$\r$\n${LATEST_RELEASE_URL}$\r$\nThen run it manually."
|
||||
!define LATEST_RELEASE_URL "https://github.com/Cockatrice/Cockatrice/releases/latest"
|
||||
!define MANUAL_UPDATE_GUIDANCE "To update safely instead, close Cockatrice and download the latest installer from:$\r$\n${LATEST_RELEASE_URL}$\r$\nThen run it manually."
|
||||
|
||||
; usage: set the variable named by the second argument to the probe's listing, then call
|
||||
; this. Sets $GuardPrompt to the question the guard and the recovery path ask.
|
||||
|
|
@ -1082,7 +1082,7 @@ FunctionEnd
|
|||
; @param cancelWord what No gives up, "installation" or "uninstallation"
|
||||
!macro CockEndPrompt header listing cancelWord
|
||||
StrCpy $GuardPrompt "${header}$\r$\n$\r$\n${listing}"
|
||||
StrCpy $GuardPrompt "$GuardPrompt$\r$\n$\r$\nChoose Yes to force close the Continuumatrice, Oracle and Servatrice programs listed above. ${END_COST}$\r$\n$\r$\nChoose No to cancel the ${cancelWord}. ${AFTER_CLOSING_GUIDANCE}"
|
||||
StrCpy $GuardPrompt "$GuardPrompt$\r$\n$\r$\nChoose Yes to force close the Cockatrice, Oracle and Servatrice programs listed above. ${END_COST}$\r$\n$\r$\nChoose No to cancel the ${cancelWord}. ${AFTER_CLOSING_GUIDANCE}"
|
||||
!macroend
|
||||
|
||||
; usage: like CockEndPrompt, for a MB_YESNOCANCEL question whose No checks again.
|
||||
|
|
@ -1104,7 +1104,7 @@ FunctionEnd
|
|||
; @param cancelWord what Cancel gives up, "installation" or "uninstallation"
|
||||
!macro CockEndRecheckPrompt header listing cancelWord
|
||||
StrCpy $GuardPrompt "${header}$\r$\n$\r$\n${listing}"
|
||||
StrCpy $GuardPrompt "$GuardPrompt$\r$\n$\r$\nChoose Yes to force close the Continuumatrice, Oracle and Servatrice programs listed above. ${END_COST}$\r$\n$\r$\nChoose No to close them yourself, then check again - answer the confirmation Continuumatrice may be showing, and open it from the notification area if it is hidden there.$\r$\n$\r$\nChoose Cancel to abort the ${cancelWord}."
|
||||
StrCpy $GuardPrompt "$GuardPrompt$\r$\n$\r$\nChoose Yes to force close the Cockatrice, Oracle and Servatrice programs listed above. ${END_COST}$\r$\n$\r$\nChoose No to close them yourself, then check again - answer the confirmation Cockatrice may be showing, and open it from the notification area if it is hidden there.$\r$\n$\r$\nChoose Cancel to abort the ${cancelWord}."
|
||||
!macroend
|
||||
|
||||
; Emitted once for the installer and once for the uninstaller: the uninstaller
|
||||
|
|
@ -1140,19 +1140,19 @@ Function ${prefix}RunHolderProbe
|
|||
FunctionEnd
|
||||
|
||||
; usage: set $GuardDir to the directory being replaced, then call this. Asks the running
|
||||
; Continuumatrice to close, and waits for it to exit.
|
||||
; Cockatrice to close, and waits for it to exit.
|
||||
;
|
||||
; The set is what the probe names: the processes holding a file of the version being
|
||||
; replaced, plus the payload programs running from the directory itself. The probe
|
||||
; closes that set by pid, which is why nothing here has to match an executable path. Only
|
||||
; continuumatrice.exe is asked: Oracle writes the card database in place and Servatrice has no
|
||||
; cockatrice.exe is asked: Oracle writes the card database in place and Servatrice has no
|
||||
; window to ask, so both are left alone here and only ended by the explicit answer.
|
||||
;
|
||||
; Each instance is asked to close over the local socket it listens on, which is the same
|
||||
; request as clicking its close button and reaches one whose window is hidden in the
|
||||
; notification area or is sitting on its own confirmation. A client from before that socket
|
||||
; is asked with WM_CLOSE on its own window instead, and a visible window is brought forward
|
||||
; first. Either way the close is answered, not obeyed - Continuumatrice asks before it quits while
|
||||
; first. Either way the close is answered, not obeyed - Cockatrice asks before it quits while
|
||||
; a card database update is running, a game is open or a deck is unsaved - and that question
|
||||
; is only useful if it is in front of the installer instead of behind it.
|
||||
;
|
||||
|
|
@ -1176,11 +1176,11 @@ Function ${prefix}CloseHolders
|
|||
; Call un. functions, so the macro's two lines are spelled with the prefix here.
|
||||
Push "close-holders: probe exit=$R3 [$R4]"
|
||||
Call ${prefix}CockLogWrite
|
||||
DetailPrint "Closing Continuumatrice: $R4"
|
||||
DetailPrint "Closing Cockatrice: $R4"
|
||||
FunctionEnd
|
||||
|
||||
; usage: set $GuardDir to the directory being replaced, then call this. Ends the running
|
||||
; Continuumatrice, Oracle and Servatrice instances the probe names.
|
||||
; Cockatrice, Oracle and Servatrice instances the probe names.
|
||||
;
|
||||
; This is the only place anything is stopped without being asked to stop, so it is only
|
||||
; reached after the user picked it from a prompt that says what it costs: a client that is
|
||||
|
|
@ -1198,7 +1198,7 @@ Function ${prefix}EndHolders
|
|||
Pop $R4
|
||||
Push "end-holders: probe exit=$R3 [$R4]"
|
||||
Call ${prefix}CockLogWrite
|
||||
DetailPrint "Ending Continuumatrice, Oracle and Servatrice: $R4"
|
||||
DetailPrint "Ending Cockatrice, Oracle and Servatrice: $R4"
|
||||
FunctionEnd
|
||||
!macroend
|
||||
|
||||
|
|
@ -1207,7 +1207,7 @@ FunctionEnd
|
|||
|
||||
; usage: set $GuardDir to the directory to guard, then call this.
|
||||
;
|
||||
; Asks Continuumatrice to close once, then asks one question with one answer that can free the
|
||||
; Asks Cockatrice to close once, then asks one question with one answer that can free the
|
||||
; payload. The automatic close is the same request clicking the window's close button makes,
|
||||
; so the common case - the client was still shutting down - never turns into a question. The
|
||||
; prompt is what remains when the close cannot reach everything: Oracle writes the card
|
||||
|
|
@ -1232,7 +1232,7 @@ Function GuardAppsNotRunning
|
|||
Call RunHolderProbe
|
||||
${If} $GuardExit == "0"
|
||||
!insertmacro CockLog "guard: nothing is holding the payload"
|
||||
DetailPrint "No running Continuumatrice, Oracle or Servatrice instance was found."
|
||||
DetailPrint "No running Cockatrice, Oracle or Servatrice instance was found."
|
||||
Return
|
||||
${EndIf}
|
||||
${If} $GuardExit == "1"
|
||||
|
|
@ -1258,7 +1258,7 @@ Function GuardAppsNotRunning
|
|||
; update from the official download page. Without the middle answer a user who did
|
||||
; not want anything killed had no way forward but to abandon the update.
|
||||
guard_ask:
|
||||
!insertmacro CockEndRecheckPrompt "Continuumatrice, Oracle or Servatrice is still using files of the installation:" $GuardOutput "installation"
|
||||
!insertmacro CockEndRecheckPrompt "Cockatrice, Oracle or Servatrice is still using files of the installation:" $GuardOutput "installation"
|
||||
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "$GuardPrompt" IDYES guard_end IDNO guard_recheck
|
||||
Goto guard_cancel
|
||||
guard_recheck:
|
||||
|
|
@ -1272,7 +1272,7 @@ Function GuardAppsNotRunning
|
|||
guard_cancel:
|
||||
!insertmacro CockLog "guard: cancelled by user after $GuardRecheckCount recheck(s)"
|
||||
StrCpy $AbortReason \
|
||||
"The installation was cancelled because Continuumatrice, Oracle or Servatrice is still running and holding files of the previous version.$\r$\n$\r$\n${AFTER_CLOSING_GUIDANCE}$\r$\n$\r$\nClose them and run the installer again."
|
||||
"The installation was cancelled because Cockatrice, Oracle or Servatrice is still running and holding files of the previous version.$\r$\n$\r$\n${AFTER_CLOSING_GUIDANCE}$\r$\n$\r$\nClose them and run the installer again."
|
||||
; RemoveOldPayloadLeftovers runs with the pre-uninstall backup already taken;
|
||||
; restoring here keeps this abort from stranding the only copy in %TEMP%.
|
||||
Call RestoreUserDataAfterUninstall
|
||||
|
|
@ -1296,7 +1296,7 @@ Function GuardAppsNotRunning
|
|||
"The installation was cancelled because these programs still hold files of the previous version and could not be ended:$\r$\n$\r$\n$GuardOutput$\r$\n$\r$\n${AFTER_CLOSING_GUIDANCE}$\r$\n$\r$\nClose them and run the installer again."
|
||||
${Else}
|
||||
StrCpy $AbortReason \
|
||||
"The installation was cancelled because, after ending Continuumatrice, Oracle and Servatrice, the installer could not check whether they still hold files of the previous version.$\r$\n$\r$\nThe check reported: $GuardOutput$\r$\n$\r$\nClose them and run the installer again."
|
||||
"The installation was cancelled because, after ending Cockatrice, Oracle and Servatrice, the installer could not check whether they still hold files of the previous version.$\r$\n$\r$\nThe check reported: $GuardOutput$\r$\n$\r$\nClose them and run the installer again."
|
||||
${EndIf}
|
||||
Call RestoreUserDataAfterUninstall
|
||||
Call AbortInstall
|
||||
|
|
@ -1314,15 +1314,15 @@ Function GuardAppsNotRunning
|
|||
; installs anyway, Abort cancels instead of writing a payload next to files
|
||||
; the guard could not rule out.
|
||||
!insertmacro CockLog "guard: the holder probe could not answer ($GuardExit): $GuardOutput"
|
||||
DetailPrint "Could not confirm whether Continuumatrice is still running: $GuardOutput"
|
||||
DetailPrint "Could not confirm whether Cockatrice is still running: $GuardOutput"
|
||||
MessageBox MB_ABORTRETRYIGNORE|MB_ICONEXCLAMATION|MB_DEFBUTTON1 \
|
||||
"This installer could not confirm whether Continuumatrice, Oracle or Servatrice is still running.$\r$\n$\r$\nThe check reported: $GuardOutput$\r$\n$\r$\nClose them, then choose Retry to check again. Choose Ignore to install anyway, or Abort to cancel the installation." \
|
||||
"This installer could not confirm whether Cockatrice, Oracle or Servatrice is still running.$\r$\n$\r$\nThe check reported: $GuardOutput$\r$\n$\r$\nClose them, then choose Retry to check again. Choose Ignore to install anyway, or Abort to cancel the installation." \
|
||||
IDRETRY guard_check IDABORT guard_unknown_abort
|
||||
!insertmacro CockLog "guard: continuing without an answer from the probe"
|
||||
Return
|
||||
guard_unknown_abort:
|
||||
StrCpy $AbortReason \
|
||||
"The installation was cancelled because it could not confirm whether Continuumatrice, Oracle or Servatrice is still running.$\r$\n$\r$\nThe check reported: $GuardOutput$\r$\n$\r$\nPlease close them and run the installer again."
|
||||
"The installation was cancelled because it could not confirm whether Cockatrice, Oracle or Servatrice is still running.$\r$\n$\r$\nThe check reported: $GuardOutput$\r$\n$\r$\nPlease close them and run the installer again."
|
||||
; Same reason as the cancel path above: this abort can be reached from the
|
||||
; leftover-removal guard, after the backup was taken.
|
||||
Call RestoreUserDataAfterUninstall
|
||||
|
|
@ -1391,7 +1391,7 @@ Function AbortInstall
|
|||
; forge extra lines into the artifact we send.
|
||||
!insertmacro CockLog "sentry send: result=$SentryResult output=$SentryOutput"
|
||||
${If} $SentryResult == "0"
|
||||
MessageBox MB_OK|MB_ICONINFORMATION "The installer log was sent. Thank you for helping improve Continuumatrice!"
|
||||
MessageBox MB_OK|MB_ICONINFORMATION "The installer log was sent. Thank you for helping improve Cockatrice!"
|
||||
${Else}
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION "The installer log could not be sent. You can still share it manually; it was written to:$\r$\n$InstallLogPath"
|
||||
${EndIf}
|
||||
|
|
@ -1425,7 +1425,7 @@ Function CloseLauncher
|
|||
Pop $R4
|
||||
Push "close-launcher: probe exit=$R3 [$R4]"
|
||||
Call CockLogWrite
|
||||
DetailPrint "Closing Continuumatrice: $R4"
|
||||
DetailPrint "Closing Cockatrice: $R4"
|
||||
FunctionEnd
|
||||
|
||||
; Waits for the application that launched this installer to exit, using the /PID=
|
||||
|
|
@ -1479,7 +1479,7 @@ Function WaitForLauncherToExit
|
|||
; under a second, so at ten seconds it is either flushing a card database or - far
|
||||
; more often - sitting on its own "quit anyway?" confirmation with nobody looking at
|
||||
; it. Silence for a minute is what makes that read as a hung installer. The full
|
||||
; grace is spent after the first question, so a user who answers Continuumatrice's
|
||||
; grace is spent after the first question, so a user who answers Cockatrice's
|
||||
; confirmation is not asked again while they do it.
|
||||
StrCpy $WaitSlice 10000
|
||||
wait_launcher_open:
|
||||
|
|
@ -1570,11 +1570,11 @@ Function WaitForLauncherToExit
|
|||
; exists to prevent. Yes ends the launcher, Cancel cancels, and No keeps waiting:
|
||||
; the close and the bring-forward just happened above.
|
||||
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_DEFBUTTON2 \
|
||||
"Continuumatrice has not finished closing, so the installation is paused rather than replace files it is still using.$\r$\n$\r$\nIt may be waiting for you to answer its own question about an unsaved deck, an open game or a card database update.$\r$\n$\r$\nChoose Yes to end it now - an unsaved deck, a running game or an unwritten setting is lost.$\r$\n$\r$\nChoose No to keep waiting, or Cancel to cancel the installation." \
|
||||
"Cockatrice has not finished closing, so the installation is paused rather than replace files it is still using.$\r$\n$\r$\nIt may be waiting for you to answer its own question about an unsaved deck, an open game or a card database update.$\r$\n$\r$\nChoose Yes to end it now - an unsaved deck, a running game or an unwritten setting is lost.$\r$\n$\r$\nChoose No to keep waiting, or Cancel to cancel the installation." \
|
||||
IDYES wait_launcher_end IDNO wait_launcher_retry
|
||||
!insertmacro CockLog "wait-launcher: cancelled by user"
|
||||
StrCpy $AbortReason \
|
||||
"The application that started this update has not exited yet, so the installation was cancelled rather than replace files it is still using.$\r$\n$\r$\nPlease close Continuumatrice and run the installer again."
|
||||
"The application that started this update has not exited yet, so the installation was cancelled rather than replace files it is still using.$\r$\n$\r$\nPlease close Cockatrice and run the installer again."
|
||||
Call AbortInstall
|
||||
; Only reached through Yes or No: AbortInstall does not return.
|
||||
wait_launcher_end:
|
||||
|
|
@ -1618,7 +1618,7 @@ Function EnsureOldInstallNotRunning
|
|||
; the directory the old install lives in. Every uninstaller shipped before
|
||||
; this change had no running instance guard of its own, so the old one would
|
||||
; delete files while an instance of the application is still holding them.
|
||||
ReadRegStr $R3 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "InstallLocation"
|
||||
ReadRegStr $R3 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "InstallLocation"
|
||||
${If} $R3 == ""
|
||||
; no usable record of where the old install is; $INSTDIR is the default
|
||||
; install directory at this point, which is where it usually is anyway
|
||||
|
|
@ -1629,19 +1629,19 @@ Function EnsureOldInstallNotRunning
|
|||
Call GuardAppsNotRunning
|
||||
FunctionEnd
|
||||
|
||||
; Sets $R0 to 1 if $INSTDIR looks like an existing Continuumatrice install. Used to
|
||||
; Sets $R0 to 1 if $INSTDIR looks like an existing Cockatrice install. Used to
|
||||
; guard the stale-runtime-DLL purge so a first-time install into a pre-existing
|
||||
; directory with an unrelated "Plugins" folder is never touched, while an
|
||||
; install that only ever held e.g. servatrice.exe is still purged.
|
||||
Function IsExistingContinuumatriceInstall
|
||||
Function IsExistingCockatriceInstall
|
||||
StrCpy $R0 0
|
||||
${If} ${FileExists} "$INSTDIR\continuumatrice.exe"
|
||||
${If} ${FileExists} "$INSTDIR\cockatrice.exe"
|
||||
StrCpy $R0 1
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$INSTDIR\continuumatrice-legacy-oracle.exe"
|
||||
${If} ${FileExists} "$INSTDIR\oracle.exe"
|
||||
StrCpy $R0 1
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$INSTDIR\continuum-servatrice.exe"
|
||||
${If} ${FileExists} "$INSTDIR\servatrice.exe"
|
||||
StrCpy $R0 1
|
||||
${EndIf}
|
||||
${If} ${FileExists} "$INSTDIR\uninstall.exe"
|
||||
|
|
@ -1652,7 +1652,7 @@ Function IsExistingContinuumatriceInstall
|
|||
; executables and uninstall.exe but silently skipped the DLLs its running
|
||||
; instance had locked - which is exactly the broken install the purge is
|
||||
; meant to heal, and without these markers none of the files above would be
|
||||
; there to prove that it is one. Every Qt module Continuumatrice links is part of
|
||||
; there to prove that it is one. Every Qt module Cockatrice links is part of
|
||||
; the payload, so match them all: probing only Qt6Core.dll would miss a
|
||||
; directory where that one file happened to be deletable and the others
|
||||
; were not. Qt6*.dll rather than *.dll on purpose: this function decides
|
||||
|
|
@ -2028,7 +2028,7 @@ Function RecoverFromHolders
|
|||
; One question, the same one the guard asks and with the same two answers. No retry loop:
|
||||
; the purge has already been tried after the close, so the only thing that can still free
|
||||
; the files is ending them, and the caller's abort names whatever survives that.
|
||||
!insertmacro CockEndPrompt "Files of the previous version of Continuumatrice are still in use by:" $HolderOutput "installation"
|
||||
!insertmacro CockEndPrompt "Files of the previous version of Cockatrice are still in use by:" $HolderOutput "installation"
|
||||
MessageBox MB_YESNO|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "$GuardPrompt" IDYES rfh_end
|
||||
!insertmacro CockLog "recover-holders: cancelled by user"
|
||||
Return
|
||||
|
|
@ -2084,14 +2084,14 @@ Function un.GuardAppsNotRunning
|
|||
; Same question and the same three answers as the installer's guard: force close,
|
||||
; close by hand and check again, or abort. CockEndRecheckPrompt words it, so the two
|
||||
; copies promise the same thing.
|
||||
!insertmacro CockEndRecheckPrompt "Continuumatrice, Oracle or Servatrice is still using files of the installation:" $GuardOutput "uninstallation"
|
||||
!insertmacro CockEndRecheckPrompt "Cockatrice, Oracle or Servatrice is still using files of the installation:" $GuardOutput "uninstallation"
|
||||
MessageBox MB_YESNOCANCEL|MB_ICONEXCLAMATION|MB_DEFBUTTON2 "$GuardPrompt" IDYES un_guard_end IDNO un_guard_recheck
|
||||
!insertmacro CockLogUn "uninst-guard: cancelled by user after $GuardRecheckCount recheck(s)"
|
||||
; The installer's Cancel lands in AbortInstall, which explains what to do next. The
|
||||
; uninstaller has no such dialog, so say the same thing here: a bare Abort would
|
||||
; close the window and leave the user with no reason and no next step.
|
||||
MessageBox MB_OK|MB_ICONEXCLAMATION \
|
||||
"The uninstallation was cancelled because Continuumatrice, Oracle or Servatrice is still running and holding files of the installation.$\r$\n$\r$\n${AFTER_CLOSING_GUIDANCE}$\r$\n$\r$\nClose them and run the uninstaller again."
|
||||
"The uninstallation was cancelled because Cockatrice, Oracle or Servatrice is still running and holding files of the installation.$\r$\n$\r$\n${AFTER_CLOSING_GUIDANCE}$\r$\n$\r$\nClose them and run the uninstaller again."
|
||||
SetErrorLevel 1
|
||||
Abort
|
||||
un_guard_recheck:
|
||||
|
|
@ -2122,9 +2122,9 @@ Function un.GuardAppsNotRunning
|
|||
; uninstall that hits a Restart Manager that was busy, or a payload program the user has
|
||||
; not closed yet, can simply be retried.
|
||||
!insertmacro CockLogUn "uninst-guard: the holder probe could not answer ($GuardExit): $GuardOutput"
|
||||
DetailPrint "Could not confirm whether Continuumatrice is still running: $GuardOutput"
|
||||
DetailPrint "Could not confirm whether Cockatrice is still running: $GuardOutput"
|
||||
MessageBox MB_ABORTRETRYIGNORE|MB_ICONEXCLAMATION|MB_DEFBUTTON1 \
|
||||
"This uninstaller could not confirm whether Continuumatrice, Oracle or Servatrice is still running.$\r$\n$\r$\nThe check reported: $GuardOutput$\r$\n$\r$\nClose them, then choose Retry to check again. Choose Ignore to uninstall anyway, or Abort to cancel the uninstallation." \
|
||||
"This uninstaller could not confirm whether Cockatrice, Oracle or Servatrice is still running.$\r$\n$\r$\nThe check reported: $GuardOutput$\r$\n$\r$\nClose them, then choose Retry to check again. Choose Ignore to uninstall anyway, or Abort to cancel the uninstallation." \
|
||||
IDRETRY un_guard_check IDABORT un_guard_unknown_abort
|
||||
!insertmacro CockLogUn "uninst-guard: continuing without an answer from the probe"
|
||||
Return
|
||||
|
|
@ -2141,7 +2141,7 @@ ${If} $ReinstallMode = 1
|
|||
${EndIf}
|
||||
|
||||
Call SetModeDestinationFromInstdir ; If the user clicks BACK on the directory page we will remember their mode specific directory
|
||||
!insertmacro MUI_HEADER_TEXT "Install Mode" "Choose how you want to install Continuumatrice."
|
||||
!insertmacro MUI_HEADER_TEXT "Install Mode" "Choose how you want to install Cockatrice."
|
||||
nsDialogs::Create 1018
|
||||
Pop $0
|
||||
${NSD_CreateLabel} 0 10u 100% 24u "Select install mode:"
|
||||
|
|
@ -2182,11 +2182,11 @@ ${If} $PortableMode = 0
|
|||
# uninstall 32bit version
|
||||
SetRegView 32
|
||||
|
||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "UninstallString"
|
||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "UninstallString"
|
||||
StrCmp $R0 "" done32
|
||||
|
||||
${If} $ReinstallMode = 0
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "A previous version of Continuumatrice must be uninstalled before installing the new one." IDOK uninst32
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "A previous version of Cockatrice must be uninstalled before installing the new one." IDOK uninst32
|
||||
; Abort would only skip this page and install over the old version anyway;
|
||||
; the message said the old one must go first, so Cancel means cancel.
|
||||
!insertmacro CockLog "componentsPagePre: cancelled at the previous-version prompt"
|
||||
|
|
@ -2213,7 +2213,7 @@ ${If} $PortableMode = 0
|
|||
; the user clicks Next on it, the new version is installed, and the uninstaller
|
||||
; removes everything once this window closes. /S leaves no window to be behind,
|
||||
; so ExecWait is waiting for something that cannot outlive it.
|
||||
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "QuietUninstallString"
|
||||
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString"
|
||||
${If} $R1 == ""
|
||||
StrCpy $OldUninstallString "$OldUninstallString /S"
|
||||
${Else}
|
||||
|
|
@ -2233,11 +2233,11 @@ ${If} $PortableMode = 0
|
|||
${If} ${NSIS_IS_64_BIT} == 1
|
||||
SetRegView 64
|
||||
|
||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "UninstallString"
|
||||
ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "UninstallString"
|
||||
StrCmp $R0 "" done64
|
||||
|
||||
${If} $ReinstallMode = 0
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "A previous version of Continuumatrice must be uninstalled before installing the new one." IDOK uninst64
|
||||
MessageBox MB_OKCANCEL|MB_ICONEXCLAMATION "A previous version of Cockatrice must be uninstalled before installing the new one." IDOK uninst64
|
||||
!insertmacro CockLog "componentsPagePre: cancelled at the previous-version prompt"
|
||||
Quit
|
||||
${Else}
|
||||
|
|
@ -2249,7 +2249,7 @@ ${If} $PortableMode = 0
|
|||
Call EnsureOldInstallNotRunning
|
||||
StrCpy $OldInstallDir $GuardDir
|
||||
; Silent, for the reason given in the 32-bit branch above.
|
||||
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "QuietUninstallString"
|
||||
ReadRegStr $R1 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString"
|
||||
${If} $R1 == ""
|
||||
StrCpy $OldUninstallString "$OldUninstallString /S"
|
||||
${Else}
|
||||
|
|
@ -2287,7 +2287,7 @@ SetOutPath "$INSTDIR"
|
|||
; "abseil_dll.dll is either not designed to run on Windows or it contains an
|
||||
; error" for the protobuf ones. So the check has to come before the first
|
||||
; Delete/RMDir and not after it: an interactive install into an existing portable
|
||||
; directory with continuumatrice.exe still running would otherwise delete the old
|
||||
; directory with cockatrice.exe still running would otherwise delete the old
|
||||
; files under its feet.
|
||||
;
|
||||
; It is skipped on the /R path: .onInit already ran it before
|
||||
|
|
@ -2301,20 +2301,20 @@ ${If} $ReinstallMode = 0
|
|||
${EndIf}
|
||||
|
||||
; Measured before either purge block, because it has to describe the directory as
|
||||
; it arrived here and not what a purge left of it: IsExistingContinuumatriceInstall
|
||||
; looks for continuumatrice.exe, oracle.exe, servatrice.exe, uninstall.exe, Qt6*.dll
|
||||
; it arrived here and not what a purge left of it: IsExistingCockatriceInstall
|
||||
; looks for cockatrice.exe, oracle.exe, servatrice.exe, uninstall.exe, Qt6*.dll
|
||||
; and qt.conf, and the portable purge below deletes exactly those. Taken after
|
||||
; that purge it answered "not an install" as soon as the only survivor was a file
|
||||
; it does not look for - a locked abseil_dll.dll or libssl-3-x64.dll, say - and
|
||||
; the abort further down was then skipped for the very directory the purge had
|
||||
; just failed in.
|
||||
; Remembered because the stale-runtime check below must only ever fire for a
|
||||
; directory this installer recognised as a Continuumatrice install. Scanning for
|
||||
; directory this installer recognised as a Cockatrice install. Scanning for
|
||||
; leftovers in an unrelated directory (a first-time install into a folder that
|
||||
; happens to hold some Qt5 DLLs, say) would otherwise turn those files into an
|
||||
; abort reason even though the payload is about to overwrite nothing of theirs.
|
||||
Call IsExistingContinuumatriceInstall
|
||||
!insertmacro CockLog "section: IsExistingContinuumatriceInstall=$R0"
|
||||
Call IsExistingCockatriceInstall
|
||||
!insertmacro CockLog "section: IsExistingCockatriceInstall=$R0"
|
||||
StrCpy $IsUpgrade $R0
|
||||
|
||||
${If} $PortableMode = 1
|
||||
|
|
@ -2332,9 +2332,9 @@ ${AndIf} ${FileExists} "$INSTDIR\portable.dat"
|
|||
RMDir /r "$INSTDIR\plugins"
|
||||
RMDir /r "$INSTDIR\translations"
|
||||
Delete "$INSTDIR\uninstall.exe"
|
||||
Delete "$INSTDIR\continuumatrice.exe"
|
||||
Delete "$INSTDIR\continuumatrice-legacy-oracle.exe"
|
||||
Delete "$INSTDIR\continuum-servatrice.exe"
|
||||
Delete "$INSTDIR\cockatrice.exe"
|
||||
Delete "$INSTDIR\oracle.exe"
|
||||
Delete "$INSTDIR\servatrice.exe"
|
||||
; Every top-level DLL, not a list of expected ones. The payload is written
|
||||
; after this block, so a DLL the new build still needs is put straight back;
|
||||
; what this has to guarantee is that nothing from the previous build is left
|
||||
|
|
@ -2348,8 +2348,8 @@ ${AndIf} ${FileExists} "$INSTDIR\portable.dat"
|
|||
StrCpy $DllPurgeRan 1
|
||||
Delete "$INSTDIR\qt.conf"
|
||||
Delete "$INSTDIR\qdebug.txt"
|
||||
Delete "$INSTDIR\continuum-servatrice.sql"
|
||||
Delete "$INSTDIR\continuum-servatrice.ini.example"
|
||||
Delete "$INSTDIR\servatrice.sql"
|
||||
Delete "$INSTDIR\servatrice.ini.example"
|
||||
RMDir "$INSTDIR"
|
||||
!insertmacro CockLogListing "after-portable-purge" "*.dll"
|
||||
${EndIf}
|
||||
|
|
@ -2427,7 +2427,7 @@ ${If} $StaleRuntimeAfterPurge = 1
|
|||
Call LogStaleRuntimeDiagnostics
|
||||
${If} $HolderFound = 1
|
||||
; On /R the previous version is already uninstalled at this point, so an abort
|
||||
; leaves the user with no working Continuumatrice. It closes once, then offers to end
|
||||
; leaves the user with no working Cockatrice. It closes once, then offers to end
|
||||
; what is left; this updates $StaleRuntimeAfterPurge with the verdict after that
|
||||
; close, or after the end when the user asked for one.
|
||||
Call RecoverFromHolders
|
||||
|
|
@ -2452,7 +2452,7 @@ ${If} $StaleRuntimeAfterPurge = 1
|
|||
; so "most likely still running" is no longer a fair guess and would send the user
|
||||
; to close programs that are already closed.
|
||||
StrCpy $AbortReason \
|
||||
"The installation could not remove all files of a previous version of Continuumatrice, and was cancelled rather than leave a mismatched installation behind."
|
||||
"The installation could not remove all files of a previous version of Cockatrice, and was cancelled rather than leave a mismatched installation behind."
|
||||
${If} $HolderFound = 1
|
||||
StrCpy $AbortReason "$AbortReason$\r$\n$\r$\nStill using the install directory:$\r$\n$HolderOutput$\r$\n$\r$\nClose them and run the installer again."
|
||||
${ElseIf} $HolderExit == "0"
|
||||
|
|
@ -2461,7 +2461,7 @@ ${If} $StaleRuntimeAfterPurge = 1
|
|||
; The check itself failed, so "no running program was found" would be a claim this
|
||||
; installer cannot make. Name the failure instead, and leave the per-file codes to
|
||||
; the log, where they already are.
|
||||
StrCpy $AbortReason "$AbortReason$\r$\n$\r$\nThe check for a running program could not be completed: $HolderOutput$\r$\n$\r$\nClose Continuumatrice, Oracle and Servatrice and run the installer again; the installer log records what Windows reported for each file."
|
||||
StrCpy $AbortReason "$AbortReason$\r$\n$\r$\nThe check for a running program could not be completed: $HolderOutput$\r$\n$\r$\nClose Cockatrice, Oracle and Servatrice and run the installer again; the installer log records what Windows reported for each file."
|
||||
${EndIf}
|
||||
; "Run the installer again" is not enough on an in-app update: the old version
|
||||
; was uninstalled before the purge, so point at the installer that was downloaded.
|
||||
|
|
@ -2494,37 +2494,39 @@ ${If} $PortableMode = 0
|
|||
; dumps on user machines that nothing consumes.
|
||||
; https://learn.microsoft.com/en-us/windows/win32/wer/collecting-user-mode-dumps
|
||||
|
||||
; Older installers did register continuumatrice.exe above (and the removed
|
||||
; Older installers did register cockatrice.exe above (and the removed
|
||||
; MiniDumpWithFullMemory writer filled that folder), and that key survives this
|
||||
; install, so WER would keep writing full dumps. Remove it, and clear the
|
||||
; legacy dumps nothing consumes anymore. $LOCALAPPDATA resolves per shell context:
|
||||
; under "all" it points at ProgramData, so switch to "current" for the per-user
|
||||
; dumps folder and back afterwards; the registry delete works in either context.
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\continuumatrice.exe"
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\cockatrice.exe"
|
||||
SetShellVarContext current
|
||||
RMDir /r "$LOCALAPPDATA\CrashDumps\Continuumatrice"
|
||||
RMDir /r "$LOCALAPPDATA\CrashDumps\Cockatrice"
|
||||
SetShellVarContext all
|
||||
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "DisplayIcon" "$INSTDIR\continuumatrice.exe"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "DisplayName" "Continuumatrice"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "DisplayVersion" "@CPACK_PACKAGE_VERSION_MAJOR@.@CPACK_PACKAGE_VERSION_MINOR@.@CPACK_PACKAGE_VERSION_PATCH@"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "EstimatedSize" "$0"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "InstallLocation" "$INSTDIR"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "NoModify" "1"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "NoRepair" "1"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "Publisher" "Continuum Universes Studio"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "VersionMajor" "@CPACK_PACKAGE_VERSION_MAJOR@"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice" "VersionMinor" "@CPACK_PACKAGE_VERSION_MINOR@"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "DisplayIcon" "$INSTDIR\cockatrice.exe"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "DisplayName" "Cockatrice"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "DisplayVersion" "@CPACK_PACKAGE_VERSION_MAJOR@.@CPACK_PACKAGE_VERSION_MINOR@.@CPACK_PACKAGE_VERSION_PATCH@"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "EstimatedSize" "$0"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "InstallLocation" "$INSTDIR"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "NoModify" "1"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "NoRepair" "1"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "Publisher" "Cockatrice team"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "QuietUninstallString" "$\"$INSTDIR\uninstall.exe$\" /S"
|
||||
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "VersionMajor" "@CPACK_PACKAGE_VERSION_MAJOR@"
|
||||
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice" "VersionMinor" "@CPACK_PACKAGE_VERSION_MINOR@"
|
||||
|
||||
; Continuumatrice deliberately does not register .cod, which belongs to
|
||||
; an independent Cockatrice MTG installation.
|
||||
; --- Register .cod file type ---
|
||||
WriteRegStr HKCR ".cod" "" "Cockatrice"
|
||||
WriteRegStr HKCR "Cockatrice" "" "Cockatrice Deck File"
|
||||
WriteRegStr HKCR "Cockatrice\shell\open\command" "" '"$INSTDIR\cockatrice.exe" "%1"'
|
||||
|
||||
; --- Register custom URI protocol ---
|
||||
WriteRegStr HKCR "continuumatrice" "" "URL: Continuumatrice Protocol"
|
||||
WriteRegStr HKCR "continuumatrice" "URL Protocol" ""
|
||||
WriteRegStr HKCR "continuumatrice\shell\open\command" "" '"$INSTDIR\continuumatrice.exe" "%1"'
|
||||
WriteRegStr HKCR "cockatrice" "" "URL: Cockatrice Protocol"
|
||||
WriteRegStr HKCR "cockatrice" "URL Protocol" ""
|
||||
WriteRegStr HKCR "cockatrice\shell\open\command" "" '"$INSTDIR\cockatrice.exe" "%1"'
|
||||
|
||||
IfFileExists "$INSTDIR\vc_redist.x86.exe" VcRedist86Exists PastVcRedist86Check
|
||||
VcRedist86Exists:
|
||||
|
|
@ -2550,8 +2552,8 @@ ${Else}
|
|||
${EndIf}
|
||||
|
||||
${If} $ReinstallMode = 1
|
||||
IfFileExists "$INSTDIR\continuumatrice.exe" 0 +2
|
||||
Exec '"$INSTDIR\continuumatrice.exe"'
|
||||
IfFileExists "$INSTDIR\cockatrice.exe" 0 +2
|
||||
Exec '"$INSTDIR\cockatrice.exe"'
|
||||
${EndIf}
|
||||
|
||||
!insertmacro CockLog "section: application install complete"
|
||||
|
|
@ -2560,8 +2562,10 @@ SectionEnd
|
|||
Section "Start menu item" SecStartMenu
|
||||
${If} $PortableMode = 0
|
||||
SetShellVarContext all
|
||||
createDirectory "$SMPROGRAMS\Continuumatrice"
|
||||
createShortCut "$SMPROGRAMS\Continuumatrice\Continuumatrice.lnk" "$INSTDIR\continuumatrice.exe"
|
||||
createDirectory "$SMPROGRAMS\Cockatrice"
|
||||
createShortCut "$SMPROGRAMS\Cockatrice\Cockatrice.lnk" "$INSTDIR\cockatrice.exe"
|
||||
createShortCut "$SMPROGRAMS\Cockatrice\Oracle.lnk" "$INSTDIR\oracle.exe"
|
||||
createShortCut "$SMPROGRAMS\Cockatrice\Servatrice.lnk" "$INSTDIR\servatrice.exe"
|
||||
${EndIf}
|
||||
SectionEnd
|
||||
|
||||
|
|
@ -2596,41 +2600,48 @@ Section "un.Application" UnSecApplication
|
|||
; Succeeds only when no foreign files remain.
|
||||
RMDir "$INSTDIR"
|
||||
|
||||
RMDir /r "$SMPROGRAMS\Continuumatrice"
|
||||
RMDir /r "$SMPROGRAMS\Cockatrice"
|
||||
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Continuumatrice"
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Cockatrice"
|
||||
|
||||
; Leftover WER LocalDumps key from pre-Sentry installers (see the installer note
|
||||
; above): removing it here covers machines that uninstall without reinstalling.
|
||||
; The legacy full-memory dumps go with it; nothing consumes them anymore. Same shell
|
||||
; context note as the installer: the per-user dumps folder needs "current".
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\continuumatrice.exe"
|
||||
DeleteRegKey HKLM "Software\Microsoft\Windows\Windows Error Reporting\LocalDumps\cockatrice.exe"
|
||||
SetShellVarContext current
|
||||
RMDir /r "$LOCALAPPDATA\CrashDumps\Continuumatrice"
|
||||
RMDir /r "$LOCALAPPDATA\CrashDumps\Cockatrice"
|
||||
SetShellVarContext all
|
||||
|
||||
; Remove only the Continuumatrice URI scheme. Never touch MTG .cod.
|
||||
; Only remove the file/protocol associations if we registered them (i.e. the
|
||||
; install was not portable) and .cod is still owned by Cockatrice, so we don't
|
||||
; clobber a .cod association installed by another application.
|
||||
${If} $R1 == 0
|
||||
DeleteRegKey HKCR "continuumatrice"
|
||||
ReadRegStr $0 HKCR ".cod" ""
|
||||
${If} $0 == "Cockatrice"
|
||||
DeleteRegKey HKCR ".cod"
|
||||
DeleteRegKey HKCR "Cockatrice"
|
||||
DeleteRegKey HKCR "cockatrice"
|
||||
${EndIf}
|
||||
${EndIf}
|
||||
SectionEnd
|
||||
|
||||
; unselected because it is /o
|
||||
Section /o "un.Configurations, decks, cards, pics" UnSecConfiguration
|
||||
SetShellVarContext current
|
||||
DeleteRegKey HKCU "Software\Continuumatrice"
|
||||
DeleteRegKey HKCU "Software\Cockatrice"
|
||||
|
||||
RMDir /r "$LOCALAPPDATA\Continuumatrice"
|
||||
RMDir /r "$LOCALAPPDATA\Cockatrice"
|
||||
SectionEnd
|
||||
|
||||
LangString DESC_SecApplication ${LANG_ENGLISH} "Continuumatrice program files"
|
||||
LangString DESC_SecStartMenu ${LANG_ENGLISH} "Create start menu items for Continuumatrice and Oracle."
|
||||
LangString DESC_SecApplication ${LANG_ENGLISH} "Cockatrice program files"
|
||||
LangString DESC_SecStartMenu ${LANG_ENGLISH} "Create start menu items for Cockatrice and Oracle."
|
||||
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${SecApplication} $(DESC_SecApplication)
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenu} $(DESC_SecStartMenu)
|
||||
!insertmacro MUI_FUNCTION_DESCRIPTION_END
|
||||
|
||||
LangString DESC_UnSecApplication ${LANG_ENGLISH} "Continuumatrice program files and start menu items"
|
||||
LangString DESC_UnSecApplication ${LANG_ENGLISH} "Cockatrice program files and start menu items"
|
||||
LangString DESC_UnSecConfiguration ${LANG_ENGLISH} "Configurations, decks, card database, pictures"
|
||||
!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
|
||||
!insertmacro MUI_DESCRIPTION_TEXT ${UnSecApplication} $(DESC_UnSecApplication)
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
#
|
||||
# provides the cockatrice binary
|
||||
|
||||
project(Continuumatrice VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
||||
project(Cockatrice VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}")
|
||||
|
||||
set(cockatrice_SOURCES
|
||||
${VERSION_STRING_CPP}
|
||||
|
|
@ -107,7 +107,6 @@ set(cockatrice_SOURCES
|
|||
src/game_graphics/tally/stats_tally.cpp
|
||||
src/game_graphics/tally/subtype_tally.cpp
|
||||
src/game_graphics/tally/tally.cpp
|
||||
src/game_graphics/player/essence_pool_item.cpp
|
||||
src/game_graphics/player/player_area.cpp
|
||||
src/game_graphics/player/player_dialogs.cpp
|
||||
src/game_graphics/player/player_graphics_item.cpp
|
||||
|
|
@ -158,7 +157,6 @@ set(cockatrice_SOURCES
|
|||
src/interface/palette_editor/palette_editor_dialog.cpp
|
||||
src/interface/widgets/cards/additional_info/color_identity_widget.cpp
|
||||
src/interface/widgets/cards/additional_info/deck_color_identity.cpp
|
||||
src/interface/widgets/cards/additional_info/essence_filter_picker.cpp
|
||||
src/interface/widgets/cards/additional_info/mana_cost_widget.cpp
|
||||
src/interface/widgets/cards/additional_info/mana_symbol_widget.cpp
|
||||
src/interface/widgets/cards/art_crop_attribution.cpp
|
||||
|
|
@ -458,7 +456,7 @@ set(cockatrice_SOURCES
|
|||
add_subdirectory(sounds)
|
||||
add_subdirectory(themes)
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/resources/config/qtlogging.ini ${CMAKE_CURRENT_BINARY_DIR}/qtlogging.ini COPYONLY
|
||||
${CMAKE_SOURCE_DIR}/cockatrice/resources/config/qtlogging.ini ${CMAKE_BINARY_DIR}/cockatrice/qtlogging.ini COPYONLY
|
||||
)
|
||||
|
||||
set(cockatrice_RESOURCES cockatrice.qrc)
|
||||
|
|
@ -511,12 +509,12 @@ set(MIMEDIR
|
|||
CACHE STRING "mime file destination"
|
||||
)
|
||||
|
||||
set(COCKATRICE_MAC_QM_INSTALL_DIR "continuumatrice.app/Contents/Resources/translations")
|
||||
set(COCKATRICE_UNIX_QM_INSTALL_DIR "share/continuumatrice/translations")
|
||||
set(COCKATRICE_MAC_QM_INSTALL_DIR "cockatrice.app/Contents/Resources/translations")
|
||||
set(COCKATRICE_UNIX_QM_INSTALL_DIR "share/cockatrice/translations")
|
||||
set(COCKATRICE_WIN32_QM_INSTALL_DIR "translations")
|
||||
|
||||
qt_add_executable(
|
||||
continuumatrice
|
||||
cockatrice
|
||||
WIN32
|
||||
MACOSX_BUNDLE
|
||||
${cockatrice_SOURCES}
|
||||
|
|
@ -525,12 +523,10 @@ qt_add_executable(
|
|||
MANUAL_FINALIZATION
|
||||
)
|
||||
|
||||
# Product target is Continuumatrice on every platform. The source directory and
|
||||
# upstream libcockatrice_* library names remain internal implementation details.
|
||||
target_precompile_headers(continuumatrice PRIVATE "${CMAKE_SOURCE_DIR}/cmake/pch/qtwidgets_pch.h")
|
||||
target_precompile_headers(cockatrice PRIVATE "${CMAKE_SOURCE_DIR}/cmake/pch/qtwidgets_pch.h")
|
||||
|
||||
qt_add_shaders(
|
||||
continuumatrice
|
||||
cockatrice
|
||||
"onboarding_shaders"
|
||||
PREFIX
|
||||
"/onboarding/shaders"
|
||||
|
|
@ -542,7 +538,7 @@ qt_add_shaders(
|
|||
)
|
||||
|
||||
qt_add_resources(
|
||||
continuumatrice
|
||||
cockatrice
|
||||
"onboarding_qml"
|
||||
PREFIX
|
||||
"/onboarding/qml"
|
||||
|
|
@ -553,7 +549,7 @@ qt_add_resources(
|
|||
)
|
||||
|
||||
target_link_libraries(
|
||||
continuumatrice
|
||||
cockatrice
|
||||
PUBLIC libcockatrice_card
|
||||
libcockatrice_deck_list
|
||||
libcockatrice_filters
|
||||
|
|
@ -566,28 +562,27 @@ target_link_libraries(
|
|||
${COCKATRICE_QT_MODULES}
|
||||
)
|
||||
|
||||
cockatrice_target_enable_crash_reporting(continuumatrice)
|
||||
cockatrice_target_enable_crash_reporting(cockatrice)
|
||||
|
||||
if(UNIX)
|
||||
if(APPLE)
|
||||
set(MACOSX_BUNDLE_INFO_STRING "${PROJECT_NAME}")
|
||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.continuum-universes.continuumatrice")
|
||||
set(MACOSX_BUNDLE_GUI_IDENTIFIER "com.cockatrice.${PROJECT_NAME}")
|
||||
set(MACOSX_BUNDLE_LONG_VERSION_STRING "${PROJECT_NAME}-${PROJECT_VERSION}")
|
||||
set(MACOSX_BUNDLE_BUNDLE_NAME "${PROJECT_NAME}")
|
||||
set(MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION})
|
||||
set(MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION})
|
||||
|
||||
set_target_properties(continuumatrice PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/Info.plist)
|
||||
set_target_properties(cockatrice PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_SOURCE_DIR}/cmake/Info.plist)
|
||||
|
||||
install(TARGETS continuumatrice BUNDLE DESTINATION ./)
|
||||
install(TARGETS cockatrice BUNDLE DESTINATION ./)
|
||||
else()
|
||||
# Assume linux
|
||||
install(TARGETS continuumatrice RUNTIME DESTINATION bin/)
|
||||
# Install using distinct names so the normal MTG client keeps its .desktop,
|
||||
# icon and .cod / cockatrice:// file associations unchanged.
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/continuumatrice.svg
|
||||
DESTINATION ${ICONDIR}/hicolor/scalable/apps)
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/continuumatrice.desktop DESTINATION ${DESKTOPDIR})
|
||||
install(TARGETS cockatrice RUNTIME DESTINATION bin/)
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/cockatrice.png DESTINATION ${ICONDIR}/hicolor/48x48/apps)
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/resources/cockatrice.svg DESTINATION ${ICONDIR}/hicolor/scalable/apps)
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cockatrice.desktop DESTINATION ${DESKTOPDIR})
|
||||
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cockatrice-cod.xml DESTINATION ${MIMEDIR})
|
||||
|
||||
# Refresh the freedesktop databases so the file associations and scheme
|
||||
# handler register without requiring the user to run them manually. The
|
||||
|
|
@ -606,13 +601,13 @@ if(UNIX)
|
|||
endif()
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
install(TARGETS continuumatrice RUNTIME DESTINATION ./)
|
||||
install(TARGETS cockatrice RUNTIME DESTINATION ./)
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
# these needs to be relative to CMAKE_INSTALL_PREFIX
|
||||
set(plugin_dest_dir continuumatrice.app/Contents/Plugins)
|
||||
set(qtconf_dest_dir continuumatrice.app/Contents/Resources)
|
||||
set(plugin_dest_dir cockatrice.app/Contents/Plugins)
|
||||
set(qtconf_dest_dir cockatrice.app/Contents/Resources)
|
||||
|
||||
# Qt plugins: audio, iconengines, imageformats, multimedia, platforms, printsupport, styles, tls
|
||||
install(
|
||||
|
|
@ -633,7 +628,7 @@ if(APPLE)
|
|||
)
|
||||
|
||||
install(
|
||||
DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
|
||||
DIRECTORY "${CMAKE_BINARY_DIR}/cockatrice/"
|
||||
DESTINATION ${qtconf_dest_dir}/
|
||||
FILES_MATCHING
|
||||
PATTERN "*.ini"
|
||||
|
|
@ -655,7 +650,7 @@ Data = Resources\")
|
|||
\"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/*.dylib\")
|
||||
set(BU_CHMOD_BUNDLE_ITEMS ON)
|
||||
include(BundleUtilities)
|
||||
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/continuumatrice.app\" \"\${QTPLUGINS}\" \"${QT_LIBRARY_DIR}\")
|
||||
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/cockatrice.app\" \"\${QTPLUGINS}\" \"${QT_LIBRARY_DIR}\")
|
||||
"
|
||||
COMPONENT Runtime
|
||||
)
|
||||
|
|
@ -667,7 +662,7 @@ if(WIN32)
|
|||
set(qtconf_dest_dir .)
|
||||
|
||||
install(
|
||||
DIRECTORY "$<TARGET_FILE_DIR:continuumatrice>/"
|
||||
DIRECTORY "$<TARGET_FILE_DIR:cockatrice>/"
|
||||
DESTINATION ./
|
||||
FILES_MATCHING
|
||||
PATTERN "*.dll"
|
||||
|
|
@ -701,7 +696,7 @@ if(WIN32)
|
|||
endforeach()
|
||||
|
||||
install(
|
||||
DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/"
|
||||
DIRECTORY "${CMAKE_BINARY_DIR}/cockatrice/"
|
||||
DESTINATION ./
|
||||
FILES_MATCHING
|
||||
PATTERN "*.ini"
|
||||
|
|
@ -766,7 +761,7 @@ Data = Resources\")
|
|||
\"\${CMAKE_INSTALL_PREFIX}/${plugin_dest_dir}/*.dll\")
|
||||
set(BU_CHMOD_BUNDLE_ITEMS ON)
|
||||
include(BundleUtilities)
|
||||
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/continuumatrice.exe\" \"\${QTPLUGINS}\" \"${QT_LIBRARY_DIR}\")
|
||||
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/Cockatrice.exe\" \"\${QTPLUGINS}\" \"${QT_LIBRARY_DIR}\")
|
||||
"
|
||||
COMPONENT Runtime
|
||||
)
|
||||
|
|
@ -776,7 +771,7 @@ if(Qt6LinguistTools_FOUND)
|
|||
#Qt6 Translations happen after the executable is built up
|
||||
if(UPDATE_TRANSLATIONS)
|
||||
qt_add_translations(
|
||||
continuumatrice
|
||||
cockatrice
|
||||
TS_FILES
|
||||
${cockatrice_TS}
|
||||
SOURCES
|
||||
|
|
@ -785,7 +780,7 @@ if(Qt6LinguistTools_FOUND)
|
|||
cockatrice_QM
|
||||
)
|
||||
else()
|
||||
qt_add_translations(continuumatrice TS_FILES ${cockatrice_TS} QM_FILES_OUTPUT_VARIABLE cockatrice_QM)
|
||||
qt_add_translations(cockatrice TS_FILES ${cockatrice_TS} QM_FILES_OUTPUT_VARIABLE cockatrice_QM)
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
|
|
@ -806,13 +801,9 @@ if(Qt6LinguistTools_FOUND)
|
|||
# error on Xcode. Older Qt versions already add this dependency themselves.
|
||||
foreach(_lrelease_target Cockatrice_lrelease cockatrice_lrelease)
|
||||
if(TARGET ${_lrelease_target})
|
||||
add_dependencies(continuumatrice ${_lrelease_target})
|
||||
add_dependencies(cockatrice ${_lrelease_target})
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
qt_finalize_target(continuumatrice)
|
||||
|
||||
# Compatibility with existing CI scripts calling --target cockatrice. No
|
||||
# executable named cockatrice is created by this target.
|
||||
add_custom_target(cockatrice DEPENDS continuumatrice)
|
||||
qt_finalize_target(cockatrice)
|
||||
|
|
|
|||
|
|
@ -2,8 +2,6 @@
|
|||
<qresource prefix="/">
|
||||
<file>resources/cardback.svg</file>
|
||||
<file>resources/cockatrice.svg</file>
|
||||
<file>resources/continuumatrice.svg</file>
|
||||
<file>resources/continuumatrice-empty-carddatabase.xml</file>
|
||||
<file>resources/cockatrice-logo-white.svg</file>
|
||||
<file>resources/hand.svg</file>
|
||||
<file>resources/hr.jpg</file>
|
||||
|
|
@ -60,22 +58,12 @@
|
|||
<file>resources/icons/update.png</file>
|
||||
<file>resources/icons/view.svg</file>
|
||||
|
||||
<file>resources/icons/essence/M.svg</file>
|
||||
<file>resources/icons/essence/S.svg</file>
|
||||
<file>resources/icons/essence/O.svg</file>
|
||||
<file>resources/icons/essence/G.svg</file>
|
||||
<file>resources/icons/essence/E.svg</file>
|
||||
<file>resources/icons/essence/A.svg</file>
|
||||
<file>resources/icons/essence/Q.svg</file>
|
||||
<file>resources/icons/essence/C.svg</file>
|
||||
<file>resources/icons/essence/J.svg</file>
|
||||
<file>resources/icons/essence/B.svg</file>
|
||||
<file>resources/icons/essence/R.svg</file>
|
||||
<file>resources/icons/essence/L.svg</file>
|
||||
<file>resources/icons/essence/V.svg</file>
|
||||
<file>resources/icons/essence/T.svg</file>
|
||||
<file>resources/icons/essence/P.svg</file>
|
||||
<file>resources/icons/essence/N.svg</file>
|
||||
<file>resources/icons/mana/B.svg</file>
|
||||
<file>resources/icons/mana/C.svg</file>
|
||||
<file>resources/icons/mana/G.svg</file>
|
||||
<file>resources/icons/mana/R.svg</file>
|
||||
<file>resources/icons/mana/U.svg</file>
|
||||
<file>resources/icons/mana/W.svg</file>
|
||||
|
||||
<file>resources/backgrounds/home.jpg</file>
|
||||
<file>resources/backgrounds/home-dark.jpg</file>
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Type=Application
|
||||
Name=Continuumatrice
|
||||
GenericName=Continuum Universes Card Game Client
|
||||
Comment=Play Continuum Universes card games
|
||||
Exec=continuumatrice %U
|
||||
Icon=continuumatrice
|
||||
Terminal=false
|
||||
Categories=Game;CardGame;
|
||||
StartupNotify=true
|
||||
MimeType=x-scheme-handler/continuumatrice;
|
||||
|
Before Width: | Height: | Size: 2.4 MiB After Width: | Height: | Size: 9.9 KiB |
|
|
@ -1,8 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<continuumatrice_carddatabase version="4">
|
||||
<!-- Empty, intentionally game-neutral starter database.
|
||||
Continuumatrice uses the upstream Cockatrice XML v4 schema for now.
|
||||
Add your own card sets in the Continuumatrice profile's customsets/. -->
|
||||
<sets/>
|
||||
<cards/>
|
||||
</continuumatrice_carddatabase>
|
||||
|
Before Width: | Height: | Size: 51 KiB |
|
Before Width: | Height: | Size: 7.3 MiB After Width: | Height: | Size: 143 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#A24ED0" id="trace-layer-000" data-trace-color="#A24ED0" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m-1800 -1425 c149 -51 278 -171 317 -294 20 -62 31 -491 33 -1222 1 -896 6 -910 236 -633 537 645 2005 1055 2969 828 1208 -284 2006 -1429 2006 -2876 -1 -1062 -441 -1980 -1153 -2404 -1081 -644 -2115 -504 -2739 370 -268 376 -318 525 -341 1016 -41 882 158 1450 631 1806 771 581 1605 218 1871 -813 167 -647 -35 -1065 -514 -1064 -337 1 -491 166 -547 588 -52 399 -120 455 -243 200 -194 -405 -105 -924 209 -1216 170 -158 284 -189 516 -142 602 123 1031 577 1164 1235 157 777 -178 1659 -782 2055 -519 342 -1625 183 -2132 -305 -295 -284 -711 -1210 -836 -1861 -20 -104 -58 -291 -85 -415 -84 -385 -108 -570 -135 -1044 -35 -612 -57 -765 -132 -908 -191 -364 -794 -334 -978 48 -46 94 -54 170 -44 400 37 858 35 1401 -11 2750 -42 1260 -64 2949 -42 3280 25 378 146 563 416 636 99 27 242 21 346 -15z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000015" id="trace-layer-001" data-trace-color="#000015" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M2362 8820 c-273 -74 -399 -264 -424 -645 -22 -331 0 -2020 42 -3280 46 -1349 48 -1892 11 -2750 -10 -230 -2 -306 44 -400 190 -395 800 -424 998 -48 75 143 97 296 132 908 27 474 51 659 135 1044 27 124 65 311 85 415 124 646 542 1578 831 1856 503 483 1611 640 2127 300 521 -343 862 -1097 807 -1788 -62 -787 -509 -1343 -1189 -1482 -230 -47 -345 -16 -511 137 -328 302 -406 902 -167 1280 94 148 140 80 187 -275 55 -418 218 -591 556 -592 484 -1 692 425 524 1074 -267 1037 -1108 1405 -1881 824 -482 -363 -682 -930 -641 -1817 23 -489 74 -641 339 -1012 633 -888 1664 -1032 2751 -384 1419 845 1573 3420 281 4680 -479 467 -1029 680 -1754 680 -923 0 -1931 -386 -2363 -904 -104 -124 -135 -150 -161 -134 -43 27 -44 45 -52 965 -8 859 -13 991 -43 1061 -94 221 -408 357 -664 287z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#C8E600" id="trace-layer-000" data-trace-color="#C8E600" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m2405 -476 c373 -79 568 -479 402 -828 -31 -67 -96 -134 -1501 -1537 -907 -905 -1466 -1471 -1462 -1478 5 -9 299 -12 1154 -12 973 0 1158 -3 1217 -15 377 -80 579 -503 413 -868 -31 -71 -65 -105 -2027 -2072 -1098 -1100 -2006 -2008 -2018 -2018 -12 -9 -51 -31 -86 -47 -505 -237 -1013 282 -772 789 44 91 -25 21 1704 1752 763 765 1281 1291 1277 1298 -5 8 -322 11 -1159 11 -1274 0 -1224 -2 -1365 65 -303 144 -399 485 -236 835 45 95 45 95 1882 1933 2062 2064 2093 2094 2197 2143 127 61 249 76 380 49z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M6671 9754 c-196 -42 -34 110 -2338 -2196 -1842 -1843 -1842 -1843 -1887 -1938 -56 -121 -75 -187 -82 -280 -22 -284 186 -554 471 -615 59 -12 243 -15 1212 -15 830 0 1144 -3 1149 -11 4 -7 -512 -531 -1272 -1293 -1723 -1725 -1655 -1656 -1699 -1747 -241 -509 275 -1037 782 -799 35 16 74 38 86 47 12 10 922 920 2023 2023 1967 1972 2001 2006 2032 2077 166 367 -41 797 -423 878 -59 12 -243 15 -1207 15 -848 0 -1139 3 -1144 12 -4 7 552 569 1457 1473 1627 1625 1507 1495 1544 1670 88 414 -290 789 -704 699z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#FF6100" id="trace-layer-000" data-trace-color="#FF6100" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m1400 -1097 c748 -104 1262 -637 1434 -1486 269 -1332 -430 -3592 -1647 -5328 -897 -1278 -1163 -1542 -1499 -1491 -539 83 -708 560 -351 997 758 928 1497 2079 1773 2764 608 1508 769 2852 387 3243 -195 200 -825 144 -1517 -135 -433 -175 -841 -455 -894 -616 -40 -120 -40 -125 -41 -1462 0 -1366 0 -1364 -46 -1505 -52 -164 -242 -325 -435 -371 -278 -65 -611 129 -686 402 -21 78 -22 93 -29 1109 -4 567 -12 1122 -18 1235 -35 655 -46 797 -100 1229 -66 524 -74 729 -36 876 141 539 957 563 1111 34 41 -142 68 -148 229 -54 232 137 644 291 1130 424 532 145 887 184 1235 135z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M5475 9150 c-524 -35 -1515 -330 -1929 -574 -158 -93 -182 -88 -220 42 -119 412 -664 536 -976 222 -200 -201 -216 -355 -119 -1131 54 -432 65 -574 100 -1229 6 -113 14 -668 18 -1235 9 -1247 -1 -1175 178 -1346 298 -285 706 -238 945 108 95 139 93 106 93 1598 1 1341 1 1347 41 1467 52 157 453 432 884 606 713 287 1358 337 1532 118 349 -438 182 -1744 -412 -3216 -276 -685 -1015 -1836 -1773 -2764 -358 -438 -184 -923 361 -1007 337 -51 609 219 1509 1501 1217 1736 1916 3996 1647 5328 -205 1013 -906 1577 -1879 1512z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.1 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#27D022" id="trace-layer-000" data-trace-color="#27D022" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m660 -581 c760 -38 1393 -226 1760 -524 1212 -981 1009 -3126 -490 -5166 -532 -724 -716 -1243 -750 -2116 -13 -332 -40 -448 -139 -601 -153 -236 -445 -309 -718 -177 -323 155 -408 599 -277 1454 119 782 410 1480 850 2041 801 1021 1158 1953 1095 2858 -52 747 -333 980 -1229 1021 -736 34 -1249 -67 -1473 -290 -314 -312 -130 -841 349 -1007 226 -77 329 -40 423 155 146 302 492 411 799 251 207 -107 314 -319 314 -619 1 -456 -323 -799 -916 -971 -619 -179 -1603 204 -1981 772 -619 930 -319 2133 648 2599 312 150 916 298 1307 319 209 12 215 12 428 1z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4742 9649 c-306 -16 -725 -105 -1087 -229 -1134 -390 -1554 -1683 -878 -2700 383 -575 1368 -961 1991 -781 688 200 1038 666 904 1205 -140 562 -864 656 -1111 144 -72 -150 -111 -178 -243 -178 -281 0 -588 250 -643 522 -114 574 427 842 1597 788 892 -41 1167 -269 1219 -1011 63 -905 -294 -1837 -1095 -2858 -440 -561 -731 -1259 -850 -2041 -132 -861 -45 -1305 287 -1464 327 -158 652 -28 795 317 49 117 62 200 72 471 34 873 218 1392 750 2116 1504 2047 1703 4188 480 5177 -368 297 -1001 485 -1760 523 -213 11 -219 11 -428 -1z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#70452D" id="trace-layer-000" data-trace-color="#70452D" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="2" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m1172 -796 c71 -8 168 -24 218 -35 482 -105 658 -644 320 -980 -153 -152 -193 -161 -865 -190 -615 -27 -882 -64 -1054 -145 -455 -216 -550 -1179 -210 -2107 129 -352 183 -363 268 -56 221 794 636 1277 1276 1487 242 79 395 72 715 -35 775 -258 1209 -1213 979 -2154 -217 -887 -888 -1523 -1746 -1656 -229 -35 -239 -41 -253 -165 -5 -41 -14 -306 -20 -589 -28 -1328 -65 -1880 -139 -2032 -235 -486 -958 -400 -1077 127 -24 103 -24 586 0 1225 24 635 32 1304 17 1473 -24 267 -44 310 -238 510 -1064 1096 -1487 3056 -906 4199 351 692 877 992 1878 1073 346 28 539 47 560 55 32 13 139 11 277 -5z M5879 6216 c-210 -75 -403 -502 -489 -1081 -58 -391 -41 -430 164 -370 529 153 847 919 555 1335 -75 107 -150 145 -230 116z" fill-rule="evenodd" data-source-components="2" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M5405 9440 c-21 -8 -214 -27 -560 -55 -1005 -82 -1533 -385 -1889 -1085 -526 -1033 -217 -2830 678 -3944 45 -56 148 -169 229 -253 194 -200 214 -243 238 -510 15 -169 7 -838 -17 -1473 -24 -639 -24 -1122 0 -1225 74 -328 433 -538 745 -436 197 65 355 239 396 439 36 172 75 946 95 1872 17 801 -2 734 210 765 903 132 1586 765 1809 1675 230 943 -209 1904 -989 2164 -320 107 -473 114 -715 35 -642 -211 -1065 -702 -1285 -1496 -83 -296 -123 -287 -249 55 -292 796 -267 1656 57 1991 161 166 397 216 1197 251 676 29 711 37 870 195 345 343 167 888 -326 996 -178 39 -444 60 -494 39z m611 -3255 c130 -75 215 -332 186 -564 -52 -414 -307 -747 -648 -846 -197 -57 -211 -25 -154 360 108 731 376 1188 616 1050z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.4 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#C9A227" id="trace-layer-000" data-trace-color="#C9A227" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m1284 -405 c278 -29 409 -67 584 -171 451 -268 685 -721 669 -1295 -18 -631 -272 -1044 -797 -1294 -939 -447 -1750 -207 -1750 518 0 413 215 599 653 566 92 -7 100 -10 204 -66 108 -59 108 -59 203 -59 378 0 530 545 188 673 -173 65 -543 68 -893 7 -870 -150 -1208 -535 -1209 -1375 -1 -276 8 -322 99 -506 188 -386 601 -693 1140 -848 153 -43 690 -170 815 -191 192 -33 257 -37 880 -45 692 -9 694 -9 815 -70 234 -117 326 -334 272 -642 -54 -310 -202 -390 -752 -408 -457 -15 -932 -53 -1090 -85 -124 -26 -184 -100 -204 -254 -49 -371 -78 -1183 -91 -2546 -6 -564 -14 -943 -20 -980 -47 -266 -372 -440 -670 -361 -138 37 -287 151 -338 257 -128 266 -93 3423 43 3997 48 201 33 240 -112 281 -614 173 -1226 631 -1604 1200 -240 362 -299 602 -299 1226 0 1058 373 1749 1160 2149 306 156 776 300 1095 336 124 14 834 4 1009 -14z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4785 9840 c-213 -24 -594 -124 -829 -217 -982 -387 -1436 -1108 -1436 -2278 0 -624 59 -864 299 -1226 379 -571 993 -1032 1608 -1209 141 -40 155 -76 108 -272 -136 -573 -171 -3730 -44 -3997 31 -62 150 -179 224 -218 324 -169 748 0 805 322 6 37 14 414 20 975 9 953 20 1428 45 1935 34 685 53 778 167 836 87 44 562 89 1168 109 417 14 532 46 654 180 134 149 156 510 42 704 -55 94 -228 211 -351 237 -30 6 -308 14 -685 19 -623 8 -688 12 -880 45 -125 21 -662 148 -815 191 -537 155 -943 455 -1130 838 -91 184 -100 230 -99 506 1 900 393 1284 1424 1395 461 50 749 -13 820 -178 139 -323 -218 -637 -526 -461 -121 69 -149 75 -309 75 -389 0 -575 -187 -575 -577 0 -732 817 -976 1760 -528 530 253 789 672 807 1304 16 576 -222 1033 -679 1305 -251 149 -455 184 -1123 190 -214 2 -426 0 -470 -5z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#FCEFC5" id="trace-layer-000" data-trace-color="#FCEFC5" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m-1325 -1047 c335 -97 438 -281 485 -869 19 -243 31 -261 170 -259 346 6 899 312 1056 585 113 196 132 224 206 294 390 367 998 127 998 -395 0 -565 -746 -1284 -1602 -1543 -280 -85 -288 -123 -53 -239 537 -265 1182 -188 1700 205 415 315 615 712 615 1219 0 494 240 822 600 821 453 -1 681 -474 572 -1188 -142 -924 -674 -1640 -1544 -2076 -804 -403 -1636 -436 -2359 -93 -268 127 -266 129 -240 -251 6 -99 25 -508 41 -910 17 -401 44 -1034 61 -1405 67 -1486 61 -1558 -150 -1767 -316 -313 -840 -161 -952 275 -46 180 -47 198 -139 2412 -38 921 -79 1878 -90 2125 -100 2251 -106 2460 -77 2594 74 333 404 552 702 465z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M2930 9189 c-230 -67 -407 -253 -457 -480 -29 -134 -23 -343 77 -2594 11 -247 52 -1204 90 -2125 92 -2214 93 -2232 139 -2412 115 -445 645 -599 967 -280 216 214 222 282 155 1772 -17 366 -44 998 -61 1405 -28 696 -43 1003 -55 1120 -14 126 31 132 242 32 600 -285 1261 -313 1941 -83 1182 400 1935 1346 1998 2511 31 578 -205 947 -606 948 -363 1 -610 -335 -610 -831 0 -436 -127 -749 -425 -1047 -523 -524 -1268 -669 -1880 -367 -219 108 -211 139 51 218 763 231 1457 834 1593 1383 151 610 -536 1004 -993 570 -78 -74 -96 -99 -210 -298 -142 -247 -633 -533 -982 -572 -168 -18 -199 3 -214 147 -5 49 -16 161 -25 249 -47 456 -167 639 -480 729 -104 30 -166 32 -255 5z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.3 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#7E7E7E" id="trace-layer-000" data-trace-color="#7E7E7E" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="2" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m930 -1556 c939 -108 1858 -611 2430 -1330 980 -1232 1022 -2981 102 -4244 -1020 -1400 -2862 -1853 -4417 -1086 -1957 966 -2565 3513 -1252 5250 731 966 2005 1539 3137 1410z M4870 7465 c-327 -50 -721 -204 -1005 -393 -845 -563 -1268 -1630 -989 -2495 543 -1680 2358 -2282 3684 -1221 709 567 1056 1586 805 2363 -281 869 -847 1428 -1710 1687 -226 69 -557 93 -785 59z m370 -1185 c883 -93 1348 -1081 856 -1819 -552 -829 -1843 -614 -2101 350 -211 790 436 1554 1245 1469z" fill-rule="evenodd" data-source-components="2" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="2" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4780 8674 c-2303 -295 -3735 -2524 -2993 -4659 699 -2010 2961 -2960 4863 -2042 2186 1055 2676 3943 961 5658 -741 740 -1891 1164 -2831 1043z m700 -1233 c367 -80 792 -278 1077 -503 350 -276 632 -707 798 -1219 250 -774 -94 -1793 -795 -2353 -1323 -1059 -3133 -463 -3674 1211 -83 258 -109 630 -62 883 179 967 878 1712 1828 1949 262 66 611 79 828 32z M4997 6289 c-874 -92 -1342 -1094 -853 -1828 465 -699 1497 -699 1962 0 553 830 -116 1933 -1109 1828z" fill-rule="evenodd" data-source-components="2" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.9 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#535366" id="trace-layer-000" data-trace-color="#535366" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m1821 -1001 c243 -62 418 -232 468 -455 51 -232 28 -6465 -29 -7545 -9 -175 -9 -175 -54 -266 -175 -352 -632 -424 -928 -146 -93 88 -121 133 -147 233 -46 179 -46 210 -43 3049 2 2716 0 2902 -29 2908 -26 5 -192 -178 -1510 -1663 -545 -615 -617 -682 -793 -742 -337 -114 -710 114 -755 462 -25 196 -47 655 -82 1680 -20 610 -23 1871 -5 1949 103 437 637 604 963 302 190 -176 210 -282 233 -1236 22 -926 39 -1023 158 -912 22 20 197 215 388 432 942 1070 1435 1605 1628 1769 199 169 364 225 537 181z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M6085 9220 c-265 -86 -474 -300 -2108 -2151 -115 -130 -219 -241 -232 -247 -81 -37 -94 67 -115 938 -23 946 -43 1049 -237 1230 -331 310 -873 140 -979 -306 -18 -78 -15 -1339 5 -1949 35 -1025 57 -1484 82 -1680 45 -351 426 -587 765 -472 177 60 255 133 803 752 1297 1462 1465 1648 1490 1643 29 -6 31 -173 29 -2883 -3 -2845 -3 -2875 43 -3054 71 -279 419 -471 714 -396 208 53 396 245 425 434 61 389 97 7409 40 7681 -37 174 -189 359 -354 430 -148 63 -245 71 -371 30z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#D57F5F" id="trace-layer-000" data-trace-color="#D57F5F" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m860 -1321 c1110 -17 1544 -35 1647 -71 402 -138 550 -597 300 -929 -23 -30 -146 -161 -273 -291 -364 -370 -364 -369 76 -380 448 -12 583 -52 729 -216 301 -338 115 -859 -339 -951 -76 -15 -147 -16 -685 -12 -1451 12 -1337 21 -1477 -120 -179 -179 -190 -177 927 -184 1151 -8 1194 -14 1370 -190 292 -294 215 -720 -170 -946 -181 -105 -692 -596 -906 -870 -571 -727 -776 -1277 -854 -2290 -29 -370 -48 -440 -154 -567 -303 -362 -879 -227 -1002 234 -122 453 144 1825 475 2458 84 160 376 603 522 792 136 174 120 178 -736 188 -1297 15 -1383 32 -1552 305 -193 310 -135 507 277 950 232 249 242 287 80 325 -500 115 -561 853 -89 1077 129 61 407 81 954 71 538 -10 581 3 790 240 85 97 95 122 56 137 -75 28 -636 49 -1616 60 -1130 13 -1165 18 -1348 214 -296 318 -130 870 286 947 140 26 1573 36 2712 19z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M3005 8909 c-417 -10 -472 -26 -620 -174 -252 -251 -235 -627 39 -864 164 -142 217 -149 1296 -161 990 -11 1559 -32 1612 -61 29 -16 22 -30 -59 -122 -204 -231 -247 -244 -783 -234 -547 10 -825 -10 -954 -71 -473 -223 -427 -965 68 -1092 171 -44 167 -65 -60 -310 -423 -455 -480 -648 -286 -960 175 -283 260 -300 1562 -315 844 -10 852 -12 727 -177 -159 -209 -441 -636 -523 -793 -331 -633 -597 -2005 -475 -2458 126 -471 705 -608 1017 -240 111 131 130 200 159 573 78 1013 283 1563 854 2290 214 273 716 755 896 860 396 232 474 660 175 961 -181 182 -218 187 -1375 195 -1111 7 -1099 5 -906 187 121 114 40 109 1446 97 723 -6 770 -1 921 106 310 219 362 603 118 873 -153 169 -284 208 -735 219 -426 11 -425 5 -65 371 127 130 250 261 273 291 252 333 98 799 -310 939 -172 60 -2703 104 -4012 70z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 8.2 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#FF005B" id="trace-layer-000" data-trace-color="#FF005B" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m3695 -1630 c224 -73 388 -224 452 -416 39 -119 44 -5748 4 -5875 -118 -381 -533 -526 -911 -318 -72 40 -3119 3079 -3181 3173 -296 448 144 1036 656 875 145 -46 112 -15 1227 -1129 830 -828 1050 -1043 1060 -1033 13 13 19 3556 6 3577 -10 16 -4654 13 -4670 -3 -9 -9 -12 -605 -13 -2695 -2 -2682 -2 -2682 -24 -2752 -177 -546 -935 -546 -1112 0 -22 70 -22 70 -25 2990 -2 2993 -1 3088 37 3220 63 215 249 375 469 403 30 4 1383 7 3005 6 2950 -1 2950 -1 3020 -23z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M2180 8618 c-221 -28 -415 -195 -479 -413 -38 -132 -39 -227 -37 -3220 3 -2920 3 -2920 25 -2990 181 -558 951 -558 1132 0 22 70 22 70 25 2745 1 1471 2 2678 3 2681 1 3 11 10 24 15 36 15 4614 11 4629 -4 17 -17 18 -3518 1 -3541 -10 -14 -160 132 -1055 1025 -1110 1108 -1078 1078 -1223 1124 -514 162 -963 -435 -666 -885 62 -94 3119 -3143 3191 -3183 380 -209 802 -59 921 328 40 127 35 5756 -4 5875 -51 153 -145 263 -304 353 -187 106 178 95 -3178 96 -1622 1 -2975 -2 -3005 -6z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.9 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#007FFF" id="trace-layer-000" data-trace-color="#007FFF" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m745 -660 c1090 -64 1451 -240 1449 -706 -2 -425 -322 -620 -828 -506 -398 90 -1368 152 -1652 106 -415 -67 -603 -275 -683 -756 -62 -371 -77 -967 -29 -1121 31 -101 72 -93 248 49 779 626 2012 902 2832 633 749 -246 1115 -770 1270 -1822 167 -1133 -503 -2735 -1432 -3425 -383 -285 -1177 -780 -1660 -1036 -583 -309 -1071 -361 -1273 -138 -90 99 -130 232 -131 426 0 287 103 395 549 575 278 112 432 194 950 503 1060 633 1371 962 1688 1787 219 570 257 983 136 1460 -66 259 -94 318 -207 430 -253 251 -639 305 -1105 153 -670 -217 -1227 -609 -1434 -1008 -195 -377 -228 -554 -258 -1360 -8 -225 -20 -446 -26 -490 -61 -473 -788 -578 -1018 -146 -57 107 -71 209 -96 691 -30 586 -48 868 -100 1565 -13 182 -29 411 -35 510 -5 99 -12 214 -15 255 -73 1059 18 1960 244 2422 256 523 825 907 1416 958 128 11 964 4 1200 -9z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000015" id="trace-layer-001" data-trace-color="#000015" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4055 9580 c-592 -51 -1170 -443 -1426 -967 -226 -465 -317 -1364 -244 -2423 3 -41 10 -156 15 -255 6 -99 22 -328 35 -510 52 -697 70 -979 100 -1565 25 -483 39 -584 97 -692 204 -383 814 -373 1003 17 34 72 43 158 60 620 30 806 63 983 258 1360 205 395 756 781 1424 998 462 150 852 98 1100 -148 107 -107 137 -169 202 -425 121 -477 83 -890 -136 -1460 -316 -823 -621 -1146 -1678 -1777 -518 -309 -672 -391 -950 -503 -452 -182 -561 -299 -559 -595 4 -579 453 -722 1214 -386 376 167 1388 783 1860 1134 937 696 1609 2299 1442 3435 -159 1080 -547 1615 -1342 1852 -796 236 -2011 -45 -2747 -636 -185 -148 -222 -162 -253 -91 -57 128 -45 736 21 1136 79 479 260 679 673 746 275 45 1265 -17 1630 -101 529 -122 858 73 860 511 2 471 -366 651 -1459 716 -236 13 -1072 20 -1200 9z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 5 KiB |
|
Before Width: | Height: | Size: 38 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#A24ED0" id="trace-layer-000" data-trace-color="#A24ED0" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m-1800 -1425 c149 -51 278 -171 317 -294 20 -62 31 -491 33 -1222 1 -896 6 -910 236 -633 537 645 2005 1055 2969 828 1208 -284 2006 -1429 2006 -2876 -1 -1062 -441 -1980 -1153 -2404 -1081 -644 -2115 -504 -2739 370 -268 376 -318 525 -341 1016 -41 882 158 1450 631 1806 771 581 1605 218 1871 -813 167 -647 -35 -1065 -514 -1064 -337 1 -491 166 -547 588 -52 399 -120 455 -243 200 -194 -405 -105 -924 209 -1216 170 -158 284 -189 516 -142 602 123 1031 577 1164 1235 157 777 -178 1659 -782 2055 -519 342 -1625 183 -2132 -305 -295 -284 -711 -1210 -836 -1861 -20 -104 -58 -291 -85 -415 -84 -385 -108 -570 -135 -1044 -35 -612 -57 -765 -132 -908 -191 -364 -794 -334 -978 48 -46 94 -54 170 -44 400 37 858 35 1401 -11 2750 -42 1260 -64 2949 -42 3280 25 378 146 563 416 636 99 27 242 21 346 -15z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000015" id="trace-layer-001" data-trace-color="#000015" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M2362 8820 c-273 -74 -399 -264 -424 -645 -22 -331 0 -2020 42 -3280 46 -1349 48 -1892 11 -2750 -10 -230 -2 -306 44 -400 190 -395 800 -424 998 -48 75 143 97 296 132 908 27 474 51 659 135 1044 27 124 65 311 85 415 124 646 542 1578 831 1856 503 483 1611 640 2127 300 521 -343 862 -1097 807 -1788 -62 -787 -509 -1343 -1189 -1482 -230 -47 -345 -16 -511 137 -328 302 -406 902 -167 1280 94 148 140 80 187 -275 55 -418 218 -591 556 -592 484 -1 692 425 524 1074 -267 1037 -1108 1405 -1881 824 -482 -363 -682 -930 -641 -1817 23 -489 74 -641 339 -1012 633 -888 1664 -1032 2751 -384 1419 845 1573 3420 281 4680 -479 467 -1029 680 -1754 680 -923 0 -1931 -386 -2363 -904 -104 -124 -135 -150 -161 -134 -43 27 -44 45 -52 965 -8 859 -13 991 -43 1061 -94 221 -408 357 -664 287z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.5 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
|
@ -1 +1,47 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#C8E600" id="trace-layer-000" data-trace-color="#C8E600" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m2405 -476 c373 -79 568 -479 402 -828 -31 -67 -96 -134 -1501 -1537 -907 -905 -1466 -1471 -1462 -1478 5 -9 299 -12 1154 -12 973 0 1158 -3 1217 -15 377 -80 579 -503 413 -868 -31 -71 -65 -105 -2027 -2072 -1098 -1100 -2006 -2008 -2018 -2018 -12 -9 -51 -31 -86 -47 -505 -237 -1013 282 -772 789 44 91 -25 21 1704 1752 763 765 1281 1291 1277 1298 -5 8 -322 11 -1159 11 -1274 0 -1224 -2 -1365 65 -303 144 -399 485 -236 835 45 95 45 95 1882 1933 2062 2064 2093 2094 2197 2143 127 61 249 76 380 49z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M6671 9754 c-196 -42 -34 110 -2338 -2196 -1842 -1843 -1842 -1843 -1887 -1938 -56 -121 -75 -187 -82 -280 -22 -284 186 -554 471 -615 59 -12 243 -15 1212 -15 830 0 1144 -3 1149 -11 4 -7 -512 -531 -1272 -1293 -1723 -1725 -1655 -1656 -1699 -1747 -241 -509 275 -1037 782 -799 35 16 74 38 86 47 12 10 922 920 2023 2023 1967 1972 2001 2006 2032 2077 166 367 -41 797 -423 878 -59 12 -243 15 -1207 15 -848 0 -1139 3 -1144 12 -4 7 552 569 1457 1473 1627 1625 1507 1495 1544 1670 88 414 -290 789 -704 699z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
width="169.34801mm"
|
||||
height="169.34801mm"
|
||||
viewBox="0 0 600 600"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="B.svg"
|
||||
inkscape:export-filename="B.svg"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1"/>
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="mm">
|
||||
<inkscape:page
|
||||
x="0"
|
||||
y="0"
|
||||
width="600"
|
||||
height="600"
|
||||
id="page2"
|
||||
margin="0"
|
||||
bleed="0"/>
|
||||
</sodipodi:namedview>
|
||||
<path
|
||||
id="Selection"
|
||||
fill="none"
|
||||
stroke="#000000"
|
||||
stroke-width="1"
|
||||
d="m 275,0.21 c 0,0 42,0 42,0 0,0 19,1.51 19,1.51 29.13,3.58 56.99,10.83 84,22.43 33.64,14.45 59.89,32.91 86.91,57.41 17.38,15.76 34.67,37.56 47.14,57.44 22.78,36.31 37.1,74.56 43.22,117 1.28,8.88 2.72,19.08 2.73,28 0,0 0,34 0,34 0,0 -0.91,10 -0.91,10 -2.36,32.29 -11.93,67.59 -25.4,97 -27.01,58.98 -70.49,105.42 -126.69,137.57 -34.3,19.63 -79.56,33.64 -119,36.52 0,0 -12,0.91 -12,0.91 0,0 -34,0 -34,0 0,0 -10,-0.91 -10,-0.91 -26.57,-1.94 -53.09,-8.27 -78,-17.67 C 163.49,569.9 134.12,553.46 109,532.57 79.87,508.33 54.41,478.39 36.31,445 -5.08,368.65 -11.86,276.57 18.05,195 47.85,113.75 113.21,48.92 194,18.42 213.55,11.04 236.32,5.43 257,2.43 Z"
|
||||
style="display:inline;fill:#ababab;fill-opacity:1"/>
|
||||
<path
|
||||
d="m 299.67889,84.945431 c -118.26949,0 -214.122988,83.892719 -214.122988,187.357619 0,58.63289 30.863828,110.90901 79.041488,145.28579 8.02961,5.77129 12.71356,15.13917 11.29165,25.0089 l -7.86234,55.37086 c -1.17098,8.02962 5.01851,15.22281 13.13176,15.22281 h 64.98968 v -46.83939 c 0,-3.68025 3.01111,-6.69135 6.69135,-6.69135 h 13.38268 c 3.68024,0 6.69135,3.0111 6.69135,6.69135 v 46.83939 h 53.53075 v -46.83939 c 0,-3.68025 3.01111,-6.69135 6.69134,-6.69135 h 13.38269 c 3.68023,0 6.69134,3.0111 6.69134,6.69135 v 46.83939 h 64.98967 c 8.11327,0 14.30275,-7.19319 13.13177,-15.22281 l -7.86234,-55.37086 c -1.4219,-9.78609 3.1784,-19.23761 11.29165,-25.0089 48.17767,-34.37678 79.0415,-86.6529 79.0415,-145.28579 0,-103.4649 -95.8535,-187.357619 -214.123,-187.357619 z M 219.38277,352.59917 c -29.52555,0 -53.53075,-24.0052 -53.53075,-53.53075 0,-29.52555 24.0052,-53.53075 53.53075,-53.53075 29.52555,0 53.53075,24.0052 53.53075,53.53075 0,29.52555 -24.0052,53.53075 -53.53075,53.53075 z m 160.59225,0 c -29.52555,0 -53.53075,-24.0052 -53.53075,-53.53075 0,-29.52555 24.0052,-53.53075 53.53075,-53.53075 29.52555,0 53.53075,24.0052 53.53075,53.53075 0,29.52555 -24.0052,53.53075 -53.53075,53.53075 z"
|
||||
id="path1"
|
||||
style="fill:#4d4d4d;fill-opacity:1;stroke:#000000;stroke-width:0.836419;stroke-opacity:1"/>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 16 KiB |
|
|
@ -1 +1,72 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#FF6100" id="trace-layer-000" data-trace-color="#FF6100" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m1400 -1097 c748 -104 1262 -637 1434 -1486 269 -1332 -430 -3592 -1647 -5328 -897 -1278 -1163 -1542 -1499 -1491 -539 83 -708 560 -351 997 758 928 1497 2079 1773 2764 608 1508 769 2852 387 3243 -195 200 -825 144 -1517 -135 -433 -175 -841 -455 -894 -616 -40 -120 -40 -125 -41 -1462 0 -1366 0 -1364 -46 -1505 -52 -164 -242 -325 -435 -371 -278 -65 -611 129 -686 402 -21 78 -22 93 -29 1109 -4 567 -12 1122 -18 1235 -35 655 -46 797 -100 1229 -66 524 -74 729 -36 876 141 539 957 563 1111 34 41 -142 68 -148 229 -54 232 137 644 291 1130 424 532 145 887 184 1235 135z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M5475 9150 c-524 -35 -1515 -330 -1929 -574 -158 -93 -182 -88 -220 42 -119 412 -664 536 -976 222 -200 -201 -216 -355 -119 -1131 54 -432 65 -574 100 -1229 6 -113 14 -668 18 -1235 9 -1247 -1 -1175 178 -1346 298 -285 706 -238 945 108 95 139 93 106 93 1598 1 1341 1 1347 41 1467 52 157 453 432 884 606 713 287 1358 337 1532 118 349 -438 182 -1744 -412 -3216 -276 -685 -1015 -1836 -1773 -2764 -358 -438 -184 -923 361 -1007 337 -51 609 219 1509 1501 1217 1736 1916 3996 1647 5328 -205 1013 -906 1577 -1879 1512z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="169.33115mm"
|
||||
height="169.59981mm"
|
||||
viewBox="0 0 169.33115 169.59981"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:export-filename="C.svg"
|
||||
inkscape:export-xdpi="96.000015"
|
||||
inkscape:export-ydpi="96.000015"
|
||||
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
|
||||
sodipodi:docname="colorless.svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#000000"
|
||||
borderopacity="0.25"
|
||||
inkscape:showpageshadow="2"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.71535494"
|
||||
inkscape:cx="397.00572"
|
||||
inkscape:cy="536.09751"
|
||||
inkscape:window-width="1853"
|
||||
inkscape:window-height="1011"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1">
|
||||
<inkscape:page
|
||||
x="0"
|
||||
y="0"
|
||||
width="169.33115"
|
||||
height="169.59981"
|
||||
id="page2"
|
||||
margin="0"
|
||||
bleed="0" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1" />
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-20.334425,-63.700102)">
|
||||
<ellipse
|
||||
style="fill:#cccccc;stroke:#000000;stroke-width:0.165333;stroke-linecap:round"
|
||||
id="path1"
|
||||
cx="-30.617094"
|
||||
cy="179.22736"
|
||||
transform="matrix(0.70654605,-0.70766707,0.70654608,0.70766704,0,0)"
|
||||
rx="84.650612"
|
||||
ry="84.65062" />
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:14.5003;stroke-linecap:round;stroke-linejoin:bevel;stroke-dasharray:none"
|
||||
id="rect1"
|
||||
width="84.683701"
|
||||
height="84.683769"
|
||||
x="-221.60611"
|
||||
y="-73.174698"
|
||||
ry="0.084683768"
|
||||
transform="matrix(-0.7073973,-0.70681615,0.7073973,-0.70681615,0,0)" />
|
||||
</g>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#27D022" id="trace-layer-000" data-trace-color="#27D022" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m660 -581 c760 -38 1393 -226 1760 -524 1212 -981 1009 -3126 -490 -5166 -532 -724 -716 -1243 -750 -2116 -13 -332 -40 -448 -139 -601 -153 -236 -445 -309 -718 -177 -323 155 -408 599 -277 1454 119 782 410 1480 850 2041 801 1021 1158 1953 1095 2858 -52 747 -333 980 -1229 1021 -736 34 -1249 -67 -1473 -290 -314 -312 -130 -841 349 -1007 226 -77 329 -40 423 155 146 302 492 411 799 251 207 -107 314 -319 314 -619 1 -456 -323 -799 -916 -971 -619 -179 -1603 204 -1981 772 -619 930 -319 2133 648 2599 312 150 916 298 1307 319 209 12 215 12 428 1z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4742 9649 c-306 -16 -725 -105 -1087 -229 -1134 -390 -1554 -1683 -878 -2700 383 -575 1368 -961 1991 -781 688 200 1038 666 904 1205 -140 562 -864 656 -1111 144 -72 -150 -111 -178 -243 -178 -281 0 -588 250 -643 522 -114 574 427 842 1597 788 892 -41 1167 -269 1219 -1011 63 -905 -294 -1837 -1095 -2858 -440 -561 -731 -1259 -850 -2041 -132 -861 -45 -1305 287 -1464 327 -158 652 -28 795 317 49 117 62 200 72 471 34 873 218 1392 750 2116 1504 2047 1703 4188 480 5177 -368 297 -1001 485 -1760 523 -213 11 -219 11 -428 -1z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#70452D" id="trace-layer-000" data-trace-color="#70452D" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="2" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m1172 -796 c71 -8 168 -24 218 -35 482 -105 658 -644 320 -980 -153 -152 -193 -161 -865 -190 -615 -27 -882 -64 -1054 -145 -455 -216 -550 -1179 -210 -2107 129 -352 183 -363 268 -56 221 794 636 1277 1276 1487 242 79 395 72 715 -35 775 -258 1209 -1213 979 -2154 -217 -887 -888 -1523 -1746 -1656 -229 -35 -239 -41 -253 -165 -5 -41 -14 -306 -20 -589 -28 -1328 -65 -1880 -139 -2032 -235 -486 -958 -400 -1077 127 -24 103 -24 586 0 1225 24 635 32 1304 17 1473 -24 267 -44 310 -238 510 -1064 1096 -1487 3056 -906 4199 351 692 877 992 1878 1073 346 28 539 47 560 55 32 13 139 11 277 -5z M5879 6216 c-210 -75 -403 -502 -489 -1081 -58 -391 -41 -430 164 -370 529 153 847 919 555 1335 -75 107 -150 145 -230 116z" fill-rule="evenodd" data-source-components="2" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M5405 9440 c-21 -8 -214 -27 -560 -55 -1005 -82 -1533 -385 -1889 -1085 -526 -1033 -217 -2830 678 -3944 45 -56 148 -169 229 -253 194 -200 214 -243 238 -510 15 -169 7 -838 -17 -1473 -24 -639 -24 -1122 0 -1225 74 -328 433 -538 745 -436 197 65 355 239 396 439 36 172 75 946 95 1872 17 801 -2 734 210 765 903 132 1586 765 1809 1675 230 943 -209 1904 -989 2164 -320 107 -473 114 -715 35 -642 -211 -1065 -702 -1285 -1496 -83 -296 -123 -287 -249 55 -292 796 -267 1656 57 1991 161 166 397 216 1197 251 676 29 711 37 870 195 345 343 167 888 -326 996 -178 39 -444 60 -494 39z m611 -3255 c130 -75 215 -332 186 -564 -52 -414 -307 -747 -648 -846 -197 -57 -211 -25 -154 360 108 731 376 1188 616 1050z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#C9A227" id="trace-layer-000" data-trace-color="#C9A227" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m1284 -405 c278 -29 409 -67 584 -171 451 -268 685 -721 669 -1295 -18 -631 -272 -1044 -797 -1294 -939 -447 -1750 -207 -1750 518 0 413 215 599 653 566 92 -7 100 -10 204 -66 108 -59 108 -59 203 -59 378 0 530 545 188 673 -173 65 -543 68 -893 7 -870 -150 -1208 -535 -1209 -1375 -1 -276 8 -322 99 -506 188 -386 601 -693 1140 -848 153 -43 690 -170 815 -191 192 -33 257 -37 880 -45 692 -9 694 -9 815 -70 234 -117 326 -334 272 -642 -54 -310 -202 -390 -752 -408 -457 -15 -932 -53 -1090 -85 -124 -26 -184 -100 -204 -254 -49 -371 -78 -1183 -91 -2546 -6 -564 -14 -943 -20 -980 -47 -266 -372 -440 -670 -361 -138 37 -287 151 -338 257 -128 266 -93 3423 43 3997 48 201 33 240 -112 281 -614 173 -1226 631 -1604 1200 -240 362 -299 602 -299 1226 0 1058 373 1749 1160 2149 306 156 776 300 1095 336 124 14 834 4 1009 -14z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4785 9840 c-213 -24 -594 -124 -829 -217 -982 -387 -1436 -1108 -1436 -2278 0 -624 59 -864 299 -1226 379 -571 993 -1032 1608 -1209 141 -40 155 -76 108 -272 -136 -573 -171 -3730 -44 -3997 31 -62 150 -179 224 -218 324 -169 748 0 805 322 6 37 14 414 20 975 9 953 20 1428 45 1935 34 685 53 778 167 836 87 44 562 89 1168 109 417 14 532 46 654 180 134 149 156 510 42 704 -55 94 -228 211 -351 237 -30 6 -308 14 -685 19 -623 8 -688 12 -880 45 -125 21 -662 148 -815 191 -537 155 -943 455 -1130 838 -91 184 -100 230 -99 506 1 900 393 1284 1424 1395 461 50 749 -13 820 -178 139 -323 -218 -637 -526 -461 -121 69 -149 75 -309 75 -389 0 -575 -187 -575 -577 0 -732 817 -976 1760 -528 530 253 789 672 807 1304 16 576 -222 1033 -679 1305 -251 149 -455 184 -1123 190 -214 2 -426 0 -470 -5z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 30 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#FCEFC5" id="trace-layer-000" data-trace-color="#FCEFC5" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m-1325 -1047 c335 -97 438 -281 485 -869 19 -243 31 -261 170 -259 346 6 899 312 1056 585 113 196 132 224 206 294 390 367 998 127 998 -395 0 -565 -746 -1284 -1602 -1543 -280 -85 -288 -123 -53 -239 537 -265 1182 -188 1700 205 415 315 615 712 615 1219 0 494 240 822 600 821 453 -1 681 -474 572 -1188 -142 -924 -674 -1640 -1544 -2076 -804 -403 -1636 -436 -2359 -93 -268 127 -266 129 -240 -251 6 -99 25 -508 41 -910 17 -401 44 -1034 61 -1405 67 -1486 61 -1558 -150 -1767 -316 -313 -840 -161 -952 275 -46 180 -47 198 -139 2412 -38 921 -79 1878 -90 2125 -100 2251 -106 2460 -77 2594 74 333 404 552 702 465z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M2930 9189 c-230 -67 -407 -253 -457 -480 -29 -134 -23 -343 77 -2594 11 -247 52 -1204 90 -2125 92 -2214 93 -2232 139 -2412 115 -445 645 -599 967 -280 216 214 222 282 155 1772 -17 366 -44 998 -61 1405 -28 696 -43 1003 -55 1120 -14 126 31 132 242 32 600 -285 1261 -313 1941 -83 1182 400 1935 1346 1998 2511 31 578 -205 947 -606 948 -363 1 -610 -335 -610 -831 0 -436 -127 -749 -425 -1047 -523 -524 -1268 -669 -1880 -367 -219 108 -211 139 51 218 763 231 1457 834 1593 1383 151 610 -536 1004 -993 570 -78 -74 -96 -99 -210 -298 -142 -247 -633 -533 -982 -572 -168 -18 -199 3 -214 147 -5 49 -16 161 -25 249 -47 456 -167 639 -480 729 -104 30 -166 32 -255 5z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#7E7E7E" id="trace-layer-000" data-trace-color="#7E7E7E" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="2" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m930 -1556 c939 -108 1858 -611 2430 -1330 980 -1232 1022 -2981 102 -4244 -1020 -1400 -2862 -1853 -4417 -1086 -1957 966 -2565 3513 -1252 5250 731 966 2005 1539 3137 1410z M4870 7465 c-327 -50 -721 -204 -1005 -393 -845 -563 -1268 -1630 -989 -2495 543 -1680 2358 -2282 3684 -1221 709 567 1056 1586 805 2363 -281 869 -847 1428 -1710 1687 -226 69 -557 93 -785 59z m370 -1185 c883 -93 1348 -1081 856 -1819 -552 -829 -1843 -614 -2101 350 -211 790 436 1554 1245 1469z" fill-rule="evenodd" data-source-components="2" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="2" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4780 8674 c-2303 -295 -3735 -2524 -2993 -4659 699 -2010 2961 -2960 4863 -2042 2186 1055 2676 3943 961 5658 -741 740 -1891 1164 -2831 1043z m700 -1233 c367 -80 792 -278 1077 -503 350 -276 632 -707 798 -1219 250 -774 -94 -1793 -795 -2353 -1323 -1059 -3133 -463 -3674 1211 -83 258 -109 630 -62 883 179 967 878 1712 1828 1949 262 66 611 79 828 32z M4997 6289 c-874 -92 -1342 -1094 -853 -1828 465 -699 1497 -699 1962 0 553 830 -116 1933 -1109 1828z" fill-rule="evenodd" data-source-components="2" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#535366" id="trace-layer-000" data-trace-color="#535366" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m1821 -1001 c243 -62 418 -232 468 -455 51 -232 28 -6465 -29 -7545 -9 -175 -9 -175 -54 -266 -175 -352 -632 -424 -928 -146 -93 88 -121 133 -147 233 -46 179 -46 210 -43 3049 2 2716 0 2902 -29 2908 -26 5 -192 -178 -1510 -1663 -545 -615 -617 -682 -793 -742 -337 -114 -710 114 -755 462 -25 196 -47 655 -82 1680 -20 610 -23 1871 -5 1949 103 437 637 604 963 302 190 -176 210 -282 233 -1236 22 -926 39 -1023 158 -912 22 20 197 215 388 432 942 1070 1435 1605 1628 1769 199 169 364 225 537 181z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M6085 9220 c-265 -86 -474 -300 -2108 -2151 -115 -130 -219 -241 -232 -247 -81 -37 -94 67 -115 938 -23 946 -43 1049 -237 1230 -331 310 -873 140 -979 -306 -18 -78 -15 -1339 5 -1949 35 -1025 57 -1484 82 -1680 45 -351 426 -587 765 -472 177 60 255 133 803 752 1297 1462 1465 1648 1490 1643 29 -6 31 -173 29 -2883 -3 -2845 -3 -2875 43 -3054 71 -279 419 -471 714 -396 208 53 396 245 425 434 61 389 97 7409 40 7681 -37 174 -189 359 -354 430 -148 63 -245 71 -371 30z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#D57F5F" id="trace-layer-000" data-trace-color="#D57F5F" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m860 -1321 c1110 -17 1544 -35 1647 -71 402 -138 550 -597 300 -929 -23 -30 -146 -161 -273 -291 -364 -370 -364 -369 76 -380 448 -12 583 -52 729 -216 301 -338 115 -859 -339 -951 -76 -15 -147 -16 -685 -12 -1451 12 -1337 21 -1477 -120 -179 -179 -190 -177 927 -184 1151 -8 1194 -14 1370 -190 292 -294 215 -720 -170 -946 -181 -105 -692 -596 -906 -870 -571 -727 -776 -1277 -854 -2290 -29 -370 -48 -440 -154 -567 -303 -362 -879 -227 -1002 234 -122 453 144 1825 475 2458 84 160 376 603 522 792 136 174 120 178 -736 188 -1297 15 -1383 32 -1552 305 -193 310 -135 507 277 950 232 249 242 287 80 325 -500 115 -561 853 -89 1077 129 61 407 81 954 71 538 -10 581 3 790 240 85 97 95 122 56 137 -75 28 -636 49 -1616 60 -1130 13 -1165 18 -1348 214 -296 318 -130 870 286 947 140 26 1573 36 2712 19z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M3005 8909 c-417 -10 -472 -26 -620 -174 -252 -251 -235 -627 39 -864 164 -142 217 -149 1296 -161 990 -11 1559 -32 1612 -61 29 -16 22 -30 -59 -122 -204 -231 -247 -244 -783 -234 -547 10 -825 -10 -954 -71 -473 -223 -427 -965 68 -1092 171 -44 167 -65 -60 -310 -423 -455 -480 -648 -286 -960 175 -283 260 -300 1562 -315 844 -10 852 -12 727 -177 -159 -209 -441 -636 -523 -793 -331 -633 -597 -2005 -475 -2458 126 -471 705 -608 1017 -240 111 131 130 200 159 573 78 1013 283 1563 854 2290 214 273 716 755 896 860 396 232 474 660 175 961 -181 182 -218 187 -1375 195 -1111 7 -1099 5 -906 187 121 114 40 109 1446 97 723 -6 770 -1 921 106 310 219 362 603 118 873 -153 169 -284 208 -735 219 -426 11 -425 5 -65 371 127 130 250 261 273 291 252 333 98 799 -310 939 -172 60 -2703 104 -4012 70z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 8.2 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
|
@ -1 +1,47 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#FF005B" id="trace-layer-000" data-trace-color="#FF005B" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m3695 -1630 c224 -73 388 -224 452 -416 39 -119 44 -5748 4 -5875 -118 -381 -533 -526 -911 -318 -72 40 -3119 3079 -3181 3173 -296 448 144 1036 656 875 145 -46 112 -15 1227 -1129 830 -828 1050 -1043 1060 -1033 13 13 19 3556 6 3577 -10 16 -4654 13 -4670 -3 -9 -9 -12 -605 -13 -2695 -2 -2682 -2 -2682 -24 -2752 -177 -546 -935 -546 -1112 0 -22 70 -22 70 -25 2990 -2 2993 -1 3088 37 3220 63 215 249 375 469 403 30 4 1383 7 3005 6 2950 -1 2950 -1 3020 -23z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000000" id="trace-layer-001" data-trace-color="#000000" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M2180 8618 c-221 -28 -415 -195 -479 -413 -38 -132 -39 -227 -37 -3220 3 -2920 3 -2920 25 -2990 181 -558 951 -558 1132 0 22 70 22 70 25 2745 1 1471 2 2678 3 2681 1 3 11 10 24 15 36 15 4614 11 4629 -4 17 -17 18 -3518 1 -3541 -10 -14 -160 132 -1055 1025 -1110 1108 -1078 1078 -1223 1124 -514 162 -963 -435 -666 -885 62 -94 3119 -3143 3191 -3183 380 -209 802 -59 921 328 40 127 35 5756 -4 5875 -51 153 -145 263 -304 353 -187 106 178 95 -3178 96 -1622 1 -2975 -2 -3005 -6z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
width="169.34801mm"
|
||||
height="169.34801mm"
|
||||
viewBox="0 0 600 600"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
sodipodi:docname="B.svg"
|
||||
inkscape:export-filename="B.svg"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96"
|
||||
xmlns="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs1"/>
|
||||
<sodipodi:namedview
|
||||
id="namedview1"
|
||||
pagecolor="#505050"
|
||||
bordercolor="#eeeeee"
|
||||
borderopacity="1"
|
||||
inkscape:showpageshadow="0"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#505050"
|
||||
inkscape:document-units="mm">
|
||||
<inkscape:page
|
||||
x="0"
|
||||
y="0"
|
||||
width="600"
|
||||
height="600"
|
||||
id="page2"
|
||||
margin="0"
|
||||
bleed="0"/>
|
||||
</sodipodi:namedview>
|
||||
<path
|
||||
id="Selection"
|
||||
fill="none"
|
||||
stroke="#000000"
|
||||
stroke-width="1"
|
||||
d="m 275,0.21 c 0,0 42,0 42,0 0,0 19,1.51 19,1.51 29.13,3.58 56.99,10.83 84,22.43 33.64,14.45 59.89,32.91 86.91,57.41 17.38,15.76 34.67,37.56 47.14,57.44 22.78,36.31 37.1,74.56 43.22,117 1.28,8.88 2.72,19.08 2.73,28 0,0 0,34 0,34 0,0 -0.91,10 -0.91,10 -2.36,32.29 -11.93,67.59 -25.4,97 -27.01,58.98 -70.49,105.42 -126.69,137.57 -34.3,19.63 -79.56,33.64 -119,36.52 0,0 -12,0.91 -12,0.91 0,0 -34,0 -34,0 0,0 -10,-0.91 -10,-0.91 -26.57,-1.94 -53.09,-8.27 -78,-17.67 C 163.49,569.9 134.12,553.46 109,532.57 79.87,508.33 54.41,478.39 36.31,445 -5.08,368.65 -11.86,276.57 18.05,195 47.85,113.75 113.21,48.92 194,18.42 213.55,11.04 236.32,5.43 257,2.43 Z"
|
||||
style="display:inline;fill:#c95e46;fill-opacity:1"/>
|
||||
<path
|
||||
style="display:inline;fill:#7e3525;fill-opacity:1;stroke:#000000;stroke-width:0.999129;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 278.25473,537.27772 c -22.36635,-1.29637 -48.78648,-8.31223 -69.74195,-18.51997 -47.30139,-23.04123 -75.19872,-59.72004 -85.45343,-112.35234 -2.77041,-14.21911 -2.51753,-48.32296 0.4755,-64.1246 4.84373,-25.57244 17.23939,-55.03329 30.65191,-72.85059 3.74877,-4.97991 16.33133,-18.11906 30.23479,-31.57223 13.09764,-12.67346 26.64745,-26.67202 30.11069,-31.10792 16.66894,-21.35045 26.46602,-44.71272 29.68313,-70.78286 1.93489,-15.67951 0.37962,-45.867231 -3.5802,-69.491071 -0.58906,-3.51428 0.36584,-3.52724 11.47726,-0.15583 36.51454,11.0792 67.37028,34.791071 89.32423,68.643431 9.96686,15.36862 20.07787,39.31263 24.78919,58.70364 2.23257,9.18886 2.53252,44.73878 0.46396,54.98571 -0.75708,3.75024 -1.10086,7.09425 -0.76396,7.43114 1.5021,1.5021 14.63666,-6.65479 21.98002,-13.65016 10.59844,-10.09621 14.32693,-17.61354 15.94714,-32.15254 l 1.16788,-10.47988 3.4626,3.95724 c 26.80954,30.6392 41.75268,56.11528 54.11775,92.26358 11.02075,32.21825 14.93902,62.79297 12.47422,97.33768 -1.88493,26.41774 -10.16486,50.6958 -24.95555,73.17369 -6.31625,9.59901 -30.86306,34.05172 -40.40914,40.25423 -23.44452,15.23295 -50.15355,25.25695 -77.26806,28.99903 -12.48732,1.72336 -38.04339,2.42637 -54.18798,1.49062 z m 48.34948,-30.34196 c 30.78066,-8.0491 53.53846,-30.12825 59.69792,-57.9177 2.48916,-11.23027 2.26087,-34.25269 -0.43747,-44.11787 -5.3998,-19.74181 -9.72931,-26.61651 -30.6237,-48.62658 -16.92925,-17.8332 -21.73398,-24.64464 -25.45673,-36.0889 -2.38622,-7.33554 -2.63126,-9.53814 -2.57644,-23.15876 0.0334,-8.27872 0.486,-17.4607 1.00593,-20.40441 0.75887,-4.29636 0.66928,-5.45812 -0.45409,-5.88919 -2.12997,-0.81736 -16.25071,4.45522 -21.90917,8.1807 -25.69349,16.91641 -42.62753,52.30879 -40.22917,84.07948 0.39046,5.17228 0.2831,8.79277 -0.26071,8.79277 -1.78935,0 -13.49435,-13.46378 -15.34792,-17.65406 -1.03171,-2.33236 -2.15967,-6.42651 -2.50657,-9.09812 -1.00143,-7.71233 -1.60778,-8.14619 -5.46339,-3.90915 -13.31687,14.63425 -24.58113,35.69359 -29.53283,55.21379 -11.75615,46.34414 2.14731,84.38956 37.55813,102.77397 16.56338,8.59931 29.2427,11.25369 51.26679,10.73261 12.58064,-0.29766 17.41119,-0.85366 25.26942,-2.90858 z"
|
||||
id="path8"/>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 4.2 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
|
@ -1 +0,0 @@
|
|||
<svg version="1.1" width="1024" height="1024" viewBox="0 0 1024 1024" preserveAspectRatio="xMidYMid meet" shape-rendering="geometricPrecision" xmlns="http://www.w3.org/2000/svg"><g fill="#007FFF" id="trace-layer-000" data-trace-color="#007FFF" data-stack-index="0" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4510 10221 c-8 -5 -40 -11 -70 -15 -157 -19 -357 -49 -371 -57 -9 -4 -63 -18 -120 -29 -375 -75 -1081 -352 -1391 -545 -29 -18 -73 -46 -98 -61 -71 -43 -158 -97 -193 -121 -155 -105 -207 -142 -242 -170 -55 -46 -79 -65 -160 -128 -38 -30 -87 -69 -107 -87 -184 -165 -361 -342 -526 -526 -18 -20 -57 -68 -87 -107 -63 -81 -82 -105 -128 -160 -28 -35 -65 -87 -170 -242 -24 -35 -78 -122 -121 -193 -15 -25 -43 -69 -61 -98 -40 -64 -222 -429 -266 -532 -103 -246 -241 -671 -279 -859 -11 -57 -25 -111 -29 -120 -5 -9 -19 -88 -31 -176 -12 -88 -27 -185 -33 -215 -15 -76 -15 -1244 0 -1320 6 -30 21 -127 33 -215 12 -88 26 -167 31 -176 4 -9 18 -63 29 -120 75 -375 352 -1081 545 -1391 18 -29 46 -73 61 -98 43 -71 97 -158 121 -193 105 -155 142 -207 170 -242 46 -55 65 -79 128 -160 30 -38 69 -87 87 -107 165 -184 342 -361 526 -526 20 -18 69 -57 107 -87 81 -63 105 -82 160 -128 22 -18 78 -59 125 -91 47 -31 99 -67 117 -79 18 -12 62 -40 98 -62 36 -22 79 -50 94 -62 16 -13 33 -23 38 -23 5 0 32 -15 61 -34 61 -39 423 -221 532 -267 246 -103 671 -241 859 -279 57 -11 111 -25 120 -29 9 -5 88 -19 176 -31 88 -12 185 -27 215 -33 76 -15 1244 -15 1320 0 30 6 127 21 215 33 88 12 167 26 176 31 9 4 63 18 120 29 187 37 618 178 854 278 156 66 613 298 649 330 12 10 49 36 84 58 34 21 77 49 95 61 155 105 207 142 242 170 55 46 79 65 160 128 39 30 87 69 107 87 184 165 361 342 526 526 18 20 57 69 87 107 63 81 82 105 128 160 28 35 65 87 170 242 24 35 78 122 121 193 15 25 43 69 61 98 40 64 222 429 266 532 103 246 241 671 279 859 11 57 25 111 29 120 5 9 19 88 31 176 12 88 27 185 33 215 15 76 15 1244 0 1320 -6 30 -21 127 -33 215 -12 88 -26 167 -31 176 -4 9 -18 63 -29 120 -75 375 -352 1081 -545 1391 -18 29 -46 73 -61 98 -43 71 -97 158 -121 193 -105 155 -142 207 -170 242 -46 55 -65 79 -128 160 -30 39 -69 87 -87 107 -165 184 -342 361 -526 526 -20 18 -68 57 -107 87 -81 63 -105 82 -160 128 -35 28 -87 65 -242 170 -35 24 -122 78 -193 121 -25 15 -69 43 -98 61 -64 40 -429 222 -532 266 -246 103 -671 241 -859 279 -57 11 -111 25 -120 29 -9 5 -88 19 -176 31 -88 12 -185 27 -215 33 -67 13 -1248 21 -1270 8z m745 -660 c1090 -64 1451 -240 1449 -706 -2 -425 -322 -620 -828 -506 -398 90 -1368 152 -1652 106 -415 -67 -603 -275 -683 -756 -62 -371 -77 -967 -29 -1121 31 -101 72 -93 248 49 779 626 2012 902 2832 633 749 -246 1115 -770 1270 -1822 167 -1133 -503 -2735 -1432 -3425 -383 -285 -1177 -780 -1660 -1036 -583 -309 -1071 -361 -1273 -138 -90 99 -130 232 -131 426 0 287 103 395 549 575 278 112 432 194 950 503 1060 633 1371 962 1688 1787 219 570 257 983 136 1460 -66 259 -94 318 -207 430 -253 251 -639 305 -1105 153 -670 -217 -1227 -609 -1434 -1008 -195 -377 -228 -554 -258 -1360 -8 -225 -20 -446 -26 -490 -61 -473 -788 -578 -1018 -146 -57 107 -71 209 -96 691 -30 586 -48 868 -100 1565 -13 182 -29 411 -35 510 -5 99 -12 214 -15 255 -73 1059 18 1960 244 2422 256 523 825 907 1416 958 128 11 964 4 1200 -9z" fill-rule="evenodd" data-source-components="1" /></g></g><g fill="#000015" id="trace-layer-001" data-trace-color="#000015" data-stack-index="1" data-stack-count="2" data-stack-scans="false" data-mask-colors="1" data-trace-optimization="strong" data-trace-bleed="1" data-source-components="1" data-merged-paths="true" xmlns="http://www.w3.org/2000/svg"><g transform="translate(0.000000,1024.000000) scale(0.100000,-0.100000)"><path d="M4055 9580 c-592 -51 -1170 -443 -1426 -967 -226 -465 -317 -1364 -244 -2423 3 -41 10 -156 15 -255 6 -99 22 -328 35 -510 52 -697 70 -979 100 -1565 25 -483 39 -584 97 -692 204 -383 814 -373 1003 17 34 72 43 158 60 620 30 806 63 983 258 1360 205 395 756 781 1424 998 462 150 852 98 1100 -148 107 -107 137 -169 202 -425 121 -477 83 -890 -136 -1460 -316 -823 -621 -1146 -1678 -1777 -518 -309 -672 -391 -950 -503 -452 -182 -561 -299 -559 -595 4 -579 453 -722 1214 -386 376 167 1388 783 1860 1134 937 696 1609 2299 1442 3435 -159 1080 -547 1615 -1342 1852 -796 236 -2011 -45 -2747 -636 -185 -148 -222 -162 -253 -91 -57 128 -45 736 21 1136 79 479 260 679 673 746 275 45 1265 -17 1630 -101 529 -122 858 73 860 511 2 471 -366 651 -1459 716 -236 13 -1072 20 -1200 9z" fill-rule="evenodd" data-source-components="1" /></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 4.6 KiB |
|
Before Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 6.5 KiB |
|
Before Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 5 KiB |
|
Before Width: | Height: | Size: 758 KiB |
|
Before Width: | Height: | Size: 710 KiB |
|
Before Width: | Height: | Size: 210 KiB After Width: | Height: | Size: 463 B |
|
Before Width: | Height: | Size: 818 KiB After Width: | Height: | Size: 461 B |
|
Before Width: | Height: | Size: 705 KiB After Width: | Height: | Size: 453 B |
|
|
@ -6,10 +6,10 @@ set(defsounds Default Legacy)
|
|||
|
||||
if(UNIX)
|
||||
if(APPLE)
|
||||
install(DIRECTORY ${defsounds} DESTINATION continuumatrice.app/Contents/Resources/sounds/)
|
||||
install(DIRECTORY ${defsounds} DESTINATION Cockatrice.app/Contents/Resources/sounds/)
|
||||
else()
|
||||
# Assume linux
|
||||
install(DIRECTORY ${defsounds} DESTINATION share/continuumatrice/sounds/)
|
||||
install(DIRECTORY ${defsounds} DESTINATION share/cockatrice/sounds/)
|
||||
endif()
|
||||
elseif(WIN32)
|
||||
install(DIRECTORY ${defsounds} DESTINATION sounds/)
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@
|
|||
#include "libcockatrice/protocol/pb/event_server_shutdown.pb.h"
|
||||
|
||||
#include <QChar>
|
||||
#include <QCoreApplication>
|
||||
#include <QDateTime>
|
||||
#include <QDebug>
|
||||
#include <QLineEdit>
|
||||
|
|
@ -218,7 +217,7 @@ void ConnectionController::onServerShutdownEvent(const Event_ServerShutdown &eve
|
|||
"games will be lost.\nReason for shutdown: %1",
|
||||
"", event.minutes())
|
||||
.arg(QString::fromStdString(event.reason())));
|
||||
serverShutdownMessageBox.setIconPixmap(themePixmap(QStringLiteral("continuumatrice")).scaled(64, 64));
|
||||
serverShutdownMessageBox.setIconPixmap(themePixmap(QStringLiteral("cockatrice")).scaled(64, 64));
|
||||
serverShutdownMessageBox.setText(tr("Scheduled server shutdown"));
|
||||
serverShutdownMessageBox.setWindowModality(Qt::ApplicationModal);
|
||||
serverShutdownMessageBox.setVisible(true);
|
||||
|
|
@ -334,7 +333,7 @@ void ConnectionController::onLoginError(int r,
|
|||
|
||||
case Response::RespContextError: {
|
||||
QMessageBox::critical(dialogParent, tr("Error"),
|
||||
tr("An internal error has occurred, please close and reopen Continuumatrice before "
|
||||
tr("An internal error has occurred, please close and reopen Cockatrice before "
|
||||
"trying again.\nIf the error persists, ensure you are running the latest "
|
||||
"version of the software and if needed contact the software developers."));
|
||||
break;
|
||||
|
|
@ -490,14 +489,14 @@ void ConnectionController::onProtocolVersionMismatch(int localVersion, int remot
|
|||
{
|
||||
if (localVersion > remoteVersion) {
|
||||
QMessageBox::critical(dialogParent, tr("Error"),
|
||||
tr("You are trying to connect to an obsolete server. Please downgrade your Continuumatrice "
|
||||
tr("You are trying to connect to an obsolete server. Please downgrade your Cockatrice "
|
||||
"version or connect to a suitable server.\n"
|
||||
"Local version is %1, remote version is %2.")
|
||||
.arg(localVersion)
|
||||
.arg(remoteVersion));
|
||||
} else {
|
||||
QMessageBox::critical(dialogParent, tr("Error"),
|
||||
tr("Your Continuumatrice client is obsolete. Please update your Continuumatrice version.\n"
|
||||
tr("Your Cockatrice client is obsolete. Please update your Cockatrice version.\n"
|
||||
"Local version is %1, remote version is %2.")
|
||||
.arg(localVersion)
|
||||
.arg(remoteVersion));
|
||||
|
|
@ -632,7 +631,7 @@ void ConnectionController::onPromptForgotPasswordChallenge()
|
|||
|
||||
void ConnectionController::updateWindowTitle()
|
||||
{
|
||||
const QString appName = QCoreApplication::applicationName();
|
||||
const QString appName = QStringLiteral("Cockatrice");
|
||||
QString title;
|
||||
|
||||
switch (remoteClient->getStatus()) {
|
||||
|
|
@ -654,7 +653,7 @@ void ConnectionController::updateWindowTitle()
|
|||
break;
|
||||
}
|
||||
case StatusLoggedIn: {
|
||||
title = appName + " - " + remoteClient->getUserName() + "@" + remoteClient->peerName();
|
||||
title = remoteClient->getUserName() + "@" + remoteClient->peerName();
|
||||
break;
|
||||
}
|
||||
case StatusRequestingForgotPassword:
|
||||
|
|
|
|||
|
|
@ -30,13 +30,13 @@
|
|||
#include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#define STABLERELEASE_URL "https://api.github.com/repos/Continuum-Universes-Studio/Continuumatrice/releases/latest"
|
||||
#define STABLEMANUALDOWNLOAD_URL "https://github.com/Continuum-Universes-Studio/Continuumatrice/releases/latest"
|
||||
#define STABLETAG_URL "https://api.github.com/repos/Continuum-Universes-Studio/Continuumatrice/git/refs/tags/"
|
||||
#define STABLERELEASE_URL "https://api.github.com/repos/Cockatrice/Cockatrice/releases/latest"
|
||||
#define STABLEMANUALDOWNLOAD_URL "https://github.com/Cockatrice/Cockatrice/releases/latest"
|
||||
#define STABLETAG_URL "https://api.github.com/repos/Cockatrice/Cockatrice/git/refs/tags/"
|
||||
|
||||
#define BETARELEASE_URL "https://api.github.com/repos/Continuum-Universes-Studio/Continuumatrice/releases"
|
||||
#define BETAMANUALDOWNLOAD_URL "https://github.com/Continuum-Universes-Studio/Continuumatrice/releases/"
|
||||
#define BETARELEASE_CHANGESURL "https://github.com/Continuum-Universes-Studio/Continuumatrice/compare/%1...%2"
|
||||
#define BETARELEASE_URL "https://api.github.com/repos/Cockatrice/Cockatrice/releases"
|
||||
#define BETAMANUALDOWNLOAD_URL "https://github.com/Cockatrice/Cockatrice/releases/"
|
||||
#define BETARELEASE_CHANGESURL "https://github.com/Cockatrice/Cockatrice/compare/%1...%2"
|
||||
|
||||
#define GIT_SHORT_HASH_LEN 7
|
||||
|
||||
|
|
|
|||
|
|
@ -256,17 +256,6 @@ void SettingsCache::loadPaths()
|
|||
|
||||
computePath("customSets", dataPath + "/customsets/");
|
||||
computeFilePath("cardDatabase", dataPath + "/cards.xml");
|
||||
|
||||
// On a new Continuumatrice profile create an empty, valid XML v4 database.
|
||||
// Never download MTG data or copy the user's Cockatrice card database.
|
||||
const QString initialCardDb = dataPath + "/cards.xml";
|
||||
if (!QFile::exists(initialCardDb)) {
|
||||
if (!QFile::copy(QStringLiteral(":/resources/continuumatrice-empty-carddatabase.xml"), initialCardDb)) {
|
||||
qCWarning(SettingsCacheLog) << "Could not create Continuumatrice starter database:" << initialCardDb;
|
||||
} else {
|
||||
QFile::setPermissions(initialCardDb, QFile::ReadOwner | QFile::WriteOwner);
|
||||
}
|
||||
}
|
||||
computeFilePath("tokenDatabase", dataPath + "/tokens.xml");
|
||||
computeFilePath("spoilerDatabase", dataPath + "/spoiler.xml");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ QStringMap &SoundEngine::getAvailableThemes()
|
|||
#elif defined(Q_OS_WIN)
|
||||
"/sounds"
|
||||
#else // linux
|
||||
"/../share/continuumatrice/sounds"
|
||||
"/../share/cockatrice/sounds"
|
||||
#endif
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,186 +0,0 @@
|
|||
#include "essence_pool_item.h"
|
||||
|
||||
#include "../../interface/pixel_map_generator.h"
|
||||
|
||||
#include <QFont>
|
||||
#include <QGraphicsSceneHoverEvent>
|
||||
#include <QGraphicsSceneMouseEvent>
|
||||
#include <QInputDialog>
|
||||
#include <QPainter>
|
||||
#include <QPen>
|
||||
#include <QRectF>
|
||||
#include <QSize>
|
||||
#include <QWidget>
|
||||
#include <libcockatrice/game/board/counter_state.h>
|
||||
#include <libcockatrice/game/player/player_actions.h>
|
||||
#include <libcockatrice/game/player/player_info.h>
|
||||
#include <libcockatrice/game/player/player_logic.h>
|
||||
#include <libcockatrice/utility/essence_counter.h>
|
||||
|
||||
#include <limits>
|
||||
|
||||
EssencePoolItem::EssencePoolItem(PlayerLogic *_player, QGraphicsItem *parent)
|
||||
: QGraphicsObject(parent), player(_player)
|
||||
{
|
||||
setAcceptedMouseButtons(Qt::LeftButton | Qt::RightButton);
|
||||
setAcceptHoverEvents(true);
|
||||
setZValue(5);
|
||||
|
||||
connect(player, &PlayerLogic::counterAdded, this, &EssencePoolItem::attachCounter);
|
||||
connect(player, &PlayerLogic::counterRemoved, this, &EssencePoolItem::detachCounter);
|
||||
|
||||
// Reconnect and late view construction must paint the full snapshot,
|
||||
// even when the counterAdded events happened before this item existed.
|
||||
for (CounterState *state : player->getCounters()) {
|
||||
attachCounter(state);
|
||||
}
|
||||
setToolTip(tr("Essence pool — left click +1, right click -1, Shift+left to set"));
|
||||
}
|
||||
|
||||
QRectF EssencePoolItem::boundingRect() const
|
||||
{
|
||||
return QRectF(0, 0, Width, Height);
|
||||
}
|
||||
|
||||
void EssencePoolItem::attachCounter(CounterState *state)
|
||||
{
|
||||
if (!state) {
|
||||
return;
|
||||
}
|
||||
const QChar code = EssenceCounter::codeFromName(state->getName());
|
||||
if (code.isNull()) {
|
||||
return;
|
||||
}
|
||||
counters.insert(code, state);
|
||||
connect(state, &CounterState::valueChanged, this, [this](int, int, bool) { update(); });
|
||||
update();
|
||||
}
|
||||
|
||||
void EssencePoolItem::detachCounter(int id)
|
||||
{
|
||||
for (auto it = counters.begin(); it != counters.end();) {
|
||||
if (it.value() && it.value()->getId() == id) {
|
||||
it = counters.erase(it);
|
||||
} else {
|
||||
++it;
|
||||
}
|
||||
}
|
||||
update();
|
||||
}
|
||||
|
||||
CounterState *EssencePoolItem::stateFor(QChar code) const
|
||||
{
|
||||
return counters.value(code).data();
|
||||
}
|
||||
|
||||
QChar EssencePoolItem::codeAt(const QPointF &position) const
|
||||
{
|
||||
const qreal x = position.x() - Padding;
|
||||
const qreal y = position.y() - HeaderHeight;
|
||||
if (x < 0 || y < 0 || x >= Columns * CellWidth || y >= 4 * CellHeight) {
|
||||
return QChar();
|
||||
}
|
||||
const int col = static_cast<int>(x) / CellWidth;
|
||||
const int row = static_cast<int>(y) / CellHeight;
|
||||
const int index = row * Columns + col;
|
||||
const QString &codes = EssenceCounter::symbols();
|
||||
return index >= 0 && index < codes.size() ? codes.at(index) : QChar();
|
||||
}
|
||||
|
||||
void EssencePoolItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
|
||||
{
|
||||
painter->save();
|
||||
painter->setRenderHint(QPainter::Antialiasing, true);
|
||||
painter->setPen(QPen(QColor(118, 125, 158), 1));
|
||||
painter->setBrush(QColor(16, 19, 31, 232));
|
||||
painter->drawRoundedRect(boundingRect().adjusted(0.5, 0.5, -0.5, -0.5), 7, 7);
|
||||
|
||||
QFont titleFont = painter->font();
|
||||
titleFont.setBold(true);
|
||||
titleFont.setPixelSize(15);
|
||||
painter->setFont(titleFont);
|
||||
painter->setPen(QColor(236, 238, 248));
|
||||
painter->drawText(QRectF(8, 3, Width - 16, 24), Qt::AlignCenter, tr("ESSENCE POOL"));
|
||||
|
||||
QFont countFont = painter->font();
|
||||
countFont.setBold(true);
|
||||
countFont.setPixelSize(14);
|
||||
painter->setFont(countFont);
|
||||
|
||||
const QString &codes = EssenceCounter::symbols();
|
||||
for (int i = 0; i < codes.size(); ++i) {
|
||||
const QChar code = codes.at(i);
|
||||
const int col = i % Columns;
|
||||
const int row = i / Columns;
|
||||
const qreal x = Padding + col * CellWidth;
|
||||
const qreal y = HeaderHeight + row * CellHeight;
|
||||
const QRectF tile(x, y, CellWidth - 3, CellHeight - 3);
|
||||
|
||||
painter->setPen(QPen(QColor(85, 91, 119), 1));
|
||||
painter->setBrush(QColor(43, 47, 67, 228));
|
||||
painter->drawRoundedRect(tile, 5, 5);
|
||||
|
||||
const QPixmap icon = ManaSymbolPixmapGenerator::generatePixmap(QString(code), QSize(32, 32));
|
||||
if (!icon.isNull()) {
|
||||
painter->drawPixmap(QPointF(x + 9, y + 2), icon);
|
||||
} else {
|
||||
painter->setPen(Qt::white);
|
||||
painter->drawText(QRectF(x, y + 2, CellWidth - 3, 30), Qt::AlignCenter, QString(code));
|
||||
}
|
||||
|
||||
CounterState *state = stateFor(code);
|
||||
const int count = state ? state->getValue() : 0;
|
||||
painter->setPen(count > 0 ? QColor(255, 244, 191) : QColor(178, 182, 200));
|
||||
painter->drawText(QRectF(x, y + 33, CellWidth - 3, 18),
|
||||
Qt::AlignCenter, QString::number(count));
|
||||
}
|
||||
|
||||
painter->restore();
|
||||
}
|
||||
|
||||
void EssencePoolItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
|
||||
{
|
||||
const QChar code = codeAt(event->pos());
|
||||
CounterState *state = stateFor(code);
|
||||
if (!state || !player->getPlayerInfo()->getLocalOrJudge()) {
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
PlayerActions *actions = player->getPlayerActions();
|
||||
if (event->button() == Qt::LeftButton && (event->modifiers() & Qt::ShiftModifier)) {
|
||||
const QString label = code == QChar('N') ? tr("Colorless (N)") :
|
||||
code == QChar('J') ? tr("Jasper (J)") : tr("Essence %1").arg(code);
|
||||
bool accepted = false;
|
||||
QWidget *parent = event->widget() ? event->widget()->window() : nullptr;
|
||||
const int value = QInputDialog::getInt(parent, tr("Set Essence"),
|
||||
tr("Available %1:").arg(label),
|
||||
state->getValue(), 0, std::numeric_limits<int>::max(), 1, &accepted);
|
||||
if (accepted) {
|
||||
actions->actSetCounter(state->getId(), value);
|
||||
}
|
||||
} else if (event->button() == Qt::LeftButton) {
|
||||
actions->actIncrementCounter(state->getId(), 1);
|
||||
} else if (event->button() == Qt::RightButton) {
|
||||
if (state->getValue() > 0) {
|
||||
actions->actIncrementCounter(state->getId(), -1);
|
||||
}
|
||||
} else {
|
||||
event->ignore();
|
||||
return;
|
||||
}
|
||||
event->accept();
|
||||
}
|
||||
|
||||
void EssencePoolItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event)
|
||||
{
|
||||
const QChar code = codeAt(event->pos());
|
||||
CounterState *state = stateFor(code);
|
||||
if (!state) {
|
||||
setToolTip(tr("Essence pool — all types start at zero"));
|
||||
return;
|
||||
}
|
||||
const QString name = code == QChar('N') ? tr("Colorless Essence") :
|
||||
code == QChar('J') ? tr("Jasper Essence") : tr("Essence %1").arg(code);
|
||||
setToolTip(tr("%1: %2 available\nLeft +1 | Right -1 | Shift+Left: Set")
|
||||
.arg(name).arg(state->getValue()));
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
#ifndef CONTINUUMATRICE_ESSENCE_POOL_ITEM_H
|
||||
#define CONTINUUMATRICE_ESSENCE_POOL_ITEM_H
|
||||
|
||||
#include <QGraphicsObject>
|
||||
#include <QHash>
|
||||
#include <QPointer>
|
||||
|
||||
class CounterState;
|
||||
class PlayerLogic;
|
||||
class QGraphicsSceneMouseEvent;
|
||||
class QGraphicsSceneHoverEvent;
|
||||
class QPainter;
|
||||
class QStyleOptionGraphicsItem;
|
||||
class QWidget;
|
||||
|
||||
/**
|
||||
* An interactive, sixteen-type Essence resource pool attached to a player
|
||||
* battlefield. All values are read from the existing server-owned CounterState
|
||||
* objects; this graphics item does NOT own mutable match resource balances.
|
||||
*
|
||||
* Left click +1, right click -1, Shift+left to set an exact nonnegative amount.
|
||||
* Only the owning player or a game judge can modify the pool.
|
||||
*/
|
||||
class EssencePoolItem final : public QGraphicsObject
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
static constexpr int Width = 224;
|
||||
static constexpr int Height = 258;
|
||||
|
||||
explicit EssencePoolItem(PlayerLogic *player, QGraphicsItem *parent = nullptr);
|
||||
|
||||
QRectF boundingRect() const override;
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) override;
|
||||
|
||||
protected:
|
||||
void mousePressEvent(QGraphicsSceneMouseEvent *event) override;
|
||||
void hoverMoveEvent(QGraphicsSceneHoverEvent *event) override;
|
||||
|
||||
private:
|
||||
static constexpr int Columns = 4;
|
||||
static constexpr int Padding = 8;
|
||||
static constexpr int CellWidth = 52;
|
||||
static constexpr int CellHeight = 54;
|
||||
static constexpr int HeaderHeight = 29;
|
||||
|
||||
[[nodiscard]] QChar codeAt(const QPointF &position) const;
|
||||
[[nodiscard]] CounterState *stateFor(QChar code) const;
|
||||
void attachCounter(CounterState *state);
|
||||
void detachCounter(int id);
|
||||
|
||||
PlayerLogic *player;
|
||||
QHash<QChar, QPointer<CounterState>> counters;
|
||||
};
|
||||
|
||||
#endif // CONTINUUMATRICE_ESSENCE_POOL_ITEM_H
|
||||
|
|
@ -20,7 +20,6 @@
|
|||
#include "libcockatrice/utility/card_ref.h"
|
||||
#include "menu/player_menu.h"
|
||||
#include "player_area.h"
|
||||
#include "essence_pool_item.h"
|
||||
#include "player_dialogs.h"
|
||||
#include "player_target.h"
|
||||
|
||||
|
|
@ -41,7 +40,6 @@
|
|||
#include <libcockatrice/game/player/player_actions.h>
|
||||
#include <libcockatrice/game/player/player_info.h>
|
||||
#include <libcockatrice/game/player/player_logic.h>
|
||||
#include <libcockatrice/utility/essence_counter.h>
|
||||
#include <libcockatrice/game/zones/card_zone_logic.h>
|
||||
#include <libcockatrice/game/zones/hand_zone_logic.h>
|
||||
#include <libcockatrice/game/zones/pile_zone_logic.h>
|
||||
|
|
@ -53,10 +51,7 @@
|
|||
|
||||
namespace
|
||||
{
|
||||
// Reserve a third, compact column for the synchronized 4x4 Essence pool.
|
||||
// This keeps the 16 resource balances visible without obscuring the table.
|
||||
constexpr qreal EXTRA_PILE_COLUMN_WIDTH =
|
||||
CardDimensions::HEIGHT_F + 24 + EssencePoolItem::Width + 16;
|
||||
constexpr qreal EXTRA_PILE_COLUMN_WIDTH = CardDimensions::HEIGHT_F + 24;
|
||||
} // namespace
|
||||
|
||||
PlayerGraphicsItem::PlayerGraphicsItem(PlayerLogic *_player) : player(_player)
|
||||
|
|
@ -108,13 +103,6 @@ PlayerGraphicsItem::PlayerGraphicsItem(PlayerLogic *_player) : player(_player)
|
|||
|
||||
initializeZones();
|
||||
|
||||
// Board-owned renderer only. All Essence balances live in player runtime
|
||||
// CounterState and are sent/validated by the server.
|
||||
essencePool = new EssencePoolItem(player, this);
|
||||
const qreal essenceLeft = CardDimensions::HEIGHT_F + counterAreaWidth + 15 + 8 +
|
||||
CardDimensions::HEIGHT_F + 14;
|
||||
essencePool->setPos(essenceLeft, 14);
|
||||
|
||||
connect(player, &PlayerLogic::addViewCustomZoneActionToCustomZoneMenu, this,
|
||||
&PlayerGraphicsItem::onCustomZoneAdded);
|
||||
|
||||
|
|
@ -322,11 +310,6 @@ void PlayerGraphicsItem::setMirrored(bool _mirrored)
|
|||
|
||||
void PlayerGraphicsItem::onCounterAdded(CounterState *state)
|
||||
{
|
||||
// The Essence pool owns its own compact 4x4 display. Never add sixteen
|
||||
// full-size generic counters down the narrow life-counter column.
|
||||
if (EssenceCounter::isEssenceCounter(state->getName())) {
|
||||
return;
|
||||
}
|
||||
AbstractCounter *widget;
|
||||
if (state->getName() == "life") {
|
||||
widget = playerTarget->addCounter(state);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ class TableZone;
|
|||
class AbstractCounter;
|
||||
class CardZone;
|
||||
class CounterState;
|
||||
class EssencePoolItem;
|
||||
class PlayerArea;
|
||||
class PlayerLogic;
|
||||
struct CardRef;
|
||||
|
|
@ -161,7 +160,6 @@ private:
|
|||
PlayerDialogs *playerDialogs;
|
||||
PlayerArea *playerArea;
|
||||
PlayerTarget *playerTarget;
|
||||
EssencePoolItem *essencePool = nullptr;
|
||||
QMap<int, AbstractCounter *> counterWidgets;
|
||||
QMap<QString, CardZone *> zoneGraphicsItems;
|
||||
PileZone *deckZoneGraphicsItem;
|
||||
|
|
|
|||
|
|
@ -251,11 +251,9 @@ void TableZone::paintBattlefieldRows(QPainter *painter)
|
|||
*/
|
||||
void TableZone::reloadBattlefieldAppearance()
|
||||
{
|
||||
// Canonical default battlefield palette. Theme battlefield.ini can override
|
||||
// these with #RRGGBB (opaque) or #AARRGGBB (alpha) values.
|
||||
frontZoneColor = QColor(QStringLiteral("#dc143c"));
|
||||
supportZoneColor = QColor(QStringLiteral("#c3b091"));
|
||||
commandZoneColor = QColor(QStringLiteral("#0a0e3f"));
|
||||
frontZoneColor = QColor(142, 52, 61, 128);
|
||||
supportZoneColor = QColor(40, 105, 129, 128);
|
||||
commandZoneColor = QColor(94, 66, 140, 128);
|
||||
|
||||
const QString themePath = themeManager->getCurrentThemePath();
|
||||
if (!themePath.isEmpty()) {
|
||||
|
|
|
|||
|
|
@ -25,14 +25,14 @@ InstallerCloseServer::InstallerCloseServer(QObject *parent) : QObject(parent)
|
|||
|
||||
QString InstallerCloseServer::socketNameForUser(qint64 processId, const QString &userName)
|
||||
{
|
||||
return QStringLiteral("ContinuumatriceInstallerClose-%1-%2").arg(processId).arg(userName);
|
||||
return QStringLiteral("CockatriceInstallerClose-%1-%2").arg(processId).arg(userName);
|
||||
}
|
||||
|
||||
QString InstallerCloseServer::socketName(qint64 processId)
|
||||
{
|
||||
// The same scoping helper the single-instance socket uses, so the probe only has to
|
||||
// reproduce one rule (USER, then USERNAME, then the home directory name).
|
||||
return scopedLocalServerName(QStringLiteral("ContinuumatriceInstallerClose-%1").arg(processId));
|
||||
return scopedLocalServerName(QStringLiteral("CockatriceInstallerClose-%1").arg(processId));
|
||||
}
|
||||
|
||||
bool InstallerCloseServer::listen()
|
||||
|
|
|
|||
|
|
@ -1,55 +0,0 @@
|
|||
#ifndef CONTINUUMATRICE_ESSENCE_CHART_COLORS_H
|
||||
#define CONTINUUMATRICE_ESSENCE_CHART_COLORS_H
|
||||
|
||||
#include <QColor>
|
||||
#include <QList>
|
||||
#include <QMap>
|
||||
#include <QPair>
|
||||
#include <QSet>
|
||||
#include <QString>
|
||||
#include <libcockatrice/card/essence_types.h>
|
||||
|
||||
// CHART-ONLY presentation palette, NOT canon Essence colors or affiliations.
|
||||
// Each type must remain distinguishable without inventing lore. N is colorless.
|
||||
namespace EssenceCharts
|
||||
{
|
||||
inline QColor colorFor(const QString &code)
|
||||
{
|
||||
if (code == QStringLiteral("N")) {
|
||||
return QColor(145, 149, 156);
|
||||
}
|
||||
const int index = Essence::symbols().indexOf(code);
|
||||
if (index < 0) {
|
||||
// These charts are also reused for card types/categories. Retain
|
||||
// distinct readable visualization colors without assigning Essence lore.
|
||||
const QColor recognizedColor(code);
|
||||
if (recognizedColor.isValid()) {
|
||||
return recognizedColor;
|
||||
}
|
||||
return QColor::fromHsv(static_cast<int>(qHash(code) % 360u), 110, 195);
|
||||
}
|
||||
return QColor::fromHsv((index * 137) % 360, 125, 210);
|
||||
}
|
||||
|
||||
inline QList<QPair<QString, int>> ordered(const QMap<QString, int> &values)
|
||||
{
|
||||
QList<QPair<QString, int>> result;
|
||||
QSet<QString> used;
|
||||
for (const QChar code : Essence::symbols()) {
|
||||
const QString key(code);
|
||||
auto it = values.constFind(key);
|
||||
if (it != values.cend()) {
|
||||
result.append({it.key(), it.value()});
|
||||
used.insert(key);
|
||||
}
|
||||
}
|
||||
for (auto it = values.cbegin(); it != values.cend(); ++it) {
|
||||
if (!used.contains(it.key())) {
|
||||
result.append({it.key(), it.value()});
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
} // namespace EssenceCharts
|
||||
|
||||
#endif // CONTINUUMATRICE_ESSENCE_CHART_COLORS_H
|
||||
|
|
@ -44,7 +44,7 @@ void IntentUrlParser::handle(const QString &urlStr)
|
|||
{
|
||||
QUrl url(urlStr);
|
||||
|
||||
if (url.scheme() != "continuumatrice") {
|
||||
if (url.scheme() != "cockatrice") {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@ struct PendingIntentChain
|
|||
};
|
||||
|
||||
/**
|
||||
* @brief Parses continuumatrice:// links and runs them as serialized intent chains.
|
||||
* @brief Parses cockatrice:// links and runs them as serialized intent chains.
|
||||
*
|
||||
* Links are parsed by action (joingame/opendeck) and translated into an intent
|
||||
* chain. Chains are queued and run one at a time: a document can hand multiple
|
||||
|
|
|
|||
|
|
@ -488,10 +488,7 @@ const QPixmap &ManaSymbolPixmapGenerator::masterIcon(const QString &symbol)
|
|||
return it.value();
|
||||
}
|
||||
|
||||
// Essence uses its own artwork namespace, including codes shared with MTG.
|
||||
// Theme overrides are supported through icons/essence/<symbol>.svg/png.
|
||||
const QString asset = themeManager->assetPath(QStringLiteral("icons/essence/") + symbol);
|
||||
QImageReader reader(QStringLiteral("theme:") + asset);
|
||||
QImageReader reader("theme:icons/mana/" + symbol);
|
||||
QSize sourceSize = reader.size();
|
||||
if (!sourceSize.isEmpty()) {
|
||||
sourceSize.scale(QSize(MASTER_ICON_SIZE, MASTER_ICON_SIZE), Qt::KeepAspectRatio);
|
||||
|
|
|
|||
|
|
@ -294,7 +294,7 @@ QString ThemeManager::assetPath(QStringView prefix) const
|
|||
// on Windows where UAC VirtualStore can make a system dir appear writable).
|
||||
bool ThemeManager::isDirReallyWritable(const QString &dirPath)
|
||||
{
|
||||
const QString probe = QDir(dirPath).absoluteFilePath(".continuumatrice_write_test");
|
||||
const QString probe = QDir(dirPath).absoluteFilePath(".cockatrice_write_test");
|
||||
QFile f(probe);
|
||||
if (!f.open(QIODevice::WriteOnly)) {
|
||||
return false;
|
||||
|
|
@ -326,7 +326,7 @@ static QString systemThemesBasePath()
|
|||
#elif defined(Q_OS_WIN)
|
||||
base += "/themes";
|
||||
#else // linux
|
||||
base += "/../share/continuumatrice/themes";
|
||||
base += "/../share/cockatrice/themes";
|
||||
#endif
|
||||
return base;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include "../../../../client/settings/cache_settings.h"
|
||||
#include "libcockatrice/card/card_info.h"
|
||||
#include <libcockatrice/card/essence_types.h>
|
||||
#include "mana_symbol_widget.h"
|
||||
|
||||
#include <QChar>
|
||||
|
|
@ -42,9 +41,9 @@ ColorIdentityWidget::ColorIdentityWidget(QWidget *parent, const CardInfoPtr &car
|
|||
|
||||
void ColorIdentityWidget::populateManaSymbolWidgets()
|
||||
{
|
||||
// Continuum Universes supports fourteen named Essence codes plus N (colorless).
|
||||
const QString &allEssences = Essence::symbols();
|
||||
QStringList symbols = parseColorIdentity(colorIdentity);
|
||||
// Define the full WUBRG set (White, Blue, Black, Red, Green)
|
||||
QString fullColorIdentity = "WUBRG";
|
||||
QStringList symbols = parseColorIdentity(colorIdentity); // Parse mana cost string
|
||||
|
||||
// clear old layout
|
||||
QtUtils::clearLayoutRec(layout);
|
||||
|
|
@ -56,8 +55,7 @@ void ColorIdentityWidget::populateManaSymbolWidgets()
|
|||
|
||||
// populate mana symbols
|
||||
if (SettingsCache::instance().visualDeckStorage().getVisualDeckStorageDrawUnusedColorIdentities()) {
|
||||
for (const QChar code : allEssences) {
|
||||
const QString symbol(code);
|
||||
for (const QString symbol : fullColorIdentity) {
|
||||
auto *manaSymbol = new ManaSymbolWidget(this, symbol, symbols.contains(symbol));
|
||||
layout->addWidget(manaSymbol);
|
||||
}
|
||||
|
|
@ -122,11 +120,28 @@ void ColorIdentityWidget::resizeEvent(QResizeEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
QStringList ColorIdentityWidget::parseColorIdentity(const QString &essenceIdentity)
|
||||
QStringList ColorIdentityWidget::parseColorIdentity(const QString &manaString)
|
||||
{
|
||||
QStringList symbols;
|
||||
for (const QChar code : Essence::normalizeIdentity(essenceIdentity)) {
|
||||
symbols.append(QString(code));
|
||||
|
||||
// Handle split costs (e.g., "3U // 4UU")
|
||||
QStringList splitCosts = manaString.split(" // ");
|
||||
for (const QString &part : splitCosts) {
|
||||
QRegularExpression regex(R"(\{([^}]+)\}|(\d+)|([WUBRGCSPX]))");
|
||||
QRegularExpressionMatchIterator matches = regex.globalMatch(part);
|
||||
while (matches.hasNext()) {
|
||||
QRegularExpressionMatch match = matches.next();
|
||||
if (match.captured(1).isEmpty()) { // If no `{}` group was captured, check other groups
|
||||
if (!match.captured(2).isEmpty()) {
|
||||
symbols.append(match.captured(2)); // Number match
|
||||
} else {
|
||||
symbols.append(match.captured(3)); // Single mana letter match
|
||||
}
|
||||
} else {
|
||||
symbols.append(match.captured(1)); // `{}` enclosed match
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return symbols;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#include "deck_color_identity.h"
|
||||
|
||||
#include "libcockatrice/card/card_info.h"
|
||||
#include <libcockatrice/card/essence_types.h>
|
||||
|
||||
#include <QChar>
|
||||
#include <QList>
|
||||
|
|
@ -18,7 +17,7 @@ QString getDeckColorIdentity(const DeckList &deck, const CardDatabaseQuerier *db
|
|||
return {};
|
||||
}
|
||||
|
||||
QSet<QChar> colorSet; // Unique Essence symbols (including N for colorless).
|
||||
QSet<QChar> colorSet; // A set to collect unique color symbols (e.g., W, U, B, R, G)
|
||||
|
||||
for (const QString &cardName : cardList) {
|
||||
CardInfoPtr currentCard = db->getCardInfo(cardName);
|
||||
|
|
@ -30,9 +29,10 @@ QString getDeckColorIdentity(const DeckList &deck, const CardDatabaseQuerier *db
|
|||
}
|
||||
}
|
||||
|
||||
// Canonical Essence order is shared by the database and all widgets.
|
||||
// Ensure the color identity is in WUBRG order
|
||||
QString colorIdentity;
|
||||
for (const QChar &color : Essence::symbols()) {
|
||||
const QString wubrgOrder = "WUBRG";
|
||||
for (const QChar &color : wubrgOrder) {
|
||||
if (colorSet.contains(color)) {
|
||||
colorIdentity.append(color);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,9 +7,8 @@ class CardDatabaseQuerier;
|
|||
class DeckList;
|
||||
|
||||
/**
|
||||
* @brief Computes the Essence identity of a deck from the defined Essence
|
||||
* symbols (M,S,O,G,E,A,Q,C,J,B,R,L,V,T,P,N) of cards in main/sideboard.
|
||||
* N denotes colorless.
|
||||
* @brief Computes the color identity of a deck (e.g. "WUBRG") from the color
|
||||
* symbols of all cards in the main deck and sideboard, ordered WUBRG.
|
||||
*
|
||||
* Shared as a free function so the deck storage previews and the deck share
|
||||
* dialog compute identities identically.
|
||||
|
|
|
|||
|
|
@ -1,157 +0,0 @@
|
|||
#include "essence_filter_picker.h"
|
||||
|
||||
#include "../../../pixel_map_generator.h"
|
||||
|
||||
#include <QFontMetrics>
|
||||
#include <QGridLayout>
|
||||
#include <QIcon>
|
||||
#include <QLabel>
|
||||
#include <QMenu>
|
||||
#include <QPushButton>
|
||||
#include <QSignalBlocker>
|
||||
#include <QSize>
|
||||
#include <QSizePolicy>
|
||||
#include <QStringList>
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidget>
|
||||
#include <QWidgetAction>
|
||||
#include <libcockatrice/card/essence_types.h>
|
||||
|
||||
EssenceFilterPicker::EssenceFilterPicker(QWidget *parent) : QToolButton(parent)
|
||||
{
|
||||
setPopupMode(QToolButton::InstantPopup);
|
||||
setToolButtonStyle(Qt::ToolButtonTextOnly); // Keep the summary visible even without a button icon.
|
||||
setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
|
||||
// Force a stable toolbar footprint independent of popup and font sizing.
|
||||
// Modes and all 16 Essence icons are contained inside the popup.
|
||||
setFixedWidth(qMax(156, fontMetrics().horizontalAdvance(tr("Essence: Any")) + 42));
|
||||
|
||||
popupMenu = new QMenu(this);
|
||||
auto *panel = new QWidget(popupMenu);
|
||||
panelLayout = new QVBoxLayout(panel);
|
||||
panelLayout->setContentsMargins(10, 10, 10, 10);
|
||||
panelLayout->setSpacing(7);
|
||||
|
||||
auto *heading = new QLabel(tr("Filter by Essence"), panel);
|
||||
panelLayout->addWidget(heading);
|
||||
|
||||
auto *grid = new QGridLayout();
|
||||
grid->setSpacing(5);
|
||||
|
||||
int index = 0;
|
||||
for (const QChar essence : Essence::symbols()) {
|
||||
const QString symbol(essence);
|
||||
auto *button = new QToolButton(panel);
|
||||
button->setCheckable(true);
|
||||
button->setAutoRaise(false);
|
||||
button->setFixedSize(42, 42);
|
||||
button->setIcon(QIcon(ManaSymbolPixmapGenerator::generatePixmap(symbol, QSize(32, 32))));
|
||||
button->setIconSize(QSize(30, 30));
|
||||
if (essence == QChar('N')) {
|
||||
button->setToolTip(tr("N — Colorless Essence"));
|
||||
button->setAccessibleName(tr("Colorless Essence N"));
|
||||
} else if (essence == QChar('J')) {
|
||||
button->setToolTip(tr("J — Jasper Essence"));
|
||||
button->setAccessibleName(tr("Jasper Essence J"));
|
||||
} else {
|
||||
button->setToolTip(tr("Essence %1").arg(symbol));
|
||||
button->setAccessibleName(tr("Essence %1").arg(symbol));
|
||||
}
|
||||
button->setProperty("essenceCode", symbol);
|
||||
connect(button, &QToolButton::toggled, this, [this, essence](bool checked) {
|
||||
updateSummary();
|
||||
emit essenceToggled(essence, checked);
|
||||
});
|
||||
|
||||
// Sixteen Essences form a compact 4x4 grid.
|
||||
grid->addWidget(button, index / 4, index % 4);
|
||||
buttons.insert(essence, button);
|
||||
++index;
|
||||
}
|
||||
panelLayout->addLayout(grid);
|
||||
|
||||
auto *clearButton = new QPushButton(tr("Clear Essence selection"), panel);
|
||||
connect(clearButton, &QPushButton::clicked, this, [this]() {
|
||||
// Clear as ONE model operation, so Exact Match and Include/Exclude
|
||||
// don't retain stale "not this Essence" predicates.
|
||||
for (const QChar essence : Essence::symbols()) {
|
||||
if (auto *button = buttons.value(essence); button && button->isChecked()) {
|
||||
const QSignalBlocker blocker(button);
|
||||
button->setChecked(false);
|
||||
}
|
||||
}
|
||||
updateSummary();
|
||||
emit selectionCleared();
|
||||
});
|
||||
panelLayout->addWidget(clearButton);
|
||||
|
||||
auto *panelAction = new QWidgetAction(popupMenu);
|
||||
panelAction->setDefaultWidget(panel);
|
||||
popupMenu->addAction(panelAction);
|
||||
setMenu(popupMenu);
|
||||
|
||||
retranslateUi();
|
||||
}
|
||||
|
||||
void EssenceFilterPicker::addPopupControl(QWidget *control)
|
||||
{
|
||||
if (!control || !panelLayout) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Insert above the Clear button, keeping the entire configuration in one
|
||||
// popup rather than competing for horizontal space in the main toolbar.
|
||||
panelLayout->insertWidget(panelLayout->count() - 1, control);
|
||||
}
|
||||
|
||||
QSet<QChar> EssenceFilterPicker::activeEssences() const
|
||||
{
|
||||
QSet<QChar> active;
|
||||
for (auto it = buttons.cbegin(); it != buttons.cend(); ++it) {
|
||||
if (it.value()->isChecked()) {
|
||||
active.insert(it.key());
|
||||
}
|
||||
}
|
||||
return active;
|
||||
}
|
||||
|
||||
void EssenceFilterPicker::setEssenceActive(QChar essence, bool active)
|
||||
{
|
||||
auto *button = buttons.value(essence);
|
||||
if (!button || button->isChecked() == active) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Restoring external filter state must not rewrite the filter model.
|
||||
const QSignalBlocker blocker(button);
|
||||
button->setChecked(active);
|
||||
updateSummary();
|
||||
}
|
||||
|
||||
void EssenceFilterPicker::retranslateUi()
|
||||
{
|
||||
updateSummary();
|
||||
}
|
||||
|
||||
void EssenceFilterPicker::updateSummary()
|
||||
{
|
||||
QStringList selected;
|
||||
const QSet<QChar> active = activeEssences();
|
||||
for (const QChar essence : Essence::symbols()) {
|
||||
if (active.contains(essence)) {
|
||||
selected.append(QString(essence));
|
||||
}
|
||||
}
|
||||
|
||||
if (selected.isEmpty()) {
|
||||
setText(tr("Essence: Any"));
|
||||
setToolTip(tr("Filter by Essence (none selected)"));
|
||||
} else if (selected.size() == 1) {
|
||||
setText(tr("Essence: %1").arg(selected.first()));
|
||||
setToolTip(tr("Selected Essence: %1").arg(selected.first()));
|
||||
} else {
|
||||
// Keep the toolbar label short; the tooltip lists the exact types.
|
||||
setText(tr("Essence (%1)").arg(selected.size()));
|
||||
setToolTip(tr("Selected Essence: %1").arg(selected.join(QStringLiteral(", "))));
|
||||
}
|
||||
}
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
#ifndef CONTINUUMATRICE_ESSENCE_FILTER_PICKER_H
|
||||
#define CONTINUUMATRICE_ESSENCE_FILTER_PICKER_H
|
||||
|
||||
#include <QChar>
|
||||
#include <QHash>
|
||||
#include <QSet>
|
||||
#include <QToolButton>
|
||||
|
||||
class QMenu;
|
||||
class QVBoxLayout;
|
||||
class QWidget;
|
||||
|
||||
/**
|
||||
* Compact, reusable multi-select Essence picker for the deck and card database
|
||||
* toolbars. The menu contains all fifteen Essence symbols in a 5x3 icon grid.
|
||||
* Clicking a symbol does not close the popup; programmatic synchronization
|
||||
* does not emit a user-selection signal.
|
||||
*/
|
||||
class EssenceFilterPicker final : public QToolButton
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit EssenceFilterPicker(QWidget *parent = nullptr);
|
||||
|
||||
[[nodiscard]] QSet<QChar> activeEssences() const;
|
||||
void setEssenceActive(QChar essence, bool active);
|
||||
// Put the host's filtering mode selector inside this popup too:
|
||||
// neither toolbar should require a separate cramped control.
|
||||
void addPopupControl(QWidget *control);
|
||||
void retranslateUi();
|
||||
|
||||
signals:
|
||||
void essenceToggled(QChar essence, bool active);
|
||||
// A clear request removes ALL Essence filters, including exclusions,
|
||||
// rather than creating fifteen negative filters in Exact/Exclude mode.
|
||||
void selectionCleared();
|
||||
|
||||
private:
|
||||
void updateSummary();
|
||||
|
||||
QHash<QChar, QToolButton *> buttons;
|
||||
QMenu *popupMenu = nullptr;
|
||||
QVBoxLayout *panelLayout = nullptr;
|
||||
};
|
||||
|
||||
#endif // CONTINUUMATRICE_ESSENCE_FILTER_PICKER_H
|
||||
|
|
@ -1,7 +1,6 @@
|
|||
#include "mana_cost_widget.h"
|
||||
|
||||
#include "libcockatrice/card/card_info.h"
|
||||
#include <libcockatrice/card/essence_types.h>
|
||||
#include "mana_symbol_widget.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
|
|
@ -52,7 +51,28 @@ void ManaCostWidget::resizeEvent(QResizeEvent *event)
|
|||
}
|
||||
}
|
||||
|
||||
QStringList ManaCostWidget::parseManaCost(const QString &essenceCost)
|
||||
QStringList ManaCostWidget::parseManaCost(const QString &cmc)
|
||||
{
|
||||
return Essence::parseCost(essenceCost);
|
||||
QStringList symbols;
|
||||
|
||||
// Handle split costs (e.g., "3U // 4UU")
|
||||
QStringList splitCosts = cmc.split(" // ");
|
||||
for (const QString &part : splitCosts) {
|
||||
QRegularExpression regex(R"(\{([^}]+)\}|(\d+)|([WUBRGCSPX]))");
|
||||
QRegularExpressionMatchIterator matches = regex.globalMatch(part);
|
||||
while (matches.hasNext()) {
|
||||
QRegularExpressionMatch match = matches.next();
|
||||
if (match.captured(1).isEmpty()) { // If no `{}` group was captured, check other groups
|
||||
if (!match.captured(2).isEmpty()) {
|
||||
symbols.append(match.captured(2)); // Number match
|
||||
} else {
|
||||
symbols.append(match.captured(3)); // Single mana letter match
|
||||
}
|
||||
} else {
|
||||
symbols.append(match.captured(1)); // `{}` enclosed match
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return symbols;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -57,14 +57,14 @@ ManaBaseConfigDialog::ManaBaseConfigDialog(DeckListStatisticsAnalyzer *analyzer,
|
|||
|
||||
void ManaBaseConfigDialog::retranslateUi()
|
||||
{
|
||||
setWindowTitle(tr("Essence Production Configuration"));
|
||||
setWindowTitle(tr("Mana Base Configuration"));
|
||||
|
||||
displayTypeLabel->setText(tr("Display type:"));
|
||||
|
||||
displayType->clear();
|
||||
displayType->addItems({tr("pie"), tr("bar"), tr("combinedBar")});
|
||||
|
||||
filterLabel->setText(tr("Filter Essence types (optional):"));
|
||||
filterLabel->setText(tr("Filter Colors (optional):"));
|
||||
|
||||
buttons->button(QDialogButtonBox::Ok)->setText(tr("OK"));
|
||||
buttons->button(QDialogButtonBox::Cancel)->setText(tr("Cancel"));
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
#include "mana_base_widget.h"
|
||||
|
||||
#include "../../../../essence_chart_colors.h"
|
||||
#include "../../../general/display/charts/bars/bar_widget.h"
|
||||
#include "../../../general/display/charts/bars/color_bar.h"
|
||||
#include "../../../general/display/charts/pies/color_pie.h"
|
||||
|
|
@ -31,7 +30,7 @@ namespace
|
|||
{
|
||||
|
||||
AnalyticsPanelWidgetRegistrar registerManaBase{
|
||||
"manaBase", ManaBaseWidget::tr("Essence Production"),
|
||||
"manaBase", ManaBaseWidget::tr("Mana Base"),
|
||||
[](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaBaseWidget(parent, analyzer); }};
|
||||
|
||||
} // anonymous namespace
|
||||
|
|
@ -84,12 +83,16 @@ void ManaBaseWidget::updateDisplay()
|
|||
|
||||
// Choose display mode
|
||||
if (config.displayType == "bar") {
|
||||
const QList<QPair<QString, int>> sortedColors = EssenceCharts::ordered(mapSorted);
|
||||
const QList<QPair<QString, int>> sortedColors = GameSpecificColors::MTG::sortManaMapWUBRGCFirst(mapSorted);
|
||||
static const QHash<QString, QColor> colorMap = {
|
||||
{"W", QColor(248, 231, 185)}, {"U", QColor(14, 104, 171)}, {"B", QColor(21, 11, 0)},
|
||||
{"R", QColor(211, 32, 42)}, {"G", QColor(0, 115, 62)}, {"C", QColor(150, 150, 150)},
|
||||
};
|
||||
|
||||
for (const auto &[color, count] : sortedColors) {
|
||||
QString label = QString("%1 %2 (%3)").arg(color).arg(count).arg(cardCount.value(color));
|
||||
|
||||
BarWidget *bar = new BarWidget(label, count, highest, EssenceCharts::colorFor(color), this);
|
||||
BarWidget *bar = new BarWidget(label, count, highest, colorMap.value(color, Qt::gray), this);
|
||||
|
||||
barLayout->addWidget(bar);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include "mana_curve_category_widget.h"
|
||||
|
||||
#include "../../../general/display/charts/bars/bar_chart_widget.h"
|
||||
#include "../../../../essence_chart_colors.h"
|
||||
#include "libcockatrice/utility/color.h"
|
||||
#include "libcockatrice/utility/qt_utils.h"
|
||||
#include "mana_curve_config.h"
|
||||
|
||||
|
|
@ -110,7 +110,7 @@ void ManaCurveCategoryWidget::updateDisplay(int minCmc,
|
|||
|
||||
QVector<BarSegment> segments;
|
||||
if (val > 0) {
|
||||
segments.push_back({cat, val, cards, EssenceCharts::colorFor(cat)});
|
||||
segments.push_back({cat, val, cards, GameSpecificColors::MTG::colorHelper(cat)});
|
||||
}
|
||||
|
||||
catBars.push_back({QString::number(cmc), segments});
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@ void ManaCurveConfigDialog::retranslateUi()
|
|||
{
|
||||
labelGroupBy->setText(tr("Group By:"));
|
||||
groupBy->setItemText(0, tr("type"));
|
||||
groupBy->setItemText(1, tr("Essence"));
|
||||
groupBy->setItemText(1, tr("color"));
|
||||
groupBy->setItemText(2, tr("subtype"));
|
||||
groupBy->setItemText(3, tr("power"));
|
||||
groupBy->setItemText(4, tr("toughness"));
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
#include "mana_curve_total_widget.h"
|
||||
|
||||
#include "../../../general/display/charts/bars/bar_chart_widget.h"
|
||||
#include "../../../../essence_chart_colors.h"
|
||||
#include "libcockatrice/utility/color.h"
|
||||
#include "mana_curve_config.h"
|
||||
|
||||
#include <QHBoxLayout>
|
||||
|
|
@ -71,7 +71,7 @@ void ManaCurveTotalWidget::updateDisplay(const QString &categoryName,
|
|||
cards = catIt->value(cmc);
|
||||
}
|
||||
|
||||
segments.push_back({category, value, cards, EssenceCharts::colorFor(category)});
|
||||
segments.push_back({category, value, cards, GameSpecificColors::MTG::colorHelper(category)});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ namespace
|
|||
{
|
||||
|
||||
AnalyticsPanelWidgetRegistrar registerManaCurve{
|
||||
"manaCurve", ManaCurveWidget::tr("Essence Curve"),
|
||||
"manaCurve", ManaCurveWidget::tr("Mana Curve"),
|
||||
[](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaCurveWidget(parent, analyzer); }};
|
||||
|
||||
} // anonymous namespace
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ void ManaDevotionConfigDialog::retranslateUi()
|
|||
displayType->setItemText(1, tr("bar"));
|
||||
displayType->setItemText(2, tr("combinedBar"));
|
||||
|
||||
labelFilters->setText(tr("Filter Essence types (optional):"));
|
||||
labelFilters->setText(tr("Filter Colors (optional):"));
|
||||
}
|
||||
|
||||
void ManaDevotionConfigDialog::accept()
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
#include "mana_devotion_widget.h"
|
||||
|
||||
#include "../../../../essence_chart_colors.h"
|
||||
#include "../../../general/display/charts/bars/bar_widget.h"
|
||||
#include "../../../general/display/charts/bars/color_bar.h"
|
||||
#include "../../../general/display/charts/pies/color_pie.h"
|
||||
|
|
@ -30,7 +29,7 @@ namespace
|
|||
{
|
||||
|
||||
AnalyticsPanelWidgetRegistrar registerManaDevotion{
|
||||
"manaDevotion", ManaDevotionWidget::tr("Essence Cost Symbols"),
|
||||
"manaDevotion", ManaDevotionWidget::tr("Mana Devotion"),
|
||||
[](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaDevotionWidget(parent, analyzer); }};
|
||||
|
||||
} // anonymous namespace
|
||||
|
|
@ -83,13 +82,18 @@ void ManaDevotionWidget::updateDisplay()
|
|||
mapSorted.insert(QString(it.key()), it.value());
|
||||
}
|
||||
|
||||
// Color map
|
||||
QHash<QChar, QColor> colors = {{'W', QColor(248, 231, 185)}, {'U', QColor(14, 104, 171)},
|
||||
{'B', QColor(21, 11, 0)}, {'R', QColor(211, 32, 42)},
|
||||
{'G', QColor(0, 115, 62)}, {'C', QColor(150, 150, 150)}};
|
||||
|
||||
// Choose display mode
|
||||
if (config.displayType == "bar") {
|
||||
// One BarWidget per devotion color
|
||||
for (auto c : devoMap.keys()) {
|
||||
QString label = QString("%1 %2 (%3)").arg(c).arg(devoMap[c]).arg(cardCount.value(QString(c)));
|
||||
|
||||
BarWidget *bar = new BarWidget(label, devoMap[c], highest, EssenceCharts::colorFor(QString(c)), this);
|
||||
BarWidget *bar = new BarWidget(label, devoMap[c], highest, colors.value(c, Qt::gray), this);
|
||||
|
||||
barLayout->addWidget(bar);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,18 +10,11 @@
|
|||
#include <QListWidgetItem>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <libcockatrice/card/essence_types.h>
|
||||
#include <QVBoxLayout>
|
||||
|
||||
class QWidget;
|
||||
|
||||
static const QStringList kEssences = [] {
|
||||
QStringList codes;
|
||||
for (const QChar symbol : Essence::symbols()) {
|
||||
codes.append(QString(symbol));
|
||||
}
|
||||
return codes;
|
||||
}();
|
||||
static const QStringList kColors = {"W", "U", "B", "R", "G", "C"};
|
||||
|
||||
ManaDistributionConfigDialog::ManaDistributionConfigDialog(DeckListStatisticsAnalyzer *analyzer, QWidget *parent)
|
||||
: QDialog(parent), analyzer(analyzer)
|
||||
|
|
@ -40,7 +33,7 @@ ManaDistributionConfigDialog::ManaDistributionConfigDialog(DeckListStatisticsAna
|
|||
|
||||
filterList = new QListWidget(this);
|
||||
filterList->setSelectionMode(QAbstractItemView::MultiSelection);
|
||||
filterList->addItems(kEssences); // dynamic/fixed, no translation needed
|
||||
filterList->addItems(kColors); // dynamic/fixed, no translation needed
|
||||
lay->addWidget(filterList);
|
||||
|
||||
showColorRows = new QCheckBox(this);
|
||||
|
|
@ -63,9 +56,9 @@ void ManaDistributionConfigDialog::retranslateUi()
|
|||
displayType->setItemText(0, tr("pie"));
|
||||
displayType->setItemText(1, tr("bar"));
|
||||
|
||||
labelFilters->setText(tr("Essence types:"));
|
||||
labelFilters->setText(tr("Colors:"));
|
||||
|
||||
showColorRows->setText(tr("Show per-Essence rows"));
|
||||
showColorRows->setText(tr("Show per-color rows"));
|
||||
|
||||
// QDialogButtonBox buttons are automatically translated
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,5 +48,5 @@ void ManaDistributionSingleDisplayWidget::setDevotion(int pips, int cards, int p
|
|||
void ManaDistributionSingleDisplayWidget::setProduction(int pips, int cards, int percent)
|
||||
{
|
||||
productionBar->setValue(percent);
|
||||
productionLabel->setText(QString(tr("%1 Essence (%2 cards)")).arg(pips).arg(cards));
|
||||
productionLabel->setText(QString(tr("%1 mana (%2 cards)")).arg(pips).arg(cards));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,25 +14,18 @@
|
|||
#include <QList>
|
||||
#include <QSharedPointer>
|
||||
#include <QStringList>
|
||||
#include <libcockatrice/card/essence_types.h>
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidget>
|
||||
|
||||
namespace
|
||||
{
|
||||
AnalyticsPanelWidgetRegistrar registerManaDistribution{
|
||||
"manaProdDevotion", ManaDistributionWidget::tr("Essence Production + Costs"),
|
||||
"manaProdDevotion", ManaDistributionWidget::tr("Mana Production + Devotion"),
|
||||
[](QWidget *parent, DeckListStatisticsAnalyzer *analyzer) { return new ManaDistributionWidget(parent, analyzer); }};
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
static const QStringList kEssences = [] {
|
||||
QStringList codes;
|
||||
for (const QChar symbol : Essence::symbols()) {
|
||||
codes.append(QString(symbol));
|
||||
}
|
||||
return codes;
|
||||
}();
|
||||
static const QStringList kColors = {"W", "U", "B", "R", "G", "C"};
|
||||
|
||||
ManaDistributionWidget::ManaDistributionWidget(QWidget *parent, DeckListStatisticsAnalyzer *analyzer)
|
||||
: AbstractAnalyticsPanelWidget(parent, analyzer)
|
||||
|
|
@ -56,7 +49,7 @@ ManaDistributionWidget::ManaDistributionWidget(QWidget *parent, DeckListStatisti
|
|||
row = new QHBoxLayout();
|
||||
containerLayout->addLayout(row);
|
||||
|
||||
for (const QString &c : kEssences) {
|
||||
for (const QString &c : kColors) {
|
||||
auto *w = new ManaDistributionSingleDisplayWidget(c, this);
|
||||
row->addWidget(w);
|
||||
rows[c] = w;
|
||||
|
|
@ -72,7 +65,7 @@ void ManaDistributionWidget::updateDisplay()
|
|||
const auto &prodPips = analyzer->getProductionPipCount();
|
||||
const auto &prodCards = analyzer->getProductionCardCount();
|
||||
|
||||
QStringList filtered = config.filters.isEmpty() ? kEssences : config.filters;
|
||||
QStringList filtered = config.filters.isEmpty() ? kColors : config.filters;
|
||||
|
||||
QMap<QString, int> devMap, prodMap;
|
||||
for (const QString &c : filtered) {
|
||||
|
|
@ -96,7 +89,7 @@ void ManaDistributionWidget::updateDisplay()
|
|||
productionBarTop->setColors(prodMap);
|
||||
}
|
||||
|
||||
for (const QString &c : kEssences) {
|
||||
for (const QString &c : kColors) {
|
||||
auto *w = rows.value(c);
|
||||
|
||||
if (!w) {
|
||||
|
|
@ -133,7 +126,7 @@ void ManaDistributionWidget::updateDisplay()
|
|||
QDialog *ManaDistributionWidget::createConfigDialog(QWidget *parent)
|
||||
{
|
||||
auto *dlg = new ManaDistributionConfigDialog(analyzer, parent);
|
||||
dlg->setWindowTitle(tr("Essence Distribution Settings"));
|
||||
dlg->setWindowTitle(tr("Mana Distribution Settings"));
|
||||
dlg->setFromConfig(config);
|
||||
|
||||
connect(dlg, &QDialog::accepted, [this, dlg]() {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@
|
|||
|
||||
#include "deck_list_model.h"
|
||||
#include "libcockatrice/card/card_info.h"
|
||||
#include <libcockatrice/card/essence_types.h>
|
||||
#include "libcockatrice/card/database/card_database_querier.h"
|
||||
#include "libcockatrice/deck_list/tree/deck_list_card_node.h"
|
||||
#include "libcockatrice/deck_list/tree/inner_deck_list_node.h"
|
||||
|
|
@ -128,39 +127,68 @@ void DeckListStatisticsAnalyzer::analyze()
|
|||
|
||||
QHash<QString, int> DeckListStatisticsAnalyzer::determineManaProduction(const QString &rulesText)
|
||||
{
|
||||
QHash<QString, int> result;
|
||||
for (const QChar code : Essence::symbols()) {
|
||||
result.insert(QString(code), 0);
|
||||
QHash<QString, int> manaCounts = {{"W", 0}, {"U", 0}, {"B", 0}, {"R", 0}, {"G", 0}, {"C", 0}};
|
||||
|
||||
QString text = rulesText.toLower(); // Normalize case for matching
|
||||
|
||||
// Quick keyword-based checks for any color and colorless mana
|
||||
if (text.contains("{t}: add one mana of any color") || text.contains("add one mana of any color")) {
|
||||
for (const auto &color : {QStringLiteral("W"), QStringLiteral("U"), QStringLiteral("B"), QStringLiteral("R"),
|
||||
QStringLiteral("G")}) {
|
||||
manaCounts[color]++;
|
||||
}
|
||||
}
|
||||
if (text.contains("{t}: add {c}") || text.contains("add one colorless mana")) {
|
||||
manaCounts["C"]++;
|
||||
}
|
||||
|
||||
// Explicit Essence grants only. Inferring additional resources from MTG
|
||||
// tap/mana rules would invent Continuum Universes gameplay semantics.
|
||||
// E.g. "Add {M}" / "add {N}" both work.
|
||||
static const QRegularExpression grantedEssence(
|
||||
QStringLiteral(R"(\badd\s*\{([MSOGEAQCJBRLVTPN])\})"),
|
||||
QRegularExpression::CaseInsensitiveOption);
|
||||
|
||||
auto matches = grantedEssence.globalMatch(rulesText);
|
||||
while (matches.hasNext()) {
|
||||
const QString code = matches.next().captured(1).toUpper();
|
||||
result[code]++;
|
||||
// Optimized regex for specific mana symbols
|
||||
static const QRegularExpression specificColorRegex(R"(\{T\}:\s*Add\s*\{([WUBRG])\})");
|
||||
QRegularExpressionMatch match = specificColorRegex.match(rulesText);
|
||||
if (match.hasMatch()) {
|
||||
manaCounts[match.captured(1)]++;
|
||||
}
|
||||
return result;
|
||||
|
||||
return manaCounts;
|
||||
}
|
||||
|
||||
std::unordered_map<char, int> DeckListStatisticsAnalyzer::countManaSymbols(const QString &essenceCost)
|
||||
std::unordered_map<char, int> DeckListStatisticsAnalyzer::countManaSymbols(const QString &manaString)
|
||||
{
|
||||
std::unordered_map<char, int> result;
|
||||
for (const QChar code : Essence::symbols()) {
|
||||
result.emplace(code.toLatin1(), 0);
|
||||
std::unordered_map<char, int> manaCounts = {{'W', 0}, {'U', 0}, {'B', 0}, {'R', 0}, {'G', 0}};
|
||||
|
||||
int len = manaString.length();
|
||||
for (int i = 0; i < len; ++i) {
|
||||
if (manaString[i] == '{') {
|
||||
++i; // Move past '{'
|
||||
if (i < len && manaCounts.find(manaString[i].toLatin1()) != manaCounts.end()) {
|
||||
char mana1 = manaString[i].toLatin1();
|
||||
++i; // Move to next character
|
||||
if (i < len && manaString[i] == '/') {
|
||||
++i; // Move past '/'
|
||||
if (i < len && manaCounts.find(manaString[i].toLatin1()) != manaCounts.end()) {
|
||||
char mana2 = manaString[i].toLatin1();
|
||||
manaCounts[mana1]++;
|
||||
manaCounts[mana2]++;
|
||||
} else {
|
||||
// Handle cases like "{W/}" where second part is invalid
|
||||
manaCounts[mana1]++;
|
||||
}
|
||||
} else {
|
||||
manaCounts[mana1]++;
|
||||
}
|
||||
}
|
||||
// Ensure we always skip to the closing '}'
|
||||
while (i < len && manaString[i] != '}') {
|
||||
++i;
|
||||
}
|
||||
}
|
||||
// Check if the character is a standalone mana symbol (not inside {})
|
||||
else if (manaCounts.find(manaString[i].toLatin1()) != manaCounts.end()) {
|
||||
manaCounts[manaString[i].toLatin1()]++;
|
||||
}
|
||||
}
|
||||
|
||||
for (const QString &token : Essence::parseCost(essenceCost)) {
|
||||
if (token.size() == 1 && Essence::isSymbol(token.at(0))) {
|
||||
result[token.at(0).toLatin1()]++;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return manaCounts;
|
||||
}
|
||||
|
||||
// Hypergeometric probability: P(X=k)
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ private:
|
|||
std::unordered_map<int, int> manaCurveMap;
|
||||
std::unordered_map<char, int> manaDevotionMap;
|
||||
|
||||
QHash<QString, int> devotionPipCount; // Counts for the fifteen Continuum Universes Essence codes
|
||||
QHash<QString, int> devotionPipCount; // W/U/B/R/G total symbols
|
||||
QHash<QString, int> devotionCardCount; // how many cards provide devotion
|
||||
|
||||
QHash<QString, int> productionPipCount; // mana produced by cards
|
||||
|
|
|
|||
|
|
@ -36,9 +36,9 @@
|
|||
|
||||
// Executable that, when it sits next to the downloaded update installer, is installed instead of
|
||||
// it. A packager shipping a custom build - or someone testing one - can drop the file there and
|
||||
// have Continuumatrice run it rather than the official installer, without the release channel having to
|
||||
// have Cockatrice run it rather than the official installer, without the release channel having to
|
||||
// host an installer for that build. It is a drop-in and is run with the same arguments.
|
||||
static const QString UPDATE_INSTALLER_OVERRIDE = "Continuumatrice-Update-Override.exe";
|
||||
static const QString UPDATE_INSTALLER_OVERRIDE = "Cockatrice-Update-Override.exe";
|
||||
|
||||
DlgUpdate::DlgUpdate(QWidget *parent) : QDialog(parent)
|
||||
{
|
||||
|
|
@ -87,7 +87,7 @@ DlgUpdate::DlgUpdate(QWidget *parent) : QDialog(parent)
|
|||
if (!QSslSocket::supportsSsl()) {
|
||||
enableUpdateButton(false);
|
||||
QMessageBox::critical(this, tr("Error"),
|
||||
tr("Continuumatrice was not built with SSL support, therefore you cannot download updates "
|
||||
tr("Cockatrice was not built with SSL support, therefore you cannot download updates "
|
||||
"automatically! \nPlease visit the download page to update manually."));
|
||||
}
|
||||
|
||||
|
|
@ -161,7 +161,7 @@ void DlgUpdate::finishedUpdateCheck(bool needToUpdate, bool isCompatible, Releas
|
|||
// downloader themselves if there's a compatible build
|
||||
QMessageBox::information(
|
||||
window(), tr("No Update Available"),
|
||||
tr("Continuumatrice is up to date!") + "<br><br>" +
|
||||
tr("Cockatrice is up to date!") + "<br><br>" +
|
||||
tr("You are already running the latest version available in the chosen release channel.") + "<br>" +
|
||||
"<b>" + tr("Current version") + QString(":</b> %1<br>").arg(VERSION_STRING) + "<b>" +
|
||||
tr("Selected release channel") +
|
||||
|
|
@ -171,7 +171,7 @@ void DlgUpdate::finishedUpdateCheck(bool needToUpdate, bool isCompatible, Releas
|
|||
|
||||
publishDate = release->getPublishDate().toString(QLocale().dateFormat(QLocale::LongFormat));
|
||||
if (isCompatible) {
|
||||
const QString message = tr("A new version of Continuumatrice is available!") + "<br><br>" + "<b>" +
|
||||
const QString message = tr("A new version of Cockatrice is available!") + "<br><br>" + "<b>" +
|
||||
tr("New version") + QString(":</b> %1<br>").arg(release->getName()) + "<b>" +
|
||||
tr("Released") +
|
||||
QString(":</b> %1 (<a href=\"%2\">").arg(publishDate, release->getDescriptionUrl()) +
|
||||
|
|
@ -185,7 +185,7 @@ void DlgUpdate::finishedUpdateCheck(bool needToUpdate, bool isCompatible, Releas
|
|||
} else {
|
||||
QMessageBox::information(
|
||||
window(), tr("Update Available"),
|
||||
tr("A new version of Continuumatrice is available!") + "<br><br>" + "<b>" + tr("New version") +
|
||||
tr("A new version of Cockatrice is available!") + "<br><br>" + "<b>" + tr("New version") +
|
||||
QString(":</b> %1<br>").arg(release->getName()) + "<b>" + tr("Released") +
|
||||
QString(":</b> %1 (<a href=\"%2\">").arg(publishDate, release->getDescriptionUrl()) + tr("Changelog") +
|
||||
"</a>)<br><br>" +
|
||||
|
|
@ -235,7 +235,7 @@ void DlgUpdate::warnInstallerIsWaiting()
|
|||
// would therefore swallow the installer's one and only request for the rest of its wait.
|
||||
auto *notification = new QMessageBox(QMessageBox::Warning, tr("Update"),
|
||||
tr("The update installer is already running and waits about a "
|
||||
"minute for Continuumatrice to close. Continuumatrice is still busy, so "
|
||||
"minute for Cockatrice to close. Cockatrice is still busy, so "
|
||||
"save your work and close it before then. Otherwise the "
|
||||
"installer gives up and the update is cancelled."),
|
||||
QMessageBox::Ok, parentWidget());
|
||||
|
|
@ -293,9 +293,9 @@ void DlgUpdate::downloadSuccessful(const QUrl &filepath)
|
|||
process.setArguments({"/R", QString("/D=%1").arg(appDir)});
|
||||
#endif
|
||||
|
||||
// Try to open the installer. If it opens, quit Continuumatrice
|
||||
// Try to open the installer. If it opens, quit Cockatrice
|
||||
if (process.startDetached()) {
|
||||
qCInfo(DlgUpdateLog) << "Opened update installer successfully - closing Continuumatrice";
|
||||
qCInfo(DlgUpdateLog) << "Opened update installer successfully - closing Cockatrice";
|
||||
// Close the main window synchronously so file locks are released before the NSIS installer
|
||||
// (already launched) starts replacing files. This also flushes settings and shuts down the
|
||||
// tabs, but only when the close is actually accepted: MainWindow may veto it for a running
|
||||
|
|
@ -324,8 +324,8 @@ void DlgUpdate::downloadSuccessful(const QUrl &filepath)
|
|||
} else {
|
||||
setLabel(tr("Error"));
|
||||
QMessageBox::critical(this, tr("Update Error"),
|
||||
tr("Continuumatrice is unable to open the installer.") + "<br><br>" +
|
||||
tr("Try to update manually by closing Continuumatrice and running the installer.") +
|
||||
tr("Cockatrice is unable to open the installer.") + "<br><br>" +
|
||||
tr("Try to update manually by closing Cockatrice and running the installer.") +
|
||||
"<br>" + tr("Download location") + QString(": %1").arg(filepath.toLocalFile()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||