Merge Commit

This commit is contained in:
Medusa Slockbower 2025-06-11 15:34:19 -04:00
commit 09bfef8099
10 changed files with 241 additions and 66 deletions

View File

@ -71,6 +71,7 @@ add_library(fennec STATIC
include/fennec/math/detail/__fwd.h include/fennec/math/detail/__fwd.h
include/fennec/math/detail/__types.h include/fennec/math/detail/__types.h
include/fennec/math/detail/__vector_traits.h include/fennec/math/detail/__vector_traits.h
include/fennec/lang/lang.h
) )
add_subdirectory(metaprogramming) add_subdirectory(metaprogramming)
@ -100,9 +101,12 @@ add_subdirectory(test)
# DOXYGEN ============================================================================================================== # DOXYGEN ==============================================================================================================
# https://vicrucann.github.io/tutorials/quick-cmake-doxygen/ # https://vicrucann.github.io/tutorials/quick-cmake-doxygen/
file(COPY logo DESTINATION docs/logo)
find_package(Doxygen) find_package(Doxygen)
if(DOXYGEN_FOUND) if(DOXYGEN_FOUND)
set(DOXY_OUTPUT_DIR "${PROJECT_SOURCE_DIR}/docs")
get_filename_component(DOXYGEN_PROJECT_NAME ${PROJECT_SOURCE_DIR} NAME) # Set Doxy Project name to the name of the root dir get_filename_component(DOXYGEN_PROJECT_NAME ${PROJECT_SOURCE_DIR} NAME) # Set Doxy Project name to the name of the root dir
set(DOXYGEN_CONFIG_IN "${PROJECT_SOURCE_DIR}/doxy/Doxyfile.in") # Input config file with preprocessor arguments set(DOXYGEN_CONFIG_IN "${PROJECT_SOURCE_DIR}/doxy/Doxyfile.in") # Input config file with preprocessor arguments
set(DOXYGEN_CONFIG_OUT "${PROJECT_SOURCE_DIR}/doxy/Doxyfile") # Generated config file from input set(DOXYGEN_CONFIG_OUT "${PROJECT_SOURCE_DIR}/doxy/Doxyfile") # Generated config file from input
@ -110,10 +114,13 @@ if(DOXYGEN_FOUND)
configure_file(${DOXYGEN_CONFIG_IN} ${DOXYGEN_CONFIG_OUT} @ONLY) # Execute preprocessing step configure_file(${DOXYGEN_CONFIG_IN} ${DOXYGEN_CONFIG_OUT} @ONLY) # Execute preprocessing step
message("Doxygen Build Started.") message("Doxygen Build Started.")
# Target for building docs # Target for building docs
add_custom_target(fennecdocs ALL add_custom_target(fennecdocs ALL
COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_CONFIG_OUT} COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_CONFIG_OUT}
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/logo/raster.png
${DOXY_OUTPUT_DIR}/logo/raster.png
COMMENT "Generating Doxygen Documentation" COMMENT "Generating Doxygen Documentation"
VERBATIM) VERBATIM)

View File

@ -1,35 +1,44 @@
<br><br> <br><br>
<div style="width: 100%;"> <div style="width: 100%;">
<img src="./logo/raster.png" alt="drawing" width="128px" style="display: block; margin-left: auto; margin-right: auto;"/> <img src="./logo/raster.png" width="128px" style="display: block; margin-left: auto; margin-right: auto;"/>
<figcaption>
<h1 style="text-align: center; top:-1em;">fennec</h1> <h1 style="text-align: center; top:-1em;">fennec</h1>
<p style="text-align: center; top:-4em;">a free and open source game engine</p> <div style="text-align: center; top:-4em;">a free and open source game engine</div>
</figcaption>
</div> </div>
<br><br> <br><br>
## Table of Contents ## Table of Contents
1. [Introduction](#introduction) 1. [Introduction](#introduction)
2. [Building from Source](#building-from-source) 2. [Building from Source](#building-from-source)
1. [Building from Terminal](#building-from-terminal) 1. [Building from Terminal](#building-from-terminal)
2. [Building on Windows](#building-on-windows) 2. [Building on Windows](#building-on-windows)
3. [Running the Test Suite](#running-the-test-suite) 3. [Running the Test Suite](#running-the-test-suite)
3. [Usage](#usage)
4. [Contribution](#contribution)
<br> <br>
<br> <br>
<a id="introduction"></a>
## Introduction ## Introduction
fennec is designed to be a general purpose, educational game engine. fennec is designed to be a general purpose, educational game engine.
Interfacing with the API in C++ follows the [GNU Coding Standards](https://www.gnu.org/prep/standards/html_node/index.html). Interfacing with the API in C++ follows the [GNU Coding Standards](https://www.gnu.org/prep/standards/html_node/index.html).
Some main areas where the engine strays from the GNU standard includes the following: fennec may be used both through the provided editor application, or as a standalone
library link against your application. Some main areas where the engine strays from
the GNU standard includes the following:
- [Section 4.7, Standards for Graphical Interfaces](https://www.gnu.org/prep/standards/html_node/Graphical-Interfaces.html). - [Section 4.7, Standards for Graphical Interfaces](https://www.gnu.org/prep/standards/html_node/Graphical-Interfaces.html).
fennec provides an implementation for X11, however it does not use the GTK toolkit. fennec provides an implementation for X11, however it does not use the GTK toolkit.
- [Section 6.1, GNU Manuals](https://www.gnu.org/prep/standards/html_node/GNU-Manuals.html)
fennec does not use Texinfo and instead uses Doxygen. Otherwise, it follows the other standards of this section.
- [Section 7, The Release Process](https://www.gnu.org/prep/standards/html_node/Managing-Releases.html)
fennec follows most of the conventions in this section, however the build system used is CMake and not
Makefile. CMake, although overwhelming at first, is much more friendly to those who are learning build systems for the first time.
<br> <br>
@ -37,16 +46,16 @@ The C++ stdlib is reimplemented in the fennec engine.
There are a few reasons for this: There are a few reasons for this:
1. Standardize implementations across compilers 1. Standardize implementations across compilers
2. Set proper naming conventions, i.e. `std::vector`->`fennec::dynarray` 2. Set proper naming conventions, i.e. `std::vector` &rarr; `fennec::dynarray`
3. Optimize compilation times, binary size, and performance. 3. Optimize compilation times, binary size, and performance.
4. Inject debugging information when necessary. 4. Inject debugging information when necessary.
5. Expose functionality in a readable manner for those interested in learning the 5. Expose functionality in a readable manner for those interested in learning the
intricacies of the implementation. intricacies of the implementation.
<br> <br>
<a id="building-from-source"></a>
## Building from Source ## Building from Source
fennec uses the CMake build system. The CMake build script provides several fennec uses the CMake build system. The CMake build script provides several
@ -68,6 +77,7 @@ is also a viable IDE but involves some extra setup.
<br> <br>
<a id="building-from-terminal"></a>
### Building from Terminal ### Building from Terminal
`build.sh` provides profiles for building the main engine. Run `./build.sh --help` `build.sh` provides profiles for building the main engine. Run `./build.sh --help`
@ -80,6 +90,7 @@ for available generators](https://cmake.org/cmake/help/latest/manual/cmake-gener
<br> <br>
<a id="building-on-windows"></a>
### Building on Windows ### Building on Windows
The bash script can be run natively on Windows when WSL is enabled. You do not The bash script can be run natively on Windows when WSL is enabled. You do not
@ -123,6 +134,7 @@ cmake -G "Visual Studio 17 2022" -A x64
<br> <br>
<br> <br>
<a id="running-the-test-suite"></a>
## Running the Test Suite ## Running the Test Suite
`test.sh` provides profiles for building the test suite and executes them. `test.sh` provides profiles for building the test suite and executes them.
@ -130,4 +142,21 @@ cmake -G "Visual Studio 17 2022" -A x64
By default, it runs in debug mode and the first failed test will throw an assertion. By default, it runs in debug mode and the first failed test will throw an assertion.
Any tests that involve running as an application will spawn a subprocess with a window, Any tests that involve running as an application will spawn a subprocess with a window,
and give a short description of the behaviour in the terminal. It will then have you confirm and give a short description of the behaviour in the terminal. It will then have you confirm
whether the information displayed is correct. whether the information displayed is correct.
<br>
<br>
<a id="usage"></a>
## Usage
<br>
<br>
<a id="contribution"></a>
## Contribution
There are some principles to keep in mind when contributing to fennec.
1. You must follow the style guide provided by the [GNU Coding Standard](https://www.gnu.org/prep/standards/html_node/Writing-C.html).
2. Any changes must allow all projects to be forward compatible with newer engine verisons.

View File

@ -68,7 +68,7 @@ PROJECT_LOGO =
# entered, it will be relative to the location where doxygen was started. If # entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used. # left blank the current directory will be used.
OUTPUT_DIRECTORY = /home/medusa/Documents/Work/Personal/fennec/docs/ OUTPUT_DIRECTORY = /home/medusa/Documents/Work/Personal/fennec/docs
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format # sub-directories (in 2 levels) under the output directory of each output format
@ -944,7 +944,8 @@ WARN_LOGFILE =
# Note: If this tag is empty the current directory is searched. # Note: If this tag is empty the current directory is searched.
INPUT = "/home/medusa/Documents/Work/Personal/fennec/include/" \ INPUT = "/home/medusa/Documents/Work/Personal/fennec/include/" \
"/home/medusa/Documents/Work/Personal/fennec/source/" "/home/medusa/Documents/Work/Personal/fennec/source/" \
"/home/medusa/Documents/Work/Personal/fennec/README.md"
# This tag can be used to specify the character encoding of the source files # This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@ -1159,7 +1160,7 @@ FILTER_SOURCE_PATTERNS =
# (index.html). This can be useful if you have a project on for instance GitHub # (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output. # and want to reuse the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE = USE_MDFILE_AS_MAINPAGE = "/home/medusa/Documents/Work/Personal/fennec/README.md"
# The Fortran standard specifies that for fixed formatted Fortran code all # The Fortran standard specifies that for fixed formatted Fortran code all
# characters from position 72 are to be considered as comment. A common # characters from position 72 are to be considered as comment. A common

View File

@ -68,7 +68,7 @@ PROJECT_LOGO =
# entered, it will be relative to the location where doxygen was started. If # entered, it will be relative to the location where doxygen was started. If
# left blank the current directory will be used. # left blank the current directory will be used.
OUTPUT_DIRECTORY = @PROJECT_SOURCE_DIR@/docs/ OUTPUT_DIRECTORY = @DOXY_OUTPUT_DIR@
# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 # If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096
# sub-directories (in 2 levels) under the output directory of each output format # sub-directories (in 2 levels) under the output directory of each output format
@ -944,7 +944,8 @@ WARN_LOGFILE =
# Note: If this tag is empty the current directory is searched. # Note: If this tag is empty the current directory is searched.
INPUT = "@PROJECT_SOURCE_DIR@/include/" \ INPUT = "@PROJECT_SOURCE_DIR@/include/" \
"@PROJECT_SOURCE_DIR@/source/" "@PROJECT_SOURCE_DIR@/source/" \
"@PROJECT_SOURCE_DIR@/README.md"
# This tag can be used to specify the character encoding of the source files # This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
@ -1159,7 +1160,7 @@ FILTER_SOURCE_PATTERNS =
# (index.html). This can be useful if you have a project on for instance GitHub # (index.html). This can be useful if you have a project on for instance GitHub
# and want to reuse the introduction page also for the doxygen output. # and want to reuse the introduction page also for the doxygen output.
USE_MDFILE_AS_MAINPAGE = USE_MDFILE_AS_MAINPAGE = "@PROJECT_SOURCE_DIR@/README.md"
# The Fortran standard specifies that for fixed formatted Fortran code all # The Fortran standard specifies that for fixed formatted Fortran code all
# characters from position 72 are to be considered as comment. A common # characters from position 72 are to be considered as comment. A common

View File

@ -29,15 +29,21 @@
/// ///
/// ///
/// \mainpage fennec /// \page page_fennec_documentation Documentation
/// \anchor fennec
///
/// \include{doc} README.md
/// ///
/// \section page_documentation_contents Main Page
/// 1. \ref introduction "Introduction"
/// 2. \ref introduction "Building from Source"
/// 1. \ref building-from-source "Building from Source"
/// 2. \ref building-from-terminal "Building from Terminal"
/// 3. \ref running-the-test-suite "Running the Test Suite"
/// 3. \ref usage "Usage"
/// 4. \ref contribution "Contribution"
/// ///
/// \section Libraries /// \section Libraries
/// /// \anchor libraries
/// \subpage page_fennec_math /// - \subpage page_fennec_lang
/// - \subpage page_fennec_math
/// ///
/// \copyright Copyright © 2025 Medusa Slockbower ([GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html)) /// \copyright Copyright © 2025 Medusa Slockbower ([GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html))
/// ///

View File

@ -93,10 +93,10 @@
// Difficult and Inconsistent without intrinsics // Difficult and Inconsistent without intrinsics
#if __has_builtin(__is_constructible) #if __has_builtin(__is_constructible)
# define FENNEC_HAS_BUILTIN_CAN_CONSTRUCT 1 # define FENNEC_HAS_BUILTIN_IS_CONSTRUCTIBLE 1
# define FENNEC_BUILTIN_CAN_CONSTRUCT(type, ...) __is_constructible(type, __VA_ARGS__) # define FENNEC_BUILTIN_IS_CONSTRUCTIBLE(type, ...) __is_constructible(type, __VA_ARGS__)
#else #else
# define FENNEC_HAS_BUILTIN_CAN_CONSTRUCT 0 # define FENNEC_HAS_BUILTIN_IS_CONSTRUCTIBLE 0
#endif #endif

View File

@ -0,0 +1,41 @@
// =====================================================================================================================
// fennec, a free and open source game engine
// Copyright © 2025 Medusa Slockbower
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
// =====================================================================================================================
///
/// \file lang.h
/// \brief fennec C++ language library
///
///
/// \details
/// \author Medusa Slockbower
///
/// \copyright Copyright © 2025 Medusa Slockbower ([GPLv3](https://www.gnu.org/licenses/gpl-3.0.en.html))
///
///
#ifndef LANG_H
#define LANG_H
///
/// \page page_fennec_lang C++ Language Library
///
/// This library implements the parts of the C++ stdlib that relate to built-in types and metaprogramming.
///
///
#endif //LANG_H

View File

@ -208,14 +208,21 @@ template<typename T0, typename T1> using can_convert_v
= typename can_convert<T0, T1>::type; = typename can_convert<T0, T1>::type;
// fennec::is_constructible ============================================================================================ // fennec::is_constructible ===============================================================================================
///
/// \brief Check if `ClassT` can be constructed with `ArgsT,` i.e. `ClassT(ArgsT...)`.
/// This may be read as "is `ClassT` constructible with `ArgsT`"
/// \tparam ClassT The class type to test
/// \tparam ArgsT The arguments for the specific constructor
template<typename ClassT, typename...ArgsT> struct is_constructible
: bool_constant<FENNEC_BUILTIN_IS_CONSTRUCTIBLE(ClassT, ArgsT...)> {};
template<typename ClassT, typename...ArgsT> constexpr bool_t is_constructible_v
= is_constructible<ClassT, ArgsT...>{};
template<typename ClassT, typename...ArgsT> struct can_construct // fennec::
: bool_constant<FENNEC_BUILTIN_CAN_CONSTRUCT(ClassT, ArgsT...)> {};
template<typename ClassT, typename...ArgsT> constexpr bool_t can_construct_v
= can_construct<ClassT, ArgsT...>{};
// //

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 25 KiB

View File

@ -26,45 +26,128 @@
inkscape:pagecheckerboard="0" inkscape:pagecheckerboard="0"
inkscape:deskcolor="#505050" inkscape:deskcolor="#505050"
inkscape:document-units="px" inkscape:document-units="px"
inkscape:zoom="1.4142136" inkscape:zoom="0.70710678"
inkscape:cx="313.2483" inkscape:cx="7.0710678"
inkscape:cy="291.68155" inkscape:cy="224.15285"
inkscape:window-width="3440" inkscape:window-width="1920"
inkscape:window-height="1371" inkscape:window-height="1043"
inkscape:window-x="0" inkscape:window-x="0"
inkscape:window-y="0" inkscape:window-y="0"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:current-layer="layer1" /><defs inkscape:current-layer="layer1" /><defs
id="defs1" /><g id="defs1"><inkscape:path-effect
effect="mirror_symmetry"
start_point="256,0"
end_point="256,512"
center_point="256,256"
id="path-effect7"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="vertical"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" /><inkscape:path-effect
effect="mirror_symmetry"
start_point="256,0"
end_point="256,512"
center_point="256,256"
id="path-effect5"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="vertical"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" /><inkscape:path-effect
effect="mirror_symmetry"
start_point="256,0"
end_point="256,512"
center_point="256,256"
id="path-effect4"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="vertical"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" /><inkscape:path-effect
effect="mirror_symmetry"
start_point="256,0"
end_point="256,512"
center_point="256,256"
id="path-effect3"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="vertical"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" /><inkscape:path-effect
effect="mirror_symmetry"
start_point="256,0"
end_point="256,512"
center_point="256,256"
id="path-effect1"
is_visible="true"
lpeversion="1.2"
lpesatellites=""
mode="vertical"
discard_orig_path="false"
fuse_paths="false"
oposite_fuse="false"
split_items="false"
split_open="false"
link_styles="false" /></defs><g
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1"><path id="layer1"><path
style="fill:#ecc891;fill-opacity:1;stroke-width:1.16776" style="fill:#302825;fill-opacity:1"
d="m 222.19154,399.0475 0.43986,1.89206 1.60752,3.38161 6.12598,6.727 10.20652,4.60182 10.81077,1.82709 9.341,0.22611 14.13783,-2.96492 10.98115,-6.4368 4.9427,-10.80883 -1.20772,-15.04887 -9.5032,-18.99825 -8.89851,-11.62383 -7.8785,-5.31048 h -12.59159 l -8.84005,4.51085 -9.6954,12.56982 -9.71699,20.74007 z" d="M 135,16 C 64,16 16,64 16,135 c 0,80.66667 0,161.33333 0,242 0,71 48,119 119,119 80.66667,0 161.33333,0 242,0 71,0 119,-48 119,-119 0,-80.66667 0,-161.33333 0,-242 C 496,64 448,16 377,16 296.33333,16 215.66667,16 135,16 Z"
id="path16" id="path6"
sodipodi:nodetypes="ccccccccccccccccccc" /><g sodipodi:nodetypes="ccccccccc" /><path
id="g4" style="fill:#f3b431;fill-opacity:1"
transform="matrix(1.1676266,0,0,1.1678831,-29.151974,-24.864933)"><path d="m 256,417.99999 c 3.53237,-0.35937 23.18694,-0.66656 32.65624,-13.625 8.89472,-12.17214 36.16335,-10.90441 52.43041,-34.68715 16.9775,-24.82141 15.92065,-45.58511 39.54551,-57.64172 39.08378,-19.94585 46.07458,-120.06961 45.18607,-145.30757 -1.22004,-34.65532 -4.74855,-91.78894 -62.83341,-47.14388 C 294.96563,171.87544 278.50215,250.58532 256,252.24999 Z m 0,0 c -3.53237,-0.35937 -23.18694,-0.66656 -32.65624,-13.625 -8.89472,-12.17214 -36.16335,-10.90441 -52.43041,-34.68715 C 153.93585,344.86643 154.9927,324.10273 131.36784,312.04612 92.28406,292.10027 85.29326,191.97651 86.18177,166.73855 87.40181,132.08323 90.93032,74.94961 149.01518,119.59467 217.03437,171.87544 233.49785,250.58532 256,252.24999 Z"
style="fill:#f3b431" id="path1"
d="m 214.21,362.142 -0.95,-0.849 -10.873,-3.699 -10.873,-3.699 -5.127,-3.335 -5.127,-3.334 -4.65,-4.868 -4.65,-4.867 -3.526,-5.587 -3.527,-5.587 -4.006,-9.413 -4.006,-9.413 -0.632,-2.5 -0.633,-2.5 -2.185,-2.644 -2.185,-2.644 -8.95,-5.741 -8.951,-5.741 -5.204,-5.204 -5.204,-5.205 -2.946,-5.91 -2.947,-5.911 -2.62,-7 -2.621,-7 -2.532,-9.5 -2.532,-9.5 -1.984,-10.237 -1.984,-10.237 -1.582,-12.763 -1.5816,-12.763 -0.0464,-18.5 -0.0464,-18.5 1.1624,-6.5 1.163,-6.5 2.057,-6.317 2.057,-6.317 3.646,-3.829 3.646,-3.829 4.445,-1.195 4.444,-1.195 5.241,0.655 5.24,0.655 7.815,3.798 7.815,3.798 6,4.571 6,4.571 8.611,8.817 8.61,8.817 6.411,8 6.411,8 4.629,6.5 4.628,6.5 4.888,8 4.888,8 7.444,13.307 7.443,13.308 5.019,6.664 5.018,6.665 3.398,2.278 3.398,2.278 h 2.902 2.902 l 2.7,-1.418 2.7,-1.417 3.607,-3.833 3.607,-3.832 2.999,-4.5 2.999,-4.5 10.302,-17.993 10.303,-17.994 4.063,-6.006 4.062,-6.007 4.99,-6.5 4.991,-6.5 7.896,-9.275 7.897,-9.275 7.282,-6.352 7.283,-6.351 4.63,-3.186 4.63,-3.185 6.73,-3.155 6.729,-3.156 7,0.025 7,0.025 3,1.597 3,1.598 2.137,2.345 2.137,2.345 2.032,4.05 2.031,4.049 1.664,7.951 1.664,7.95 0.554,13.5 0.554,13.5 -1.184,13.5 -1.185,13.5 -1.485,10 -1.484,10 -2.563,11.452 -2.563,11.452 -2.956,9.048 -2.956,9.048 -3.568,7.421 -3.568,7.421 -4.631,4.992 -4.63,4.993 -9.5,6.218 -9.5,6.218 -2.087,2.369 -2.086,2.368 -3.288,8.5 -3.288,8.5 -3.896,7.575 -3.895,7.574 -4.73,5.861 -4.73,5.86 -6.182,4.225 -6.183,4.225 -11.944,3.916 -11.945,3.917 -0.517,-6.443 -0.517,-6.443 -4.07,-8.134 -4.069,-8.133 -3.811,-4.977 -3.81,-4.976 -3.374,-2.274 -3.374,-2.273 h -5.392 -5.391 l -3.786,1.931 -3.785,1.931 -4.152,5.382 -4.152,5.381 -4.161,8.88 -4.161,8.879 -0.112,6.3 -0.112,6.3 -0.05,0.008 -0.05,0.008 -0.95,-0.849 m 11.35,-44.351 1.2,-1.2 -0.01,-2.55 -0.01,-2.55 -2.416,-5.191 -2.417,-5.19 -4.092,-2.964 -4.092,-2.964 -4.953,-1.189 -4.952,-1.188 -4.131,0.698 -4.131,0.698 -3.049,2.725 -3.05,2.724 0.677,2.696 0.676,2.695 3.539,3.917 3.538,3.916 4.186,1.531 4.187,1.531 7.932,1.043 7.932,1.042 3.436,-0.23 m 53.902,-1.673 6.203,-0.988 3.664,-1.739 3.664,-1.738 2.883,-3.981 2.884,-3.981 v -2.782 -2.782 l -3.25,-2.318 -3.25,-2.318 -6.5,0.034 -6.5,0.033 -3.5,1.831 -3.5,1.83 -2.841,2.636 -2.842,2.636 -1.773,3.5 -1.773,3.5 -0.668,3.682 -0.668,3.682 1.623,0.909 1.624,0.908 4.159,-0.783 4.159,-0.784 6.202,-0.987 m -111.966,-47.654 5.235,-2.349 3.765,-2.78 3.764,-2.78 3.047,-2.532 3.047,-2.532 2.943,-2 2.942,-2 3.883,-3.921 3.883,-3.921 1.378,-3.297 1.377,-3.297 v -4.997 -4.997 l -1.55,-4.785 -1.551,-4.785 -0.92,-2 -0.921,-2 -2.431,-6.608 -2.43,-6.608 -2.93,-5.892 -2.93,-5.892 -4.812,-8.5 -4.812,-8.5 -7.815,-11.5 -7.815,-11.5 -7.134,-7.763 -7.134,-7.763 -5.878,-4.523 -5.877,-4.522 -4.28,-1.943 -4.28,-1.942 -4.661,-0.022 -4.661,-0.022 -2.55,3.031 -2.551,3.031 -1.191,3.719 -1.192,3.719 -0.44,16 -0.44,16 1.149,11 1.148,11 2.401,13.5 2.4,13.5 1.469,6.638 1.468,6.639 2.177,7.361 2.178,7.362 3.309,7.197 3.308,7.197 4.808,5.14 4.808,5.14 2.858,1.478 2.858,1.478 4.174,0.847 4.173,0.846 4,-0.501 4,-0.501 m 183.477,-2.31 4.99,-2.528 4.142,-5.24 4.141,-5.239 2.957,-6.455 2.956,-6.454 3.311,-11.548 3.311,-11.547 1.7,-9.5 1.699,-9.5 1.308,-8.5 1.308,-8.5 1.248,-12.244 1.247,-12.243 -0.583,-11.757 -0.582,-11.756 -1.639,-5.37 -1.639,-5.37 -2.381,-2.38 -2.38,-2.38 -4.295,0.01 -4.296,0.01 -5.459,2.541 -5.459,2.541 -4.041,3.32 -4.041,3.32 -4.88,4.879 -4.88,4.879 -5.799,7.085 -5.799,7.084 -7.109,10.916 -7.11,10.915 -5.372,10.5 -5.372,10.5 -4.215,10.5 -4.214,10.5 -1.363,5 -1.363,5 0.01,3.5 0.01,3.5 1.827,4 1.827,4 4.401,4.027 4.401,4.026 8,6.055 8,6.055 4.647,2.703 4.647,2.703 4.353,0.906 4.353,0.906 4.244,-0.42 4.244,-0.421 4.989,-2.529" sodipodi:nodetypes="cssssscc"
id="path5" inkscape:path-effect="#path-effect1"
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" /><path inkscape:original-d="m 256,417.99999 c 3.53237,-0.35937 23.18694,-0.66656 32.65624,-13.625 8.89472,-12.17214 36.16335,-10.90441 52.43041,-34.68715 16.9775,-24.82141 15.92065,-45.58511 39.54551,-57.64172 39.08378,-19.94585 46.07458,-120.06961 45.18607,-145.30757 -1.22004,-34.65532 -4.74855,-91.78894 -62.83341,-47.14388 C 294.96563,171.87544 278.50215,250.58532 256,252.24999 Z" /><path
style="fill:#302825" style="fill:#000000;fill-opacity:0"
d="m 38.669874,343.2406 v -205.5 c 0,-64.218747 38.539714,-102.749997 102.772576,-102.749998 h 205.54514 c 64.23285,10e-7 102.77257,38.531251 102.7726,102.749998 v 205.5 c 0,64.21875 -38.53971,102.75 -102.7726,102.75 H 141.44245 c -64.232862,0 -102.772576,-38.53125 -102.772576,-102.75 z m 215.644396,34.439 6.05408,-1.26932 4.70234,-2.75576 4.70234,-2.75575 4.85015,-9.57131 11.55776,-3.70496 11.55777,-3.70496 6.26074,-4.27833 6.26074,-4.27832 4.72973,-5.86039 4.72974,-5.86039 3.89579,-7.57475 3.89578,-7.57476 3.28767,-8.5 3.28767,-8.5 2.08681,-2.36823 2.08681,-2.36824 9.5,-6.21818 9.5,-6.21819 4.63022,-4.99269 4.63023,-4.99269 3.56838,-7.42089 3.56837,-7.42089 2.95592,-9.048 2.95592,-9.048 2.56263,-11.452 2.56263,-11.452 1.48484,-10 1.48484,-10 1.18444,-13.5 1.18444,-13.5 -0.55378,-13.5 -0.55379,-13.5 -1.66446,-7.9502 -1.66446,-7.95021 -2.03104,-4.04979 -2.03104,-4.0498 -2.13715,-2.34501 -2.13714,-2.34502 -3,-1.59754 -3,-1.59754 -7,-0.0247 -7,-0.0247 -6.72956,3.15517 -6.72956,3.15517 -4.63001,3.18554 -4.63002,3.18553 -7.28271,6.3516 -7.28271,6.35159 -7.89653,9.27498 -7.89653,9.27497 -4.9902,6.5 -4.99021,6.5 -4.06264,6.00673 -4.06265,6.00673 -10.3024,17.99327 -10.3024,17.99327 -2.99908,4.5 -2.99907,4.5 -3.60686,3.83242 -3.60686,3.83242 -2.70034,1.41758 -2.70034,1.41758 h -2.90178 -2.90178 l -3.39788,-2.27813 -3.39788,-2.27813 -5.0186,-6.66431 -5.01859,-6.66432 -7.4435,-13.30755 -7.44349,-13.30756 -4.88782,-8 -4.88782,-8 -4.62853,-6.5 -4.62852,-6.5 -6.41106,-8 -6.41107,-8 -8.6105,-8.81716 -8.6105,-8.81717 -6,-4.57056 -6,-4.57056 -7.81514,-3.79846 -7.81513,-3.79845 -5.24036,-0.65474 -5.24035,-0.65474 -4.44451,1.19482 -4.44451,1.19482 -3.64616,3.82904 -3.64615,3.82905 -2.05676,6.31705 -2.05675,6.31706 -1.1629,6.5 -1.162903,6.5 0.04643,18.5 0.04643,18.5 1.581683,12.76302 1.58168,12.76302 1.98409,10.23698 1.98408,10.23698 2.53212,9.5 2.53212,9.5 2.62048,7 2.62048,7 2.94656,5.91077 2.94656,5.91077 5.20407,5.20407 5.20407,5.20408 8.95038,5.74141 8.95038,5.74141 2.18498,2.64375 2.18499,2.64374 0.63266,2.5 0.63266,2.5 4.006,9.41317 4.00601,9.41317 3.52645,5.58683 3.52645,5.58683 4.6499,4.86738 4.6499,4.86738 5.14188,3.34419 5.14189,3.34419 11.68957,3.89294 10.02667,3.48665 2.00001,1.68169 0.37671,1.62008 1.37674,2.8955 2.62326,2.88 2.62327,2.88 4.37062,1.97016 4.37063,1.97015 4.62937,0.78223 4.62938,0.78222 4,0.0968 4,0.0968 z" d="m 256,417.99999 32.65624,-13.625 L 256,350.19462 Z"
id="path4" id="path2" /><path
sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" /></g><path style="fill:#f0d09a;fill-opacity:1"
style="fill:#191104;fill-opacity:1;stroke-width:1.16776" d="m 256,417.99999 c 4.21769,-0.0397 21.62451,-0.37383 31.41828,-12.05012 C 296.48059,395.14564 281.4705,349.22496 256,349.22496 Z m 0,0 c -4.21769,-0.0397 -21.62451,-0.37383 -31.41828,-12.05012 C 215.51941,395.14564 230.5295,349.22496 256,349.22496 Z"
d="m 241.54011,399.64959 3.09336,5.58232 5.58117,3.09411 13.60733,0.0826 6.82614,-6.82761 v -8.14723 l -7.07452,-5.95411 -7.73281,-1.451 -9.58761,2.58224 -4.79572,6.09812 z" id="path3"
id="path23" /><path sodipodi:nodetypes="cscc"
style="fill:#f0d09a;fill-opacity:1;stroke-width:1.16776" inkscape:path-effect="#path-effect3"
d="m 400.8078,244.96043 3.86601,-13.48555 5.49603,-32.11678 2.98445,-24.22656 1.45602,-14.2984 -1.36028,-27.46043 -3.82748,-12.54307 -5.55907,-5.55912 -10.03107,0.0234 -12.74815,5.93519 -9.43676,7.75474 -11.39604,11.3962 -13.54213,16.54774 -16.60248,25.49606 -12.54497,24.52553 -9.84193,24.52554 -3.18295,11.67884 0.0233,8.17518 4.2665,9.34308 10.27746,9.40496 18.68202,14.14306 10.85193,6.31358 10.16535,2.11618 9.91082,-0.98218 c 0,0 11.65175,-5.90598 11.65175,-5.90598 l 9.67143,-12.23824 6.90419,-15.07621 z" inkscape:original-d="m 256,417.99999 c 4.21769,-0.0397 21.62451,-0.37383 31.41828,-12.05012 C 296.48059,395.14564 281.4705,349.22496 256,349.22496 Z" /><path
id="path25" /><path style="fill:#191104;fill-opacity:1"
style="fill:#f0d09a;fill-opacity:1;stroke-width:1.16776" d="m 256,412.2693 c 9.40509,0 15.25,-4.82452 15.25,-9.0193 0,-6.74193 -6.2758,-11.59375 -15.25,-11.59375 z m 0,0 c -9.40509,0 -15.25,-4.82452 -15.25,-9.0193 0,-6.74193 6.2758,-11.59375 15.25,-11.59375 z"
d="m 188.43989,273.51869 6.87148,-4.67155 9.06779,-9.15853 3.21681,-7.70103 v -11.67182 l -3.62081,-11.17664 -2.1496,-4.67154 -5.67583,-15.43473 -6.84229,-13.76233 -11.23723,-19.85402 -18.25001,-26.86131 -16.6597,-18.13255 -13.72545,-10.56351 -9.99488,-4.53723 -10.88461,-0.0514 -5.95606,7.07972 -2.782458,8.68671 -1.02751,37.37225 2.682038,25.69344 5.60578,31.53283 3.42931,15.50598 5.08502,17.19474 7.72617,16.81052 11.22789,12.00583 6.67417,3.45227 9.74619,1.97723 9.341,-1.17023 12.22621,-5.48554 8.79107,-6.49343 z" id="path4"
id="path26" /><path sodipodi:nodetypes="cscc"
style="fill:#191104;fill-opacity:1;stroke-width:1.16776" inkscape:path-effect="#path-effect4"
d="m 234.21786,346.27779 1.40115,-1.40146 -0.0233,-5.9562 -5.64314,-12.12379 -9.55586,-6.92321 -11.56534,-2.77606 -9.64692,1.63037 -7.12136,6.36378 1.5798,6.29607 8.26329,9.14803 9.77652,3.57605 18.52325,2.43504 z" inkscape:original-d="m 256,412.2693 c 9.40509,0 15.25,-4.82452 15.25,-9.0193 0,-6.74193 -6.2758,-11.59375 -15.25,-11.59375 z" /><path
id="path27" /><path style="fill:#191104;fill-opacity:1"
style="fill:#191104;fill-opacity:1;stroke-width:1.16776" d="m 278.08673,348.09736 c 4.97656,4.83342 18.35637,-1.23578 33.45026,-5.42982 15.09389,-4.19404 14.04862,-21.27854 8.91416,-25.56416 -5.13446,-4.28562 -22.59991,0.34448 -30.37526,6.39537 -7.77534,6.05089 -16.96572,19.76519 -11.98916,24.59861 z m -44.17346,0 c -4.97656,4.83342 -18.35637,-1.23578 -33.45026,-5.42982 -15.09389,-4.19404 -14.04862,-21.27854 -8.91416,-25.56416 5.13446,-4.28562 22.59991,0.34448 30.37526,6.39537 7.77534,6.05089 16.96572,19.76519 11.98916,24.59861 z"
d="m 276.41005,345.18466 3.79128,2.12204 24.19672,-4.13664 8.55636,-4.06072 6.73371,-9.2987 v -6.49809 l -7.58957,-5.4143 -15.17913,0.0783 -8.17341,4.27562 -6.63561,6.15708 -4.14041,8.17519 z" id="path5"
id="path28" /></g></svg> sodipodi:nodetypes="zzzzz"
inkscape:path-effect="#path-effect5"
inkscape:original-d="m 278.08673,348.09736 c 4.97656,4.83342 18.35637,-1.23578 33.45026,-5.42982 15.09389,-4.19404 14.04862,-21.27854 8.91416,-25.56416 -5.13446,-4.28562 -22.59991,0.34448 -30.37526,6.39537 -7.77534,6.05089 -16.96572,19.76519 -11.98916,24.59861 z" /><path
style="fill:#f0d09a;fill-opacity:1"
d="m 369.08892,290.91378 c 39.39335,-17.04997 51.4467,-119.31361 44.37616,-144.82947 -7.07054,-25.51586 -22.35159,-33.48702 -43.43377,-14.74874 -21.08218,18.73828 -78.78013,82.47757 -72.91252,113.02839 3.96317,20.63505 47.75485,57.03052 71.97013,46.54982 z m -226.17784,0 C 103.51773,273.86381 91.46438,171.60017 98.53492,146.08431 c 7.07054,-25.51586 22.35159,-33.48702 43.43377,-14.74874 21.08218,18.73828 78.78013,82.47757 72.91252,113.02839 -3.96317,20.63505 -47.75485,57.03052 -71.97013,46.54982 z"
id="path7"
sodipodi:nodetypes="sssss"
inkscape:path-effect="#path-effect7"
inkscape:original-d="m 369.08892,290.91378 c 39.39335,-17.04997 51.4467,-119.31361 44.37616,-144.82947 -7.07054,-25.51586 -22.35159,-33.48702 -43.43377,-14.74874 -21.08218,18.73828 -78.78013,82.47757 -72.91252,113.02839 3.96317,20.63505 47.75485,57.03052 71.97013,46.54982 z" /></g></svg>

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB