PageSourceSearch

https://castle-engine.io/wp/

html castle-engine.io collected 2026-09-24 10:19:10 UTC 256,570 bytes, 2,248 lines download raw bytes

1<!DOCTYPE html>
2<html lang="en-US" class="no-js no-svg">
3
4<head>
5
6<meta charset="UTF-8">
7<meta name="viewport" content="width=device-width, initial-scale=1">
8<meta name="Author" content="Michalis Kamburelis and Castle Game Engine Developers">
9
10<meta name="publish_date" property="og:publish_date" content="2026-09-05T18:32:37+00:00">
11<link rel="Start" href="/" type="text/html" title="Castle Game Engine">
12<link rel="profile" href="http://gmpg.org/xfn/11">
12<script>
13(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);
14//# sourceURL=twentyseventeen_javascript_detection
15</script>
15
16<title>Castle Game Engine &#8211; Open-Source 3D and 2D Game Engine</title>
17<meta name='robots' content='max-image-preview:large' />
18<link rel='dns-prefetch' href='//secure.gravatar.com' />
19<link rel='dns-prefetch' href='//jetpack.wordpress.com' />
20<link rel='dns-prefetch' href='//s0.wp.com' />
21<link rel='dns-prefetch' href='//public-api.wordpress.com' />
22<link rel='dns-prefetch' href='//widgets.wp.com' />
23<link rel='dns-prefetch' href='//0.gravatar.com' />
24<link rel='dns-prefetch' href='//1.gravatar.com' />
25<link rel='dns-prefetch' href='//2.gravatar.com' />
26<link rel='preconnect' href='//c0.wp.com' />
27<link rel="alternate" type="application/rss+xml" title="Castle Game Engine &raquo; Feed" href="https://castle-engine.io/wp/feed/" />
28<link rel="alternate" type="application/rss+xml" title="Castle Game Engine &raquo; Comments Feed" href="https://castle-engine.io/wp/comments/feed/" />
29<style id="wp-img-auto-sizes-contain-inline-css">
30img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
31/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
32</style>
33<link rel="stylesheet" href="https://castle-engine.io/wp/wp-content/cache/minify/be37a.css" media="all" />
34
35
36
37<style id="wp-emoji-styles-inline-css">
38
39	img.wp-smiley, img.emoji {
40		display: inline !important;
41		border: none !important;
42		box-shadow: none !important;
43		height: 1em !important;
44		width: 1em !important;
45		margin: 0 0.07em !important;
46		vertical-align: -0.1em !important;
47		background: none !important;
48		padding: 0 !important;
49	}
50/*# sourceURL=wp-emoji-styles-inline-css */
51</style>
52<style id="wp-block-library-inline-css">
53:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;
53--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
54
55/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css */
56</style>
57<style id="wp-block-social-links-inline-css">
58.wp-block-social-links{background:none;box-sizing:border-box;margin-left:0;padding-left:0;padding-right:0;text-indent:0}.wp-block-social-links .wp-social-link a,.wp-block-social-links .wp-social-link a:hover{border-bottom:0;box-shadow:none;text-decoration:none}.wp-block-social-links .wp-social-link svg{height:1em;width:1em}.wp-block-social-links .wp-social-link span:not(.screen-reader-text){font-size:.65em;margin-left:.5em;margin-right:.5em}.wp-block-social-links.has-small-icon-size{font-size:16px}.wp-block-social-links,.wp-block-social-links.has-normal-icon-size{font-size:24px}.wp-block-social-links.has-large-icon-size{font-size:36px}.wp-block-social-links.has-huge-icon-size{font-size:48px}.wp-block-social-links.aligncenter{display:flex;justify-content:center}.wp-block-social-links.alignright{justify-content:flex-end}.wp-block-social-link{border-radius:9999px;display:block}@media not (prefers-reduced-motion){.wp-block-social-link{transition:transform .1s ease}}.wp-block-social-link{height:auto}.wp-block-social-link a{align-items:center;display:flex;line-height:0}.wp-block-social-link:hover{transform:scale(1.1)}.wp-block-social-links .wp-block-social-link.wp-social-link{display:inline-block;margin:0;padding:0}.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor svg,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:active,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:hover,.wp-block-social-links .wp-block-social-link.wp-social-link .wp-block-social-link-anchor:visited{fill:currentColor;color:currentColor}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link{background-color:#f0f0f0;color:#444}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-amazon{background-color:#f90;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bandcamp{background-color:#1ea0c3;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-behance{background-color:#0757fe;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-bluesky{background-color:#0a7aff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-codepen{background-color:#1e1f26;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-deviantart{background-color:#02e49b;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-discord{background-color:#5865f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dribbble{background-color:#e94c89;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-dropbox{background-color:#4280ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-etsy{background-color:#f45800;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-facebook{background-color:#0866ff;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-fivehundredpx{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-flickr{background-color:#0461dd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-foursquare{background-color:#e65678;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-github{background-color:#24292d;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-goodreads{background-color:#eceadd;color:#382110}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-google{background-color:#ea4434;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-gravatar{background-color:#1d4fc4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-instagram{background-color:#f00075;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-lastfm{background-color:#e21b24;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-linkedin{background-color:#0d66c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-mastodon{background-color:#3288d4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-medium{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-meetup{background-color:#f6405f;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-patreon{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pinterest{background-color:#e60122;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-pocket{background-color:#ef4155;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-reddit{background-color:#ff4500;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-skype{background-color:#0478d7;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-snapchat{stroke:#000;background-color:#fefc00;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-soundcloud{background-color:#ff5600;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-spotify{background-color:#1bd760;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-telegram{background-color:#2aabee;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-threads{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tiktok{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-tumblr{background-color:#011835;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitch{background-color:#6440a4;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-twitter{background-color:#1da1f2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vimeo{background-color:#1eb7ea;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-vk{background-color:#4680c2;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-wordpress{background-color:#3499cd;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-whatsapp{background-color:#25d366;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-x{background-color:#000;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-yelp{background-color:#d32422;color:#fff}:where(.wp-block-social-links:not(.is-style-logos-only)) .wp-social-link-youtube{background-color:red;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link{background:none}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link svg{height:1.25em;width:1.25em}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-amazon{color:#f90}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bandcamp{color:#1ea0c3}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-behance{color:#0757fe}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-bluesky{color:#0a7aff}
58:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-codepen{color:#1e1f26}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-deviantart{color:#02e49b}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-discord{color:#5865f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dribbble{color:#e94c89}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-dropbox{color:#4280ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-etsy{color:#f45800}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-facebook{color:#0866ff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-fivehundredpx{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-flickr{color:#0461dd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-foursquare{color:#e65678}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-github{color:#24292d}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-goodreads{color:#382110}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-google{color:#ea4434}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-gravatar{color:#1d4fc4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-instagram{color:#f00075}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-lastfm{color:#e21b24}
58:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-linkedin{color:#0d66c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-mastodon{color:#3288d4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-medium{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-meetup{color:#f6405f}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-patreon{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pinterest{color:#e60122}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-pocket{color:#ef4155}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-reddit{color:#ff4500}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-skype{color:#0478d7}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-snapchat{stroke:#000;color:#fff}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-soundcloud{color:#ff5600}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-spotify{color:#1bd760}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-telegram{color:#2aabee}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-threads{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tiktok{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-tumblr{color:#011835}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitch{color:#6440a4}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-twitter{color:#1da1f2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vimeo{color:#1eb7ea}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-vk{color:#4680c2}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-whatsapp{color:#25d366}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-wordpress{color:#3499cd}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-x{color:#000}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-yelp{color:#d32422}:where(.wp-block-social-links.is-style-logos-only) .wp-social-link-youtube{color:red}.wp-block-social-links.is-style-pill-shape .wp-social-link{width:auto}:root :where(.wp-block-social-links .wp-social-link a){padding:.25em}:root :where(.wp-block-social-links.is-style-logos-only .wp-social-link a){padding:0}:root :where(.wp-block-social-links.is-style-pill-shape .wp-social-link a){padding-left:.6666666667em;padding-right:.6666666667em}.wp-block-social-links:not(.has-icon-color):not(.has-icon-background-color) .wp-social-link-snapchat .wp-block-social-link-label{color:#000}
59/*# sourceURL=https://c0.wp.com/c/7.1.2/wp-includes/blocks/social-links/style.min.css */
60</style>
61
62<style id="classic-theme-styles-inline-css">
63/*! This file is auto-generated */
64.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
65/*# sourceURL=/wp-includes/css/classic-themes.min.css */
66</style>
67
68<style id="global-styles-inline-css">
69:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,
690) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}
69.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
70/*# sourceURL=global-styles-inline-css */
71</style>
72
73<style id="jetpack-stats-inline-css">
74img#wpstats{display:none}
75/*# sourceURL=jetpack-stats-inline-css */
76</style>
77<link rel="stylesheet" href="https://castle-engine.io/wp/wp-content/cache/minify/9e858.css" media="all" />
78
79
80
81
82<style id="jetpack_likes-inline-css">
83#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{display:inline-block;font-size:9pt;font-weight:700;line-height:1.2;margin:0 0 1em}div.sharedaddy h3.sd-title:before{border-top:1px solid #dcdcde;content:"";display:block;margin-bottom:1em;min-width:30px;width:100%}div.jetpack-likes-widget-wrapper{min-height:50px;position:relative;width:100%}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-comment-likes-widget-wrapper{min-height:31px;position:relative;width:100%}div.jetpack-comment-likes-widget-wrapper iframe{margin-bottom:0}#likes-other-gravatars{background-color:#fff;border:1px solid #dcdcde;border-radius:4px;box-shadow:none;display:none;height:auto;max-height:240px;min-width:220px;overflow:auto;padding:9px 12px 10px;position:absolute;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#101517;font-size:12px;font-weight:500;padding-bottom:8px}#likes-other-gravatars :is(li,ul){list-style-type:none;margin:0;padding:0;text-indent:0}#likes-other-gravatars li:before{content:""}#likes-other-gravatars ul.wpl-avatars{display:block;max-height:190px;overflow:auto}#likes-other-gravatars ul.wpl-avatars li{float:none;height:28px;margin:0 0 4px;width:196px}#likes-other-gravatars ul.wpl-avatars li a{align-items:center;border-bottom:none!important;display:flex;gap:8px;margin:0 2px 0 0;text-decoration:none}#likes-other-gravatars ul.wpl-avatars li a span{color:#2c3338;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#likes-other-gravatars ul.wpl-avatars li a img{background:none;border:none;border-radius:50%;box-sizing:border-box;margin:0!important;padding:1px!important;position:static}div.sd-box{border-top:1px solid #00000021}.jetpack-likes-widget-loaded iframe,.jetpack-likes-widget-loading .likes-widget-placeholder,.jetpack-likes-widget-unloaded .likes-widget-placeholder{display:block}.jetpack-likes-widget-loaded .likes-widget-placeholder,.jetpack-likes-widget-loading iframe,.jetpack-likes-widget-unloaded iframe{display:none}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{border-width:0;margin:0}.comment-likes-widget-placeholder,.post-likes-widget-placeholder{border-width:0;margin:0;position:relative}.comment-likes-widget-placeholder{display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;height:18px;position:absolute}.comment-likes-widget-placeholder:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath fill='%232ea2cc' d='m12 2 2.582 6.953L22 9.257l-5.822 4.602L18.18 21 12 16.89 5.82 21l2.002-7.14L2 9.256l7.418-.304'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:16px 16px;color:#2ea2cc;content:"";display:inline-block;height:16px;padding-right:5px;position:relative;top:3px;width:16px}.post-likes-widget-placeholder .button{display:none}:is(.comment-likes-widget-placeholder,.post-likes-widget-placeholder) .loading{color:#999;font-size:12px}.comment-likes-widget-placeholder .loading{align-self:center;color:#4e4e4e;margin-top:4px;padding-left:5px}
83div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{float:none;position:absolute;top:0;width:100%}.comment-likes-widget{width:100%}.cs-rating,.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}@media print{.jetpack-likes-widget-wrapper{display:none}}
84/*# sourceURL=https://castle-engine.io/wp/wp-content/plugins/jetpack/_inc/build/likes/style.min.css */
85</style>
86<style id="jetpack-subscriptions-inline-css">
87#subscribe-email input{width:95%}.comment-subscription-form{margin-bottom:1em}.comment-subscription-form .subscribe-label{display:inline!important}.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;overflow-wrap:normal!important;padding:0;position:absolute!important;width:1px}
88/*# sourceURL=https://castle-engine.io/wp/wp-content/plugins/jetpack/_inc/build/subscriptions/subscriptions.min.css */
89</style>
90<link rel='stylesheet' id='sharedaddy-css' href='https://c0.wp.com/p/jetpack/16.2/modules/sharedaddy/sharing.css' media='all' />
91<link rel='stylesheet' id='social-logos-css' href='https://c0.wp.com/p/jetpack/16.2/_inc/build/social-logos/social-logos.css' media='all' />
92<script id="jquery-core-js" src="https://c0.wp.com/c/7.1.2/wp-includes/js/jquery/jquery.min.js"></script>
vendor: 1 bytes, line 92
92
93<script id="jquery-migrate-js" src="https://c0.wp.com/c/7.1.2/wp-includes/js/jquery/jquery-migrate.min.js"></script>
vendor: 1 bytes, line 93
93
94<script id="urvanov_syntax_highlighter_js-js-extra">
95var UrvanovSyntaxHighlighterSyntaxSettings = {"version":"2.9.1","is_admin":"0","ajaxurl":"https://castle-engine.io/wp/wp-admin/admin-ajax.php","prefix":"urvanov-syntax-highlighter-","setting":"urvanov-syntax-highlighter-setting","selected":"urvanov-syntax-highlighter-setting-selected","changed":"urvanov-syntax-highlighter-setting-changed","special":"urvanov-syntax-highlighter-setting-special","orig_value":"data-orig-value","debug":""};
96var UrvanovSyntaxHighlighterSyntaxStrings = {"copy":"Copied to the clipboard","minimize":"Click To Expand Code"};
97//# sourceURL=urvanov_syntax_highlighter_js-js-extra
98</script>
vendor: 1 bytes, line 98
98
99<script src="https://castle-engine.io/wp/wp-content/cache/minify/4a408.js"></script>
99
100
101<script id="twentyseventeen-global-js-extra">
102var twentyseventeenScreenReaderText = {"quote":"\u003Csvg class=\"icon icon-quote-right\" aria-hidden=\"true\" role=\"img\"\u003E \u003Cuse href=\"#icon-quote-right\" xlink:href=\"#icon-quote-right\"\u003E\u003C/use\u003E \u003C/svg\u003E"};
103//# sourceURL=twentyseventeen-global-js-extra
104</script>
104
105
106<link rel="https://api.w.org/" href="https://castle-engine.io/wp/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://castle-engine.io/wp/xmlrpc.php?rsd" />
107<meta name="generator" content="WordPress 7.1.2" />
108<link rel='shortlink' href='https://wp.me/9IgYW' />
109
110<!-- Jetpack Open Graph Tags -->
111<meta property="og:type" content="website" />
112<meta property="og:title" content="Castle Game Engine" />
113<meta property="og:description" content="Open-Source 3D and 2D Game Engine" />
114<meta property="og:url" content="https://castle-engine.io/wp/" />
115<meta property="og:site_name" content="Castle Game Engine" />
116<meta property="og:image" content="https://castle-engine.io/wp/wp-content/uploads/2018/03/cropped-DefaultIconSquare.png" />
117<meta property="og:image:width" content="512" />
118<meta property="og:image:height" content="512" />
119<meta property="og:image:alt" content="" />
120<meta property="og:locale" content="en_US" />
121<meta name="twitter:site" content="@castleengine" />
122
123<!-- End Jetpack Open Graph Tags -->
124<link rel="icon" href="https://castle-engine.io/wp/wp-content/uploads/2018/03/cropped-DefaultIconSquare-32x32.png" sizes="32x32" />
125<link rel="icon" href="https://castle-engine.io/wp/wp-content/uploads/2018/03/cropped-DefaultIconSquare-192x192.png" sizes="192x192" />
126<link rel="apple-touch-icon" href="https://castle-engine.io/wp/wp-content/uploads/2018/03/cropped-DefaultIconSquare-180x180.png" />
127<meta name="msapplication-TileImage" content="https://castle-engine.io/wp/wp-content/uploads/2018/03/cropped-DefaultIconSquare-270x270.png" />
128
129<!-- Bootstrap -->
130<link href="https://castle-engine.io/castle-engine-website-base/node_modules/bootstrap/dist/css/bootstrap.min.css" rel="stylesheet">
131
132<!-- Bootstrap icons, https://icons.getbootstrap.com/ -->
133<link href="https://castle-engine.io/castle-engine-website-base/node_modules/bootstrap-icons/font/bootstrap-icons.min.css" rel="stylesheet">
134
135<!-- Colorbox -->
136<link href="https://castle-engine.io/castle-engine-website-base/node_modules/jquery-colorbox/example3/colorbox.css" type="text/css" rel="stylesheet">
137
138<!-- slick carousel https://github.com/kenwheeler/slick/ -->
139<link rel="stylesheet" type="text/css" href="https://castle-engine.io/castle-engine-website-base/node_modules/slick-carousel/slick/slick.css">
140<link rel="stylesheet" type="text/css" href="https://castle-engine.io/castle-engine-website-base/node_modules/slick-carousel/slick/slick-theme.css">
141
142<!-- Preload main slideshow image for better LCP on main page -->
143
144  <link rel="alternate" type="application/rss+xml"
145    title="Castle Game Engine - News Feed"
146    href="https://castle-engine.io/news_feed.php">
147
148  <!--
149    Add Inter font, https://developers.google.com/fonts/docs/getting_started .
150    Add &display=swap to render text ASAP, see https://web.dev/font-display/?utm_source=lighthouse&utm_medium=lr
151  -->
152  <!--link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Inter&display=swap"-->
153
154  <link type="text/css" rel="stylesheet" media="all" href="https://castle-engine.io/castle-engine-website-base/castle-engine.css?version=58">
155  <link type="text/css" rel="stylesheet" media="all" href="https://castle-engine.io/castle-engine-website-base/castle-asciidoctor.css?version=58">
156    
156<script type="application/ld+json">
157  {
158    "@context": "https://schema.org",
159    "@type": "SoftwareApplication",
160    "name": "Castle Game Engine",
161    "applicationCategory": "GameEngine",
162    "operatingSystem": "Windows, Linux, macOS, Android, iOS, Nintendo Switch, Web",
163    "author": {
164      "@type": "Organization",
165      "name": "Castle Game Engine Developers",
166      "url": "https://castle-engine.io/",
167      "logo": "https://castle-engine.io/images/castle_game_engine_icon.png"
168    },
169    "description": "Free open-source 3D and 2D game engine. Cross-platform, for desktops, mobile, console, web. Comfortable visual editor. Powerful modern Object Pascal API.",
170    "url": "https://castle-engine.io/",
171    "image": "https://castle-engine.io/images/combined_cge_logo_game.png",
172    "sameAs": [
173      "https://github.com/castle-engine/castle-engine"
174    ]
175  }
176  </script>
176
177  
178</head>
179
180<body class="home blog wp-embed-responsive wp-theme-twentyseventeen wp-child-theme-cge group-blog hfeed has-header-image has-sidebar colors-light">
181
182
183  <nav class="navbar navbar-expand-lg bg-body-tertiary " data-bs-theme="dark">
184    <div class="container-fluid">
185      <a class="navbar-brand" href="/">
186        <img alt="Castle Game Engine Logo" class="d-inline-block" src="https://castle-engine.io/images/castle_game_engine_icon.svg"  width="30" height="30" >
187        <!-- Hide it on large screens, as it takes too much space when it is adjacent to expanded navbar -->
188        <span class="d-lg-none">Castle Game Engine</span>
189      </a>
190      <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
191        <span class="navbar-toggler-icon"></span>
192      </button>
193
194      <div class="collapse navbar-collapse" id="navbarSupportedContent">
195      <ul class="navbar-nav me-auto mb-2 mb-lg-0"><li class="nav-item "><a href="https://castle-engine.io/download" class="nav-link">Download</a></li><li class="nav-item "><a href="https://castle-engine.io/features" class="nav-link">Features</a></li><li class="nav-item "><a href="https://castle-engine.io/wp/" class="nav-link active" aria-current="page">News</a></li><li class="nav-item  dropdown"><a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">Documentation</a><ul class="dropdown-menu"><li><a class="dropdown-item" href="https://castle-engine.io/bad_chess">Tutorial: 3D physics fun</a></li><li><a class="dropdown-item" href="https://castle-engine.io/manual">Manual</a></li><li><a class="dropdown-item" href="https://castle-engine.io/creating_data_intro.php">Creating Game Data</a></li><li><a class="dropdown-item" href="https://castle-engine.io/apidoc/html/index.html">API Reference</a></li><li><a class="dropdown-item" href="https://castle-engine.io/why_pascal">Why Pascal?</a></li><li><a class="dropdown-item" href="https://castle-engine.io/modern_pascal">Modern Object Pascal Introduction</a></li><li><a class="dropdown-item" href="https://castle-engine.io/castle_game_engine_for_unity_developers">Overview for Unity Developers</a></li><li><a class="dropdown-item" href="https://castle-engine.io/x3d">Scene Graph: X3D nodes</a></li><li><a class="dropdown-item" href="https://castle-engine.io/conferences">Conferences</a></li></ul></li><li class="nav-item "><a href="https://www.youtube.com/c/CastleGameEngine" class="nav-link">Videos</a></li><li class="nav-item "><a href="https://castle-engine.io/castle-model-viewer" class="nav-link" title="Viewer for glTF, X3D, Collada, sprite sheets and other 3D and 2D model formats">Model&nbsp;Viewer</a></li><li class="nav-item "><a href="https://castle-engine.io/talk.php" class="nav-link" title="Ask for help, report bugs, discuss features">Community</a></li><li class="nav-item  dropdown"><a href="#" class="nav-link dropdown-toggle" data-toggle="dropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">Gallery</a><ul class="dropdown-menu"><li><a class="dropdown-item" href="https://castle-engine.io/gallery_games.php">Games</a></li><li><a class="dropdown-item" href="https://castle-engine.io/gallery_tools.php">Tools</a></li><li><a class="dropdown-item" href="https://castle-engine.io/additional_components.php">Additional Components</a></li><li><a class="dropdown-item" href="https://castle-engine.io/assets.php">Assets (3D and 2D Graphics, Sound)</a></li></ul></li><li class="nav-item "><a href="https://castle-engine.io/credits" class="nav-link" title="Credits"><i class="bi bi-suit-heart-fill"></i></a></li><li class="nav-item  d-none"><a href="https://castle-engine.io/release" class="nav-link">Release notes</a></li></ul>
196    <form class="container-fluid justify-content-start d-flex castle-donate-button-form">
197      <a href="https://patreon.com/castleengine" class="btn btn-primary btn-success">Donate</a>
198
199      <a href="https://calendar.proton.me/bookings#IFp0_KuiKOQDieI7o4imzSQaYVPbmjaG2eL3ihaGop0=" class="btn btn-secondary" style="margin-left: 0.5em;">Book a Meeting</a>
200    </form><form action="https://duckduckgo.com/" method="get" role="search" class="castle-navbar-search">
201  <div class="input-group flex-nowrap">
202    <input type="text" class="form-control" name="q" placeholder="Search..." style="min-width: 8em">
203    <input type="hidden" name="sites" value="castle-engine.io">
204    <input type="hidden" name="kae" value="d">
205    <span class="input-group-btn">
206      <button type="submit" class="btn">
207        <i class="bi bi-search"></i>
208      </button>
209    </span>
210  </div><!-- /input-group -->
211</form>
212      </div>
213    </div>
214  </nav><div class="container-fluid">
215<div class="wrap">
216		<!-- <header class="page-header"> -->
217	<!-- 	<h2 class="page-title">Posts</h2> -->
218	<!-- </header> -->
219	
220	<div id="primary" class="content-area">
221		<main id="main" class="site-main" role="main">
222
223			
224<article id="post-6229" class="post-6229 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized">
225                <header class="entry-header">
226                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/" rel="bookmark">Everyone! Book a meeting with me to talk about Castle Game Engine</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/" rel="bookmark"><time class="entry-date published updated" datetime="2026-09-05T18:32:37+00:00">September 5, 2026</time></a></span></p>        </header><!-- .entry-header -->
227
228        <div class="entry-content">
229                <table class="thumbnails thumbnails-align-right"><tr><td>
230          <a href="https://castle-engine.io/wp/wp-content/uploads/2024/08/itdevcon-michalis.jpg"
231             class="screenshot"
232             title="Michalis at ITDevCon 2023"><img decoding="async"
233            style="float: right"
234            src="https://castle-engine.io/wp/wp-content/uploads/2024/08/itdevcon-michalis-200x113.jpg"
235             width="200" height="113" 
236            alt="Michalis at ITDevCon 2023"
237          ></a></td></tr></table>
238<p>Hey everyone! Use this <a href="https://calendar.proton.me/bookings#IFp0_KuiKOQDieI7o4imzSQaYVPbmjaG2eL3ihaGop0=">Book a Meeting</a> link to schedule a meeting with me (I&#8217;m <em>
238Michalis Kamburelis</em>, <em>Castle Game Engine</em> lead).</p>
239<p>Yes, I mean <em>you</em>. Do it right now. Don&#8217;t hesitate. Stop reading now, and click that link!</p>
240<p>You&#8217;re still reading? Let me give some examples what we can talk about:</p>
241<ul>
242<li>If you use the engine, and want to show me <em>how</em> you use it (and where do you have <em>questions</em> or <em>feature requests</em>) -> book a meeting.</li>
243<li>If you wonder about making a game (or other application), and you&#8217;re not sure how to approach this type of game using our engine (you want some advise, you want to see how I would start it) -> book a meeting.</li>
244<li>If you use the engine and hit a bug, and it&#8217;s kind of hard to explain in words/screenshots and it would be easier to <em>show me</em> -> book a meeting.</li>
245<li>If you <em>don&#8217;t</em> use the engine, but you wonder about it, or you want to tell me <em>what is blocking you</em> -> book a meeting.</li>
246<li>If you want to support me, maybe even you have a company and want b2b cooperation (I have <a href="https://castle-engine.io/donate">a company too and can provide services around CGE</a>) -> book a meeting.</li>
247</ul>
248<p>I hope I made myself clear: this is really for <em>everyone</em> to talk with me about <em>anything</em>. Well, anything related to <em>Castle Game Engine</em>🙂 Or at least related to <em>Pascal</em> or <em>open-source</em> or general <em>game development</em>. Or at least <em>cats</em>.</p>
249<p>The link to book a meeting is also available in the header of our webpage, right next to the <a href="https://www.patreon.com/c/castleengine">donate (through Patreon)</a> link. I consider both these links critical for the engine success now, I want to talk with you, and I want to learn what you think about the engine. Let&#8217;s talk!</p>
250<p><em>Looking at a larger picture:</em></p>
251<p>I came back from <a href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/">vacations in August</a> with a lot of new energy and passion. Maybe we are not some big commercial game engine, and we don&#8217;t have to be! But I have dreams:</p>
252<ul>
253<li>about beautiful games I want to make using this engine,</li>
254<li>and about allowing you to make games using this engine,</li>
255<li>about sustaining the engine open-source development,</li>
256<li>and about thriving as a community where we just <em>enjoy</em> what we do, in a technical and artistic way. I know I ultimately <em>enjoy</em> doing this engine and I enjoy making games, this is my life, and I want to share this happiness and freedom.</li>
257</ul>
258<p>I have some thoughts about realizing this vision, and I have some future posts that I will share with you about it. For starters, I think the most important thing is that I want to meet with you and listen to you. So click <a href="https://calendar.proton.me/bookings#IFp0_KuiKOQDieI7o4imzSQaYVPbmjaG2eL3ihaGop0=">this link and book a meeting</a>! I mean it!</p>
259<p>Of course I also remain open to every feedback and question on our <a href="https://forum.castle-engine.io/">forum</a> and <a href="https://castle-engine.io/talk.php">other channels</a>. If you want to write to me directly, you can too: <code>[email protected]</code>.</p>
260<p>And yes, before you ask: in addition to these &#8220;one-on-one&#8221; meetings I also think about bringing back our &#8220;regular group meetings&#8221;. We had them regular for some time, on Discord. I think we should restore the idea, though I wonder about few changes to a formula. That&#8217;s also something for a future news post:)</p>
261<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
262				data-shared="sharing-bluesky-6229"
263				class="share-bluesky sd-button share-icon"
264				href="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/?share=bluesky"
265				target="_blank"
266				aria-labelledby="sharing-bluesky-6229"
267				>
268				<span id="sharing-bluesky-6229" hidden>Share on Bluesky (Opens in new window)</span>
269				<span>Bluesky</span>
270			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
271				data-shared="sharing-mastodon-6229"
272				class="share-mastodon sd-button share-icon"
273				href="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/?share=mastodon"
274				target="_blank"
275				aria-labelledby="sharing-mastodon-6229"
276				>
277				<span id="sharing-mastodon-6229" hidden>Share on Mastodon (Opens in new window)</span>
278				<span>Mastodon</span>
279			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
280				data-shared="sharing-facebook-6229"
281				class="share-facebook sd-button share-icon"
282				href="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/?share=facebook"
283				target="_blank"
284				aria-labelledby="sharing-facebook-6229"
285				>
286				<span id="sharing-facebook-6229" hidden>Share on Facebook (Opens in new window)</span>
287				<span>Facebook</span>
288			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
289				data-shared="sharing-threads-6229"
290				class="share-threads sd-button share-icon"
291				href="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/?share=threads"
292				target="_blank"
293				aria-labelledby="sharing-threads-6229"
294				>
295				<span id="sharing-threads-6229" hidden>Share on Threads (Opens in new window)</span>
296				<span>Threads</span>
297			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
298				data-shared="sharing-linkedin-6229"
299				class="share-linkedin sd-button share-icon"
300				href="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/?share=linkedin"
301				target="_blank"
302				aria-labelledby="sharing-linkedin-6229"
303				>
304				<span id="sharing-linkedin-6229" hidden>Share on LinkedIn (Opens in new window)</span>
305				<span>LinkedIn</span>
306			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
307				data-shared="sharing-reddit-6229"
308				class="share-reddit sd-button share-icon"
309				href="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/?share=reddit"
310				target="_blank"
311				aria-labelledby="sharing-reddit-6229"
312				>
313				<span id="sharing-reddit-6229" hidden>Share on Reddit (Opens in new window)</span>
314				<span>Reddit</span>
315			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
316				data-shared="sharing-email-6229"
317				class="share-email sd-button share-icon"
318				href="mailto:?subject=%5BShared%20Post%5D%20Everyone%21%20Book%20a%20meeting%20with%20me%20to%20talk%20about%20Castle%2
3180Game%20Engine&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F09%2F05%2Feveryone-book-a-meeting-with-me-to-talk-about-castle-game-engine%2F&#038;share=email"
319				target="_blank"
320				aria-labelledby="sharing-email-6229"
321				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="d1c617cdba" data-email-share-track-url="https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/?share=email">
322				<span id="sharing-email-6229" hidden>Email a link to a friend (Opens in new window)</span>
323				<span>Email</span>
324			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
325
326        
327        <a href="https://forum.castle-engine.io/t/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/2205#comments">Comments on the forum ➤</a>
328</article><!-- #post-## -->
329
330<article id="post-6208" class="post-6208 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-castleengine tag-gamedev tag-pascal tag-shaders tag-x3d">
331                <header class="entry-header">
332                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/" rel="bookmark">Particle system updates (custom shaders, web support), FreeCAD -> X3D exporter, documentation (exe size, 2D, easy link to API), geometry shader fixes</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/" rel="bookmark"><time class="entry-date published updated" datetime="2026-08-26T02:51:24+00:00">August 26, 2026</time></a></span></p>        </header><!-- .entry-header -->
333
334        <div class="entry-content">
335                <table class="thumbnails thumbnails-align-right"><tr><td>
336          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/08/particles.jpg"
337             class="screenshot"
338             title="Particle system"><img decoding="async"
339            style="float: right"
340            src="https://castle-engine.io/wp/wp-content/uploads/2026/08/particles-200x116.jpg"
341             width="200" height="116" 
342            alt="Particle system"
343          ></a></td></tr><tr><td>
344          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/08/La_Cruz_Version_21_0.jpg"
345             class="screenshot"
346             title="FreeCAD -&amp;gt; X3D, in Castle Model Viewer"><img decoding="async"
347            style="float: right"
348            src="https://castle-engine.io/wp/wp-content/uploads/2026/08/La_Cruz_Version_21_0-200x103.jpg"
349             width="200" height="103" 
350            alt="FreeCAD -&amp;gt; X3D, in Castle Model Viewer"
351          ></a></td></tr><tr><td>
352          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/08/news_geometry_shader_fun_smoothing_0.png"
353             class="screenshot"
354             title="Geometry shaders example"><img loading="lazy" decoding="async"
355            style="float: right"
356            src="https://castle-engine.io/wp/wp-content/uploads/2026/08/news_geometry_shader_fun_smoothing_0-200x113.png"
357             width="200" height="113" 
358            alt="Geometry shaders example"
359          ></a></td></tr><tr><td>
360          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/08/michalis.jpg"
361             class="screenshot"
362             title="Michalis:)"><img loading="lazy" decoding="async"
363            style="float: right"
364            src="https://castle-engine.io/wp/wp-content/uploads/2026/08/michalis-200x183.jpg"
365             width="200" height="183" 
366            alt="Michalis:)"
367          ></a></td></tr></table>
368<p>Forgive us for a calm August without the usual weekly announcements, as Michalis spent most of the month on a family vacation. Stay tuned for an upcoming news post about a feature he made when his wife wasn&#8217;t watching: <em>Android and iOS compatibility with Delphi</em> 🙂</p>
369<p>Until then, here are a number of announcements you can enjoy right now &#8212; with big thanks to everyone using the engine and building the ecosystem around it:</p>
370<ol>
371<li><em>Kagamma (Trung Le)</em> has updated his <a href="https://github.com/Kagamma/cge-3d-particle-emitter">GPU-based particle system for Castle Game Engine</a>. New features, announced on the <a href="https://forum.castle-engine.io/t/3d-particle-system-now-with-full-support-for-2d-and-castle-editor/406/12?u=michalis">forum thread</a>, are:
372<ul>
373<li>Custom shaders: Influence particle position and look using a PLUG system similar to our <a href="https://castle-engine.io/shaders">shader effects</a>. See <a href="https://github.com/Kagamma/cge-3d-particle-emitter/blob/master/EffectReference.md#custom-shaders">docs</a>.</li>
374<li><a href="https://castle-engine.io/web">Web target</a> support: see <a href="https://kagamma.github.io/cge-3d-particle-demo/">demo online</a>.</li>
375<li>Modify the built-in particle mesh in editor.</li>
376<li>Rotation type support.</li>
377</ul>
378</li>
379<li><em>Kagamma (Trung Le)</em> also updated his alternative approach for particles in our engine: <a href="https://forum.castle-engine.io/t/effekseer-1-80-5/2181">particles designed in Effekseer version 1.80.5 are now supported</a>. Download the updated shared libraries for <em>Windows, Linux and Android</em> from <a href="https://github.com/Kagamma/cge-effekseer/releases">here</a>.</p>
380</li>
381<li>
382<p><em>Marco Mora</em>
382 posted about a new exporter from <a href="https://www.freecad.org/">FreeCAD</a> to <a href="https://castle-engine.io/x3d">X3D with Castle Game Engine extensions</a>. See his <a href="https://forum.castle-engine.io/t/gameengineexportwb-freecad-to-x3d-and-castle-model-viewer/2197">forum post for a description and screenshots</a> and the <a href="https://github.com/MVM444/GameEngineExportWB">repository here</a>. You can see pretty mirrors on the screenshot, using our <a href="https://castle-engine.io/mirror_plane">X3D extension for mirrors on flat objects</a>. Enjoy and post your feedback in the forum!</p>
383</li>
384<li>
385<p>We have <a href="https://github.com/castle-engine/castle-engine/blob/master/doc/miscellaneous_notes/executable_size.md">documented how to optimize executable size (for all platforms)</a> and committed a fix (no need for <code>exports</code>) that makes the generated Linux executables much smaller (~45%) out-of-the-box.</p>
386</li>
387<li>
388<p>We reworked the <a href="https://castle-engine.io/viewport_2d">creating 2D games</a> page of our manual. This was waiting too long for a &#8220;big 2D tutorial&#8221; &#8212; which may still come some day, but in the meantime, the existing page is hopefully sufficient: it presents a short 2D overview and refers to other pages (since a lot of engine concepts are just the same for 2D and 3D usage).</p>
389</li>
390<li>
391<p>As a small feature on our website, you can now use URLs like this:</p>
392<p><code>https://castle-engine.io/api?id=PASCAL-IDENTIFIER</code></p>
393<p>&#8230; and it will automatically redirect to the proper API docs of a given identifier. For example, use</p>
394<p><a href="https://castle-engine.io/api?id=TCastleWindow">https://castle-engine.io/api?id=TCastleWindow</a></p>
395<p>to redirect to</p>
396<p><a href="https://castle-engine.io/apidoc/html/CastleWindow.TCastleWindow.html">https://castle-engine.io/apidoc/html/CastleWindow.TCastleWindow.html</a></p>
397<p>This is nice when writing URLs from outside of our website, e.g. from Markdown files in our source code. Of course, you can also just &#8220;spell out&#8221; the full URL like https://castle-engine.io/apidoc/html/CastleWindow.TCastleWindow.html there, but using the shorter https://castle-engine.io/api?id=TCastleWindow is</p>
398<ul>
399<li>A bit easier. You don&#8217;t need to think about which unit <code>TCastleWindow</code> is in. This is resolved when we handle the redirect.</p>
400</li>
401<li>
402<p>More future-proof. If we ever move the identifier <code>TCastleWindow</code> from one unit to another, the simple URL https://castle-engine.io/api?id=TCastleWindow will continue to work.</p>
403</li>
404</ul>
405<p>Note: if you update documentation on our website, this is not necessary! In AsciiDoctor files, just use <code>cgeref:TCastleWindow[]</code> and it will display a proper link to <code>TCastleWindow</code>, showing a warning (in development mode) if <code>TCastleWindow</code> is not found. See <a href="https://github.com/castle-engine/cge-www">cge-www README about developing our website</a>.</p>
406</li>
407<li>
408<p><a href="https://castle-engine.io/compositing_shaders_doc/html/chapter.geometry_shaders.html">Geometry shaders</a> received a number of fixes under the hood. Everything works again, and the code is cleaner than ever 🙂</p>
409<ul>
410<li>See <a href="https://castle-engine.io/compositing_shaders_doc/html/chapter.geometry_shaders.html">how to use geometry shaders with shader effects</a>. Examples are <a href="https://github.com/castle-engine/demo-models/tree/master/compositing_shaders">here</a>.</p>
411</li>
412<li>
413<p>See <a href="https://castle-engine.io/x3d_implementation_shaders.php#section_geometry">how to use geometry shaders with ComposedShader</a>. Examples are <a href="https://github.com/castle-engine/demo-models/tree/master/shaders">here</a>.</p>
414</li>
415<li>Under the hood we have introduced <a href="https://github.com/castle-engine/castle-engine/tree/master/src/scene/glsl#varying-passthrough-geometry-shaders">magic <code>/* VARYING-PASSTHROUGH-GEOMETRY-SHADERS */</code> comment</a> to make it easier to pass data through geometry shader effects.</li>
416</ul>
417</li>
418<li>
419<p>Important fix for XML reading with <em>Delphi</em> &#8212; this was crashing our <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/3d_games/explore_impressive_castle">explore_impressive_castle</a> demo.</p>
420</li>
421<li>
422<p>Fixed applying transformations if you modify <code><a href="https://castle-engine.io/apidoc/html/CastleTransform.TCastleTransform.html#Exists">TCastleTransform.Exists</a></code> often. Previously, setting <code>Exists</code> to <code>true</code> during rendering but flipping it to <code>false</code> during updating was causing a surprising effect: we rendered old transformations. Now the rendering always shows the current transformation.</p>
423</li>
424<li>
425<p>Trying to open a 2nd <code><a href="https://castle-engine.io/apidoc/html/CastleWindow.TCastleWindow.html">TCastleWindow</a></code> on the <em>web</em>, <a href="https://castle-engine.io/android">Android</a> or other platforms that don&#8217;t support it will now result in a clear exception, with a message instructing you to check &#8220;<code>Application.MultipleWindowsPossible</code>&#8220;. This makes the situation cleaner than the previous <em>&#8220;opening 2nd window works by accident, overriding the previous window rendering&#8221;</em>. Demo is inside <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/window/multiple_windows_and_viewports">multiple_windows_and_viewports</a>.</p>
426</li>
427</ol>
428<p>Enjoying the engine? Please <a href="https://www.patreon.com/c/castleengine">support us on Patreon</a>!</p>
429<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
430				data-shared="sharing-bluesky-6208"
431				class="share-bluesky sd-button share-icon"
432				href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/?share=bluesky"
433				target="_blank"
434				aria-labelledby="sharing-bluesky-6208"
435				>
436				<span id="sharing-bluesky-6208" hidden>Share on Bluesky (Opens in new window)</span>
437				<span>Bluesky</span>
438			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
439				data-shared="sharing-mastodon-6208"
440				class="share-mastodon sd-button share-icon"
441				href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/?share=mastodon"
442				target="_blank"
443				aria-labelledby="sharing-mastodon-6208"
444				>
445				<span id="sharing-mastodon-6208" hidden>Share on Mastodon (Opens in new window)</span>
446				<span>Mastodon</span>
447			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
448				data-shared="sharing-facebook-6208"
449				class="share-facebook sd-button share-icon"
450				href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/?share=facebook"
451				target="_blank"
452				aria-labelledby="sharing-facebook-6208"
453				>
454				<span id="sharing-facebook-6208" hidden>Share on Facebook (Opens in new window)</span>
455				<span>Facebook</span>
456			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
457				data-shared="sharing-threads-6208"
458				class="share-threads sd-button share-icon"
459				href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/?share=threads"
460				target="_blank"
461				aria-labelledby="sharing-threads-6208"
462				>
463				<span id="sharing-threads-6208" hidden>Share on Threads (Opens in new window)</span>
464				<span>Threads</span>
465			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
466				data-shared="sharing-linkedin-6208"
467				class="share-linkedin sd-button share-icon"
468				href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/?share=linkedin"
469				target="_blank"
470				aria-labelledby="sharing-linkedin-6208"
471				>
472				<span id="sharing-linkedin-6208" hidden>Share on LinkedIn (Opens in new window)</span>
473				<span>LinkedIn</span>
474			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
475				data-shared="sharing-reddit-6208"
476				class="share-reddit sd-button share-icon"
477				href="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/?share=reddit"
478				target="_blank"
479				aria-labelledby="sharing-reddit-6208"
480				>
481				<span id="sharing-reddit-6208" hidden>Share on Reddit (Opens in new window)</span>
482				<span>Reddit</span>
483			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
484				data-shared="sharing-email-6208"
485				class="share-email sd-button share-icon"
486				href="mailto:?subject=%5BShared%20Post%5D%20Particle%20system%20updates%20%28custom%20shaders%2C%20web%20support%29%2C%20FreeCAD%20-%3E%20X3D%20exporter%2C%20documentation%20%28exe%20size%2C%202D%2C%20easy%20link%20to%20API%29%2C%20geometry%20shader%20fixes&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F08%2F26%2Fparticle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes%2F&#038;share=email"
487				target="_blank"
488				aria-labelledby="sharing-email-6208"
489				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="ef7c195a26" data-email-share-track-url="https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/?share=email">
490				<span id="sharing-email-6208" hidden>Email a link to a friend (Opens in new window)</span>
491				<span>Email</span>
492			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
493
494        
495        <a href="https://forum.castle-engine.io/t/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/2201#comments">Comments on the forum ➤</a>
496</article><!-- #post-## -->
497
498<article id="post-6183" class="post-6183 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-castleengine tag-gamedev tag-pascal tag-webgl tag-windows">
499                <header class="entry-header">
500                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/" rel="bookmark">Pointer lock (mouse look) on the web &#8212; plus a big refactor and Windows improvements</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/" rel="bookmark"><time class="entry-date published updated" datetime="2026-08-02T02:45:52+00:00">August 2, 2026</time></a></span></p>        </header><!-- .entry-header -->
501
502        <div class="entry-content">
503                <table class="thumbnails thumbnails-align-right"><tr><td>
504          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/08/unholy_1.png"
505             class="screenshot"
506             title="&amp;quot;The Unholy Society&amp;quot; - fight with a demon hell-spawn (aka &amp;quot;the kitty&amp;quot;)"><img loading="lazy" decoding="async"
507            style="float: right"
508            src="https://castle-engine.io/wp/wp-content/uploads/2026/08/unholy_1-200x124.png"
509             width="200" height="124" 
510            alt="&amp;quot;The Unholy Society&amp;quot; - fight with a demon hell-spawn (aka &amp;quot;the kitty&amp;quot;)"
511          ></a></td></tr><tr><td>
512          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/08/unholy_2.png"
513             class="screenshot"
514             title="&amp;quot;The Unholy Society&amp;quot; - fight with a demon hell-spawn (aka &amp;quot;the kitty&amp;quot;)"><img loading="lazy" decoding="async"
515            style="float: right"
516            src="https://castle-engine.io/wp/wp-content/uploads/2026/08/unholy_2-200x124.png"
517             width="200" height="124" 
518            alt="&amp;quot;The Unholy Society&amp;quot; - fight with a demon hell-spawn (aka &amp;quot;the kitty&amp;quot;)"
519          ></a></td></tr><tr><td>
520          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/08/unholy_3.png"
521             class="screenshot"
522             title="&amp;quot;The Unholy Society&amp;quot; - fight with a demon hell-spawn (aka &amp;quot;the kitty&amp;quot;)"><img loading="lazy" decoding="async"
523            style="float: right"
524            src="https://castle-engine.io/wp/wp-content/uploads/2026/08/unholy_3-200x124.png"
525             width="200" height="124" 
526            alt="&amp;quot;The Unholy Society&amp;quot; - fight with a demon hell-spawn (aka &amp;quot;the kitty&amp;quot;)"
527          ></a></td></tr></table>
528<p><em>Note that I sent a sneak preview of this news using <a href="https://www.patreon.com/cw/castleengine/quips">Patreon Quip</a> earlier this week. I plan to experiment with Quips more in the future. The &#8220;quips&#8221; are visible to everyone, you can install the Patreon mobile app to get notifications about them, or just view the <a href="https://www.patreon.com/cw/castleengine/quips">Patreon page with Quips</a>. Of course, I will also continue to send longer posts (on <a href="https://www.patreon.com/cw/castleengine">Patreon</a>, <a href="https://castle-engine.io/wp/">WordPress</a>) about all new engine developments, which you get (if subscribed) by regular email.</em></p>
529<h2>Introduction</h2>
530<p>We have made the <em>pointer lock (mouse look)</em> logic work on the <a href="https://castle-engine.io/web">web</a>, adding also the necessary API to observe when it was <em>cancelled</em> by the user.</p>
531<p>We have also heavily refactored and improved how the <em>pointer lock (mouse look)</em> works on all the other platforms.</p>
532<p>And we made a bonus specifically for Windows: we now perform additional operations to keep the mouse &#8220;confined&#8221; to the window during <em>pointer lock</em>, even if you have low FPS or move the mouse like crazy.</p>
533<h2>What is pointer lock, mouse look and first demos</h2>
534<p>The <em>mouse look</em> mechanism is used by 3D applications to look around. The idea is that you <em>move the mouse to look around</em>
534. The mouse cursor stays hidden, and the position of the mouse cursor is an internal thing that should not concern the user. For example, test it by right-clicking in:</p>
535<ul>
536<li><a href="https://castle-engine.io/web-demos/examples/3d_games/walking_adventure">Walking Adventure (web build)</a>. Source code <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/3d_games/walking_adventure">here</a>.</p>
537</li>
538<li>
539<p><a href="https://castle-engine.io/web-demos/examples/terrain">Terrain with water (web build)</a>. Source code <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/terrain">here</a>.</p>
540</li>
541<li>
542<p>Our <a href="https://castle-engine.io/editor">editor</a> is naturally a good example of it too. Once you hold <em>right mouse button</em> and look around in the viewport &#8212; that&#8217;s mouse look. Our <a href="https://castle-engine.io/web-demos/tools/castle-editor-portable/">experimental portable editor (web build)</a> is showing it too.</p>
543</li>
544</ul>
545<p>The more generic name for this idea is <em>&#8220;pointer lock&#8221;</em> and it can also be used to implement <em>&#8220;unbounded dragging&#8221;</em>, useful for 2D operations. See examples in:</p>
546<ul>
547<li><a href="https://castle-engine.io/web-demos/examples/user_interface/dragging_test/">Dragging Test (web build)</a>. Source code <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/user_interface/dragging_test">here</a>.</p>
548</li>
549<li>
550<p>The fight minigame in our <a href="https://michalis.xyz/unholy/">The Unholy Society</a>. Dragging the cross freely once you press the mouse button &#8212; that relies on pointer lock.</p>
551</li>
552</ul>
553<h2>Special considerations on the web</h2>
554<p>The web platform has important peculiarities around <em>pointer lock</em>.</p>
555<ul>
556<li>You can only request <em>pointer lock</em> in the <a href="https://developer.mozilla.org/en-US/docs/Glossary/Transient_activation">transient activation</a> state, which means it must be triggered by a user interaction (like a mouse click or key press) or right after it.</p>
557</li>
558<li>
559<p>The user can always cancel the pointer lock, you cannot prevent it, and you should not try to immediately &#8220;reenter it&#8221;. You should instead respect the user&#8217;s wish and listen using the <code><a href="https://castle-engine.io/apidoc/html/CastleUIControls.TCastleAbstractPointerLock.html#AddUserCancelledListener-TNotifyEvent-">TCastleAbstractPointerLock.AddUserCancelledListener</a></code> API.</p>
560</li>
561<li>
562<p>We have <a href="https://castle-engine.io/web#pointer_lock">documented this in the section &#8220;Pointer lock (mouse look) and handling Escape key in FPS games&#8221; for the web platform</a>. See there for example code snippets. Also, all our examples (see below for a full list) should serve as demos how to handle it correctly.</p>
563</li>
564</ul>
565<p>We tested our implementation on <em>Firefox</em>, <em>Vivaldi</em> (Chromium-based) and <em>Google Chrome</em>. It really should work in all browsers, and we adjust to some of the browser-specific &#8220;quirks&#8221;.</p>
566<h2>All the demos</h2>
567<p>We have many more demos! Here&#8217;s a complete list &#8212; every one of them has a web build you can try right now, and a link to its source code:</p>
568<ul>
569<li><a href="https://castle-engine.io/web-demos/examples/creature_behaviors/">creature_behaviors</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/creature_behaviors">source</a>)</p>
570</li>
571<li>
572<p><a href="https://castle-engine.io/web-demos/examples/3d_games/dungeons_and_skeletons_fight/">dungeons_and_skeletons_fight</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/3d_games/dungeons_and_skeletons_fight">source</a>)</p>
573</li>
574<li>
575<p><a href="https://castle-engine.io/web-demos/examples/3d_games/explore_impressive_castle/">explore_impressive_castle</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/3d_games/explore_impressive_castle">source</a>)</p>
576</li>
577<li>
578<p><a href="https://castle-engine.io/web-demos/examples/3d_games/walking_adventure/">walking_adventure</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/3d_games/walking_adventure">source</a>)</p>
579</li>
580<li>
581<p><a href="https://castle-engine.io/web-demos/examples/audio/game_3d_sound/">game_3d_sound</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/audio/game_3d_sound">source</a>)</p>
582</li>
583<li>
584<p><a href="https://castle-engine.io/web-demos/examples/research_special_rendering_methods/test_rendering_opengl_capabilities/">test_rendering_opengl_capabilities</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/research_special_rendering_methods/test_rendering_opengl_capabilities">source</a>)</p>
585</li>
586<li>
587<p><a href="https://castle-engine.io/web-demos/examples/terrain/">terrain</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/terrain">source</a>)</p>
588</li>
589<li>
590<p>The physics demos &#8212; <a href="https://castle-engine.io/web-demos/examples/physics/physics_3d_shooter/">
590physics_3d_shooter</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/physics/physics_3d_shooter">source</a>), <a href="https://castle-engine.io/web-demos/examples/physics/physics_3d_demo/">physics_3d_demo</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/physics/physics_3d_demo">source</a>), <a href="https://castle-engine.io/web-demos/examples/physics/physics_explosion/">physics_explosion</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/physics/physics_explosion">source</a>) and <a href="https://castle-engine.io/web-demos/examples/physics/physics_throw_chickens/">physics_throw_chickens</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/physics/physics_throw_chickens">source</a>). In all of these, the right click <em>toggles</em> mouse look, so there&#8217;s no need to hold it. All except <code>physics_3d_shooter</code> are on the web for the first time.</p>
591</li>
592<li>
593<p><a href="https://castle-engine.io/web-demos/examples/user_interface/dragging_test/">dragging_test</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/user_interface/dragging_test">source</a>) &#8212; first time on web, and updated specifically to showcase this.</p>
594</li>
595<li>
596<p><a href="https://castle-engine.io/web-demos/examples/animations/optimize_animations_test/">optimize_animations_test</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/animations/optimize_animations_test">source</a>) &#8212; first time on web.</p>
597</li>
598<li>
599<p><a href="https://castle-engine.io/web-demos/examples/window/multiple_windows_and_viewports/">multiple_windows_and_viewports</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/window/multiple_windows_and_viewports">source</a>) &#8212; on a desktop, this shows 2 windows, with 2 viewports each, for a total of 4 viewports observing simultaneously the same world. On web, we show only 1 window (since 1 canvas) with 2 viewports.</p>
600</li>
601</ul>
602<h2>Refactors</h2>
603<p>Internally, we have rearranged how &#8220;mouse look&#8221; works on all the platforms.</p>
604<p>First of all, we have introduced a class <code><a href="https://castle-engine.io/apidoc/html/CastleUIControls.TCastleAbstractPointerLock.html">TCastleAbstractPointerLock</a></code> (and internal descendants) that you can access by <code><a href="https://castle-engine.io/apidoc/html/CastleUIControls.TCastleContainer.html#PointerLock">TCastleContainer.PointerLock</a></code>.</p>
605<p>This makes the engine code easier to adjust. A particular descendant can implement <em>pointer lock</em> in a way best for a particular platform. Right now, we have 3 implementations:</p>
606<ol>
607<li>For the web (<code>TCastleWebPointerLock</code>), using the web <em>pointer lock API</em>. The web browser does the job of hiding and repositioning the mouse for us, in this case. We are prepared for the user cancelling it at any time.</p>
608</li>
609<li>
610<p>Cross-platform for desktops (<code>TCastleDesktopPointerLock</code>). It assumes that setting <code>Window.MousePosition</code> and changing cursor shape (potentially to invisible) works on a given platform.</p>
611</li>
612<li>
613<p>Specialized implementation for Windows (<code>TCastleWindowsPointerLock</code>).</p>
614</li>
615</ol>
616<p>Note that all these classes (<code>TCastleWebPointerLock</code>, <code>TCastleDesktopPointerLock</code>, <code>TCastleWindowsPointerLock</code>) are internal. You don&#8217;t use them directly. You only use the abstract <code><a href="https://castle-engine.io/apidoc/html/CastleUIControls.TCastleAbstractPointerLock.html">TCastleAbstractPointerLock</a></code> API.</p>
617<p>Note that mobile platforms typically do such navigation in a different way. See the <a href="https://castle-engine.io/touch_input">&#8220;Navigating in 3D on touch devices using TCastleWalkNavigation&#8221; section in touch input</a> for an overview of how to make comfortable navigation on mobile. This is not the topic of this news post &#8212; we only mention it here for completeness, if anyone wonders &#8220;what about phones?&#8221;.</p>
618<p>We did a lot of changes to how <em>pointer lock</em> works internally, on all the platforms (including desktops):</p>
619<ul>
620<li>We no longer need to take any <code>ControlRect</code> within which we were repositioning the mouse. We make sure the component controlling the mouse look receives the necessary events, regardless of where it is.</p>
621</li>
622<li>
623<p>We expose new <code><a href="https://castle-engine.io/apidoc/html/CastleKeysMouse.TInputMotion.html#Delta">TInputMotion.Delta</a></code>, simpler to use than old <code>Container.MouseLookDelta</code>.</p>
624</li>
625<li>
626<p>On desktops, hiding the mouse during &#8220;mouse look&#8221; is now done without touching any public fields like <code>Container.OverrideCursor</code> or <code>TCastleWalkNavigation.Cursor</code>.</p>
627</li>
628</ul>
629<p>While working on this, we also had to improve our <em>input capturing</em> code, which deals with:</p>
630<ul>
631<li><code>ForceCaptureInput</code></li>
632<li>Something that controls pointer lock, like <code><a href="https://castle-engine.io/apidoc/html/CastleCameras.TCastleWalkNavigation.html">TCastleWalkNavigation</a></code>.</li>
633<li>Captured controls, which receive events because you started dragging on them.</li>
634</ul>
635<p>Things are more consistent and reliable in various ways. For example, changing <code>Exists</code> of components is now more consistent: a navigation with <code>Exists</code> = <code>false</code> naturally resigns from controlling the <em>pointer lock</em>.</p>
636<h2>Windows improvements</h2>
637<p>Finally, we have used this opportunity to do some Windows-specific improvements. With the new code organization, it&#8217;s easy to extend the mechanism to improve the behavior on a specific platform.</p>
638<p>On Windows we now keep the cursor more reliably within the window during <em>pointer lock</em>, by WinAPI <code>SetCapture</code> + <code>ReleaseCapture</code> <em>and</em> <code>ClipCursor</code> calls. Our approach is a bit similar to what the <em>Godot Engine</em> is doing, so we&#8217;re following a proven solution.</p>
639<p>In effect, the mouse will not &#8220;escape&#8221; from the window when <em>pointer lock</em> is active, even if you&#8217;re in a windowed mode, with low FPS, and/or move the mouse with wild speed.</p>
640<p><strong>I hope you enjoy all these details 🙂 Please <a href="https://www.patreon.com/cw/castleengine">support our work on Patreon</a> and have a ton of fun making games during these summer holidays!</strong></p>
641<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
642				data-shared="sharing-bluesky-6183"
643				class="share-bluesky sd-button share-icon"
644				href="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/?share=bluesky"
645				target="_blank"
646				aria-labelledby="sharing-bluesky-6183"
647				>
648				<span id="sharing-bluesky-6183" hidden>Share on Bluesky (Opens in new window)</span>
649				<span>Bluesky</span>
650			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
651				data-shared="sharing-mastodon-6183"
652				class="share-mastodon sd-button share-icon"
653				href="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/?share=mastodon"
654				target="_blank"
655				aria-labelledby="sharing-mastodon-6183"
656				>
657				<span id="sharing-mastodon-6183" hidden>Share on Mastodon (Opens in new window)</span>
658				<span>Mastodon</span>
659			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
660				data-shared="sharing-facebook-6183"
661				class="share-facebook sd-button share-icon"
662				href="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/?share=facebook"
663				target="_blank"
664				aria-labelledby="sharing-facebook-6183"
665				>
666				<span id="sharing-facebook-6183" hidden>Share on Facebook (Opens in new window)</span>
667				<span>Facebook</span>
668			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
669				data-shared="sharing-threads-6183"
670				class="share-threads sd-button share-icon"
671				href="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/?share=threads"
672				target="_blank"
673				aria-labelledby="sharing-threads-6183"
674				>
675				<span id="sharing-threads-6183" hidden>Share on Threads (Opens in new window)</span>
676				<span>Threads</span>
677			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
678				data-shared="sharing-linkedin-6183"
679				class="share-linkedin sd-button share-icon"
680				href="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/?share=linkedin"
681				target="_blank"
682				aria-labelledby="sharing-linkedin-6183"
683				>
684				<span id="sharing-linkedin-6183" hidden>Share on LinkedIn (Opens in new window)</span>
685				<span>LinkedIn</span>
686			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
687				data-shared="sharing-reddit-6183"
688				class="share-reddit sd-button share-icon"
689				href="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/?share=reddit"
690				target="_blank"
691				aria-labelledby="sharing-reddit-6183"
692				>
693				<span id="sharing-reddit-6183" hidden>Share on Reddit (Opens in new window)</span>
694				<span>Reddit</span>
695			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
696				data-shared="sharing-email-6183"
697				class="share-email sd-button share-icon"
698				href="mailto:?subject=%5BShared%20Post%5D%20Pointer%20lock%20%28mouse%20look%29%20on%20the%20web%20--%20plus%20a%20big%20refactor%20and%20Windows%20improvements&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F08%2F02%2Fpointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements%2F&#038;share=email"
699				target="_blank"
700				aria-labelledby="sharing-email-6183"
701				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="ae808f9756" data-email-share-track-url="https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/?share=email">
702				<span id="sharing-email-6183" hidden>Email a link to a friend (Opens in new window)</span>
703				<span>Email</span>
704			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
705
706        
707        <a href="https://forum.castle-engine.io/t/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/2192#comments">Comments on the forum ➤</a>
708</article><!-- #post-## -->
709
710<article id="post-6170" class="post-6170 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-castleengine tag-gamedev tag-gltf tag-pascal tag-x3d">
711                <header class="entry-header">
712                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/" rel="bookmark">Toggle visibility of a group of X3D / glTF nodes</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/" rel="bookmark"><time class="entry-date published updated" datetime="2026-07-25T05:37:01+00:00">July 25, 2026</time></a></span></p>        </header><!-- .entry-header -->
713
714        <div class="entry-content">
715                <table class="thumbnails thumbnails-align-right"><tr><td>
716          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/07/house.png"
717             class="screenshot"
718             title="Free Modular Shed with interior - model by denniswoo1993 from https://sketchfab.com/3d-models/free-modular-shed-with-interior-30b1eb71bb0e4b889160f8283e1750c1"><img loading="lazy" decoding="async"
719            style="float: right"
720            src="https://castle-engine.io/wp/wp-content/uploads/2026/07/house-200x112.png"
721             width="200" height="112" 
722            alt="Free Modular Shed with interior - model by denniswoo1993 from https://sketchfab.com/3d-models/free-modular-shed-with-interior-30b1eb71bb0e4b889160f8283e1750c1"
723          ></a></td></tr></table>
724<p>We support now <code>visible</code> field on various <a href="https://castle-engine.io/x3d">X3D nodes</a>:</p>
725<ul>
726<li><code>Inline</code> node.
727<ul>
728<li>This is <code><a href="https://castle-engine.io/apidoc/html/X3DNodes.TInlineNode.html">TInlineNode</a></code> when looking at the graph from Pascal.</li>
729</ul>
730</li>
731<li>and on all <code>X3DGroupingNode</code> descendants, including <code>Transform</code> and <code>Group</code>.
732<ul>
733<li>These are <code><a href="https://castle-engine.io/apidoc/html/X3DNodes.TAbstractGroupingNode.html">TAbstractGroupingNode</a></code>, <code><a href="https://castle-engine.io/apidoc/html/X3DNodes.TTransformNode.html">TTransformNode</a></code>, <code><a href="https://castle-engine.io/apidoc/html/X3DNodes.TGroupNode.html">TGroupNode</a></code> in Pascal.</li>
734</ul>
735</li>
736</ul>
737<p>We also support very similar glTF extension <a href="https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_node_visibility">KHR_node_visibility</a>. The logic of this glTF extension directly maps to X3D <code>visible</code> field.</p>
738<p>The main use-case is to toggle visibility of a group of visual things at run-time. From Pascal code in <em>Castle Game Engine</em>, you can find the <code><a href="https://castle-engine.io/apidoc/html/X3DNodes.TTransformNode.html">TTransformNode</a></code> that interests you using e.g. the <code><a href="https://castle-engine.io/apidoc/html/CastleSceneCore.TCastleSceneCore.html#Node-TX3DNodeClass-String-TFindNodeOptions-">TCastleSceneCore.Node</a></code> method and then toggle the <code>Visible</code> boolean property. If you don&#8217;t know what transform nodes are available (e.g. because you load model in other format, like glTF) then inspect it, by first saving it to X3D using e.g. our <a href="https://castle-engine.io/castle-model-viewer">Castle Model Viewer</a>, and then open X3D in any text editor.</p>
739<p>As a testcase, open <code>x3d/visible_toggling.x3dv</code> in our demo-models repository, <a href="https://github.com/castle-engine/demo-models/">https://github.com/castle-engine/demo-models/</a> . We recommend to just get the whole repository (<code>git clone ...</code>) to have all files. It shows spheres (some visible, some hidden by default) and allows toggling &#8220;visible&#8221; at runtime (using <code>KeySensor.controlKey</code> routed to &#8220;visible&#8221; fields).</p>
740<p>For more notes see API docs on <a href="https://castle-engine.io/apidoc/html/X3DNodes.TAbstractGroupingNode.html#Visible">TAbstractGroupingNode.Visible</a>.</p>
741<p>TODO:</p>
742<ul>
743<li>Both the X3D and glTF features specifications&#8217;
743 say to also disable light and fog nodes within a group that you made invisible. We don&#8217;t implement this yet &#8212; for now, the <code>Visible</code> field only affects the visibility of <em>shapes</em>. If you use this feature, be aware that <em>we will toggle lights and fog</em> in the future too.</p>
744</li>
745<li>
746<p>In case of glTF, it would be great to also support <a href="https://github.com/KhronosGroup/glTF/tree/main/extensions/2.0/Khronos/KHR_animation_pointer">KHR_animation_pointer</a>. This is a bit like X3D routes: allows to animate almost every part of the glTF, in particular it allows to animate the visibility defined by <code>KHR_node_visibility</code>.</p>
747</li>
748</ul>
749<p>If you enjoy this, please <a href="https://www.patreon.com/c/castleengine">support our work on Patreon</a>!</p>
750<p><em>Our screenshot shows <a href="https://sketchfab.com/3d-models/free-modular-shed-with-interior-30b1eb71bb0e4b889160f8283e1750c1">house 3D model by denniswoo1993</a>. Not really related to the feature described here, just something pretty arranged in our editor:)</em></p>
751<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
752				data-shared="sharing-bluesky-6170"
753				class="share-bluesky sd-button share-icon"
754				href="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/?share=bluesky"
755				target="_blank"
756				aria-labelledby="sharing-bluesky-6170"
757				>
758				<span id="sharing-bluesky-6170" hidden>Share on Bluesky (Opens in new window)</span>
759				<span>Bluesky</span>
760			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
761				data-shared="sharing-mastodon-6170"
762				class="share-mastodon sd-button share-icon"
763				href="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/?share=mastodon"
764				target="_blank"
765				aria-labelledby="sharing-mastodon-6170"
766				>
767				<span id="sharing-mastodon-6170" hidden>Share on Mastodon (Opens in new window)</span>
768				<span>Mastodon</span>
769			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
770				data-shared="sharing-facebook-6170"
771				class="share-facebook sd-button share-icon"
772				href="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/?share=facebook"
773				target="_blank"
774				aria-labelledby="sharing-facebook-6170"
775				>
776				<span id="sharing-facebook-6170" hidden>Share on Facebook (Opens in new window)</span>
777				<span>Facebook</span>
778			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
779				data-shared="sharing-threads-6170"
780				class="share-threads sd-button share-icon"
781				href="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/?share=threads"
782				target="_blank"
783				aria-labelledby="sharing-threads-6170"
784				>
785				<span id="sharing-threads-6170" hidden>Share on Threads (Opens in new window)</span>
786				<span>Threads</span>
787			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
788				data-shared="sharing-linkedin-6170"
789				class="share-linkedin sd-button share-icon"
790				href="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/?share=linkedin"
791				target="_blank"
792				aria-labelledby="sharing-linkedin-6170"
793				>
794				<span id="sharing-linkedin-6170" hidden>Share on LinkedIn (Opens in new window)</span>
795				<span>LinkedIn</span>
796			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
797				data-shared="sharing-reddit-6170"
798				class="share-reddit sd-button share-icon"
799				href="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/?share=reddit"
800				target="_blank"
801				aria-labelledby="sharing-reddit-6170"
802				>
803				<span id="sharing-reddit-6170" hidden>Share on Reddit (Opens in new window)</span>
804				<span>Reddit</span>
805			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
806				data-shared="sharing-email-6170"
807				class="share-email sd-button share-icon"
808				href="mailto:?subject=%5BShared%20Post%5D%20Toggle%20visibility%20of%20a%20group%20of%20X3D%20%2F%20glTF%20nodes&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F07%2F25%2Ftoggle-visibility-of-a-group-of-x3d-gltf-nodes%2F&#038;share=email"
809				target="_blank"
810				aria-labelledby="sharing-email-6170"
811				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="3e96fc3c44" data-email-share-track-url="https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/?share=email">
812				<span id="sharing-email-6170" hidden>Email a link to a friend (Opens in new window)</span>
813				<span>Email</span>
814			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
815
816        
817        <a href="https://forum.castle-engine.io/t/toggle-visibility-of-a-group-of-x3d-gltf-nodes/2188#comments">Comments on the forum (2) ➤</a>
818</article><!-- #post-## -->
819
820<article id="post-6159" class="post-6159 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-castleengine tag-gamedev tag-pascal tag-shaders tag-webgl">
821                <header class="entry-header">
822                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/" rel="bookmark">Web: water, terrain, shadow maps, alpha treatment, keys on losing focus</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/" rel="bookmark"><time class="entry-date published updated" datetime="2026-07-17T19:58:48+00:00">July 17, 2026</time></a></span></p>        </header><!-- .entry-header -->
823
824        <div class="entry-content">
825                <table class="thumbnails thumbnails-align-right"><tr><td>
826          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/07/1_terrain.png"
827             class="screenshot"
828             title="Terrain + water demo on web"><img loading="lazy" decoding="async"
829            style="float: right"
830            src="https://castle-engine.io/wp/wp-content/uploads/2026/07/1_terrain-200x137.png"
831             width="200" height="137" 
832            alt="Terrain + water demo on web"
833          ></a></td></tr><tr><td>
834          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/07/2_shrine.png"
835             class="screenshot"
836             title="Shadow maps on web"><img loading="lazy" decoding="async"
837            style="float: right"
838            src="https://castle-engine.io/wp/wp-content/uploads/2026/07/2_shrine-200x139.png"
839             width="200" height="139" 
840            alt="Shadow maps on web"
841          ></a></td></tr><tr><td>
842          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/07/5_walking_trees.png"
843             class="screenshot"
844             title="Walking Adventure - tree on web"><img loading="lazy" decoding="async"
845            style="float: right"
846            src="https://castle-engine.io/wp/wp-content/uploads/2026/07/5_walking_trees-200x139.png"
847             width="200" height="139" 
848            alt="Walking Adventure - tree on web"
849          ></a></td></tr><tr><td>
850          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/07/4_platformer.png"
851             class="screenshot"
852             title="Platformer on web"><img loading="lazy" decoding="async"
853            style="float: right"
854            src="https://castle-engine.io/wp/wp-content/uploads/2026/07/4_platformer-200x139.png"
855             width="200" height="139" 
856            alt="Platformer on web"
857          ></a></td></tr><tr><td>
858          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/07/3_aberration.png"
859             class="screenshot"
860             title="Chromatic aberration on web"><img loading="lazy" decoding="async"
861            style="float: right"
862            src="https://castle-engine.io/wp/wp-content/uploads/2026/07/3_aberration-200x132.png"
863             width="200" height="132" 
864            alt="Chromatic aberration on web"
865          ></a></td></tr></table>
866<p>Rendering to texture (FBO, our <code><a href="https://castle-engine.io/apidoc/html/CastleGLImages.TGLRenderToTexture.html">TGLRenderToTexture</a></code>) works now on the <a href="https://castle-engine.io/web">web</a>.</p>
867<p>This enables a few features on the web:</p>
868<ul>
869<li>Water, with reflections and waves, visible in the <a href="https://castle-engine.io/web-demos/examples/terrain/">terrain demo</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/terrain">source code in examples/terrain/</a>) is correct now on the web.</p>
870</li>
871<li>
872<p><a href="https://castle-engine.io/screen_effects">Screen (Post-Processing) Effects</a> work on the web now.</p>
873<ul>
874<li><a href="https://castle-engine.io/web-demos/examples/screen_effects_demo/">screen_effects_demo demo</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/screen_effects_demo">source code in examples/screen_effects_demo/</a>).</p>
875</li>
876<li>
877<p><a href="https://castle-engine.io/web-demos/castle-model-viewer-mobile/">Model viewer</a> includes demos of screen effects: switch to demos of <em>Defocus</em>, and <em>Chromatic Aberration</em>.</p>
878</li>
879</ul>
880</li>
881<li>
882<p><a href="https://castle-engine.io/shadow_maps">Shadow maps</a> work now correctly on the web.</p>
883<ul>
884<li>Our <a href="https://castle-engine.io/web-demos/castle-model-viewer-mobile/">model viewer</a> includes 2 demos: switch to <em>&#8220;Shinto Shrine&#8221;</em> and <em>&#8220;Simple Shadow Maps&#8221;</em> models (scroll down in the <em>&#8220;Open&#8221;</em> panel to see them).</p>
885</li>
886<li>
887<p>Another demo: <a href="https://castle-engine.io/web-demos/examples/research_special_rendering_methods/test_rendering_opengl_capabilities/">test_rendering_opengl_capabilities demo</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/research_special_rendering_methods/test_rendering_opengl_capabilities">source code in examples/research_special_rendering_methods/test_rendering_opengl_capabilities/</a>) (walk to the <em>&#8220;Some text&#8221;</em> geometry over which a moving sphere casts a shadow).</p>
888</li>
889<li>
890<p>Note: We plan a <a href="https://castle-engine.io/roadmap#shadow_maps">big upgrade to shadow maps</a>, making using them in the engine much more natural. So stay tuned for more/better demos of shadow maps:)</p>
891</li>
892</ul>
893</li>
894</ul>
895<p>We also fixed <em>alpha treatment</em> on the <a href="https://castle-engine.io/web">web</a>.</p>
896<ul>
897<li>This fixes a few subtle bugs, as in various edge-cases we wrote to the color buffer pixels with alpha &lt; 1. This happened e.g. when displaying hearts in the <a href="https://castle-engine.io/web-demos/examples/2d_games/platformer/">platformer demo</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/2d_games/platformer">source code in examples/2d_games/platformer/</a>), cat hair in model viewer, tree leaves in the <a href="https://castle-engine.io/web-demos/examples/3d_games/walking_adventure/">walking adventure demo</a> (<a href="https://github.com/castle-engine/castle-engine/tree/master/examples/3d_games/walking_adventure">source code in examples/3d_games/walking_adventure/</a>).</p>
898</li>
899<li>
900<p>This was harmless on non-web platforms (where pixel alpha of the color buffer is used only for eventual blending with incoming colors; nothing cares what is the final calculated alpha left in the buffer). But on web, in the past, our canvas was using <em>&#8220;blending with page background (typically white)&#8221;</em>.</p>
901</li>
902<li>
903<p>This is fixed now, making the web rendering work just like other platforms. See <a href="https://github.com/castle-engine/castle-engine/blob/a28b45bc1bd9f6bda7376e83a34bf71eea45b023/src/window/castlewindow_webassembly.inc#L148">comment here</a> for more information.</p>
904</li>
905</ul>
906<p>We now correctly &#8220;reset&#8221; keys pressed state after you switch a browser page or application:</p>
907<ul>
908<li>Previously, switching tabs or applications by key combo like <em>Ctrl+Tab</em>, <em>Alt+Tab</em> could leave the engine thinking that <em>&#8220;Ctrl&#8221;</em> or <em>&#8220;Tab&#8221;</em> are pressed.</p>
909</li>
910<li>
911<p>This had some consequences, e.g. <code><a href="https://castle-engine.io/apidoc/html/CastleCameras.TCastleWalkNavigation.html">TCastleWalkNavigation</a></code> will refuse movement by AWSD if it thinks that you hold down <em>Ctrl/Alt</em> modifier. (And it will do &#8220;run&#8221; if it thinks you hold down <em>Shift</em>!)</p>
912</li>
913<li>
914<p>This is fixed now, we react to <a href="https://developer.mozilla.org/en-US/docs/Web/API/Window/blur_event">blur</a> event by switching all keys &#8220;up&#8221;.</p>
915</li>
916</ul>
917<p>We have also fixed both terrain and water shaders for <em>Chromium</em>-based browsers (like <a href="https://vivaldi.com/">Vivaldi</a> or <em>Google Chrome</em>). They needed <code>highp</code> in certain shaders to work reliably (water waves, terrain textures smooth), as they multiply bigger floats with small floats.</p>
918<p>As always, we hope you have fun developing games with <em>Castle Game Engine</em>! And if you like what we do, we <a href="https://www.patreon.com/c/castleengine">appreciate support on Patreon</a>!</p>
919<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
920				data-shared="sharing-bluesky-6159"
921				class="share-bluesky sd-button share-icon"
922				href="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/?share=bluesky"
923				target="_blank"
924				aria-labelledby="sharing-bluesky-6159"
925				>
926				<span id="sharing-bluesky-6159" hidden>Share on Bluesky (Opens in new window)</span>
927				<span>Bluesky</span>
928			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
929				data-shared="sharing-mastodon-6159"
930				class="share-mastodon sd-button share-icon"
931				href="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/?share=mastodon"
932				target="_blank"
933				aria-labelledby="sharing-mastodon-6159"
934				>
935				<span id="sharing-mastodon-6159" hidden>Share on Mastodon (Opens in new window)</span>
936				<span>Mastodon</span>
937			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
938				data-shared="sharing-facebook-6159"
939				class="share-facebook sd-button share-icon"
940				href="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/?share=facebook"
941				target="_blank"
942				aria-labelledby="sharing-facebook-6159"
943				>
944				<span id="sharing-facebook-6159" hidden>Share on Facebook (Opens in new window)</span>
945				<span>Facebook</span>
946			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
947				data-shared="sharing-threads-6159"
948				class="share-threads sd-button share-icon"
949				href="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/?share=threads"
950				target="_blank"
951				aria-labelledby="sharing-threads-6159"
952				>
953				<span id="sharing-threads-6159" hidden>Share on Threads (Opens in new window)</span>
954				<span>Threads</span>
955			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
956				data-shared="sharing-linkedin-6159"
957				class="share-linkedin sd-button share-icon"
958				href="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/?share=linkedin"
959				target="_blank"
960				aria-labelledby="sharing-linkedin-6159"
961				>
962				<span id="sharing-linkedin-6159" hidden>Share on LinkedIn (Opens in new window)</span>
963				<span>LinkedIn</span>
964			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
965				data-shared="sharing-reddit-6159"
966				class="share-reddit sd-button share-icon"
967				href="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/?share=reddit"
968				target="_blank"
969				aria-labelledby="sharing-reddit-6159"
970				>
971				<span id="sharing-reddit-6159" hidden>Share on Reddit (Opens in new window)</span>
972				<span>Reddit</span>
973			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
974				data-shared="sharing-email-6159"
975				class="share-email sd-button share-icon"
976				href="mailto:?subject=%5BShared%20Post%5D%20Web%3A%20water%2C%20terrain%2C%20shadow%20maps%2C%20alpha%20treatment%2C%20keys%20on%20losing%20focus&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F07%2F17%2Fweb-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus%2F&#038;share=email"
977				target="_blank"
978				aria-labelledby="sharing-email-6159"
979				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="6ea6722221" data-email-share-track-url="https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/?share=email">
980				<span id="sharing-email-6159" hidden>Email a link to a friend (Opens in new window)</span>
981				<span>Email</span>
982			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
983
984        
985        <a href="https://forum.castle-engine.io/t/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/2186#comments">Comments on the forum ➤</a>
986</article><!-- #post-## -->
987
988<article id="post-6149" class="post-6149 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-castleengine tag-codesigning tag-gamedev tag-pascal tag-windows">
989                <header class="entry-header">
990                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/" rel="bookmark">Windows downloads now code-signed &#8211; no more Smart App Control blocks. Plus smaller downloads (7z, tar.xz)</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/" rel="bookmark"><time class="entry-date published updated" datetime="2026-07-14T23:45:32+00:00">July 14, 2026</time></a></span></p>        </header><!-- .entry-header -->
991
992        <div class="entry-content">
993                <table class="thumbnails thumbnails-align-right"><tr><td>
994          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/07/Zrzut-ekranu-2026-07-15-013929.png"
995             class="screenshot"
996             title="Editor code-signed on Windows"><img loading="lazy" decoding="async"
997            style="float: right"
998            src="https://castle-engine.io/wp/wp-content/uploads/2026/07/Zrzut-ekranu-2026-07-15-013929-200x103.png"
999             width="200" height="103" 
1000            alt="Editor code-signed on Windows"
1001          ></a></td></tr></table>
1002<p>Our <a href="https://castle-engine.io/download">downloads</a> for Windows include now all the executables <em>code-signed</em>, which means that they are trusted and running the engine will raise fewer alarms from various Windows protection tools. In particular, <em>&#8220;Smart App Control&#8221;</em> (mentioned also in <a href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/">past news</a>) will no longer block us, randomly preventing you from running compilers or your applications. This applies to all our downloads, including the automatic snapshots made after every commit+push.</p>
1003<p>We have also decreased a bit the size of our downloads, thanks to a small de-duplication fix and using more compressed formats for some systems (tar.xz for Linux, 7z for Windows).</p>
1004<p>Let this also be an occasion to ask for <a href="https://www.patreon.com/c/castleengine">your support on Patreon</a>. Your support really matters, enabling me to spend more time working on the engine. Our &#8220;infrastructure costs&#8221; are rising &#8212; the signing, employed now, will cost us an extra 120 USD / year (this comes on top of Apple membership costs, servers costs, domains etc., and on top of my cost of living 🙂 ).</p>
1005<p><em>That was the short version of the news 🙂</em></p>
1006<p>What follows is a detailed description of how / why we did the signing. I hope it is interesting, in particular if you wonder how to code-sign on Windows yourself, but admittedly there&#8217;s a lot of &#8220;gory&#8221; details below. Read on if you&#8217;re brave!</p>
1007<h2>Various solutions to sign on Windows</h2>
1008<p>We have done a lot of research about how / which signing solution to use:</p>
1009<ol>
1010<li>I rejected usage of <em>Certum</em> certificates. They are cheap, but using them with CI <a href="https://github.com/reactiveui/actions-common/blob/main/.github/actions/certum-sign/action.yml">requires quite some hack with Docker executing GUI application inside</a>. I don&#8217;t believe this will be maintainable for a long-run, as we try to use it also for CI builds.</p>
1011</li>
1012<li>
1013<p>I had high hopes but in the end resigned from <a href="https://signpath.org/">using SignPath Foundation for OSS projects</a>. It&#8217;s a great initiative for open-source projects, <em>&#8220;SignPath Foundation&#8221;</em> can provide you with tools and sign your executables for free. However, it wasn&#8217;t a fit for us:</p>
1014<ul>
1015<li>
1015The process puts some constraints how we can use signing, in particular it is not allowed to sign 3rd-party tools (this means bundled FPC in our case) we ship with our engine. See their <a href="https://signpath.org/terms.html">terms</a>.</p>
1016</li>
1017<li>
1018<p>It also has additional constraints: <em>&#8220;Every release needs manual approval for signing.&#8221;</em>, signing 48 GB / year. So it&#8217;s not really for CI snapshots, only for &#8220;real&#8221; stable releases (which we should do more often, but that&#8217;s another story 🙂 ).</p>
1019</li>
1020<li>
1021<p>It would also practically tie us to GitHub, since their <a href="https://docs.signpath.io/trusted-build-systems/">Trusted Build Systems</a> for OSS support only <em>GitHub Actions</em> or <em>AppVeyor</em>, you cannot build anywhere else. And I want to avoid being limited to only these 2 CI systems &#8212; I <a href="https://castle-engine.io/wp/2026/01/18/engine-downloads-with-bundled-fpc-for-all-platforms-castle-build-ci-to-easily-use-ci-with-our-engine-woodpecker-codeberg-ci-examples-and-impressions/">like Codeberg more and more, and GitHub less and less</a> and I want to keep our migration options open 🙂</p>
1022</li>
1023</ul>
1024</li>
1025<li>
1026<p>I eventually settled on <a href="https://azure.microsoft.com/en-us/products/artifact-signing">Azure Artifact Signing</a> (formerly known as <em>Azure Trusted Signing</em>), a signing service straight from Microsoft.</p>
1027<ul>
1028<li>It costs (10 USD / m) but it gives us the flexibility we need.</p>
1029</li>
1030<li>
1031<p>Tooling is really good and cross-platform. One can build any script on top of Windows <code>signtool</code> or cross-platform <a href="https://ebourg.github.io/jsign/#example-trustedsigning">jsign</a>.</p>
1032</li>
1033<li>
1034<p>We can sign everything &#8212; engine tools, and compiler we use.</p>
1035</li>
1036<li>
1037<p>It&#8217;s really well made to work in CI. The way <a href="https://github.com/azure/login">Azure Login</a> works with <a href="https://github.com/azure/login#login-with-openid-connect-oidc-recommended">OIDC (OpenID Connect)</a> was new to me, and really cool. It took some time to understand and set up&#8230; but the end result is really nice. It means that CI system (which can be GitHub, but also <a href="https://codeberg.org/forgejo/forgejo/pulls/10481">Forgejo implements OIDC workload identity federation</a>) creates a token, authenticating that this is a particular project on a particular branch. <strong>There&#8217;s no need to establish/exchange any secret (that would be an attack possibility on our Azure account) to make signing work from CI.</strong></p>
1038</li>
1039<li>
1040<p>Note: this is not available for individuals outside US/Canada, but luckily I&#8217;m a <a href="https://castle-engine.io/donate">company in Poland</a> so we are eligible for it.</p>
1041</li>
1042</ul>
1043</li>
1044</ol>
1045<p>All in all, we have a reliable system, and you shall see all our executables on Windows signed by <em>&#8220;Castle Game Engine &#8211; Michalis Kamburelis&#8221;</em>.</p>
1046<h2>Our scripts to sign in castle-build-ci</h2>
1047<p>Our <a href="https://github.com/castle-engine/castle-build-ci/">castle-build-ci</a> repository has now <em>bash</em> scripts to perform signing using <em>Azure Artifact Signing</em>. You&#8217;re welcome to use them too, they are generic and <a href="https://github.com/castle-engine/castle-build-ci/tree/master/windows">documented in castle-build-ci/windows</a>.</p>
1048<p>As with <a href="https://github.com/castle-engine/castle-build-ci/tree/master/apple">Apple signing scripts (already done in the past)</a>, I decided to design this as <em>bash scripts</em> (portable to all systems, including <em>Windows</em>, and of course all <em>Unix</em> like <em>Linux, FreeBSD, macOS</em>). This is in contrast to using <a href="https://github.com/Azure/artifact-signing-action">ready GitHub Actions for signing, like this one</a>. Why bash scripts? I explained the reasons in <a href="https://github.com/castle-engine/castle-build-ci/tree/master/windows#why-express-this-as-bash-scripts-not-github-actions">detail here</a>, in short:</p>
1049<ul>
1050<li>Having this as bash script is more powerful: can be used in the middle of another bash script. And can be passed as <a href="https://github.com/castle-engine/castle-engine/blob/7327fba69f98d11cf5fc7863a5040ead4e25bd94/tools/internal/pack_release/pack_release.sh#L770"><em>InnoSetup</em> command to sign uninstaller too</a>.</p>
1051</li>
1052<li>
1053<p>bash script can be tested on a local system, i.e. I can just use the same scripts to sign locally, not in CI. I found this to be a great help when debugging &#8212; I don&#8217;t need to wait for <em>GitHub Actions</em> to perform first test of the scripts.</p>
1054</li>
1055<li>
1056<p>It keeps us more independent from <em>GitHub Actions</em>, which is desirable for me, as I&#8217;m really looking forward to jump to <em>Codeberg</em>, and we already test their <a href="https://castle-engine.io/wp/2026/01/18/engine-downloads-with-bundled-fpc-for-all-platforms-castle-build-ci-to-easily-u
1056se-ci-with-our-engine-woodpecker-codeberg-ci-examples-and-impressions/">Woodpecker CI</a>. <em>Forgejo Actions</em> may also be a viable option at some point. I <em>do not want</em> to depend on GitHub for our engine existence.</p>
1057</li>
1058</ul>
1059<h2>Signing everything!</h2>
1060<p><a href="https://github.com/castle-engine/castle-fpc">FPC builds from castle-fpc</a> are now signed, on both macOS and Windows.</p>
1061<p><a href="https://github.com/castle-engine/castle-lazarus/">Lazarus builds from castle-lazarus</a> are now signed too, on both macOS and Windows. We don&#8217;t bundle it with CGE for now, but it&#8217;s ready.</p>
1062<p>Our Castle Game Engine releases are now signed, by our <a href="https://github.com/castle-engine/castle-engine/blob/master/tools/internal/pack_release/pack_release.sh">pack_release.sh</a> script (controlled by <a href="https://github.com/castle-engine/castle-engine/blob/master/.github/workflows/test-and-pack-runner-native.yml">GitHub Action workflows</a>). Everything is signed:</p>
1063<ul>
1064<li>All our tools are signed (<code>castle-engine</code>, <code>castle-editor</code>, <code>castle-model-viewer</code>&#8230;).</li>
1065<li>Installer and uninstaller are signed.</li>
1066<li><code>pasls</code> (LSP for <a href="https://castle-engine.io/vscode">VS Code and other editors</a>) is signed.</li>
1067<li>And bundled FPC is signed, as mentioned above.</li>
1068</ul>
1069<p>Finally, standalone snapshot releases of our viewers are also signed:</p>
1070<ul>
1071<li><a href="https://castle-engine.io/castle-model-viewer">Castle Model Viewer (and converter)</a></li>
1072<li><a href="https://castle-engine.io/castle-image-viewer">Castle Image Viewer</a></li>
1073</ul>
1074<p>The tests confirm this is now good and makes Windows happy. I can install our engine, run editor, see detected (bundled) FPC version, create new project, build it and run &#8212; and everything works even with the dreaded <em>&#8220;Smart App Control&#8221;</em> turned <em>&#8220;On&#8221;</em>.</p>
1075<p>Our <a href="https://castle-engine.io/vscode">Pascal Language Server, used by VS Code / VS Codium extension</a> also works without any fuss, as it is also signed.</p>
1076<h2>Size optimizations</h2>
1077<p>We also did some size optimizations, since we&#8217;re aware the engine downloads are big, and we&#8217;re looking for ways to trim them down (ideally: still keeping examples as part of default downloads).</p>
1078<ul>
1079<li>We found and removed duplicated binaries of our tools. These needlessly inflated download size by 40-70 MB (depending on system) &#8212; fixed now.</p>
1080</li>
1081<li>
1082<p>We added alternative archives compressed by 7z (for Windows) and tar.xz (for Linux). These have much smaller sizes than simple zip, lowering download size by ~250 MB (for tar.xz) and even 300+ MB (for 7z). No loss of functionality, just better compression!</p>
1083<ul>
1084<li>So, we will continue to <a href="https://github.com/castle-engine/castle-engine/releases/tag/snapshot">provide zip versions, for maximum compatibility</a>&#8230;</li>
1085<li>but our <a href="https://castle-engine.io/download">default downloads</a> now lead to smaller tar.xz on Linux.</li>
1086<li>(On Windows, we still lead to InnoSetup installer, which is already a better compression than plain zip.)</li>
1087</ul>
1088</li>
1089<li>We also removed &#8220;non bundled&#8221; download archives, because maintaining them was becoming too much work, our GHA scripts were getting quite complicated. They were only available for 2 platforms (<em>win64/x86_64</em> and <em>linux/x86_64</em>) and the size gain from not bundling FPC was &lt; 100 MB after above optimizations.</p>
1090</li>
1091</ul>
1092<h2>Thank you!</h2>
1093<p>
1093Woah. This was a big infrastructure change, to make all our Windows stuff signed. Enjoy!</p>
1094<p>And if you like what we do, and like our long news posts :), please <a href="https://www.patreon.com/c/castleengine">support us on Patreon</a>.</p>
1095<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
1096				data-shared="sharing-bluesky-6149"
1097				class="share-bluesky sd-button share-icon"
1098				href="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/?share=bluesky"
1099				target="_blank"
1100				aria-labelledby="sharing-bluesky-6149"
1101				>
1102				<span id="sharing-bluesky-6149" hidden>Share on Bluesky (Opens in new window)</span>
1103				<span>Bluesky</span>
1104			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
1105				data-shared="sharing-mastodon-6149"
1106				class="share-mastodon sd-button share-icon"
1107				href="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/?share=mastodon"
1108				target="_blank"
1109				aria-labelledby="sharing-mastodon-6149"
1110				>
1111				<span id="sharing-mastodon-6149" hidden>Share on Mastodon (Opens in new window)</span>
1112				<span>Mastodon</span>
1113			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
1114				data-shared="sharing-facebook-6149"
1115				class="share-facebook sd-button share-icon"
1116				href="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/?share=facebook"
1117				target="_blank"
1118				aria-labelledby="sharing-facebook-6149"
1119				>
1120				<span id="sharing-facebook-6149" hidden>Share on Facebook (Opens in new window)</span>
1121				<span>Facebook</span>
1122			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
1123				data-shared="sharing-threads-6149"
1124				class="share-threads sd-button share-icon"
1125				href="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/?share=threads"
1126				target="_blank"
1127				aria-labelledby="sharing-threads-6149"
1128				>
1129				<span id="sharing-threads-6149" hidden>Share on Threads (Opens in new window)</span>
1130				<span>Threads</span>
1131			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
1132				data-shared="sharing-linkedin-6149"
1133				class="share-linkedin sd-button share-icon"
1134				href="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/?share=linkedin"
1135				target="_blank"
1136				aria-labelledby="sharing-linkedin-6149"
1137				>
1138				<span id="sharing-linkedin-6149" hidden>Share on LinkedIn (Opens in new window)</span>
1139				<span>LinkedIn</span>
1140			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
1141				data-shared="sharing-reddit-6149"
1142				class="share-reddit sd-button share-icon"
1143				href="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/?share=reddit"
1144				target="_blank"
1145				aria-labelledby="sharing-reddit-6149"
1146				>
1147				<span id="sharing-reddit-6149" hidden>Share on Reddit (Opens in new window)</span>
1148				<span>Reddit</span>
1149			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
1150				data-shared="sharing-email-6149"
1151				class="share-email sd-button share-icon"
1152				href="mailto:?subject=%5BShared%20Post%5D%20Windows%20downloads%20now%20code-signed%20-%20no%20more%20Smart%20App%20Control%20blocks.%20Plus%20smaller%20downloads%20%287z%2C%20tar.xz%29&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F07%2F14%2Fwindows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz%2F&#038;share=email"
1153				target="_blank"
1154				aria-labelledby="sharing-email-6149"
1155				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="5bce8e8323" data-email-share-track-url="https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/?share=email">
1156				<span id="sharing-email-6149" hidden>Email a link to a friend (Opens in new window)</span>
1157				<span>Email</span>
1158			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
1159
1160        
1161        <a href="https://forum.castle-engine.io/t/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/2183#comments">Comments on the forum ➤</a>
1162</article><!-- #post-## -->
1163
1164<article id="post-6137" class="post-6137 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-castleengine tag-delphi tag-gamedev tag-linux tag-macos">
1165                <header class="entry-header">
1166                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/" rel="bookmark">Delphi improvements: build tool uses msbuild, allows to pick Delphi version, better generated DPROJ, hints to fix PAServer on Linux and linking on macOS</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/" rel="bookmark"><time class="entry-date published updated" datetime="2026-07-05T05:57:10+00:00">July 5, 2026</time></a></span></p>        </header><!-- .entry-header -->
1167
1168        <div class="entry-content">
1169                <table class="thumbnails thumbnails-align-right"><tr><td>
1170          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/07/delphi_walking.png"
1171             class="screenshot"
1172             title="Delphi + Castle Game Engine"><img loading="lazy" decoding="async"
1173            style="float: right"
1174            src="https://castle-engine.io/wp/wp-content/uploads/2026/07/delphi_walking-200x107.png"
1175             width="200" height="107" 
1176            alt="Delphi + Castle Game Engine"
1177          ></a></td></tr></table>
1178<p>We improved how our engine tools (<a href="https://castle-engine.io/build_tool">build tool</a> and <a href="https://castle-engine.io/editor">editor</a>) call Delphi. These improvements take us closer to <a href="https://castle-engine.io/delphi_more_platforms">making our engine compatible with Delphi for Android, iOS and macOS</a> and improve how you can build with Delphi from shell (e.g. from <em>Continuous Integration</em> workflows) for all platforms.</p>
1179<ol>
1180<li>First of all, our <a href="https://castle-engine.io/build_tool">build tool</a>, when using Delphi (pass <code>--compiler=delphi</code>), now calls <a href="https://docwiki.embarcadero.com/RADStudio/Sydney/en/Building_a_Project_Using_an_MSBuild_Command">msbuild</a> when you build for non-Windows. We do not directly call <code>dcc*</code> compilers.
1181<p>This makes building non-Windows applications with Delphi, using command-line, much easier. Notably, the command <code>castle-engine compile --compiler=delphi --os=linux</code> just works. See <a href="https://castle-engine.io/delphi_linux#_for_ci_continuous_integration_command_line_compilation_using_delphi_for_linux">using Delphi to build Linux applications</a>.</p>
1182<p>Note: pass <code>--verbose</code> to our build tool to see more details about what is executed. In effect, we pass options to <code>msbuild</code> to make it more verbose too. By default, <code>msbuild</code> output will be silent, unless Delphi will report some warnings/hints.</p>
1183<p>See our <a href="https://github.com/castle-engine/castle-engine/blob/master/tools/build-tool/delphi_dcc_vs_msbuild.md">dcc vs msbuild comparison</a> for more explanation.</p>
1184<p>We still fallback to using <code>dcc*</code></p>
1185<ul>
1186<li>if we cannot find DPROJ, </li>
1187<li>or if you pass <code>--use-delphi-dcc</code> option to the build tool,</li>
1188<li>or you build for Windows (because using <code>dcc</code> directly avoids the 32k command-line length problem, see <a href="https://github.com/castle-engine/castle-engine/blob/master/tools/build-tool/delphi_dcc_vs_msbuild.md">dcc vs msbuild comparison</a>). </li>
1189</ul>
1190<p><em>Note that this section of the post has been edited 1 day after publishing. We had to change our course. Initially, we tried to use <code>msbuild</code> also for Windows with Delphi > 10, but this was not good, we&#8217;ve been hit by the 32k command-line length problem also with Delphi 13.</em></p>
1191</li>
1192<li>
1193<p>Build tool allows to request specific Delphi version (instead of always calling the latest) using <code>--delphi-version</code> parameter. For example, to compile using Delphi 13, call</p>
1194<p></p><!-- Urvanov Syntax Highlighter v2.9.1 -->
1195
1196		<div id="urvanov-syntax-highlighter-6ab4e2a49b1c0756638906" class="urvanov-syntax-highlighter-syntax crayon-theme-monokai urvanov-syntax-highlighter-font-monospace urvanov-syntax-highlighter-os-pc print-yes notranslate" data-settings=" minimize scroll-mouseover" style=" margin-top: 12px; margin-bottom: 12px; ">
1197		
1198			<div class="urvanov-syntax-highlighter-plain-wrap"><textarea wrap="soft" class="urvanov-syntax-highlighter-plain print-no" data-settings="dblclick" readonly style="-moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4; ">
1199castle-engine compile --delphi-version=37.0 --compiler=delphi</textarea></div>
1200			<div class="urvanov-syntax-highlighter-main" style="">
1201				<table class="crayon-table">
1202					<tr class="urvanov-syntax-highlighter-row">
1203				<td class="crayon-nums " data-settings="show">
1204					<div class="urvanov-syntax-highlighter-nums-content" style=""><div class="crayon-num" data-line="urvanov-syntax-highlighter-6ab4e2a49b1c0756638906-1">1</div></div>
1205				</td>
1206						<td class="urvanov-syntax-highlighter-code"><div class="crayon-pre" style=" -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;"><div class="crayon-line" id="urvanov-syntax-highlighter-6ab4e2a49b1c0756638906-1"><span class="crayon-v">castle</span><span class="crayon-o">-</span><span class="crayon-e">engine </span><span class="crayon-v">compile</span><span class="crayon-h"> </span>--<span class="crayon-v">delphi</span><span class="crayon-o">-</span><span class="crayon-v">version</span><span class="crayon-o">=</span><span class="crayon-cn">37.0</span><span class="crayon-h"> </span>--<span class="crayon-v">compiler</span><span class="crayon-o">=</span><span class="crayon-v">delphi</span></div></div></td>
1207					</tr>
1208				</table>
1209			</div>
1210		</div>
1211<!-- [Format Time: 0.0042 seconds] -->
1212<p></li>
1213<li>When generating DPROJ for your project, we no longer add absolute paths to engine units in DPROJ.
1214<p>We used to do this for a long time, knowing it&#8217;s not a good solution&#8230; time to remove this hack.</p>
1215<ul>
1216<li>The hack made DPROJ files, generated in the past, specific to given user on a given machine, since your DPROJ contained something like <code>C:\Users\Michalis\castle-engine\src\...</code> in search paths. This was not nice to put in a version control system or otherwise share with other developers/machines.</p>
1217</li>
1218<li>
1219<p>It also made DPROJ specific to a given CGE version, as we change engine paths between versions.</p>
1220</li>
1221</ul>
1222<p>New approach: We rely on:</p>
1223<ul>
1224<li>If you build from Delphi IDE: you must do <em>&#8220;Configure Delphi to Use Engine&#8221;</em>, following <a href="https://castle-engine.io/delphi_packages">Installing Delphi Packages</a> instructions.</p>
1225</li>
1226<li>
1227<p>If you build from our build tool or editor: we provide search paths to find the engine (in both <code>dcc</code> and <code>msbuild</code> approaches) automatically, on the command-line, in all cases. You don&#8217;t need to do anything.</p>
1228</li>
1229</ul>
1230</li>
1231<li>
1232<p>If you have issues with <a href="https://castle-engine.io/delphi_linux">Delphi+Linux</a> and PAServer due to <em>&#8220;too new Python on Linux&#8221;</em>, see <a href="https://castle-engine.io/delphi_linux#_installing_pa_server">here for solution</a>.</p>
1233<p>In short, you have to install older Python (&lt;= 3.12). On Ubuntu it&#8217;s easiest to do using <a href="https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa">Python packages in PPA by &#8220;deadsnakes&#8221;</a>. Then make sure you symlink PAServer libraries to use that older Python.</p>
1234</li>
1235<li>
1236<p>Maybe you have problems building from Delphi 13 for <em>macOS/Aarch64 (Silicon)</em>? Then we have another tip:</p>
1237<ul>
1238<li>you must install the <a href="https://blogs.embarcadero.com/rad-studio-13-1-may-patch-available/">patch from Embarcadero</a> with the fix,</p>
1239</li>
1240<li>
1241<p>then hunt down the new PAServer version for macOS inside the folder like <code>C:\Users\&lt;username&gt;\Documents\Embarcadero\Studio\37.0\CatalogRepository\13.1Patch-May\1.0\PAServer</code> . It is <strong>not</strong> applied to your Delphi installation, <code>C:\Program Files (x86)\Embarcadero\Studio\37.0\PAServer</code> will still contain the broken version! It&#8217;
1241s not obvious as the <a href="https://blogs.embarcadero.com/rad-studio-13-1-may-patch-available/">patch docs merely say &#8220;This is copied to the patch download folder.&#8221;</a>.</p>
1242</li>
1243<li>
1244<p>Install the PAServer from <code>C:\Users\&lt;username&gt;\Documents\Embarcadero\Studio\37.0\CatalogRepository\13.1Patch-May\1.0\</code> on your macOS machine, and reimport macOS libraries (<em>&#8220;Options -> Deployment -> SDK Manager&#8221;</em>).</p>
1245</li>
1246</ul>
1247</li>
1248</ol>
1249<p>Thanks for reading and stay tuned for more Delphi news &#8212; we are working on something exciting 🙂 As always, we appreciate your support on <a href="https://www.patreon.com/cw/castleengine">Patreon</a>.</p>
1250<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
1251				data-shared="sharing-bluesky-6137"
1252				class="share-bluesky sd-button share-icon"
1253				href="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/?share=bluesky"
1254				target="_blank"
1255				aria-labelledby="sharing-bluesky-6137"
1256				>
1257				<span id="sharing-bluesky-6137" hidden>Share on Bluesky (Opens in new window)</span>
1258				<span>Bluesky</span>
1259			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
1260				data-shared="sharing-mastodon-6137"
1261				class="share-mastodon sd-button share-icon"
1262				href="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/?share=mastodon"
1263				target="_blank"
1264				aria-labelledby="sharing-mastodon-6137"
1265				>
1266				<span id="sharing-mastodon-6137" hidden>Share on Mastodon (Opens in new window)</span>
1267				<span>Mastodon</span>
1268			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
1269				data-shared="sharing-facebook-6137"
1270				class="share-facebook sd-button share-icon"
1271				href="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/?share=facebook"
1272				target="_blank"
1273				aria-labelledby="sharing-facebook-6137"
1274				>
1275				<span id="sharing-facebook-6137" hidden>Share on Facebook (Opens in new window)</span>
1276				<span>Facebook</span>
1277			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
1278				data-shared="sharing-threads-6137"
1279				class="share-threads sd-button share-icon"
1280				href="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/?share=threads"
1281				target="_blank"
1282				aria-labelledby="sharing-threads-6137"
1283				>
1284				<span id="sharing-threads-6137" hidden>Share on Threads (Opens in new window)</span>
1285				<span>Threads</span>
1286			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
1287				data-shared="sharing-linkedin-6137"
1288				class="share-linkedin sd-button share-icon"
1289				href="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/?share=linkedin"
1290				target="_blank"
1291				aria-labelledby="sharing-linkedin-6137"
1292				>
1293				<span id="sharing-linkedin-6137" hidden>Share on LinkedIn (Opens in new window)</span>
1294				<span>LinkedIn</span>
1295			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
1296				data-shared="sharing-reddit-6137"
1297				class="share-reddit sd-button share-icon"
1298				href="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/?share=reddit"
1299				target="_blank"
1300				aria-labelledby="sharing-reddit-6137"
1301				>
1302				<span id="sharing-reddit-6137" hidden>Share on Reddit (Opens in new window)</span>
1303				<span>Reddit</span>
1304			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
1305				data-shared="sharing-email-6137"
1306				class="share-email sd-button share-icon"
1307				href="mailto:?subject=%5BShared%20Post%5D%20Delphi%20improvements%3A%20build%20tool%20uses%20msbuild%2C%20allows%20to%20pick%20Delphi%20version%2C%20better%20generated%20DPROJ%2C%20hints%20to%20fix%20PAServer%20on%20Linux%20and%20linking%20on%20macOS&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F07%2F05%2Fdelphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos%2F&#038;share=email"
1308				target="_blank"
1309				aria-labelledby="sharing-email-6137"
1310				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="82a8944ea2" data-email-share-track-url="https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/?share=email">
1311				<span id="sharing-email-6137" hidden>Email a link to a friend (Opens in new window)</span>
1312				<span>Email</span>
1313			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
1314
1315        
1316        <a href="https://forum.castle-engine.io/t/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/2179#comments">Comments on the forum ➤</a>
1317</article><!-- #post-## -->
1318
1319<article id="post-6124" class="post-6124 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-ai tag-castleengine tag-claudecode tag-gamedev tag-pascal">
1320                <header class="entry-header">
1321                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/" rel="bookmark">Review of the engine by Claude Code yielded 11 bug-fixes. The good, the bad about the experience, how you can do this in your own codebase, Docker SBX and more</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/" rel="bookmark"><time class="entry-date published updated" datetime="2026-06-29T22:17:41+00:00">June 29, 2026</time></a></span></p>        </header><!-- .entry-header -->
1322
1323        <div class="entry-content">
1324                <table class="thumbnails thumbnails-align-right"><tr><td>
1325          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/06/ply1.png"
1326             class="screenshot"
1327             title="PLY point cloud. with proper colors and opacity"><img loading="lazy" decoding="async"
1328            style="float: right"
1329            src="https://castle-engine.io/wp/wp-content/uploads/2026/06/ply1-200x124.png"
1330             width="200" height="124" 
1331            alt="PLY point cloud. with proper colors and opacity"
1332          ></a></td></tr><tr><td>
1333          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/06/ply2.png"
1334             class="screenshot"
1335             title="PLY point cloud. with proper colors and opacity"><img loading="lazy" decoding="async"
1336            style="float: right"
1337            src="https://castle-engine.io/wp/wp-content/uploads/2026/06/ply2-200x124.png"
1338             width="200" height="124" 
1339            alt="PLY point cloud. with proper colors and opacity"
1340          ></a></td></tr><tr><td>
1341          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/06/ply3.png"
1342             class="screenshot"
1343             title="PLY point cloud. with proper colors and opacity"><img loading="lazy" decoding="async"
1344            style="float: right"
1345            src="https://castle-engine.io/wp/wp-content/uploads/2026/06/ply3-200x124.png"
1346             width="200" height="124" 
1347            alt="PLY point cloud. with proper colors and opacity"
1348          ></a></td></tr></table>
1349<p>I gave <em>Claude</em> a long-running task: Review <em>every</em> file of <em>Castle Game Engine</em>.</p>
1350<p>The process found 11 &#8220;real&#8221; bugs (something was indeed a bug in the engine, and it could be a bug in real-life applications using the engine) which we promptly fixed. So I&#8217;m happy:) See the <em>&#8220;Detailed Stats&#8221;</em> section at the end for all the numbers.</p>
1351<p>I will describe the process below, to give some pointers how to do it on your own codebase
1351s. In short: fine-tune the instructions to get quality reviews, watch for agent trying to avoid doing real reviews, use <em>Docker SBX</em> to run securely unattended.</p>
1352<p><em>Note: If you want to know my general thoughts/experience about using AI with Castle Game Engine, see <a href="https://castle-engine.io/ai">AI guidelines for Castle Game Engine</a>. A short version: let&#8217;s work to gain understanding / be smarter thanks to AI, and not to lose understanding / be dumber.</em> AI can do impressive stuff, but can also be terribly unreliable &#8212; in fact the post below is another good example of both of those facts being true <em>at the same time</em>.</p>
1353<p>For some independent AI opinion that I agree with, see <a href="https://castle-engine.io/ai#_see_also">links at the bottom of our guidelines</a>, and also I recently read <a href="https://mariozechner.at/posts/2026-03-25-thoughts-on-slowing-the-fuck-down/">from a creator of open-source AI harness Pi &#8220;Thoughts on slowing the fuck down&#8221;</a>.</p>
1354<h2>Motivation: AI reviews (subset of them) are useful</h2>
1355<ol>
1356<li>AI reviews of commits/PRs by Claude are useful in my experience. Using commands like <code>review staged</code>, <code>review unstaged</code>, <code>review unmerged</code> is consistently giving me useful suggestions how to improve the code before I push it.
1357<p>I have to emphasize that by <strong>useful</strong> I mean that <strong>they contain useful bits</strong>. Of course they are also filled with nonsense &#8212; AI misunderstanding what the application/engine around it does, misunderstanding differences between FPC/Delphi or particular platforms, suggesting bad approaches (always with confidence), suggesting &#8220;defensive&#8221; coding techniques that would actually hide problems instead of keeping the flow validated&#8230;</p>
1358<p>But if you&#8217;re prepared + capable of filtering out the nonsense, you&#8217;re left with useful observations how to improve the code. AI reviews do sometimes note a real improvement or even real bug-fix that my own eyes didn&#8217;t catch &#8212; that&#8217;s why I use it. It&#8217;s a special case of <a href="https://en.wikipedia.org/wiki/Linus%27s_law">&#8220;many eyeballs make all the bugs shallow&#8221; rule</a>, here AI is another set of eyeballs.</p>
1359<p>( This of course also deserves a disclaimer: Don&#8217;t write bad quality code just because you can rely that &#8220;AI review&#8221; will smooth it out. It will <em>not</em>, it will not capture all the wrong edge-cases if your design is flawed, it will not do the thinking for you. Use AI as a helper, not as replacement for your own thinking/understanding. )</p>
1360</li>
1361<li>
1362<p>So, why am I using AI reviews only for new code that I commit? Let&#8217;s review all the past code!</p>
1363</li>
1364<li>
1365<p>A bonus note about security, especially if you develop an application where security is a concern (you consume untrusted input, from network or game MODs &#8212; see <a href="https://github.com/castle-engine/castle-engine/blob/master/SECURITY.md">how this applies to games / game engines too</a>): this approach could be focused to perform a &#8220;security audit&#8221;.</p>
1366<p>You don&#8217;t need <em>Mythos</em> to do it:) And, to be serious, the bad actors <em>will do such review of your code</em>, esp. if you&#8217;re open-source and your code is just public. So you better do the audit yourself, and fix the issues before they are exploited.</p>
1367</li>
1368</ol>
1369<h2>How I did this: on tuning the reviews quality/verbosity and Docker sbx</h2>
1370<p>The details how I set this up (so that you can consider doing this for your own codebase too):</p>
1371<ol>
1372<li><strong>Initial prompt.</strong> At the start, I asked to review the engine, file by file, starting from <code>src/</code> and provide a review for each file.
1373<p>Note: <a href="https://github.com/castle-engine/castle-engine/blob/master/CLAUDE.md">Our engine already includes CLAUDE.md</a> to help Claude follow our rules better. If you don&#8217;t have such file, I would recommend to create and maintain it &#8212; it really helps to &#8220;steer&#8221; Claude in a good direction. To make it available to non-Claude agents, use <a href="https://code.claude.com/docs/en/memory#agents-md">AGENTS.md and point to it from CLAUDE.md</a>.</p>
1374</li>
1375<li>
1376<p><strong>Fine-tune to get useful reviews.</strong> It took some fine-tuning to make the initial prompt really useful.</p>
1377<p>At the beginning, it tended to produce overly-verbose and useless reviews &#8212; often discussing with itself (like <em>&#8220;Bug! X does Y. Oh, no wait, it is actually OK. Not a bug&#8221;</em>.) or pointing to not important details (to give it credit, it sometimes flagged such notes as <em>nit-picking</em> indeed).</p>
1378<p>Instructing it to give more concise reports&#8230; resulted in getting simple review <em>&#8220;No definite bugs found.&#8221;</em> for all engine files:) Well that&#8217;s also useless, of course.</p>
1379<p>In the end, we found a middle ground, although effectively I cannot share with you <em>&#8220;just a single prompt to do this&#8221;</em>, because the end result is a conversation and pointing into examples what to do / what not to do. For some files, I got &#8220;No bugs.&#8221;, for some others I got txt files with 1-2 issues to correct.</p>
1380<p>The point is: you need to look at initial reviews, and consider if they are too verbose/succinct, and give feedback to steer it in the useful direction. Otherwise browsing a 4000 sloppy reviews will be a huge pointless job for you.</p>
1381</li>
1382<li>
1383<p><strong>It was worth it!</strong> The issues detected (<em>after</em> the fine-tuning above) are genuinely useful reports. Real, meaty bugs that I missed over the years. E.g.</p>
1384<ul>
1385<li><a href="https://github.com/castle-engine/castle-engine/commit/6378c47f433fd414867634198aa0e3a3b5567e4d">Our fallback from <em>OpenGLES 3</em> to <em>OpenGLES 2</em>
1385 (important to support older mobile devices) was broken.</a></p>
1386</li>
1387<li>
1388<p><a href="https://github.com/castle-engine/castle-engine/commit/17b9567e45df565efc0fd0dafe317e2cb51d4c97">Loading non-mono sounds on the web was broken.</a></p>
1389</li>
1390<li>
1391<p><a href="https://github.com/castle-engine/castle-engine/commit/4dc54e7a249d1aa161065c78f8052681c1fbcd57">FMOD priority was passed inverted (we marked the most important sounds -> as the least important)</a></p>
1392</li>
1393<li>
1394<p>Genuine bugs, that could affect real applications! So I&#8217;m really happy I did this. Later section of this post <em>&#8220;Detailed Stats&#8221;</em> contains all the links.</p>
1395</li>
1396<li>
1397<p>It also reported a few minors &#8211; typos in documentation, and things <em>&#8220;potentially buggy, but not really possible in real-life usage&#8221;</em>. But after the above fine-tuning, this wasn&#8217;t a terrible flood of noise, and I&#8217;m happy to fix the genuine typos too.</p>
1398</li>
1399</ul>
1400</li>
1401<li>
1402<p><strong>Fixing them manually or not?</strong> Initially I considered letting Claude also fix the issues by itself.</p>
1403<ul>
1404<li>But in the end, I fixed most of them manually (i.e. I&#8217;m still using AI code completion through <em>GitHub Copilot</em>, but not AI agent) since the AI agent &#8220;fixes&#8221; mostly required fixes on top of them. It didn&#8217;t add automated tests, it didn&#8217;t make code clean (centralizing logic). Reviewing + fixing agent work was taking me longer than &#8220;just doing&#8221; them in the way I want from start.</p>
1405</li>
1406<li>
1407<p>And some reviews were plain wrong. E.g. it wanted to break <code>TCastleTouchControl</code> by limiting speed, because it wanted to adapt visual clamping to speed clamping &#8212; without understanding that the current version is actually what we want, more functional to use.</p>
1408</li>
1409</ul>
1410</li>
1411<li>
1412<p><strong>Place reviews in <code>.ai-review</code> subdirs.</strong> I started by instructing Claude to show me the review, and only continue once I acknowledge. This was of course not good in the long-run, it needlessly blocked the work, so I switched to <em>&#8220;put each review in a txt file alongside the source, and don&#8217;t wait for my confirmation to move on&#8221;</em>.</p>
1413<p>In the end I switched to <em>&#8220;put each review in a <code>.ai-review</code> subdirectory, e.g. review for <code>src/foo.pas</code> goes to <code>src/.ai-review/foo.txt</code>&#8220;</em>.</p>
1414<p>This allowed me to easily ignore these reviews in version control, by adding <code>.ai-review/</code> to GIT exclusions (e.g. in <code>.git/info/exclude</code>, so the exclusions themselves remain private to me).</p>
1415</li>
1416<li>
1417<p><strong>Exclude auto-generated and 3rd party stuff.</strong> I fine-tuned which files to include / exclude. I did want to go through <em>entire</em> engine (sources, examples, tools etc.). But I excluded auto-generated files (like LPK, DPROJ, auto-generated per-node includes in <code>src/scene/x3d/auto_generated_node_helpers/</code>) and 3rd-party units code (like <em>Vampyre Imaging</em>).</p>
1418</li>
1419<li>
1420<p><strong>Watch it, as it tries to abort / avoid doing the work!</strong> I needed to push Claude to actually do all the reviews, unattended. I used <code>/goal</code> to enforce it, and it worked&#8230; only to some extent.</p>
1421<p>Claude started to avoid work by doing &#8220;shallow&#8221; reviews of most files &#8212; and happily reported &#8220;No bugs found&#8221; for ~1000 files while admitting it only scanned them. (grepped for potential issues, not read). I instructed to use &#8220;deep review&#8221;, and again enforced it using <code>/goal</code>.</p>
1422<p>Then Claude lied to me that it &#8220;finished the work&#8221; while it turned out it only processed 3 sub-directories in <code>src</code> and the rest was quickly scanned. Not surprisingly, the &#8220;scanned sub-directories&#8221; did not contain any issues according to the review. This is hilariously unreliable:) I just kept looking what it&#8217;s doing and asking for the &#8220;deep review&#8221; when I saw it tries to mass-qualify a bunch of files as <em>&#8220;No bugs found&#8221;</em>.</p>
1423</li>
1424<li>
1425<p><strong>This used multiple 4h sessions.</strong> This was a very long-running task. Multiple times I exhausted my &#8220;tokens in 4h window&#8221; limit from Claude Code. I was ready and OK for this, I just waited, and later/next day said &#8220;continue&#8221;.</p>
1426</li>
1427<li>
1428<p><strong>Docker SBX rocks for unattended agent usage.</strong> I wanted it to run without interaction, since otherwise I&#8217;m a human bottleneck and I mostly just accept the commands executed. (some of the commands could not be auto-accepted by a useful pattern.)</p>
1429<p>So I wanted to run with <code>--dangerously-skip-permissions</code>, but that&#8217;s something you should never do without being in a secure container. ( Really, don&#8217;t ignore this warning. Esp. for longer-running tasks where you don&#8217;t observe everything the AI is doing. Letting it run with <code>--dangerously-skip-permissions</code> will lead to a disaster!, weird things will happen <em>
1429at least in your repo</em> (and maybe beyond) and you will not even know what/why happened. )</p>
1430<p>Solution: I run the session of Claude inside <a href="https://docs.docker.com/reference/cli/sbx/">Docker&#8217;s sbx</a> which is a fantastic tool to run AI agents in a sandbox. Docker containers are obvious solution for isolation of agents, and <code>sbx</code> makes using them for this specific purpose a breeze. It creates containers with read-write mount on your disk, so you can inspect the work (and even commit+push) comfortably on your host system, while AI runs in a really isolated environment.</p>
1431<p>I highly recommend this approach for any longer-running AI tasks. It&#8217;s really a relief to just run inside <code>sbx</code> with <code>--dangerously-skip-permissions</code>, so you&#8217;re no longer a dummy clicking <em>&#8220;yes I allow&#8221;</em> (and constantly break your work to look at Claude state) and you can just let it run. You don&#8217;t specifically need <code>sbx</code> for this, since any virtualization Docker-like solution could achieve this &#8212; but I found <code>sbx</code> to just fit me right out-of-the-box, and I already use Docker for other stuff so this felt &#8220;I&#8217;m at home&#8221; for me.</p>
1432</li>
1433<li>
1434<p><strong>Moving conversations from outside to inside SBX.</strong> As I didn&#8217;t start with the <code>sbx</code> approach, I started with a normal session outside <code>sbx</code> -> so then resumed work in a session inside <code>sbx</code>. I wondered about copying around <code>~/.claude</code> to make this resume smooth, but in the end it was enough to carry the &#8220;current review state&#8221; in a collection of Markdown files, and just point the new session to them, and also copy a bunch of &#8220;memory files&#8221;.</p>
1435</li>
1436</ol>
1437<p>All in all, I do recommend this process, I guess, to everyone if you have some &#8220;tokens to spare&#8221;. As pointed above &#8212; the process <strong>had flaws</strong>, you need to fine-tune the verbosity/quality of the reviews, you need to make sure it&#8217;s really doing it (and not lying to you). But it also had real gains &#8212; real, user-affecting bugs have been found and fixed in the engine thanks to this.</p>
1438<h2>Detailed stats</h2>
1439<p>If you&#8217;re curious, detailed stats and links to what was fixed:</p>
1440<ul>
1441<li>11 bugs I would classify as important (real bugs, affecting potential real use-cases):
1442<ol>
1443<li><a href="https://github.com/castle-engine/castle-engine/commit/6378c47f433fd414867634198aa0e3a3b5567e4d">GLES 3->2 fallback</a></p>
1444</li>
1445<li>
1446<p><a href="https://github.com/castle-engine/castle-engine/commit/17b9567e45df565efc0fd0dafe317e2cb51d4c97">stereo WAV files for WebAudio backen</a></p>
1447</li>
1448<li>
1449<p><a href="https://github.com/castle-engine/castle-engine/commit/4dc54e7a249d1aa161065c78f8052681c1fbcd57">FMOD priority inverted</a></p>
1450</li>
1451<li>
1452<p><a href="https://github.com/castle-engine/castle-engine/commit/bc92a9a8f466796c9f1570d9546740d26ddf6ef6">S3TC vertical flip for some heights</a></p>
1453</li>
1454<li>
1455<p><a href="https://github.com/castle-engine/castle-engine/commit/06c97f1c7716dd7f77047c6c42efdc8e52dd780a">SaveScreen on TCastleControl ignored SaveRect</a></p>
1456</li>
1457<li>
1458<p><a href="https://github.com/castle-engine/castle-engine/commit/4d642c2d48f18edc786a14e06d824037a9bc0f24">3D images with TransformRGB, ModulateRGB</a></p>
1459</li>
1460<li>
1461<p><a href="https://github.com/castle-engine/castle-engine/commit/bad52d05885146798fd47b8d7e8550e2d5b573b7">secure shell quoting for Delphi+Linux OpenUrl / OpenDocument; note that we later removed this in favor of new <code>ExecuteCommand</code> logic</a></p>
1462</li>
1463<li>
1464<p><a href="https://github.com/castle-engine/castle-engine/commit/9ae829f6429b523d48a8bef28f904febb94cfa83">TCastleFontFamily with Size=0 but Outline&lt;>0 was buggy</a></p>
1465</li>
1466<li>
1467<p><a href="https://github.com/castle-engine/castle-engine/commit/39cbe3ae70ed9440af907c0580b6bd71e4a00a4c">mismatched parameter types, float vs double, in C header files vs Pascal implementation</a></p>
1468</li>
1469<li>
1470<p><a href="https://github.com/castle-engine/castle-engine/commit/93203f879e670d4da84ad9b6511a4592f497b1f8">slightly wrong, washed out, PLY colors</a></p>
1471</li>
1472<li>
1473<p><a href="https://github.com/castle-engine/castle-engine/commit/8d21832f20b5aec962930eecffa7ab4cd8797864">wrong <code>opacity</code> interpretation in PLY files</a></p>
1474</li>
1475</ol>
1476</li>
1477<li>
1478<p>8 very minor bugs (unlikely this affected any real use-case, but yeah, the bug is real):</p>
1479<ol>
1480<li><a href="https://github.com/castle-engine/castle-engine/commit/9617891a4cefd47c3e0e05c4fcc021a8ef69f8bd">FitWithin, TSprite</a></p>
1481</li>
1482<li>
1483<p><a href="https://github.com/castle-engine/castle-engine/commit/f8036cc45726aaf2fd1d19052df91c4950176a11">more</a></p>
1484</li>
1485<li>
1486<p><a href="https://github.com/castle-engine/castle-engine/commit/44c46b99cf58f2f81d0fc85382122f784a18b445">more</a></p>
1487</li>
1488<li>
1489<p><a href="https://github.com/castle-engine/castle-engine/commit/cba640bfb60bd2d7487e2119abbf35c97b15a9c5">more</a></p>
1490</li>
1491<li>
1492<p><a href="https://github.com/castle-engine/castle-engine/commit/d90e0ccd422888a692f17971e9c41f16250ee414">more</a></p>
1493</li>
1494<li>
1495<p><a href="https://github.com/castle-engine/castle-engine/commit/40a9c07b0bc2ef3ff4051e65109693a41bdee878">more</a></p>
1496</li>
1497<li>
1498<p><a href="https://github.com/castle-engine/castle-engine/commit/678f325d145e032888bb85fb6941816e85a54108">more</a></p>
1499</li>
1500<li>
1501<p><a href="https://github.com/castle-engine/castle-engine/commit/85139371bef114828e16956c69908b5e5c665a3d">CastleScript&#8217;s <code>image_load</code> never returned <code>TGrayscale[Alpha]Image</code></a></p>
1502</li>
1503</ol>
1504</li>
1505<li>
1506<p>2 very minor memory leaks (unlikely to affect any real usage):</p>
1507<ul>
1508<li><a href="https://github.com/castle-engine/castle-engine/commit/9617891a4cefd47c3e0e05c4fcc021a8ef69f8bd">this is a subset of this commit</a></li>
1509</ul>
1510</li>
1511<li>Few minors &#8211; error messages improvements, obvious comments/typo fixes:
1512<ul>
1513<li><a href="https://github.com/castle-engine/castle-engine/commit/6b065fc58016bd096896d46ff45bb2802c24f933">here</a></p>
1514</li>
1515<li>
1516<p><a href="https://github.com/castle-engine/castle-engine/commit/a5b311aae88385dceeb25b49c76b18898264c642">here</a></p>
1517</li>
1518<li>
1519<p>and <a href="https://github.com/castle-engine/castle-engine/commit/bb4233e6fb12105a14bd7a5fd7dca6cab13a971e">here</a>.</p>
1520</li>
1521</ul>
1522</li>
1523</ul>
1524<p>And that&#8217;s it 🙂 Thank you for reading.</p>
1525<p>If you like what we&#8217;re doing, please <a href="https://www.patreon.com/c/castleengine">support the engine development</a>
1525. Thank you!</p>
1526<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
1527				data-shared="sharing-bluesky-6124"
1528				class="share-bluesky sd-button share-icon"
1529				href="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/?share=bluesky"
1530				target="_blank"
1531				aria-labelledby="sharing-bluesky-6124"
1532				>
1533				<span id="sharing-bluesky-6124" hidden>Share on Bluesky (Opens in new window)</span>
1534				<span>Bluesky</span>
1535			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
1536				data-shared="sharing-mastodon-6124"
1537				class="share-mastodon sd-button share-icon"
1538				href="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/?share=mastodon"
1539				target="_blank"
1540				aria-labelledby="sharing-mastodon-6124"
1541				>
1542				<span id="sharing-mastodon-6124" hidden>Share on Mastodon (Opens in new window)</span>
1543				<span>Mastodon</span>
1544			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
1545				data-shared="sharing-facebook-6124"
1546				class="share-facebook sd-button share-icon"
1547				href="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/?share=facebook"
1548				target="_blank"
1549				aria-labelledby="sharing-facebook-6124"
1550				>
1551				<span id="sharing-facebook-6124" hidden>Share on Facebook (Opens in new window)</span>
1552				<span>Facebook</span>
1553			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
1554				data-shared="sharing-threads-6124"
1555				class="share-threads sd-button share-icon"
1556				href="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/?share=threads"
1557				target="_blank"
1558				aria-labelledby="sharing-threads-6124"
1559				>
1560				<span id="sharing-threads-6124" hidden>Share on Threads (Opens in new window)</span>
1561				<span>Threads</span>
1562			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
1563				data-shared="sharing-linkedin-6124"
1564				class="share-linkedin sd-button share-icon"
1565				href="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/?share=linkedin"
1566				target="_blank"
1567				aria-labelledby="sharing-linkedin-6124"
1568				>
1569				<span id="sharing-linkedin-6124" hidden>Share on LinkedIn (Opens in new window)</span>
1570				<span>LinkedIn</span>
1571			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
1572				data-shared="sharing-reddit-6124"
1573				class="share-reddit sd-button share-icon"
1574				href="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/?share=reddit"
1575				target="_blank"
1576				aria-labelledby="sharing-reddit-6124"
1577				>
1578				<span id="sharing-reddit-6124" hidden>Share on Reddit (Opens in new window)</span>
1579				<span>Reddit</span>
1580			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
1581				data-shared="sharing-email-6124"
1582				class="share-email sd-button share-icon"
1583				href="mailto:?subject=%5BShared%20Post%5D%20Review%20of%20the%20engine%20by%20Claude%20Code%20yielded%2011%20bug-fixes.%20The%20good%2C%20the%20bad%20about%20the%20experience%2C%20how%20you%20can%20do%20this%20in%20your%20own%20codebase%2C%20Docker%20SBX%20and%20more&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F06%2F29%2Freview-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more%2F&#038;share=email"
1584				target="_blank"
1585				aria-labelledby="sharing-email-6124"
1586				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="a95980554f" data-email-share-track-url="https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/?share=email">
1587				<span id="sharing-email-6124" hidden>Email a link to a friend (Opens in new window)</span>
1588				<span>Email</span>
1589			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
1590
1591        
1592        <a href="https://forum.castle-engine.io/t/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/2174#comments">Comments on the forum ➤</a>
1593</article><!-- #post-## -->
1594
1595<article id="post-6117" class="post-6117 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-castleengine tag-delphi tag-gamedev tag-pascal tag-windows">
1596                <header class="entry-header">
1597                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/" rel="bookmark">TCastleProcess and ExecuteCommand available with both FPC and Delphi, no more cryptic &#8220;Failed to execute  : 4551&#8221; when Windows &#8220;Smart App Control&#8221; blocks us</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/" rel="bookmark"><time class="entry-date published updated" datetime="2026-06-28T04:58:42+00:00">June 28, 2026</time></a></span></p>        </header><!-- .entry-header -->
1598
1599        <div class="entry-content">
1600                <table class="thumbnails thumbnails-align-right"><tr><td>
1601          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/06/walking_adventure_processes.png"
1602             class="screenshot"
1603             title="Editor executing compiler and game - this is one process calling another"><img loading="lazy" decoding="async"
1604            style="float: right"
1605            src="https://castle-engine.io/wp/wp-content/uploads/2026/06/walking_adventure_processes-200x112.png"
1606             width="200" height="112" 
1607            alt="Editor executing compiler and game - this is one process calling another"
1608          ></a></td></tr><tr><td>
1609          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/06/smart_app_control_1.png"
1610             class="screenshot"
1611             title="Effect when &amp;quot;Smart App Control&amp;quot; blocks us"><img loading="lazy" decoding="async"
1612            style="float: right"
1613            src="https://castle-engine.io/wp/wp-content/uploads/2026/06/smart_app_control_1-200x148.png"
1614             width="200" height="148" 
1615            alt="Effect when &amp;quot;Smart App Control&amp;quot; blocks us"
1616          ></a></td></tr><tr><td>
1617          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/06/smart_app_control_2.png"
1618             class="screenshot"
1619             title="Effect when &amp;quot;Smart App Control&amp;quot; blocks us"><img loading="lazy" decoding="async"
1620            style="float: right"
1621            src="https://castle-engine.io/wp/wp-content/uploads/2026/06/smart_app_control_2-200x153.png"
1622             width="200" height="153" 
1623            alt="Effect when &amp;quot;Smart App Control&amp;quot; blocks us"
1624          ></a></td></tr></table>
1625<p>We refactored our process running code (when one application wants to run another). This is used throughout our tools (<a href="https://castle-engine.io/build_tool">build tool</a>, <a href="https://castle-engine.io/editor">editor</a>) but we also have uses for it in the engine itself. Refactoring this into a nice unit gives us more possibilities, for now and for the future:)</p>
1626<ol>
1627<li>The code is now in a nice unit <code>CastleInternalProcess</code> available throughout the engine, with <code>TCastleProcess</code> class and our routines like <code>ExecuteCommand</code>, <code>ExecuteCommandCapture</code>.
1628<ul>
1629<li>As the name suggests, we still consider this an <em>internal</em> unit, so if you decide to use it in your own applications -> you risk that we break API.</p>
1630</li>
1631<li>
1632<p>That said, there&#8217;s no hiding that the unit is useful right now, with FPC+Delphi capability to run processes. Let us know how do you use it, and maybe we&#8217;ll just rename it to <code>CastleProcess</code> at some point.</p>
1633</li>
1634<li>
1635<p>Since this is internal now, the API docs are not generated by PasDoc, but you can just <a href="https://github.com/castle-engine/castle-engine/blob/master/src/files/castleinternalprocess.pas">read the source code</a> for the docs in comments.</p>
1636</li>
1637</ul>
1638</li>
1639<li>
1640<p>The code is simpler and better organized than previous code in build tool / editor. Some of the old internal 
1640code had &#8220;historical baggage&#8221; (e.g. how is environment overridden for the child process) which was cleaned up now.</p>
1641</li>
1642<li>
1643<p>Since all usage now goes through <code>TCastleProcess</code>, we can reliably make a better error message when execution on Windows is blocked by <em>&#8220;Smart App Control&#8221;</em>. FPC Process was showing cryptic <em>&#8220;Failed to execute  : 4551&#8221;</em> message in this case. This is quite important &#8212; as this message is killing our usage on Windows now!</p>
1644<ul>
1645<li>Note that <a href="https://www.reddit.com/r/Windows11/comments/1s2t50a/comment/ochifwy/">this Reddit comment with cited Microsoft documentation</a> tells the simple version of what happens: &#8220;Smart App Control&#8221; checks if the application is &#8220;known&#8221;, and if not -> checks does it have a valid signature. As that comment says: <em>&#8220;it effectively just prevents you running any programs that don&#8217;t have a digital signature&#8221;</em>.</p>
1646</li>
1647<li>
1648<p>Proper codesigning is coming ASAP too. I see that with <em>&#8220;Smart App Control&#8221;</em>, right now our experience on Windows is really bad. We have started our <a href="https://castle-engine.io/wp/2025/12/30/december-news-unlimited-skin-joints-on-shaders-pointproperties-and-plans-for-2026-next-release-signpath-better-macos-silicon-shadow-maps/">SignPath process</a>, I need to finish it.</p>
1649</li>
1650</ul>
1651</li>
1652<li>
1653<p><code>TCastleProcess</code> and helpers are now implemented also for Delphi (for Windows, Linux, macOS/Intel, macOS/Aarch64).</p>
1654<ul>
1655<li>This also opens the door to have e.g. our <a href="https://castle-engine.io/build_tool">build tool</a> compile-able with Delphi in the future. It&#8217;s not a high-priority goal (it is an engine tool, you should not need to recompile it yourself), but it aligns with our goal &#8220;support Delphi as good as FPC&#8221;. On more practical grounds, compiling code with Delphi is always a useful &#8220;extra check&#8221; of the code correctness.</li>
1656</ul>
1657</li>
1658<li>We feature helpers like:
1659<ul>
1660<li>
1661<p><code>ExecuteCommand</code> &#8211; wait for the executed process to finish, don&#8217;t capture anything, return status.</p>
1662</li>
1663<li>
1664<p><code>ExecuteCommandCheckStatus</code> &#8211; wait for the executed process to finish, don&#8217;t capture anything, raise exception if non-zero status.</p>
1665</li>
1666<li>
1667<p><code>ExecuteCommandCapture</code> &#8211; wait for the executed process to finish, capture stdout/stderr to string. This one is for now still FPC-only.</p>
1668</li>
1669</ul>
1670</li>
1671<li>
1672<p><code><a href="https://castle-engine.io/apidoc/html/CastleOpenDocument.html#OpenDocument-String-">OpenDocument</a></code>, <code><a href="https://castle-engine.io/apidoc/html/CastleOpenDocument.html#OpenUrl-String-">OpenUrl</a></code> on Unix are simpler now &#8212; they just use <code>TCastleProcess</code> through a simple <code>ExecuteCommandNoWait</code>, with both compilers.</p>
1673</li>
1674</ol>
1675<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
1676				data-shared="sharing-bluesky-6117"
1677				class="share-bluesky sd-button share-icon"
1678				href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/?share=bluesky"
1679				target="_blank"
1680				aria-labelledby="sharing-bluesky-6117"
1681				>
1682				<span id="sharing-bluesky-6117" hidden>Share on Bluesky (Opens in new window)</span>
1683				<span>Bluesky</span>
1684			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
1685				data-shared="sharing-mastodon-6117"
1686				class="share-mastodon sd-button share-icon"
1687				href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/?share=mastodon"
1688				target="_blank"
1689				aria-labelledby="sharing-mastodon-6117"
1690				>
1691				<span id="sharing-mastodon-6117" hidden>Share on Mastodon (Opens in new window)</span>
1692				<span>Mastodon</span>
1693			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
1694				data-shared="sharing-facebook-6117"
1695				class="share-facebook sd-button share-icon"
1696				href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/?share=facebook"
1697				target="_blank"
1698				aria-labelledby="sharing-facebook-6117"
1699				>
1700				<span id="sharing-facebook-6117" hidden>Share on Facebook (Opens in new window)</span>
1701				<span>Facebook</span>
1702			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
1703				data-shared="sharing-threads-6117"
1704				class="share-threads sd-button share-icon"
1705				href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/?share=threads"
1706				target="_blank"
1707				aria-labelledby="sharing-threads-6117"
1708				>
1709				<span id="sharing-threads-6117" hidden>Share on Threads (Opens in new window)</span>
1710				<span>Threads</span>
1711			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
1712				data-shared="sharing-linkedin-6117"
1713				class="share-linkedin sd-button share-icon"
1714				href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/?share=linkedin"
1715				target="_blank"
1716				aria-labelledby="sharing-linkedin-6117"
1717				>
1718				<span id="sharing-linkedin-6117" hidden>Share on LinkedIn (Opens in new window)</span>
1719				<span>LinkedIn</span>
1720			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
1721				data-shared="sharing-reddit-6117"
1722				class="share-reddit sd-button share-icon"
1723				href="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/?share=reddit"
1724				target="_blank"
1725				aria-labelledby="sharing-reddit-6117"
1726				>
1727				<span id="sharing-reddit-6117" hidden>Share on Reddit (Opens in new window)</span>
1728				<span>Reddit</span>
1729			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
1730				data-shared="sharing-email-6117"
1731				class="share-email sd-button share-icon"
1732				href="mailto:?subject=%5BShared%20Post%5D%20TCastleProcess%20and%20ExecuteCommand%20available%2
17320with%20both%20FPC%20and%20Delphi%2C%20no%20more%20cryptic%20%22Failed%20to%20execute%20%C2%A0%3A%204551%22%20when%20Windows%20%22Smart%20App%20Control%22%20blocks%20us&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F06%2F28%2Ftcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us%2F&#038;share=email"
1733				target="_blank"
1734				aria-labelledby="sharing-email-6117"
1735				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="b2f8d60fe2" data-email-share-track-url="https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/?share=email">
1736				<span id="sharing-email-6117" hidden>Email a link to a friend (Opens in new window)</span>
1737				<span>Email</span>
1738			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
1739
1740        
1741        <a href="https://forum.castle-engine.io/t/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/2169#comments">Comments on the forum ➤</a>
1742</article><!-- #post-## -->
1743
1744<article id="post-6093" class="post-6093 post type-post status-publish format-standard has-post-thumbnail hentry category-uncategorized tag-audio tag-castleengine tag-gamedev tag-pascal tag-skinnedanimation">
1745                <header class="entry-header">
1746                <p class="news_title_wrapper"><span class="h2 news_title"><a href="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/" rel="bookmark">Music Player example application, important fixes around audio and skinned animation</a></span></p><p class="news_date_wrapper"><span class="news_date"><span class="screen-reader-text">Posted on</span> <a href="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/" rel="bookmark"><time class="entry-date published updated" datetime="2026-06-05T21:22:31+00:00">June 5, 2026</time></a></span></p>        </header><!-- .entry-header -->
1747
1748        <div class="entry-content">
1749                <table class="thumbnails thumbnails-align-right"><tr><td>
1750          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/06/screenshot2.png"
1751             class="screenshot"
1752             title="Music Player using Castle Game Engine"><img loading="lazy" decoding="async"
1753            style="float: right"
1754            src="https://castle-engine.io/wp/wp-content/uploads/2026/06/screenshot2-200x362.png"
1755             width="200" height="362" 
1756            alt="Music Player using Castle Game Engine"
1757          ></a></td></tr><tr><td>
1758          <a href="https://castle-engine.io/wp/wp-content/uploads/2026/06/screenshot.png"
1759             class="screenshot"
1760             title="Music Player using Castle Game Engine"><img loading="lazy" decoding="async"
1761            style="float: right"
1762            src="https://castle-engine.io/wp/wp-content/uploads/2026/06/screenshot-200x362.png"
1763             width="200" height="362" 
1764            alt="Music Player using Castle Game Engine"
1765          ></a></td></tr></table>
1766<ol>
1767<li>We have a new example: <a href="https://github.com/castle-engine/castle-engine/tree/master/examples/audio/music_collection_player">Music Player</a>, a simple application that allows to play a chosen audio track with UI similar to typical mobile music/audiobook players.
1768<p>This example has a nice backstory: For <em>Mother&#8217;s Day</em> (which is 26th May in Poland) my daughter and I made a gift for The Wife: a private application (Android apk) with a few audio tracks just for her. There&#8217;s an audio track with my daughter signing, with our cat meowing and other gems:)</p>
1769<p>Don&#8217;t worry, the version I committed as our <em>Castle Game Engine</em> demo has more mainstream sounds :), using open-source audio tracks from <a href="http://Ope
1769nGameArt.org">OpenGameArt.org</a>. Big thanks go to <a href="https://cynicmusic.com/">The Cynic Project</a> (see also <a href="https://pixelsphere.org/">Pixelsphere</a> project) for the cool public domain music tracks! See the <a href="https://github.com/castle-engine/castle-engine/blob/master/examples/audio/music_collection_player/data/songs/AUTHORS.md">credits</a> for details about audio and art authors.</p>
1770<p>Have fun extending this into your own ideas and I hope this inspires you to have fun with our engine:)</p>
1771<p>Try out the example <a href="https://castle-engine.io/web-demos/examples/audio/music_collection_player/">playing on the web</a> right now! Though it looks best in <em>portrait</em> aspect, like on mobile.</p>
1772<p>In a bit related news, please <a href="https://keepandroidopen.org/">sign and spread the word about the need to keep Android open</a>. Sadly, Google plans to practically break this important aspect of Android, which will prohibit making such fun experiments like &#8220;family Android app&#8221; and endanger more important use-cases (like distributing VPN apps in countries with totalitarian regimes).</p>
1773</li>
1774<li>
1775<p>We have a few important audio fixes in the engine (thanks to experience with above example, but also a review done by Claude &#8212; more on this in a future news post):</p>
1776<ul>
1777<li><code><a href="https://castle-engine.io/apidoc/html/CastleSoundEngine.TCastlePlayingSound.html#Offset">TCastlePlayingSound.Offset</a></code> for streaming sounds is now correctly read, and when trying to set it we make a clear warning that this is not supported. Please uncheck <code><a href="https://castle-engine.io/apidoc/html/CastleSoundEngine.TCastleSound.html#Stream">TCastleSound.Stream</a></code> if you want to change audio track offset at runtime. (Before this fix, both getting and setting offset was broken, without any warning.) This applies only to the <a href="https://castle-engine.io/openal">OpenAL</a> sound backend, which is default on most platforms.</p>
1778</li>
1779<li>
1780<p>Loading stereo (or other non-mono) WAV sounds on the <a href="https://castle-engine.io/web">web</a> has been fixed.</p>
1781</li>
1782<li>
1783<p>
1783Priority of sounds was mistakenly inverted when using <a href="https://castle-engine.io/fmod">FMOD</a> (we marked &#8220;most important sounds&#8221; as &#8220;least important&#8221; by accident), fixed now.</p>
1784</li>
1785</ul>
1786</li>
1787<li>
1788<p>We have fixed loading <em>float</em> textures on OpenGLES (Android, iOS). This makes our <a href="https://castle-engine.io/skin">optimized skinned animation</a> work in an optimal way on your phones.</p>
1789</li>
1790<li>
1791<p>We made important glTF skinned animation fix (affecting all platforms): multiple skins that affect the same skeleton are now supported (if equivalent) or at least cleanly tolerated (we make a clear warning, and render part of the model as static).</p>
1792<p>E.g. these <a href="https://opengameart.org/content/mini-character-1">Mini Characters from Kenney</a> were broken, now they are fixed. See <a href="https://forum.castle-engine.io/t/cge-doesnt-load-process-some-glb-models/2158">the forum thread for gory details what was broken and how it was fixed</a>.</p>
1793</li>
1794</ol>
1795<p>As always, we hope you have fun developing games and we appreciate <a href="https://www.patreon.com/c/castleengine">your support on Patreon</a>. Thank you!</p>
1796<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-bluesky"><a rel="nofollow noopener noreferrer"
1797				data-shared="sharing-bluesky-6093"
1798				class="share-bluesky sd-button share-icon"
1799				href="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/?share=bluesky"
1800				target="_blank"
1801				aria-labelledby="sharing-bluesky-6093"
1802				>
1803				<span id="sharing-bluesky-6093" hidden>Share on Bluesky (Opens in new window)</span>
1804				<span>Bluesky</span>
1805			</a></li><li class="share-mastodon"><a rel="nofollow noopener noreferrer"
1806				data-shared="sharing-mastodon-6093"
1807				class="share-mastodon sd-button share-icon"
1808				href="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/?share=mastodon"
1809				target="_blank"
1810				aria-labelledby="sharing-mastodon-6093"
1811				>
1812				<span id="sharing-mastodon-6093" hidden>Share on Mastodon (Opens in new window)</span>
1813				<span>Mastodon</span>
1814			</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
1815				data-shared="sharing-facebook-6093"
1816				class="share-facebook sd-button share-icon"
1817				href="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/?share=facebook"
1818				target="_blank"
1819				aria-labelledby="sharing-facebook-6093"
1820				>
1821				<span id="sharing-facebook-6093" hidden>Share on Facebook (Opens in new window)</span>
1822				<span>Facebook</span>
1823			</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
1824				data-shared="sharing-threads-6093"
1825				class="share-threads sd-button share-icon"
1826				href="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/?share=threads"
1827				target="_blank"
1828				aria-labelledby="sharing-threads-6093"
1829				>
1830				<span id="sharing-threads-6093" hidden>Share on Threads (Opens in new window)</span>
1831				<span>Threads</span>
1832			</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
1833				data-shared="sharing-linkedin-6093"
1834				class="share-linkedin sd-button share-icon"
1835				href="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/?share=linkedin"
1836				target="_blank"
1837				aria-labelledby="sharing-linkedin-6093"
1838				>
1839				<span id="sharing-linkedin-6093" hidden>Share on LinkedIn (Opens in new window)</span>
1840				<span>LinkedIn</span>
1841			</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
1842				data-shared="sharing-reddit-6093"
1843				class="share-reddit sd-button share-icon"
1844				href="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/?share=reddit"
1845				target="_blank"
1846				aria-labelledby="sharing-reddit-6093"
1847				>
1848				<span id="sharing-reddit-6093" hidden>Share on Reddit (Opens in new window)</span>
1849				<span>Reddit</span>
1850			</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
1851				data-shared="sharing-email-6093"
1852				class="share-email sd-button share-icon"
1853				href="mailto:?subject=%5BShared%20Post%5D%20Music%20Player%20example%20application%2C%20important%20fixes%20around%20audio%20and%20skinned%20animation&#038;body=https%3A%2F%2Fcastle-engine.io%2Fwp%2F2026%2F06%2F05%2Fmusic-player-example-application-important-fixes-around-audio-and-skinned-animation%2F&#038;share=email"
1854				target="_blank"
1855				aria-labelledby="sharing-email-6093"
1856				data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="1ca6e10ef1" data-email-share-track-url="https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/?share=email">
1857				<span id="sharing-email-6093" hidden>Email a link to a friend (Opens in new window)</span>
1858				<span>Email</span>
1859			</a></li><li class="share-end"></li></ul></div></div></div>        </div><!-- .entry-content -->
1860
1861        
1862        <a href="https://forum.castle-engine.io/t/music-player-example-application-important-fixes-around-audio-and-skinned-animation/2162#comments">Comments on the forum ➤</a>
1863</article><!-- #post-## -->
1864
1865	<nav class="navigation pagination" aria-label="Posts pagination">
1866		<h2 class="screen-reader-text">Posts pagination</h2>
1867		<div class="nav-links"><span aria-current="page" class="page-numbers current"><span class="meta-nav screen-reader-text">Page </span>1</span>
1868<a class="page-numbers" href="https://castle-engine.io/wp/page/2/"><span class="meta-nav screen-reader-text">Page </span>2</a>
1869<span class="page-numbers dots">&hellip;</span>
1870<a class="page-numbers" href="https://castle-engine.io/wp/page/56/"><span class="meta-nav screen-reader-text">Page </span>56</a>
1871<a class="next page-numbers" href="https://castle-engine.io/wp/page/2/"><span class="screen-reader-text">Next page</span><svg class="icon icon-arrow-right" aria-hidden="true" role="img"> <use href="#icon-arrow-right" xlink:href="#icon-arrow-right"></use> </svg></a></div>
1872	</nav>
1873		</main><!-- #main -->
1874	</div><!-- #primary -->
1875	
1876<aside id="secondary" class="widget-area" role="complementary">
1877    <section id="blog_subscription-3" class="widget widget_blog_subscription jetpack_subscription_widget"><h2 class="widget-title">Subscribe</h2>
1878			<div class="wp-block-jetpack-subscriptions__container">
1879			<form action="#" method="post" accept-charset="utf-8" id="subscribe-blog-blog_subscription-3"
1880				data-blog="143538738"
1881				data-post_access_level="everybody" >
1882									<div id="subscribe-text"><p>Enter your email address to subscribe to this blog and receive notifications of new posts by email.</p>
1883</div>
1884										<p id="subscribe-email">
1885						<label id="jetpack-subscribe-label"
1886							class="screen-reader-text"
1887							for="subscribe-field-blog_subscription-3">
1888							Email Address						</label>
1889						<input type="email" name="email" autocomplete="email" required="required"
1890																					value=""
1891							id="subscribe-field-blog_subscription-3"
1892							placeholder="Email Address"
1893						/>
1894					</p>
1895
1896					<p id="subscribe-submit"
1897											>
1898						<input type="hidden" name="action" value="subscribe"/>
1899						<input type="hidden" name="source" value="https://castle-engine.io/wp/"/>
1900						<input type="hidden" name="sub-type" value="widget"/>
1901						<input type="hidden" name="redirect_fragment" value="subscribe-blog-blog_subscription-3"/>
1902						<input type="hidden" id="_wpnonce" name="_wpnonce" value="21d18c52c3" /><input type="hidden" name="_wp_http_referer" value="/wp/" />						<button type="submit"
1903															class="wp-block-button__link"
1904																					name="jetpack_subscriptions_widget"
1905						>
1906							Subscribe						</button>
1907					</p>
1908							</form>
1909						</div>
1910			
1911</section><section id="block-2" class="widget widget_block">
1912<ul class="wp-block-social-links has-normal-icon-size is-style-default is-layout-flex wp-block-social-links-is-layout-flex"><li class="wp-social-link wp-social-link-bluesky wp-block-social-link"><a href="https://bsky.app/profile/castle-engine.io" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M6.3,4.2c2.3,1.7,4.8,5.3,5.7,7.2.9-1.9,3.4-5.4,5.7-7.2,1.7-1.3,4.3-2.2,4.3.9s-.4,5.2-.6,5.9c-.7,2.6-3.3,3.2-5.6,2.8,4,.7,5.1,3,2.9,5.3-5,5.2-6.7-2.8-6.7-2.8,0,0-1.7,8-6.7,2.8-2.2-2.3-1.2-4.6,2.9-5.3-2.3.4-4.9-.3-5.6-2.8-.2-.7-.6-5.3-.6-5.9,0-3.1,2.7-2.1,4.3-.9h0Z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Bluesky</span></a></li>
1913
1914<li class="wp-social-link wp-social-link-mastodon wp-block-social-link">
1914<a href="https://mastodon.social/@michalis_kambi" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M23.193 7.879c0-5.206-3.411-6.732-3.411-6.732C18.062.357 15.108.025 12.041 0h-.076c-3.068.025-6.02.357-7.74 1.147 0 0-3.411 1.526-3.411 6.732 0 1.192-.023 2.618.015 4.129.124 5.092.934 10.109 5.641 11.355 2.17.574 4.034.695 5.535.612 2.722-.15 4.25-.972 4.25-.972l-.09-1.975s-1.945.613-4.129.539c-2.165-.074-4.449-.233-4.799-2.891a5.499 5.499 0 0 1-.048-.745s2.125.52 4.817.643c1.646.075 3.19-.097 4.758-.283 3.007-.359 5.625-2.212 5.954-3.905.517-2.665.475-6.507.475-6.507zm-4.024 6.709h-2.497V8.469c0-1.29-.543-1.944-1.628-1.944-1.2 0-1.802.776-1.802 2.312v3.349h-2.483v-3.35c0-1.536-.602-2.312-1.802-2.312-1.085 0-1.628.655-1.628 1.944v6.119H4.832V8.284c0-1.289.328-2.313.987-3.07.68-.758 1.569-1.146 2.674-1.146 1.278 0 2.246.491 2.886 1.474L12 6.585l.622-1.043c.64-.983 1.608-1.474 2.886-1.474 1.104 0 1.994.388 2.674 1.146.658.757.986 1.781.986 3.07v6.304z"/></svg><span class="wp-block-social-link-label screen-reader-text">Mastodon</span></a></li>
1915
1916<li class="wp-social-link wp-social-link-facebook wp-block-social-link"><a href="https://www.facebook.com/castleengine" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M12 2C6.5 2 2 6.5 2 12c0 5 3.7 9.1 8.4 9.9v-7H7.9V12h2.5V9.8c0-2.5 1.5-3.9 3.8-3.9 1.1 0 2.2.2 2.2.2v2.5h-1.3c-1.2 0-1.6.8-1.6 1.6V12h2.8l-.4 2.9h-2.3v7C18.3 21.1 22 17 22 12c0-5.5-4.5-10-10-10z"></path></svg><span class="wp-block-social-link-label screen-reader-text">Facebook</span></a></li>
1917
1918<li class="wp-social-link wp-social-link-patreon wp-block-social-link"><a href="https://www.patreon.com/castleengine" class="wp-block-social-link-anchor"><svg width="24" height="24" viewBox="0 0 24 24" version="1.1" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><path d="M20 8.40755C19.9969 6.10922 18.2543 4.22555 16.2097 3.54588C13.6708 2.70188 10.3222 2.82421 7.89775 3.99921C4.95932 5.42355 4.03626 8.54355 4.00186 11.6552C3.97363 14.2136 4.2222 20.9517 7.92225 20.9997C10.6715 21.0356 11.0809 17.3967 12.3529 15.6442C13.258 14.3974 14.4233 14.0452 15.8578 13.6806C18.3233 13.0537 20.0036 11.0551 20 8.40755Z" /></svg><span class="wp-block-social-link-label screen-reader-text">Patreon</span></a></li></ul>
1919</section><section id="search-2" class="widget widget_search">
1920
1921<form role="search" method="get" class="search-form" action="https://castle-engine.io/wp/">
1922	<label for="search-form-6ab4e2a4b6358">
1923		<span class="screen-reader-text">Search for:</span>
1924	</label>
1925	<input type="search" id="search-form-6ab4e2a4b6358" class="search-field" placeholder="Search &hellip;" value="" name="s" />
1926	<button type="submit" class="search-submit"><span>Search</span></button>
1927</form>
1928</section></aside><!-- #secondary -->
1929</div><!-- .wrap -->
1930
1931</div>
1932  <!-- Clear floats, e.g. MacStadium float image on main page, before footer -->
1933  <div class="clearfix">
1934  </div>
1935
1936  <div class="card">
1937    <div class="card-footer castle-page-footer">
1938      <p>Copyright <a href="https://michalis.xyz/">
1938Michalis Kamburelis</a> and <a href="https://github.com/castle-engine/castle-engine/graphs/contributors">Castle Game Engine Contributors</a>.
1939
1940      <p>This <a href="https://github.com/castle-engine/cge-www">webpage is also open-source and we welcome pull requests to improve it</a>.
1941
1942            <p>We use cookies for analytics. See our <a href="https://castle-engine.io/privacy_policy">privacy policy</a>.
1943
1944      <img referrerpolicy="no-referrer-when-downgrade" src="https://static.scarf.sh/a.png?x-pxid=8fb63cd5-e9ab-4d27-af9b-a979ff518df1" alt="Scarf Analytics" width="1" height="1">
1945    </div>
1946  </div>
1947
1948  
1949<!-- Matomo -->
1950<script>
1951  var _paq = _paq || [];
1952  /* tracker methods like "setCustomDimension" should be called before "trackPageView" */
1953  _paq.push(["setDomains", ["*.castle-engine.sourceforge.net","*.castle-engine.io","*.castle-engine.io","*.castle-engine.sourceforge.io"]]);
1954  _paq.push(['trackPageView']);
1955  _paq.push(['enableLinkTracking']);
1956  (function() {
1957    var u="//castle-engine.io/piwik/";
1958    _paq.push(['setTrackerUrl', u+'piwik.php']);
1959    _paq.push(['setSiteId', '1']);
1960    var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
1961    g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
1962  })();
1963</script>
1963
1964<noscript><p><img src="//castle-engine.io/piwik/piwik.php?idsite=1&rec=1" style="border:0;" alt=""></p></noscript>
1965<!-- End Matomo Code -->
1966
1967<script type="speculationrules">
1968{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/wp/*"},{"not":{"href_matches":["/wp/wp-*.php","/wp/wp-admin/*","/wp/wp-content/uploads/*","/wp/wp-content/*","/wp/wp-content/plugins/*","/wp/wp-content/themes/cge/*","/wp/wp-content/themes/twentyseventeen/*","/wp/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
1969</script>
1969
1970
1971	
1971<script type="text/javascript">
1972		window.WPCOM_sharing_counts = {"https://castle-engine.io/wp/2026/09/05/everyone-book-a-meeting-with-me-to-talk-about-castle-game-engine/":6229,"https://castle-engine.io/wp/2026/08/26/particle-system-updates-custom-shaders-web-support-freecad-x3d-exporter-documentation-exe-size-2d-easy-link-to-api-geometry-shader-fixes/":6208,"https://castle-engine.io/wp/2026/08/02/pointer-lock-mouse-look-on-the-web-plus-a-big-refactor-and-windows-improvements/":6183,"https://castle-engine.io/wp/2026/07/25/toggle-visibility-of-a-group-of-x3d-gltf-nodes/":6170,"https://castle-engine.io/wp/2026/07/17/web-water-terrain-shadow-maps-alpha-treatment-keys-on-losing-focus/":6159,"https://castle-engine.io/wp/2026/07/14/windows-downloads-now-code-signed-no-more-smart-app-control-blocks-plus-smaller-downloads-7z-tar-xz/":6149,"https://castle-engine.io/wp/2026/07/05/delphi-improvements-build-tool-uses-msbuild-allows-to-pick-delphi-version-better-generated-dproj-hints-to-fix-paserver-on-linux-and-linking-on-macos/":6137,"https://castle-engine.io/wp/2026/06/29/review-of-the-engine-by-claude-code-yielded-11-bug-fixes-the-good-the-bad-about-the-experience-how-you-can-do-this-in-your-own-codebase-docker-sbx-and-more/":6124,"https://castle-engine.io/wp/2026/06/28/tcastleprocess-and-executecommand-available-with-both-fpc-and-delphi-no-more-cryptic-failed-to-execute-4551-when-windows-smart-app-control-blocks-us/":6117,"https://castle-engine.io/wp/2026/06/05/music-player-example-application-important-fixes-around-audio-and-skinned-animation/":6093};
1973	</script>
1973
1974				
1974<script src="https://castle-engine.io/wp/wp-content/cache/minify/7601f.js" defer></script>
1974
1975
1976<script id="jetpack-stats-js-before">
1977_stq = window._stq || [];
1978_stq.push([ "view", {"v":"ext","blog":"143538738","post":"0","tz":"0","srv":"castle-engine.io","arch_home":"1","j":"1:16.2"} ]);
1979_stq.push([ "clickTrackerInit", "143538738", "0" ]);
1980//# sourceURL=jetpack-stats-js-before
1981</script>
vendor: 1 bytes, line 1981
1981
1982<script data-wp-strategy="defer" defer fetchpriority="low" id="jetpack-stats-js" src="https://stats.wp.com/e-202639.js"></script>
vendor: 1 bytes, line 1982
1982
1983<script id="sharing-js-js-extra">
1984var sharing_js_options = {"lang":"en","counts":"1","is_stats_active":"1"};
1985//# sourceURL=sharing-js-js-extra
1986</script>
vendor: 1 bytes, line 1986
1986
1987<script id="sharing-js-js" src="https://c0.wp.com/p/jetpack/16.2/_inc/build/sharedaddy/sharing.min.js"></script>
vendor: 1 bytes, line 1987
1987
1988<script id="sharing-js-js-after">
1989window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
1990window.WPCOM_sharing_popups[ "bluesky" ] = "menubar=1,resizable=1,width=600,height=400";
1991window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
1992window.WPCOM_sharing_popups[ "mastodon" ] = "menubar=1,resizable=1,width=460,height=400";
1993window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
1994window.WPCOM_sharing_popups[ "facebook" ] = "menubar=1,resizable=1,width=600,height=400";
1995window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
1996window.WPCOM_sharing_popups[ "threads" ] = "menubar=1,resizable=1,width=600,height=400";
1997window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
1998window.WPCOM_sharing_popups[ "linkedin" ] = "menubar=1,resizable=1,width=580,height=450";
1999//# sourceURL=sharing-js-js-after
2000</script>
vendor: 1 bytes, line 2000
2000
2001<script id="wp-emoji-settings" type="application/json">
2002{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://castle-engine.io/wp/wp-includes/js/wp-emoji-release.min.js?ver=7.1.2"}}
2003</script>
vendor: 1 bytes, line 2003
2003
2004<script type="module">
2005/*! This file is auto-generated */
2006var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
2007//# sourceURL=https://castle-engine.io/wp/wp-includes/js/wp-emoji-loader.min.js
2008</script>
2008
2009<svg style="position: absolute; width: 0; height: 0; overflow: hidden;" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
2010<defs>
2011<symbol id="icon-behance" viewBox="0 0 37 32">
2012<path class="path1" d="M33 6.054h-9.125v2.214h9.125v-2.214zM28.5 13.661q-1.607 0-2.607 0.938t-1.107 2.545h7.286q-0.321-3.482-3.571-3.482zM28.786 24.107q1.125 0 2.179-0.571t1.357-1.554h3.946q-1.786 5.482-7.625 5.482-3.821 0-6.080-2.357t-2.259-6.196q0-3.714 2.33-6.17t6.009-2.455q2.464 0 4.295 1.214t2.732 3.196 0.902 4.429q0 0.304-0.036 0.839h-11.75q0 1.982 1.027 3.063t2.973 1.080zM4.946 23.214h5.286q3.661 0 3.661-2.982 0-3.214-3.554-3.214h-5.393v6.196zM4.946 13.625h5.018q1.393 0 2.205-0.652t0.813-2.027q0-2.571-3.393-2.571h-4.643v5.25zM0 4.536h10.607q1.554 0 2.768 0.25t2.259 0.848 1.607 1.723 0.563 2.75q0 3.232-3.071 4.696 2.036 0.571 3.071 2.054t1.036 3.643q0 1.339-0.438 2.438t-1.179 1.848-1.759 1.268-2.161 0.75-2.393 0.232h-10.911v-22.5z"></path>
2013</symbol>
2014<symbol id="icon-deviantart" viewBox="0 0 18 32">
2015<path class="path1" d="M18.286 5.411l-5.411 10.393 0.429 0.554h4.982v7.411h-9.054l-0.786 0.536-2.536 4.875-0.536 0.536h-5.375v-5.411l5.411-10.411-0.429-0.536h-4.982v-7.411h9.054l0.786-0.536 2.536-4.875 0.536-0.536h5.375v5.411z"></path>
2016</symbol>
2017<symbol id="icon-medium" viewBox="0 0 32 32">
2018<path class="path1" d="M10.661 7.518v20.946q0 0.446-0.223 0.759t-0.652 0.313q-0.304 0-0.589-0.143l-8.304-4.161q-0.375-0.179-0.634-0.598t-0.259-0.83v-20.357q0-0.357 0.179-0.607t0.518-0.25q0.25 0 0.786 0.268l9.125 4.571q0.054 0.054 0.054 0.089zM11.804 9.321l9.536 15.464-9.536-4.75v-10.714zM32 9.643v18.821q0 0.446-0.25 0.723t-0.679 0.277-0.839-0.232l-7.875-3.929zM31.946 7.5q0 0.054-4.58 7.491t-5.366 8.705l-6.964-11.321 5.786-9.411q0.304-0.5 0.929-0.5 0.25 0 0.464 0.107l9.661 4.821q0.071 0.036 0.071 0.107z"></path>
2019</symbol>
2020<symbol id="icon-slideshare" viewBox="0 0 32 32">
2021<path class="path1" d="M15.589 13.214q0 1.482-1.134 2.545t-2.723 1.063-2.723-1.063-1.134-2.545q0-1.5 1.134-2.554t2.723-1.054 2.723 1.054 1.134 2.554zM24.554 13.214q0 1.482-1.125 2.545t-2.732 1.063q-1.589 0-2.723-1.063t-1.134-2.545q0-1.5 1.134-2.554t2.723-1.054q1.607 0 2.732 1.054t1.125 2.554zM28.571 16.429v-11.911q0-1.554-0.571-2.205t-1.982-0.652h-19.857q-1.482 0-2.009 0.607t-0.527 2.25v12.018q0.768 0.411 1.58 0.714t1.446 0.5 1.446 0.33 1.268 0.196 1.25 0.071 1.045 0.009 1.009-0.036 0.795-0.036q1.214-0.018 1.696 0.482 0.107 0.107 0.179 0.161 0.464 0.446 1.089 0.911 0.125-1.625 2.107-1.554 0.089 0 0.652 0.027t0.768 0.036 0.813 0.018 0.946-0.018 0.973-0.080 1.089-0.152 1.107-0.241 1.196-0.348 1.205-0.482 1.286-0.616zM31.482 16.339q-2.161 2.661-6.643 4.5 1.5 5.089-0.411 8.304-1.179 2.018-3.268 2.643-1.857 0.571-3.25-0.268-1.536-0.911-1.464-2.929l-0.018-5.821v-0.018q-0.143-0.036-0.438-0.107t-0.42-0.089l-0.018 6.036q0.071 2.036-1.482 2.929-1.411 0.839-3.268 0.268-2.089-0.643-3.25-2.679-1.875-3.214-0.393-8.268-4.482-1.839-6.643-4.5-0.446-0.661-0.071-1.125t1.071 0.018q0.054 0.036 0.196 0.125t0.196 0.143v-12.393q0-1.286 0.839-2.196t2.036-0.911h22.446q1.196 0 2.036 0.911t0.839 2.196v12.393l0.375-0.268q0.696-0.482 1.071-0.018t-0.071 1.125z"></path>
2022</symbol>
2023<symbol id="icon-snapchat-ghost" viewBox="0 0 30 32">
2024<path class="path1" d="M15.143 2.286q2.393-0.018 4.295 1.223t2.92 3.438q0.482 1.036 0.482 3.196 0 0.839-0.161 3.411 0.25 0.125 0.5 0.125 0.321 0 0.911-0.241t0.911-0.241q0.518 0 1 0.321t0.482 0.821q0 0.571-0.563 0.964t-1.232 0.563-1.232 0.518-0.563 0.848q0 0.268 0.214 0.768 0.661 1.464 1.83 2.679t2.58 1.804q0.5 0.214 1.429 0.411 0.5 0.107 0.5 0.625 0 1.25-3.911 1.839-0.125 0.196-0.196 0.696t-0.25 0.83-0.589 0.33q-0.357 0-1.107-0.116t-1.143-0.116q-0.661 0-1.107 0.089-0.571 0.089-1.125 0.402t-1.036 0.679-1.036 0.723-1.357 0.598-1.768 0.241q-0.929 0-1.723-0.241t-1.339-0.598-1.027-0.723-1.036-0.679-1.107-0.402q-0.464-0.089-1.125-0.089-0.429 0-1.17 0.134t-1.045 0.134q-0.446 0-0.625-0.33t-0.25-0.848-0.196-0.714q-3.911-0.589-3.911-1.839 0-0.518 0.5-0.
2024625 0.929-0.196 1.429-0.411 1.393-0.571 2.58-1.804t1.83-2.679q0.214-0.5 0.214-0.768 0-0.5-0.563-0.848t-1.241-0.527-1.241-0.563-0.563-0.938q0-0.482 0.464-0.813t0.982-0.33q0.268 0 0.857 0.232t0.946 0.232q0.321 0 0.571-0.125-0.161-2.536-0.161-3.393 0-2.179 0.482-3.214 1.143-2.446 3.071-3.536t4.714-1.125z"></path>
2025</symbol>
2026<symbol id="icon-yelp" viewBox="0 0 27 32">
2027<path class="path1" d="M13.804 23.554v2.268q-0.018 5.214-0.107 5.446-0.214 0.571-0.911 0.714-0.964 0.161-3.241-0.679t-2.902-1.589q-0.232-0.268-0.304-0.643-0.018-0.214 0.071-0.464 0.071-0.179 0.607-0.839t3.232-3.857q0.018 0 1.071-1.25 0.268-0.339 0.705-0.438t0.884 0.063q0.429 0.179 0.67 0.518t0.223 0.75zM11.143 19.071q-0.054 0.982-0.929 1.25l-2.143 0.696q-4.911 1.571-5.214 1.571-0.625-0.036-0.964-0.643-0.214-0.446-0.304-1.339-0.143-1.357 0.018-2.973t0.536-2.223 1-0.571q0.232 0 3.607 1.375 1.25 0.518 2.054 0.839l1.5 0.607q0.411 0.161 0.634 0.545t0.205 0.866zM25.893 24.375q-0.125 0.964-1.634 2.875t-2.42 2.268q-0.661 0.25-1.125-0.125-0.25-0.179-3.286-5.125l-0.839-1.375q-0.25-0.375-0.205-0.821t0.348-0.821q0.625-0.768 1.482-0.464 0.018 0.018 2.125 0.714 3.625 1.179 4.321 1.42t0.839 0.366q0.5 0.393 0.393 1.089zM13.893 13.089q0.089 1.821-0.964 2.179-1.036 0.304-2.036-1.268l-6.75-10.679q-0.143-0.625 0.339-1.107 0.732-0.768 3.705-1.598t4.009-0.563q0.714 0.179 0.875 0.804 0.054 0.321 0.393 5.455t0.429 6.777zM25.714 15.018q0.054 0.696-0.464 1.054-0.268 0.179-5.875 1.536-1.196 0.268-1.625 0.411l0.018-0.036q-0.411 0.107-0.821-0.071t-0.661-0.571q-0.536-0.839 0-1.554 0.018-0.018 1.339-1.821 2.232-3.054 2.679-3.643t0.607-0.696q0.5-0.339 1.161-0.036 0.857 0.411 2.196 2.384t1.446 2.991v0.054z"></path>
2028</symbol>
2029<symbol id="icon-vine" viewBox="0 0 27 32">
2030<path class="path1" d="M26.732 14.768v3.536q-1.804 0.411-3.536 0.411-1.161 2.429-2.955 4.839t-3.241 3.848-2.286 1.902q-1.429 0.804-2.893-0.054-0.5-0.304-1.080-0.777t-1.518-1.491-1.83-2.295-1.92-3.286-1.884-4.357-1.634-5.616-1.259-6.964h5.054q0.464 3.893 1.25 7.116t1.866 5.661 2.17 4.205 2.5 3.482q3.018-3.018 5.125-7.25-2.536-1.286-3.982-3.929t-1.446-5.946q0-3.429 1.857-5.616t5.071-2.188q3.179 0 4.875 1.884t1.696 5.313q0 2.839-1.036 5.107-0.125 0.018-0.348 0.054t-0.821 0.036-1.125-0.107-1.107-0.455-0.902-0.92q0.554-1.839 0.554-3.286 0-1.554-0.518-2.357t-1.411-0.804q-0.946 0-1.518 0.884t-0.571 2.509q0 3.321 1.875 5.241t4.768 1.92q1.107 0 2.161-0.25z"></path>
2031</symbol>
2032<symbol id="icon-vk" viewBox="0 0 35 32">
2033<path class="path1" d="M34.232 9.286q0.411 1.143-2.679 5.25-0.429 0.571-1.161 1.518-1.393 1.786-1.607 2.339-0.304 0.732 0.25 1.446 0.304 0.375 1.446 1.464h0.018l0.071 0.071q2.518 2.339 3.411 3.946 0.054 0.089 0.116 0.223t0.125 0.473-0.009 0.607-0.446 0.491-1.054 0.223l-4.571 0.071q-0.429 0.089-1-0.089t-0.929-0.393l-0.357-0.214q-0.536-0.375-1.25-1.143t-1.223-1.384-1.089-1.036-1.009-0.277q-0.054 0.018-0.143 0.063t-0.304 0.259-0.384 0.527-0.304 0.929-0.116 1.384q0 0.268-0.063 0.491t-0.134 0.33l-0.071 0.089q-0.321 0.339-0.946 0.393h-2.054q-1.268 0.071-2.607-0.295t-2.348-0.946-1.839-1.179-1.259-1.027l-0.446-0.429q-0.179-0.179-0.491-0.536t-1.277-1.625-1.893-2.696-2.188-3.768-2.33-4.857q-0.107-0.286-0.107-0.482t0.054-0.286l0.071-0.107q0.268-0.339 1.018-0.339l4.893-0.036q0.214 0.036 0.411 0.116t0.286 0.152l0.089 0.054q0.286 0.196 0.429 0.571 0.357 0.893 0.821 1.848t0.732 1.455l0.286 0.518q0.518 1.071 1 1.857t0.866 1.223 0.741 0.688 0.607 0.25 0.482-0.089q0.036-0.018 0.089-0.089t0.214-0.393 0.241-0.839 0.17-1.446 0-2.232q-0.036-0.714-0.161-1.304t-0.25-0.821l-0.107-0.214q-0.446-0.607-1.518-0.768-0.232-0.036 0.089-0.429 0.304-0.339 0.679-0.536 0.946-0.464 4.268-0.429 1.464 0.018 2.411 0.232 0.357 0.089 0.598 0.241t0.366 0.429 0.188 0.571 0.063 0.813-0.018 0.982-0.045 1.259-0.027 1.473q0 0.196-0.018 0.75t-0.009 0.857 0.063 0.723 0.205 0.696 0.402 0.438q0.143 0.036 0.304 0.071t0.464-0.196 0.679-0.616 0.929-1.196 1.214-1.92q1.071-1.857 1.911-4.018 0.071-0.179 0.179-0.313t0.196-0.188l0.071-0.054 0.089-0.045t0.232-0.054 0.357-0.009l5.143-0.036q0.696-0.089 1.143 0.045t0.554 0.295z"></path>
2034</symbol>
2035<symbol id="icon-search" viewBox="0 0 30 32">
2036<path class="path1" d="M20.571 14.857q0-3.304-2.348-5.652t-5.652-2.348-5.652 2.348-2.348 5.652 2.348 5.652 5.652 2.348 5.652-2.348 2.348-5.652zM29.714 29.714q0 0.929-0.679 1.607t-1.607 0.679q-0.964 0-1.607-0.679l-6.125-6.107q-3.196 2.214-7.125 2.214-2.554 0-4.884-0.991t-4.018-2.679-2.679-4.018-0.991-4.884 0.991-4.884 2.679-4.018 4.018-2.679 4.884-0.991 4.884 0.991 4.018 2.679 2.679 4.018 0.991 4.884q0 3.929-2.214 7.125l6.125 6.125q0.661 0.661 0.661 1.607z"></path>
2037</symbol>
2038<symbol id="icon-envelope-o" viewBox="0 0 32 32">
2039<path class="path1" d="M29.714 26.857v-13.714q-0.571 0.643-1.232 1.179-4.786 3.679-7.607 6.036-0.911 0.768-1.482 1.196t-1.545 0.866-1.83 0.438h-0.036q-0.857 0-1.83-0.438t-1.545-0.866-1.482-1.196q-2.821-2.357-7.607-6.036-0.661-0.536-1.232-1.179v13.714q0 0.232 0.17 0.402t0.402 0.17h26.286q0.232 0 0.402-0.17t0.17-0.402zM29.714 8.089v-0.438t-0.009-0.232-0.054-0.223-0.098-0.161-0.161-0.134-0.25-0.045h-26.286q-0.232 0-0.402 0.17t-0.17 0.402q0 3 2.625 5.071 3.446 2.714 7.161 5.661 0.107 0.089 0.625 0.527t0.821 0.67 0.795 0.563 0.902 0.491 0.768 0.161h0.036q0.357 0 0.768-0.161t0.902-0.491 0.795-0.563 0.821-0.67 0.625-0.527q3.714-2.946 7.161-5.661 0.964-0.768 1.795-2.063t0.83-2.348zM32 7.429v19.429q0 1.179-0.839 2.018t-2.018 0.839h-26.286q-1.179 0-2.018-0.839t-0.839-2.018v-19.429q0-1.179 0.839-2.018t2.018-0.839h26.286q1.179 0 2.018 0.839t0.839 2.018z"></path>
2040</symbol>
2041<symbol id="icon-close" viewBox="0 0 25 32">
2042<path class="path1" d="M23.179 23.607q0 0.714-0.5 1.214l-2.429 2.429q-0.5 0.5-1.214 0.5t-1.214-0.5l-5.25-5.25-5.25 5.25q-0.5 0.5-1.214 0.5t-1.214-0.5l-2.429-2.429q-0.5-0.5-0.5-1.214t0.5-1.214l5.25-5.25-5.25-5.25q-0.5-0.5-0.5-1.214t0.5-1.214l2.429-2.429q0.5-0.5 1.214-0.5t1.214 0.5l5.25 5.25 5.25-5.25q0.5-0.5 1.214-0.5t1.214 0.5l2.429 2.429q0.5 0.5 0.5 1.214t-0.5 1.214l-5.25 5.25 5.25 5.25q0.5 0.5 0.5 1.214z"></path>
2043</symbol>
2044<symbol id="icon-angle-down" viewBox="0 0 21 32">
2045<path class="path1" d="M19.196 13.143q0 0.232-0.179 0.411l-8.321 8.321q-0.179 0.179-0.411 0.179t-0.411-0.179l-8.321-8.321q-0.179-0.179-0.179-0.411t0.179-0.411l0.893-0.893q0.179-0.179 0.411-0.179t0.411 0.179l7.018 7.018 7.018-7.018q0.179-0.179 0.411-0.179t0.411 0.179l0.893 0.893q0.179 0.179 0.179 0.411z"></path>
2046</symbol>
2047<symbol id="icon-folder-open" viewBox="0 0 34 32">
2048<path class="path1" d="M33.554 17q0 0.554-0.554 1.179l-6 7.071q-0.768 0.911-2.152 1.545t-2.563 0.634h-19.429q-0.607 0-1.080-0.232t-0.473-0.768q0-0.554 0.554-1.179l6-7.071q0.768-0.911 2.152-1.545t2.563-0.634h19.429q0.607 0 1.080 0.232t0.473 0.768zM27.429 10.857v2.857h-14.857q-1.679 0-3.518 0.848t-2.929 2.134l-6.107 7.179q0-0.071-0.009-0.223t-0.009-0.223v-17.143q0-1.643 1.179-2.821t2.821-1.179h5.714q1.643 0 2.821 1.179t1.179 2.821v0.571h9.714q1.643 0 2.821 1.179t1.179 2.821z"></path>
2049</symbol>
2050<symbol id="icon-twitter" viewBox="0 0 30 32">
2051<path class="path1" d="M28.929 7.286q-1.196 1.75-2.893 2.982 0.018 0.25 0.018 0.75 0 2.321-0.679 4.634t-2.063 4.437-3.295 3.759-4.607 2.607-5.768 0.973q-4.839 0-8.857-2.589 0.625 0.071 1.393 0.071 4.018 0 7.161-2.464-1.875-0.036-3.357-1.152t-2.036-2.848q0.589 0.089 1.089 0.089 0.768 0 1.518-0.196-2-0.411-3.313-1.991t-1.313-3.67v-0.071q1.214 0.679 2.607 0.732-1.179-0.786-1.875-2.054t-0.696-2.75q0-1.571 0.786-2.911 2.161 2.661 5.259 4.259t6.634 1.777q-0.143-0.679-0.143-1.321 0-2.393 1.688-4.080t4.080-1.688q2.5 0 4.214 1.821 1.946-0.375 3.661-1.393-0.661 2.054-2.536 3.179 1.661-0.179 3.321-0.893z"></path>
2052</symbol>
2053<symbol id="icon-facebook" viewBox="0 0 19 32">
2054<path class="path1" d="M17.125 0.214v4.714h-2.804q-1.536 0-2.071 0.643t-0.536 1.929v3.375h5.232l-0.696 5.286h-4.536v13.554h-5.464v-13.554h-4.554v-5.286h4.554v-3.893q0-3.321 1.857-5.152t4.946-1.83q2.625 0 4.071 0.214z"></path>
2055</symbol>
2056<symbol id="icon-github" viewBox="0 0 27 32">
2057<path class="path1" d="M13.714 2.286q3.732 0 6.884 1.839t4.991 4.991 1.839 6.884q0 4.482-2.616 8.063t-6.759 4.955q-0.482 0.089-0.714-0.125t-0.232-0.536q0-0.054 0.009-1.366t0.009-2.402q0-1.732-0.929-2.536 1.018-0.107 1.83-0.321t1.679-0.696 1.446-1.188 0.946-1.875 0.366-2.688q0-2.125-1.411-3.679 0.661-1.625-0.143-3.643-0.5-0.161-1.446 0.196t-1.643 0.786l-0.679 0.429q-1.661-0.464-3.429-0.464t-3.429 0.464q-0.286-0.196-0.759-0.482t-1.491-0.688-1.518-0.241q-0.804 2.018-0.143 3.643-1.411 1.554-1.411 3.679 0 1.518 0.366 2.679t0.938 1.875 1.438 1.196 1.679 0.696 1.83 0.321q-0.696 0.643-0.875 1.839-0.375 0.179-0.804 0.268t-1.018 0.089-1.17-0.384-0.991-1.116q-0.339-0.571-0.866-0.929t-0.884-0.429l-0.357-0.054q-0.375 0-0.518 0.080t-0.089 0.205 0.161 0.25 0.232 0.214l0.125 0.089q0.393 0.179 0.777 0.679t0.563 0.911l0.179 0.411q0.232 0.679 0.786 1.098t1.196 0.536 1.241 0.125 0.991-0.063l0.411-0.071q0 0.679 0.009 1.58t0.009 0.973q0 0.321-0.232 0.536t-0.714 0.125q-4.143-1.375-6.759-4.955t-2.616-8.063q0-3.732 1.839-6.884t4.991-4.991 6.884-1.839zM5.196 21.982q0.054-0.125-0.125-0.214-0.179-0.054-0.232 0.036-0.054 0.125 0.125 0.214 0.161 0.107 0.232-0.036zM5.75 22.589q0.125-0.089-0.036-0.286-0.179-0.161-0.286-0.054-0.125 0.089 0.036 0.286 0.179 0.179 0.286 0.054zM6.286 23.393q0.161-0.125 0-0.339-0.143-0.232-0.304-0.
2057107-0.161 0.089 0 0.321t0.304 0.125zM7.036 24.143q0.143-0.143-0.071-0.339-0.214-0.214-0.357-0.054-0.161 0.143 0.071 0.339 0.214 0.214 0.357 0.054zM8.054 24.589q0.054-0.196-0.232-0.286-0.268-0.071-0.339 0.125t0.232 0.268q0.268 0.107 0.339-0.107zM9.179 24.679q0-0.232-0.304-0.196-0.286 0-0.286 0.196 0 0.232 0.304 0.196 0.286 0 0.286-0.196zM10.214 24.5q-0.036-0.196-0.321-0.161-0.286 0.054-0.25 0.268t0.321 0.143 0.25-0.25z"></path>
2058</symbol>
2059<symbol id="icon-bars" viewBox="0 0 27 32">
2060<path class="path1" d="M27.429 24v2.286q0 0.464-0.339 0.804t-0.804 0.339h-25.143q-0.464 0-0.804-0.339t-0.339-0.804v-2.286q0-0.464 0.339-0.804t0.804-0.339h25.143q0.464 0 0.804 0.339t0.339 0.804zM27.429 14.857v2.286q0 0.464-0.339 0.804t-0.804 0.339h-25.143q-0.464 0-0.804-0.339t-0.339-0.804v-2.286q0-0.464 0.339-0.804t0.804-0.339h25.143q0.464 0 0.804 0.339t0.339 0.804zM27.429 5.714v2.286q0 0.464-0.339 0.804t-0.804 0.339h-25.143q-0.464 0-0.804-0.339t-0.339-0.804v-2.286q0-0.464 0.339-0.804t0.804-0.339h25.143q0.464 0 0.804 0.339t0.339 0.804z"></path>
2061</symbol>
2062<symbol id="icon-google-plus" viewBox="0 0 41 32">
2063<path class="path1" d="M25.661 16.304q0 3.714-1.554 6.616t-4.429 4.536-6.589 1.634q-2.661 0-5.089-1.036t-4.179-2.786-2.786-4.179-1.036-5.089 1.036-5.089 2.786-4.179 4.179-2.786 5.089-1.036q5.107 0 8.768 3.429l-3.554 3.411q-2.089-2.018-5.214-2.018-2.196 0-4.063 1.107t-2.955 3.009-1.089 4.152 1.089 4.152 2.955 3.009 4.063 1.107q1.482 0 2.723-0.411t2.045-1.027 1.402-1.402 0.875-1.482 0.384-1.321h-7.429v-4.5h12.357q0.214 1.125 0.214 2.179zM41.143 14.125v3.75h-3.732v3.732h-3.75v-3.732h-3.732v-3.75h3.732v-3.732h3.75v3.732h3.732z"></path>
2064</symbol>
2065<symbol id="icon-linkedin" viewBox="0 0 27 32">
2066<path class="path1" d="M6.232 11.161v17.696h-5.893v-17.696h5.893zM6.607 5.696q0.018 1.304-0.902 2.179t-2.42 0.875h-0.036q-1.464 0-2.357-0.875t-0.893-2.179q0-1.321 0.92-2.188t2.402-0.866 2.375 0.866 0.911 2.188zM27.429 18.714v10.143h-5.875v-9.464q0-1.875-0.723-2.938t-2.259-1.063q-1.125 0-1.884 0.616t-1.134 1.527q-0.196 0.536-0.196 1.446v9.875h-5.875q0.036-7.125 0.036-11.554t-0.018-5.286l-0.018-0.857h5.875v2.571h-0.036q0.357-0.571 0.732-1t1.009-0.929 1.554-0.777 2.045-0.277q3.054 0 4.911 2.027t1.857 5.938z"></path>
2067</symbol>
2068<symbol id="icon-quote-right" viewBox="0 0 30 32">
2069<path class="path1" d="M13.714 5.714v12.571q0 1.857-0.723 3.545t-1.955 2.92-2.92 1.955-3.545 0.723h-1.143q-0.464 0-0.804-0.339t-0.339-0.804v-2.286q0-0.464 0.339-0.804t0.804-0.339h1.143q1.893 0 3.232-1.339t1.339-3.232v-0.571q0-0.714-0.5-1.214t-1.214-0.5h-4q-1.429 0-2.429-1t-1-2.429v-6.857q0-1.429 1-2.429t2.429-1h6.857q1.429 0 2.429 1t1 2.429zM29.714 5.714v12.571q0 1.857-0.723 3.545t-1.955 2.92-2.92 1.955-3.545 0.723h-1.143q-0.464 0-0.804-0.339t-0.339-0.804v-2.286q0-0.464 0.339-0.804t0.804-0.339h1.143q1.893 0 3.232-1.339t1.339-3.232v-0.571q0-0.714-0.5-1.214t-1.214-0.5h-4q-1.429 0-2.429-1t-1-2.429v-6.857q0-1.429 1-2.429t2.429-1h6.857q1.429 0 2.429 1t1 2.429z"></path>
2070</symbol>
2071<symbol id="icon-mail-reply" viewBox="0 0 32 32">
2072<path class="path1" d="M32 20q0 2.964-2.268 8.054-0.054 0.125-0.188 0.429t-0.241 0.536-0.232 0.393q-0.214 0.304-0.5 0.304-0.268 0-0.42-0.179t-0.152-0.446q0-0.161 0.045-0.473t0.045-0.42q0.089-1.214 0.089-2.196 0-1.804-0.313-3.232t-0.866-2.473-1.429-1.804-1.884-1.241-2.375-0.759-2.75-0.384-3.134-0.107h-4v4.571q0 0.464-0.339 0.804t-0.804 0.339-0.804-0.339l-9.143-9.143q-0.339-0.339-0.339-0.804t0.339-0.804l9.143-9.143q0.339-0.339 0.804-0.339t0.804 0.339 0.339 0.804v4.571h4q12.732 0 15.625 7.196 0.946 2.393 0.946 5.946z"></path>
2073</symbol>
2074<symbol id="icon-youtube" viewBox="0 0 27 32">
2075<path class="path1" d="M17.339 22.214v3.768q0 1.196-0.696 1.196-0.411 0-0.804-0.393v-5.375q0.393-0.393 0.804-0.393 0.696 0 0.696 1.196zM23.375 22.232v0.821h-1.607v-0.821q0-1.214 0.804-1.214t0.804 1.214zM6.125 18.339h1.911v-1.679h-5.571v1.679h1.875v10.161h1.786v-10.161zM11.268 28.5h1.589v-8.821h-1.589v6.75q-0.536 0.75-1.018 0.75-0.321 0-0.375-0.375-0.018-0.054-0.018-0.625v-6.5h-1.589v6.982q0 0.875 0.143 1.304 0.214 0.661 1.036 0.661 0.857 0 1.821-1.089v0.964zM18.929 25.857v-3.518q0-1.304-0.161-1.768-0.304-1-1.268-1-0.893 0-1.661 0.964v-3.875h-1.589v11.839h1.589v-0.857q0.804 0.982 1.661 0.982 0.964 0 1.268-0.982 0.161-0.482 0.161-1.786zM24.964 25.679v-0.232h-1.625q0 0.911-0.036 1.089-0.
2075125 0.643-0.714 0.643-0.821 0-0.821-1.232v-1.554h3.196v-1.839q0-1.411-0.482-2.071-0.696-0.911-1.893-0.911-1.214 0-1.911 0.911-0.5 0.661-0.5 2.071v3.089q0 1.411 0.518 2.071 0.696 0.911 1.929 0.911 1.286 0 1.929-0.946 0.321-0.482 0.375-0.964 0.036-0.161 0.036-1.036zM14.107 9.375v-3.75q0-1.232-0.768-1.232t-0.768 1.232v3.75q0 1.25 0.768 1.25t0.768-1.25zM26.946 22.786q0 4.179-0.464 6.25-0.25 1.054-1.036 1.768t-1.821 0.821q-3.286 0.375-9.911 0.375t-9.911-0.375q-1.036-0.107-1.83-0.821t-1.027-1.768q-0.464-2-0.464-6.25 0-4.179 0.464-6.25 0.25-1.054 1.036-1.768t1.839-0.839q3.268-0.357 9.893-0.357t9.911 0.357q1.036 0.125 1.83 0.839t1.027 1.768q0.464 2 0.464 6.25zM9.125 0h1.821l-2.161 7.125v4.839h-1.786v-4.839q-0.25-1.321-1.089-3.786-0.661-1.839-1.161-3.339h1.893l1.268 4.696zM15.732 5.946v3.125q0 1.446-0.5 2.107-0.661 0.911-1.893 0.911-1.196 0-1.875-0.911-0.5-0.679-0.5-2.107v-3.125q0-1.429 0.5-2.089 0.679-0.911 1.875-0.911 1.232 0 1.893 0.911 0.5 0.661 0.5 2.089zM21.714 3.054v8.911h-1.625v-0.982q-0.946 1.107-1.839 1.107-0.821 0-1.054-0.661-0.143-0.429-0.143-1.339v-7.036h1.625v6.554q0 0.589 0.018 0.625 0.054 0.393 0.375 0.393 0.482 0 1.018-0.768v-6.804h1.625z"></path>
2076</symbol>
2077<symbol id="icon-dropbox" viewBox="0 0 32 32">
2078<path class="path1" d="M7.179 12.625l8.821 5.446-6.107 5.089-8.75-5.696zM24.786 22.536v1.929l-8.75 5.232v0.018l-0.018-0.018-0.018 0.018v-0.018l-8.732-5.232v-1.929l2.625 1.714 6.107-5.071v-0.036l0.018 0.018 0.018-0.018v0.036l6.125 5.071zM9.893 2.107l6.107 5.089-8.821 5.429-6.036-4.821zM24.821 12.625l6.036 4.839-8.732 5.696-6.125-5.089zM22.125 2.107l8.732 5.696-6.036 4.821-8.821-5.429z"></path>
2079</symbol>
2080<symbol id="icon-instagram" viewBox="0 0 27 32">
2081<path class="path1" d="M18.286 16q0-1.893-1.339-3.232t-3.232-1.339-3.232 1.339-1.339 3.232 1.339 3.232 3.232 1.339 3.232-1.339 1.339-3.232zM20.75 16q0 2.929-2.054 4.982t-4.982 2.054-4.982-2.054-2.054-4.982 2.054-4.982 4.982-2.054 4.982 2.054 2.054 4.982zM22.679 8.679q0 0.679-0.482 1.161t-1.161 0.482-1.161-0.482-0.482-1.161 0.482-1.161 1.161-0.482 1.161 0.482 0.482 1.161zM13.714 4.75q-0.125 0-1.366-0.009t-1.884 0-1.723 0.054-1.839 0.179-1.277 0.33q-0.893 0.357-1.571 1.036t-1.036 1.571q-0.196 0.518-0.33 1.277t-0.179 1.839-0.054 1.723 0 1.884 0.009 1.366-0.009 1.366 0 1.884 0.054 1.723 0.179 1.839 0.33 1.277q0.357 0.893 1.036 1.571t1.571 1.036q0.518 0.196 1.277 0.33t1.839 0.179 1.723 0.054 1.884 0 1.366-0.009 1.366 0.009 1.884 0 1.723-0.054 1.839-0.179 1.277-0.33q0.893-0.357 1.571-1.036t1.036-1.571q0.196-0.518 0.33-1.277t0.179-1.839 0.054-1.723 0-1.884-0.009-1.366 0.009-1.366 0-1.884-0.054-1.723-0.179-1.839-0.33-1.277q-0.357-0.893-1.036-1.571t-1.571-1.036q-0.518-0.196-1.277-0.33t-1.839-0.179-1.723-0.054-1.884 0-1.366 0.009zM27.429 16q0 4.089-0.089 5.661-0.179 3.714-2.214 5.75t-5.75 2.214q-1.571 0.089-5.661 0.089t-5.661-0.089q-3.714-0.179-5.75-2.214t-2.214-5.75q-0.089-1.571-0.089-5.661t0.089-5.661q0.179-3.714 2.214-5.75t5.75-2.214q1.571-0.089 5.661-0.089t5.661 0.089q3.714 0.179 5.75 2.214t2.214 5.75q0.089 1.571 0.089 5.661z"></path>
2082</symbol>
2083<symbol id="icon-flickr" viewBox="0 0 27 32">
2084<path class="path1" d="M22.286 2.286q2.125 0 3.634 1.509t1.509 3.634v17.143q0 2.125-1.509 3.634t-3.634 1.509h-17.143q-2.125 0-3.634-1.509t-1.509-3.634v-17.143q0-2.125 1.509-3.634t3.634-1.509h17.143zM12.464 16q0-1.571-1.107-2.679t-2.679-1.107-2.679 1.107-1.107 2.679 1.107 2.679 2.679 1.107 2.679-1.107 1.107-2.679zM22.536 16q0-1.571-1.107-2.679t-2.679-1.107-2.679 1.107-1.107 2.679 1.107 2.679 2.679 1.107 2.679-1.107 1.107-2.679z"></path>
2085</symbol>
2086<symbol id="icon-tumblr" viewBox="0 0 19 32">
2087<path class="path1" d="M16.857 23.732l1.429 4.232q-0.411 0.625-1.982 1.179t-3.161 0.571q-1.857 0.036-3.402-0.464t-2.545-1.321-1.696-1.893-0.991-2.143-0.295-2.107v-9.714h-3v-3.839q1.286-0.464 2.304-1.241t1.625-1.607 1.036-1.821 0.607-1.768 0.268-1.58q0.018-0.089 0.080-0.152t0.134-0.063h4.357v7.571h5.946v4.5h-5.964v9.25q0 0.536 0.116 1t0.402 0.938 0.884 0.741 1.455 0.25q1.393-0.036 2.393-0.518z"></path>
2088</symbol>
2089<symbol id="icon-dockerhub" viewBox="0 0 24 28">
2090<path class="path1" d="M1.597 10.257h2.911v2.83H1.597v-2.83zm3.573 0h2.91v2.83H5.17v-2.83zm0-3.627h2.91v2.829H5.17V6.63zm3.57 3.627h2.912v2.83H8.74v-2.83zm0-3.627h2.912v2.829H8.74V6.63zm3.573 3.627h2.911v2.83h-2.911v-2.83zm0-3.627h2.911v2.829h-2.911V6.63zm3.572 3.627h2.911v2.83h-2.911v-2.83zM12.313 3h2.911v2.83h-2.911V3zm-6.65 14.173c-.449 0-.812.354-.812.788 0 .435.364.788.812.788.447 0 .811-.353.811-.788 0-.434-.363-.788-.811-.788"></path>
2091<path class="path2" d="M28.172 11.721c-.978-.549-2.278-.624-3.388-.306-.136-1.146-.91-2.149-1.83-2.869l-.366-.28
20916-.307.345c-.618.692-.8 1.845-.718 2.73.063.651.273 1.312.685 1.834-.313.183-.668.328-.985.434-.646.212-1.347.33-2.028.33H.083l-.042.429c-.137 1.432.065 2.866.674 4.173l.262.519.03.048c1.8 2.973 4.963 4.225 8.41 4.225 6.672 0 12.174-2.896 14.702-9.015 1.689.085 3.417-.4 4.243-1.968l.211-.4-.401-.223zM5.664 19.458c-.85 0-1.542-.671-1.542-1.497 0-.825.691-1.498 1.541-1.498.849 0 1.54.672 1.54 1.497s-.69 1.498-1.539 1.498z"></path>
2092</symbol>
2093<symbol id="icon-dribbble" viewBox="0 0 27 32">
2094<path class="path1" d="M18.286 26.786q-0.75-4.304-2.5-8.893h-0.036l-0.036 0.018q-0.286 0.107-0.768 0.295t-1.804 0.875-2.446 1.464-2.339 2.045-1.839 2.643l-0.268-0.196q3.286 2.679 7.464 2.679 2.357 0 4.571-0.929zM14.982 15.946q-0.375-0.875-0.946-1.982-5.554 1.661-12.018 1.661-0.018 0.125-0.018 0.375 0 2.214 0.786 4.223t2.214 3.598q0.893-1.589 2.205-2.973t2.545-2.223 2.33-1.446 1.777-0.857l0.661-0.232q0.071-0.018 0.232-0.063t0.232-0.080zM13.071 12.161q-2.143-3.804-4.357-6.75-2.464 1.161-4.179 3.321t-2.286 4.857q5.393 0 10.821-1.429zM25.286 17.857q-3.75-1.071-7.304-0.518 1.554 4.268 2.286 8.375 1.982-1.339 3.304-3.384t1.714-4.473zM10.911 4.625q-0.018 0-0.036 0.018 0.018-0.018 0.036-0.018zM21.446 7.214q-3.304-2.929-7.732-2.929-1.357 0-2.768 0.339 2.339 3.036 4.393 6.821 1.232-0.464 2.321-1.080t1.723-1.098 1.17-1.018 0.67-0.723zM25.429 15.875q-0.054-4.143-2.661-7.321l-0.018 0.018q-0.161 0.214-0.339 0.438t-0.777 0.795-1.268 1.080-1.786 1.161-2.348 1.152q0.446 0.946 0.786 1.696 0.036 0.107 0.116 0.313t0.134 0.295q0.643-0.089 1.33-0.125t1.313-0.036 1.232 0.027 1.143 0.071 1.009 0.098 0.857 0.116 0.652 0.107 0.446 0.080zM27.429 16q0 3.732-1.839 6.884t-4.991 4.991-6.884 1.839-6.884-1.839-4.991-4.991-1.839-6.884 1.839-6.884 4.991-4.991 6.884-1.839 6.884 1.839 4.991 4.991 1.839 6.884z"></path>
2095</symbol>
2096<symbol id="icon-skype" viewBox="0 0 27 32">
2097<path class="path1" d="M20.946 18.982q0-0.893-0.348-1.634t-0.866-1.223-1.304-0.875-1.473-0.607-1.563-0.411l-1.857-0.429q-0.536-0.125-0.786-0.188t-0.625-0.205-0.536-0.286-0.295-0.375-0.134-0.536q0-1.375 2.571-1.375 0.768 0 1.375 0.214t0.964 0.509 0.679 0.598 0.714 0.518 0.857 0.214q0.839 0 1.348-0.571t0.509-1.375q0-0.982-1-1.777t-2.536-1.205-3.25-0.411q-1.214 0-2.357 0.277t-2.134 0.839-1.589 1.554-0.598 2.295q0 1.089 0.339 1.902t1 1.348 1.429 0.866 1.839 0.58l2.607 0.643q1.607 0.393 2 0.643 0.571 0.357 0.571 1.071 0 0.696-0.714 1.152t-1.875 0.455q-0.911 0-1.634-0.286t-1.161-0.688-0.813-0.804-0.821-0.688-0.964-0.286q-0.893 0-1.348 0.536t-0.455 1.339q0 1.643 2.179 2.813t5.196 1.17q1.304 0 2.5-0.33t2.188-0.955 1.58-1.67 0.589-2.348zM27.429 22.857q0 2.839-2.009 4.848t-4.848 2.009q-2.321 0-4.179-1.429-1.375 0.286-2.679 0.286-2.554 0-4.884-0.991t-4.018-2.679-2.679-4.018-0.991-4.884q0-1.304 0.286-2.679-1.429-1.857-1.429-4.179 0-2.839 2.009-4.848t4.848-2.009q2.321 0 4.179 1.429 1.375-0.286 2.679-0.286 2.554 0 4.884 0.991t4.018 2.679 2.679 4.018 0.991 4.884q0 1.304-0.286 2.679 1.429 1.857 1.429 4.179z"></path>
2098</symbol>
2099<symbol id="icon-foursquare" viewBox="0 0 23 32">
2100<path class="path1" d="M17.857 7.75l0.661-3.464q0.089-0.411-0.161-0.714t-0.625-0.304h-12.714q-0.411 0-0.688 0.304t-0.277 0.661v19.661q0 0.125 0.107 0.018l5.196-6.286q0.411-0.464 0.679-0.598t0.857-0.134h4.268q0.393 0 0.661-0.259t0.321-0.527q0.429-2.321 0.661-3.411 0.071-0.375-0.205-0.714t-0.652-0.339h-5.25q-0.518 0-0.857-0.339t-0.339-0.857v-0.75q0-0.518 0.339-0.848t0.857-0.33h6.179q0.321 0 0.625-0.241t0.357-0.527zM21.911 3.786q-0.268 1.304-0.955 4.759t-1.241 6.25-0.625 3.098q-0.107 0.393-0.161 0.58t-0.25 0.58-0.438 0.589-0.688 0.375-1.036 0.179h-4.839q-0.232 0-0.393 0.179-0.143 0.161-7.607 8.821-0.393 0.446-1.045 0.509t-0.866-0.098q-0.982-0.393-0.982-1.75v-25.179q0-0.982 0.679-1.83t2.143-0.848h15.857q1.696 0 2.268 0.946t0.179 2.839zM21.911 3.786l-2.821 14.107q0.071-0.304 0.625-3.098t1.241-6.25 0.955-4.759z"></path>
2101</symbol>
2102<symbol id="icon-wordpress" viewBox="0 0 32 32">
2103<path class="path1" d="M2.268 16q0-2.911 1.196-5.589l6.554 17.946q-3.5-1.696-5.625-5.018t-2.125-7.339zM25.268 15.304q0 0.339-0.045 0.688t-0.179 0.884-0.205 0.786-0.313 1.054-0.313 1.036l-1.357 4.571-4.964-14.75q0.821-0.054 1.571-0.143 0.339-0.036 0.464-0.33t-0.045-0.554-0.509-0.241l-3.661 0.179q-1.339-0.018-3.607-0.179-0.214-0.018-0.366 0.089t-0.205 0.268-0.027 0.33 0.161 0.295 0.348 0.143l1.429 0.143 2.143 5.857-3 9-5-14.857q0.821-0.054 1.571-0.143 0.339-0.036 0.464-0.33t-0.045-0.554-0.509-0.241l-3.661 0.179q-0.
2103125 0-0.411-0.009t-0.464-0.009q1.875-2.857 4.902-4.527t6.563-1.67q2.625 0 5.009 0.946t4.259 2.661h-0.179q-0.982 0-1.643 0.723t-0.661 1.705q0 0.214 0.036 0.429t0.071 0.384 0.143 0.411 0.161 0.375 0.214 0.402 0.223 0.375 0.259 0.429 0.25 0.411q1.125 1.911 1.125 3.786zM16.232 17.196l4.232 11.554q0.018 0.107 0.089 0.196-2.25 0.786-4.554 0.786-2 0-3.875-0.571zM28.036 9.411q1.696 3.107 1.696 6.589 0 3.732-1.857 6.884t-4.982 4.973l4.196-12.107q1.054-3.018 1.054-4.929 0-0.75-0.107-1.411zM16 0q3.25 0 6.214 1.268t5.107 3.411 3.411 5.107 1.268 6.214-1.268 6.214-3.411 5.107-5.107 3.411-6.214 1.268-6.214-1.268-5.107-3.411-3.411-5.107-1.268-6.214 1.268-6.214 3.411-5.107 5.107-3.411 6.214-1.268zM16 31.268q3.089 0 5.92-1.214t4.875-3.259 3.259-4.875 1.214-5.92-1.214-5.92-3.259-4.875-4.875-3.259-5.92-1.214-5.92 1.214-4.875 3.259-3.259 4.875-1.214 5.92 1.214 5.92 3.259 4.875 4.875 3.259 5.92 1.214z"></path>
2104</symbol>
2105<symbol id="icon-stumbleupon" viewBox="0 0 34 32">
2106<path class="path1" d="M18.964 12.714v-2.107q0-0.75-0.536-1.286t-1.286-0.536-1.286 0.536-0.536 1.286v10.929q0 3.125-2.25 5.339t-5.411 2.214q-3.179 0-5.42-2.241t-2.241-5.42v-4.75h5.857v4.679q0 0.768 0.536 1.295t1.286 0.527 1.286-0.527 0.536-1.295v-11.071q0-3.054 2.259-5.214t5.384-2.161q3.143 0 5.393 2.179t2.25 5.25v2.429l-3.482 1.036zM28.429 16.679h5.857v4.75q0 3.179-2.241 5.42t-5.42 2.241q-3.161 0-5.411-2.223t-2.25-5.366v-4.786l2.339 1.089 3.482-1.036v4.821q0 0.75 0.536 1.277t1.286 0.527 1.286-0.527 0.536-1.277v-4.911z"></path>
2107</symbol>
2108<symbol id="icon-digg" viewBox="0 0 37 32">
2109<path class="path1" d="M5.857 5.036h3.643v17.554h-9.5v-12.446h5.857v-5.107zM5.857 19.661v-6.589h-2.196v6.589h2.196zM10.964 10.143v12.446h3.661v-12.446h-3.661zM10.964 5.036v3.643h3.661v-3.643h-3.661zM16.089 10.143h9.518v16.821h-9.518v-2.911h5.857v-1.464h-5.857v-12.446zM21.946 19.661v-6.589h-2.196v6.589h2.196zM27.071 10.143h9.5v16.821h-9.5v-2.911h5.839v-1.464h-5.839v-12.446zM32.911 19.661v-6.589h-2.196v6.589h2.196z"></path>
2110</symbol>
2111<symbol id="icon-spotify" viewBox="0 0 27 32">
2112<path class="path1" d="M20.125 21.607q0-0.571-0.536-0.911-3.446-2.054-7.982-2.054-2.375 0-5.125 0.607-0.75 0.161-0.75 0.929 0 0.357 0.241 0.616t0.634 0.259q0.089 0 0.661-0.143 2.357-0.482 4.339-0.482 4.036 0 7.089 1.839 0.339 0.196 0.589 0.196 0.339 0 0.589-0.241t0.25-0.616zM21.839 17.768q0-0.714-0.625-1.089-4.232-2.518-9.786-2.518-2.732 0-5.411 0.75-0.857 0.232-0.857 1.143 0 0.446 0.313 0.759t0.759 0.313q0.125 0 0.661-0.143 2.179-0.589 4.482-0.589 4.982 0 8.714 2.214 0.429 0.232 0.679 0.232 0.446 0 0.759-0.313t0.313-0.759zM23.768 13.339q0-0.839-0.714-1.25-2.25-1.304-5.232-1.973t-6.125-0.67q-3.643 0-6.5 0.839-0.411 0.125-0.688 0.455t-0.277 0.866q0 0.554 0.366 0.929t0.92 0.375q0.196 0 0.714-0.143 2.375-0.661 5.482-0.661 2.839 0 5.527 0.607t4.527 1.696q0.375 0.214 0.714 0.214 0.518 0 0.902-0.366t0.384-0.92zM27.429 16q0 3.732-1.839 6.884t-4.991 4.991-6.884 1.839-6.884-1.839-4.991-4.991-1.839-6.884 1.839-6.884 4.991-4.991 6.884-1.839 6.884 1.839 4.991 4.991 1.839 6.884z"></path>
2113</symbol>
2114<symbol id="icon-soundcloud" viewBox="0 0 41 32">
2115<path class="path1" d="M14 24.5l0.286-4.304-0.286-9.339q-0.018-0.179-0.134-0.304t-0.295-0.125q-0.161 0-0.286 0.125t-0.125 0.304l-0.25 9.339 0.25 4.304q0.018 0.179 0.134 0.295t0.277 0.116q0.393 0 0.429-0.411zM19.286 23.982l0.196-3.768-0.214-10.464q0-0.286-0.232-0.429-0.143-0.089-0.286-0.089t-0.286 0.089q-0.232 0.143-0.232 0.429l-0.018 0.107-0.179 10.339q0 0.018 0.196 4.214v0.018q0 0.179 0.107 0.304 0.161 0.196 0.411 0.196 0.196 0 0.357-0.161 0.161-0.125 0.161-0.357zM0.625 17.911l0.357 2.286-0.357 2.25q-0.036 0.161-0.161 0.161t-0.161-0.161l-0.304-2.25 0.304-2.286q0.036-0.161 0.161-0.161t0.161 0.161zM2.161 16.5l0.464 3.696-0.464 3.625q-0.036 0.161-0.179 0.161-0.161 0-0.161-0.179l-0.411-3.607 0.411-3.696q0-0.161 0.161-0.161 0.143 0 0.179 0.161zM3.804 15.821l0.446 4.375-0.446 4.232q0 0.196-0.196 0.196-0.179 0-0.214-0.196l-0.375-4.232 0.375-4.375q0.036-0.214 0.214-0.214 0.196 0 0.196 0.214zM5.482 15.696l0.411 4.5-0.411 4.357q-0.036 0.232-0.25 0.232-0.232 0-0.232-0.232l-0.375-4.357 0.375-4.5q0-0.232 0.232-0.232 0.214 0 0.25 0.232zM7.161 16.018l0.375 4.179-0.375 4.393q-0.036 0.286-0.286 0.286-0.107 0-0.188-0.080t-0.080-0.205l-0.357-4.393 0.357-4.179q0-0.107 0.080-0.188t0.188-0.080q0.25 0 0.286 0.268zM8.839 13.411l0.375 6.786-0.375 4.393q0 0.125-0.089 0.223t-0.214 0.098q-0.286 0-0.321-0.321l-0.321-4.393 0.321-6.786q0.036-0.321 0.321-0.321 0.125 0 0.214 0.098t0.089 0.223zM10.518 11.875l0.339 8.357-0.339 4.357q0 0.143-0.098 0.241t-0.241 0.098q-0.321 0-0.357-0.339l-0.286-4.357 0.286-8.357q0.036-0.339 0.357-0.339 0.143 0 0.241 0.098t0.098 0.241zM12.268 11.161l0.321 9.036-0.321 4.321q-0.036 0.375-0.393 0.375-0.339 0-0.375-0.375l-0.286-4.321 0.286-9.036q0-0.161 0.116-0.277t0.259-0.116q0.161 0 0.268 0.116t0.125 0.277zM19.268 24.411v0 0zM15.732 11.089l0.268 9.107-0.268 4.268q0 0.179-0.134 0.313t-0.313 0.134-0.304-0.125-0.143-0.321l-0.25-4.268 0.25-9.107q0-0.196 0.134-0.321t0.313-0.125 0.313 0.125 0.134 0.321zM17.5 11.429l0.25 8.786-0.25 4.214q0 0.196-0.143 0.339t-0.339 0.143-0.339-0.143-0.161-0.339l-0.214-4.214 0.214-8.786q0.018-0.214 0.161-0.357t0.339-0.143 0.33 0.143 0.152 0.357zM21.286 20.214l-0.25 4.125q0 0.232-0.161 0.393t-0.393 0.161-0.393-0.161-0.179-0.393l-0.107-2.036-0.107-2.089 0.214-11.357v-0.054q0.036-0.268 0.214-0.429 0.161-0.125 0.357-0.125 0.143 0 0.268 0.089 0.25 0.143 0.286 0.464zM41.143 19.875q0 2.089-1.482 3.563t-3.571 1.473h-14.036q-0.232-0.036-0.393-0.196t-0.161-0.393v-16.054q0-0.411 0.5-0.589 1.518-0.607 3.232-0.607 3.482 0 6.036 2.348t2.857 5.777q0.946-0.393 1.964-0.393 2.089 0 3.571 1.482t1.482 3.589z"></path>
2116</symbol>
2117<symbol id="icon-codepen" viewBox="0 0 32 32">
2118<path class="path1" d="M3.857 20.875l10.768 7.179v-6.411l-5.964-3.982zM2.75 18.304l3.446-2.304-3.446-2.304v4.607zM17.375 28.054l10.768-7.179-4.804-3.214-5.964 3.982v6.411zM16 19.25l4.857-3.25-4.857-3.25-4.857 3.25zM8.661 14.339l5.964-3.982v-6.411l-10.768 7.179zM25.804 16l3.446 2.304v-4.607zM23.339 14.339l4.804-3.214-10.768-7.179v6.411zM32 11.125v9.75q0 0.732-0.607 1.143l-14.625 9.75q-0.375 0.232-0.768 0.232t-0.768-0.232l-14.625-9.75q-0.607-0.411-0.607-1.143v-9.75q0-0.732 0.607-1.143l14.625-9.75q0.375-0.232 0.768-0.232t0.768 0.232l14.625 9.75q0.607 0.411 0.607 1.143z"></path>
2119</symbol>
2120<symbol id="icon-twitch" viewBox="0 0 32 32">
2121<path class="path1" d="M16 7.75v7.75h-2.589v-7.75h2.589zM23.107 7.75v7.75h-2.589v-7.75h2.589zM23.107 21.321l4.518-4.536v-14.196h-21.321v18.732h5.821v3.875l3.875-3.875h7.107zM30.214 0v18.089l-7.75 7.75h-5.821l-3.875 3.875h-3.875v-3.875h-7.107v-20.679l1.946-5.161h26.482z"></path>
2122</symbol>
2123<symbol id="icon-meanpath" viewBox="0 0 27 32">
2124<path class="path1" d="M23.411 15.036v2.036q0 0.429-0.241 0.679t-0.67 0.25h-3.607q-0.429 0-0.679-0.25t-0.25-0.679v-2.036q0-0.429 0.25-0.679t0.679-0.25h3.607q0.429 0 0.67 0.25t0.241 0.679zM14.661 19.143v-4.464q0-0.946-0.58-1.527t-1.527-0.58h-2.375q-1.214 0-1.714 0.929-0.5-0.929-1.714-0.929h-2.321q-0.946 0-1.527 0.58t-0.58 1.527v4.464q0 0.393 0.375 0.393h0.982q0.393 0 0.393-0.393v-4.107q0-0.429 0.241-0.679t0.688-0.25h1.679q0.429 0 0.679 0.25t0.25 0.679v4.107q0 0.393 0.375 0.393h0.964q0.393 0 0.393-0.393v-4.107q0-0.429 0.25-0.679t0.679-0.25h1.732q0.429 0 0.67 0.25t0.241 0.679v4.107q0 0.393 0.393 0.393h0.982q0.375 0 0.375-0.393zM25.179 17.429v-2.75q0-0.946-0.589-1.527t-1.536-0.58h-4.714q-0.946 0-1.536 0.58t-0.589 1.527v7.321q0 0.375 0.393 0.375h0.982q0.375 0 0.375-0.375v-3.214q0.554 0.75 1.679 0.75h3.411q0.946 0 1.536-0.58t0.589-1.527zM27.429 6.429v19.143q0 1.714-1.214 2.929t-2.929 1.214h-19.143q-1.714 0-2.929-1.214t-1.214-2.929v-19.143q0-1.714 1.214-2.929t2.929-1.214h19.143q1.714 0 2.929 1.214t1.214 2.929z"></path>
2125</symbol>
2126<symbol id="icon-pinterest-p" viewBox="0 0 23 32">
2127<path class="path1" d="M0 10.661q0-1.929 0.67-3.634t1.848-2.973 2.714-2.196 3.304-1.393 3.607-0.464q2.821 0 5.25 1.188t3.946 3.455 1.518 5.125q0 1.714-0.339 3.357t-1.071 3.161-1.786 2.67-2.589 1.839-3.375 0.688q-1.214 0-2.411-0.571t-1.714-1.571q-0.179 0.696-0.5 2.009t-0.42 1.696-0.366 1.268-0.464 1.268-0.571 1.116-0.821 1.384-1.107 1.545l-0.25 0.089-0.161-0.179q-0.268-2.804-0.268-3.357 0-1.643 0.384-3.688t1.188-5.134 0.929-3.625q-0.571-1.161-0.571-3.018 0-1.482 0.929-2.786t2.357-1.304q1.089 0 1.696 0.723t0.607 1.83q0 1.179-0.786 3.411t-0.786 3.339q0 1.125 0.804 1.866t1.946 0.741q0.982 0 1.821-0.446t1.402-1.214 1-1.696 0.679-1.973 0.357-1.982 0.116-1.777q0-3.089-1.955-4.813t-5.098-1.723q-3.571 0-5.964 2.313t-2.393 5.866q0 0.786 0.223 1.518t0.482 1.161 0.482 0.813 0.223 0.545q0 0.5-0.268 1.304t-0.661 0.804q-0.036 0-0.304-0.054-0.911-0.268-1.616-1t-1.089-1.688-0.58-1.929-0.196-1.902z"></path>
2128</symbol>
2129<symbol id="icon-periscope" viewBox="0 0 24 28">
2130<path class="path1" d="M12.285,1C6.696,1,2.277,5.643,2.277,11.243c0,5.851,7.77,14.578,10.007,14.578c1.959,0,9.729-8.728,9.729-14.578 C22.015,5.643,17.596,1,12.285,1z M12.317,16.551c-3.473,0-6.152-2.611-6.152-5.664c0-1.292,0.39-2.472,1.065-3.438 c0.206,1.084,1.18,1.906,2.352,1.906c1.322,0,2.393-1.043,2.393-2.333c0-0.832-0.447-1.561-1.119-1.975 c0.467-0.105,0.955-0.161,1.46-0.161c3.133,0,5.81,2.611,5.81,5.998C18.126,13.94,15.449,16.551,12.317,16.551z"></path>
2131</symbol>
2132<symbol id="icon-get-pocket" viewBox="0 0 31 32">
2133<path class="path1" d="M27.946 2.286q1.161 0 1.964 0.813t0.804 1.973v9.268q0 3.143-1.214 6t-3.259 4.911-4.893 3.259-5.973 1.205q-3.143 0-5.991-1.205t-4.902-3.259-3.268-4.911-1.214-6v-9.268q0-1.143 0.821-1.964t1.964-0.821h25.161zM15.375 21.286q0.839 0 1.464-0.589l7.214-6.929q0.661-0.625 0.661-1.518 0-0.875-0.616-1.491t-1.491-0.616q-0.839 0-1.464 0.589l-5.768 5.536-5.768-5.536q-0.625-0.589-1.446-0.589-0.875 0-1.491 0.616t-0.616 1.491q0 0.911 0.643 1.518l7.232 6.929q0.589 0.589 1.446 0.589z"></path>
2134</symbol>
2135<symbol id="icon-vimeo" viewBox="0 0 32 32">
2136<path class="path1" d="M30.518 9.25q-0.179 4.214-5.929 11.625-5.946 7.696-10.036 7.696-2.536 0-4.286-4.696-0.786-2.857-2.357-8.607-1.286-4.679-2.804-4.679-0.321 0-2.268 1.357l-1.375-1.75q0.429-0.375 1.929-1.723t2.321-2.063q2.786-2.464 4.304-2.607 1.696-0.161 2.732 0.991t1.446 3.634q0.786 5.125 1.179 6.661 0.982 4.446 2.143 4.446 0.911 0 2.75-2.875 1.804-2.875 1.946-4.393 0.232-2.482-1.946-2.482-1.018 0-2.161 0.464 2.143-7.018 8.196-6.821 4.482 0.143 4.214 5.821z"></path>
2137</symbol>
2138<symbol id="icon-reddit-alien" viewBox="0 0 32 32">
2139<path class="path1" d="M32 15.107q0 1.036-0.527 1.884t-1.42 1.295q0.214 0.821 0.214 1.714 0 2.768-1.902 5.125t-5.188 3.723-7.143 1.366-7.134-1.366-5.179-3.723-1.902-5.125q0-0.839 0.196-1.679-0.911-0.446-1.464-1.313t-0.554-1.902q0-1.464 1.036-2.509t2.518-1.045q1.518 0 2.589 1.125 3.893-2.714 9.196-2.893l2.071-9.304q0.054-0.232 0.268-0.375t0.464-0.089l6.589 1.446q0.321-0.661 0.964-1.063t1.411-0.402q1.107 0 1.893 0.777t0.786 1.884-0.786 1.893-1.893 0.786-1.884-0.777-0.777-1.884l-5.964-1.321-1.857 8.429q5.357 0.161 9.268 2.857 1.036-1.089 2.554-1.089 1.482 0 2.518 1.045t1.036 2.509zM7.464 18.661q0 1.107 0.777 1.893t1.884 0.786 1.893-0.786 0.786-1.893-0.786-1.884-1.893-0.777q-1.089 0-1.875 0.786t-0.786 1.875zM21.929 25q0.196-0.196 0.196-0.464t-0.196-0.464q-0.179-0.179-0.446-0.179t-0.464 0.179q-0.732 0.75-2.161 1.107t-2.857 0.357-2.857-0.357-2.161-1.107q-0.196-0.179-0.464-0.179t-0.446 0.179q-0.196 0.179-0.196 0.455t0.196 0.473q0.768 0.768 2.116 1.214t2.188 0.527 1.625 0.080 1.625-0.080 2.188-0.527 2.116-1.214zM21.875 21.339q1.107 0 1.884-0.786t0.777-1.893q0-1.089-0.786-1.875t-1.875-0.786q-1.107 0-1.893 0.777t-0.786 1.884 0.786 1.893 1.893 0.786z"></path>
2140</symbol>
2141<symbol id="icon-whatsapp" viewBox="0 0 32 32">
2142<path d="M15.968 2.003a14.03 13.978 0 0 0-14.03 13.978 14.03 13.978 0 0 0 2.132 7.391L1.938 29.96l6.745-2.052a14.03 13.978 0 0 0 7.285 2.052 14.03 13.978 0 0 0 14.03-13.978 14.03 13.978 0 0 0-14.03-13.978z" stroke-width=".2000562"/>
2143<path d="M10.454 8.236a2.57 3.401 51.533 0 0-1.475 3.184v.015c.01 2.04 4.045 10.076 10.017 12.688l.017-.013a2.57 3.401 51.533 0 0 3.454-.706 2.57 3.401 51.533 0 0 1.064-4.129 2.57 3.401 51.533 0 0-4.262.103 2.57 3.401 51.533 0 0-.505.473c-1.346-.639-2.952-1.463-4.168-2.98-.771-.962-1.257-2.732-1.549-4.206a2.57 3.401 51.533 0 0 .605-.403 2.57 3.401 51.533 0 0 1.064-4.129 2.57 3.401 51.533 0 0-4.262.103z" stroke-width=".372"/>
2144</symbol>
2145<symbol id="icon-telegram" viewBox="0 0 32 32">
2146<path d="M30.8,2.2L0.6,13.9c-0.8,0.3-0.7,1.3,0,1.6l7.4,2.8l2.9,9.2c0.2,0.6,0.9,0.8,1.4,0.4l4.1-3.4 c0.4-0.4,1-0.4,1.5,0l7.4,5.4c0.5,0.4,1.2,0.1,1.4-0.5L32,3.2C32.1,2.5,31.4,1.9,30.8,2.2z M25,8.3l-11.9,11 c-0.4,0.4-0.7,0.9-0.8,1.5l-0.4,3c-0.1,0.4-0.6,0.4-0.7,0.1l-1.6-5.5c-0.2-0.6,0.1-1.3,0.6-1.6l14.4-8.9C25,7.7,25.3,8.1,25,8.3z"/>
2147</symbol>
2148<symbol id="icon-hashtag" viewBox="0 0 32 32">
2149<path class="path1" d="M17.696 18.286l1.143-4.571h-4.536l-1.143 4.571h4.536zM31.411 9.286l-1 4q-0.125 0.429-0.554 0.429h-5.839l-1.143 4.571h5.554q0.268 0 0.446 0.214 0.179 0.25 0.107 0.5l-1 4q-0.089 0.429-0.554 0.429h-5.839l-1.446 5.857q-0.125 0.429-0.554 0.429h-4q-0.286 0-0.464-0.214-0.161-0.214-0.107-0.5l1.393-5.571h-4.536l-1.446 5.857q-0.125 0.429-0.554 0.429h-4.018q-0.268 0-0.446-0.214-0.161-0.214-0.107-0.5l1.393-5.571h-5.554q-0.268 0-0.446-0.214-0.161-0.214-0.107-0.5l1-4q0.125-0.429 0.554-0.429h5.839l1.143-4.571h-5.554q-0.268 0-0.446-0.214-0.179-0.25-0.107-0.5l1-4q0.089-0.429 0.554-0.429h5.839l1.446-5.857q0.125-0.429 0.571-0.429h4q0.268 0 0.446 0.214 0.161 0.214 0.107 0.5l-1.393 5.571h4.536l1.446-5.857q0.125-0.429 0.571-0.429h4q0.268 0 0.446 0.214 0.161 0.214 0.107 0.5l-1.393 5.571h5.554q0.268 0 0.446 0.214 0.161 0.214 0.107 0.5z"></path>
2150</symbol>
2151<symbol id="icon-chain" viewBox="0 0 30 32">
2152<path class="path1" d="M26 21.714q0-0.714-0.5-1.214l-3.714-3.714q-0.5-0.5-1.214-0.5-0.75 0-1.286 0.571 0.054 0.054 0.339 0.33t0.384 0.384 0.268 0.339 0.232 0.455 0.063 0.491q0 0.714-0.5 1.214t-1.214 0.5q-0.268 0-0.491-0.063t-0.455-0.232-0.339-0.268-0.384-0.384-0.33-0.339q-0.589 0.554-0.589 1.304 0 0.714 0.5 1.214l3.679 3.696q0.482 0.482 1.214 0.482 0.714 0 1.214-0.464l2.625-2.607q0.5-0.5 0.5-1.196zM13.446 9.125q0-0.714-0.5-1.214l-3.679-3.696q-0.5-0.5-1.214-0.5-0.696 0-1.214 0.482l-2.625 2.607q-0.5 0.5-0.5 1.196 0 0.714 0.5 1.214l3.714 3.714q0.482 0.482 1.214 0.482 0.75 0 1.286-0.554-0.054-0.054-0.339-0.33t-0.384-0.384-0.268-0.339-0.232-0.455-0.063-0.491q0-0.714 0.5-1.214t1.214-0.5q0.268 0 0.491 0.063t0.455 0.232 0.339 0.268 0.384 0.384 0.33 0.339q0.589-0.554 0.589-1.304zM29.429 21.714q0 2.143-1.518 3.625l-2.625 2.607q-1.482 1.482-3.625 1.482-2.161 0-3.643-1.518l-3.679-3.696q-1.482-1.482-1.482-3.625 0-2.196 1.571-3.732l-1.571-1.571q-1.536 1.571-3.714 1.571-2.143 0-3.643-1.5l-3.714-3.714q-1.5-1.5-1.5-3.643t1.518-3.625l2.625-2.607q1.482-1.482 3.625-1.482 2.161 0 3.643 1.518l3.679 3.696q1.482 1.482 1.482 3.625 0 2.196-1.571 3.732l1.571 1.571q1.536-1.571 3.714-1.571 2.143 0 3.643 1.5l3.714 3.714q1.5 1.5 1.5 3.643z"></path>
2153</symbol>
2154<symbol id="icon-thumb-tack" viewBox="0 0 21 32">
2155<path class="path1" d="M8.571 15.429v-8q0-0.25-0.161-0.411t-0.411-0.161-0.411 0.161-0.161 0.411v8q0 0.25 0.161 0.411t0.411 0.161 0.411-0.161 0.161-0.411zM20.571 21.714q0 0.464-0.339 0.804t-0.804 0.339h-7.661l-0.911 8.625q-0.036 0.214-0.188 0.366t-0.366 0.152h-0.018q-0.482 0-0.571-0.482l-1.357-8.661h-7.214q-0.464 0-0.804-0.339t-0.339-0.804q0-2.196 1.402-3.955t3.17-1.759v-9.143q-0.929 0-1.607-0.679t-0.679-1.607 0.679-1.607 1.607-0.679h11.429q0.929 0 1.607 0.679t0.679 1.607-0.679 1.607-1.607 0.679v9.143q1.768 0 3.17 1.759t1.402 3.955z"></path>
2156</symbol>
2157<symbol id="icon-arrow-left" viewBox="0 0 43 32">
2158<path class="path1" d="M42.311 14.044c-0.178-0.178-0.533-0.356-0.711-0.356h-33.778l10.311-10.489c0.178-0.178 0.356-0.533 0.356-0.711 0-0.356-0.178-0.533-0.356-0.711l-1.6-1.422c-0.356-0.178-0.533-0.356-0.889-0.356s-0.533 0.178-0.711 0.356l-14.578 14.933c-0.178 0.178-0.356 0.533-0.356 0.711s0.178 0.533 0.356 0.711l14.756 14.933c0 0.178 0.356 0.356 0.533 0.356s0.533-0.178 0.711-0.356l1.6-1.6c0.178-0.178 0.356-0.533 0.356-0.711s-0.178-0.533-0.356-0.711l-10.311-10.489h33.778c0.178 0 0.533-0.178 0.711-0.356 0.356-0.178 0.533-0.356 0.533-0.711v-2.133c0-0.356-0.178-0.711-0.356-0.889z"></path>
2159</symbol>
2160<symbol id="icon-arrow-right" viewBox="0 0 43 32">
2161<path class="path1" d="M0.356 17.956c0.178 0.178 0.533 0.356 0.711 0.356h33.778l-10.311 10.489c-0.178 0.178-0.356 0.533-0.356 0.711 0 0.356 0.178 0.533 0.356 0.711l1.6 1.6c0.178 0.178 0.533 0.356 0.711 0.356s0.533-0.178 0.711-0.356l14.756-14.933c0.178-0.356 0.356-0.711 0.356-0.889s-0.178-0.533-0.356-0.711l-14.756-14.933c0-0.178-0.356-0.356-0.533-0.356s-0.533 0.178-0.711 0.356l-1.6 1.6c-0.178 0.178-0.356 0.533-0.356 0.711s0.178 0.533 0.356 0.711l10.311 10.489h-33.778c-0.178 0-0.533 0.178-0.711 0.356-0.356 0.178-0.533 0.356-0.533 0.711v2.311c0 0.178 0.178 0.533 0.356 0.711z"></path>
2162</symbol>
2163<symbol id="icon-play" viewBox="0 0 22 28">
2164<path d="M21.625 14.484l-20.75 11.531c-0.484 0.266-0.875 0.031-0.875-0.516v-23c0-0.547 0.391-0.781 0.875-0.516l20.75 11.531c0.484 0.266 0.484 0.703 0 0.969z"></path>
2165</symbol>
2166<symbol id="icon-pause" viewBox="0 0 24 28">
2167<path d="M24 3v22c0 0.547-0.453 1-1 1h-8c-0.547 0-1-0.453-1-1v-22c0-0.547 0.453-1 1-1h8c0.547 0 1 0.453 1 1zM10 3v22c0 0.547-0.453 1-1 1h-8c-0.547 0-1-0.453-1-1v-22c0-0.547 0.453-1 1-1h8c0.547 0 1 0.453 1 1z"></path>
2168</symbol>
2169</defs>
2170</svg>
2171
2172<!-- jQuery. Used also by colorbox. -->
2173<script src="https://castle-engine.io/castle-engine-website-base/node_modules/jquery/dist/jquery.min.js"></script>
2173
2174
2175<!-- Using passive event listeners can improve scrolling performance, according to
2176     https://web.dev/uses-passive-event-listeners/
2177     (linked from Lighthouse).
2178     Solution for jQuery from
2179     https://stackoverflow.com/questions/60357083/does-not-use-passive-listeners-to-improve-scrolling-performance-lighthouse-repo
2180
2181     This must be really right after jquery.min.js, in castle-engine.js it would be too late.
2182-->
2183<script>
2184jQuery.event.special.touchstart = {
2185    setup: function( _, ns, handle ) {
2186        this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") });
2187    }
2188};
2189jQuery.event.special.touchmove = {
2190    setup: function( _, ns, handle ) {
2191        this.addEventListener("touchmove", handle, { passive: !ns.includes("noPreventDefault") });
2192    }
2193};
2194jQuery.event.special.wheel = {
2195    setup: function( _, ns, handle ){
2196        this.addEventListener("wheel", handle, { passive: true });
2197    }
2198};
2199jQuery.event.special.mousewheel = {
2200    setup: function( _, ns, handle ){
2201        this.addEventListener("mousewheel", handle, { passive: true });
2202    }
2203};
2204</script>
2204
2205
2206<!-- Include colorbox after jQuery is known -->
2207<script src="https://castle-engine.io/castle-engine-website-base/node_modules/jquery-colorbox/jquery.colorbox-min.js"></script>
vendor: 1 bytes, line 2207
2207
2208<script>
2209  jQuery('a.screenshot').colorbox({opacity: 0.9, rel:'screenshot', maxWidth:'90%', maxHeight:'90%'});
2210  // For AsciiDoctor images with role=screenshot
2211  jQuery('.screenshot a').colorbox({opacity: 0.9, rel:'screenshot', maxWidth:'90%', maxHeight:'90%'});
2212</script>
2212
2213
2214<!-- Bootstrap JS (bundled, with Popper) -->
2215<script src="https://castle-engine.io/castle-engine-website-base/node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
2215
2216
2217<!-- slick carousel https://github.com/kenwheeler/slick/ -->
2218<script src="https://castle-engine.io/castle-engine-website-base/node_modules/slick-carousel/slick/slick.min.js" fetchpriority="high"></script>
vendor: 1 bytes, line 2218
2218
2219<script>
2220$('.banner-container').on('init', function(event, slick){
2221  /* Make images visible after slick initialization.
2222     Don't make images visible immediately (before Slick initializes)
2223     to avoid CLS. */
2224  $(".banner-container img").css("display", "block");
2225});
2226jQuery(".banner-container").slick({
2227  arrows: false,
2228  dots: true,
2229  autoplay: true,
2230  fade: true,
2231  pauseOnFocus: false,
2232  pauseOnHover: false
2233//  autoplaySpeed: 2000
2234});
2235</script>
2235
2236
2237<script src="https://castle-engine.io/castle-engine-website-base/castle-engine.js"></script>
2237
2238</body>
2239</html>
2240
2241<!--
2242Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin
2243
2244Page Caching using Disk: Enhanced 
2245Minified using Disk
2246
2247Served from: castle-engine.io @ 2026-09-24 08:43:16 by W3 Total Cache
2248-->

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.