<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title>Exofactory Entwickler-blog</title>
      <link>https://exofactory.net</link>
      <description>Entwicklungsupdates und Einblicke in Exofactory</description>
      <generator>Zola</generator>
      <language>de</language>
      <atom:link href="https://exofactory.net/de/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Mon, 06 Apr 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>Gebäudeanimation, Trailer &amp; Pitch-Deck-Kram</title>
          <pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2026-04-06/</link>
          <guid>https://exofactory.net/de/blog/2026-04-06/</guid>
          <description xml:base="https://exofactory.net/de/blog/2026-04-06/">&lt;h1 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h1&gt;
&lt;p&gt;Der letzte Monat war eine Mischung aus ein bisschen technischer Arbeit und einer Menge Pitch-Deck-Arbeit, Planung und rechtlichem Kram. Ich bin noch nicht an einem Punkt, an dem ich dazu allzu viel sagen kann, aber da wird gerade dran gearbeitet.&lt;&#x2F;p&gt;
&lt;p&gt;Ich habe also zwar weniger zu zeigen als sonst, aber im Hintergrund ist eine Menge passiert. Zwei coole Sachen habe ich aber trotzdem. Diesen Monat kam eine neue Gebäudeanimation beim Platzieren dazu und außerdem ein neuer Trailer, der stärker aufs Gameplay fokussiert ist.&lt;&#x2F;p&gt;
&lt;p&gt;Wenn dich das Spiel interessiert, würde ich mich freuen, wenn du es dort auf die Wunschliste setzt.&lt;&#x2F;p&gt;
&lt;div class=&quot;cta-buttons&quot; style=&quot;margin: 1.5rem 0;&quot;&gt;
  &lt;a href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;3615720&#x2F;Exofactory&#x2F;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; class=&quot;steam-button&quot;&gt;
    &lt;div class=&quot;steam-button-content&quot;&gt;
      &lt;img src=&quot;&#x2F;media&#x2F;home&#x2F;steam_logo_white.svg&quot; alt=&quot;Steam&quot; class=&quot;steam-logo steam-logo-light&quot;&gt;
      &lt;img src=&quot;&#x2F;media&#x2F;home&#x2F;steam_logo_black.svg&quot; alt=&quot;Steam&quot; class=&quot;steam-logo steam-logo-dark&quot;&gt;
      &lt;span class=&quot;wishlist-text&quot;&gt;Auf Steam vormerken&lt;&#x2F;span&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;neue-gebaudeanimation&quot;&gt;Neue Gebäudeanimation&lt;&#x2F;h1&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2026-04-06&#x2F;fade_fab.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2026-04-06&#x2F;fade_fab.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Der Fabrikator beim Spawnen.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ich wollte wirklich eine &quot;Bau&quot;-Animation haben, die die digitale Natur der KI widerspiegelt, die man spielt. Ich hatte ein paar Sachen in Betracht gezogen, darunter Pixelation, ein &quot;aus dem Nichts spawnen&quot; und einen von Matrix inspirierten Ansatz. Am Ende bin ich bei etwas gelandet, das teilweise von der &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Revelation_Space_series&quot;&gt;Revelation Space&lt;&#x2F;a&gt;-Sci-Fi-Reihe inspiriert ist, insbesondere von meiner Interpretation davon, wie die &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;revelationspace.fandom.com&#x2F;wiki&#x2F;Inhibitors&quot;&gt;&quot;Inhibitors&quot; (Spoiler-Warnung)&lt;&#x2F;a&gt; ausgesehen haben könnten. Das zusammen mit etwas von der Skin-Shader-Logik, mit der ich herumgespielt habe, hat zu einem Effekt geführt, den ich ziemlich cool finde und der sich ziemlich nach Exofactory anfühlt.&lt;&#x2F;p&gt;
&lt;p&gt;Größere Gebäude brauchen länger zum Spawnen und kleinere entsprechend weniger Zeit. Das ist am Ende ein ziemlich elegantes Shader&#x2F;Lade-System.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2026-04-06&#x2F;fade_belt.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2026-04-06&#x2F;fade_belt.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Kurze Bandsegmente haben keine Spawn-Animation, lange schon.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Der Effekt skaliert auch für Bänder echt gut. Bin ziemlich happy damit. Die gute Nachricht ist, dass kürzere Bandsegmente keine Ladeanimation brauchen, also keine Sorge.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;trailer&quot;&gt;Trailer&lt;&#x2F;h1&gt;



&lt;div class=&quot;youtube-embed&quot;&gt;
  &lt;iframe
    src=&quot;https:&#x2F;&#x2F;www.youtube-nocookie.com&#x2F;embed&#x2F;wyFvr91OSk4&quot;
    title=&quot;YouTube video player&quot;
    loading=&quot;lazy&quot;
    referrerpolicy=&quot;strict-origin-when-cross-origin&quot;
    allow=&quot;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&quot;
    webkitallowfullscreen
    mozallowfullscreen
    allowfullscreen&gt;
  &lt;&#x2F;iframe&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Als Teil des Pitch-Deck-Krams habe ich zusammen mit meinem Partner einen neuen, schnelleren Trailer zusammengestellt, der das Gameplay besser zeigt und die narrativen Elemente klarer rüberbringt. Finde ich viel besser so, und für das Pitch Deck war das definitiv nötig.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;publishing-ressourcenplanung&quot;&gt;Publishing &amp;amp; Ressourcenplanung&lt;&#x2F;h1&gt;
&lt;p&gt;Der Großteil des letzten Monats ging für das drauf, was ich mal &quot;Pitch-Deck-Kram&quot; nenne. Definitiv nicht mein Spezialgebiet, aber ich glaube inzwischen habe ich etwas, das Exofactory halbwegs fair widerspiegelt.&lt;&#x2F;p&gt;
&lt;p&gt;Außerdem habe ich ein bisschen mit dem ganzen rechtlichen Kram angefangen. Nicht besonders spannend, aber notwendig, gerade in Deutschland. Hoffentlich haben wir bald eine kleine GmbH, die dann das Indie-Studio wird.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Technisch gibt es abseits des coolen Shaders also nicht allzu viel zu sagen, aber im Hintergrund ist gerade eine Menge wichtiger Arbeit angelaufen.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Optimierungen, Pull Requests, Tooling &amp; Finanzen</title>
          <pubDate>Thu, 05 Mar 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2026-03-05/</link>
          <guid>https://exofactory.net/de/blog/2026-03-05/</guid>
          <description xml:base="https://exofactory.net/de/blog/2026-03-05/">&lt;h1 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h1&gt;
&lt;p&gt;Der letzte Monat war voll mit den unterschiedlichsten Sachen. Von großen Optimierungen, über ein paar dabei gefundene Probleme, über neues Tooling, bis hin zum offiziellen Start der Suche nach einem Partner-Publisher &#x2F; Investor wurde eine Menge Programmier- und Nicht-Programmier-Arbeit erledigt.&lt;&#x2F;p&gt;
&lt;p&gt;Wenn du das interessant findest und das Spiel spannend klingt, gib dem Spiel gern eine &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;3615720&#x2F;Exofactory&#x2F;&quot;&gt;Wunschliste auf Steam&lt;&#x2F;a&gt;. Das hilft enorm.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;optimierungen&quot;&gt;Optimierungen&lt;&#x2F;h1&gt;
&lt;p&gt;Der technische Hauptfokus diesen Monat lag auf Optimierung. Über das letzte Jahr hat eine Kombination aus „nicht voreilig optimieren&quot;-Mentalität, gemischt mit einer (un?)gesunden Portion fehlendem Bevy-Domänenwissen, gemischt mit ein paar echten Bevy-Bugs zu einem extrem unoptmierten Spiel geführt, was Speicherverbrauch angeht.&lt;&#x2F;p&gt;
&lt;p&gt;Beim letzten Pre-Optimierung-Build lagen wir bei 7GB System-RAM mit ungefähr der gleichen Menge VRAM. (hint here) Angesichts der Komplexität von Exofactory wusste ich, dass das Spiel nie eins von diesen 200MB-Runtime-Spielen sein würde, aber das war echt grauenhaft, und ehrlich gesagt peinlich. Es war an dem Punkt, wo ich kaum &lt;code&gt;--release&lt;&#x2F;code&gt;-Builds auf meinem (zugegebenermaßen alten) 11th Gen Intel Framework laufen lassen konnte.&lt;&#x2F;p&gt;
&lt;p&gt;Also hab ich mich daran gemacht, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bevyengine&#x2F;bevy&#x2F;blob&#x2F;main&#x2F;docs&#x2F;profiling.md&quot;&gt;tracy und wie es in Bevy funktioniert&lt;&#x2F;a&gt; zu lernen und mir die Zeit zu nehmen, tatsächlich mal aufzuräumen.&lt;&#x2F;p&gt;
&lt;p&gt;Lange Rede kurzer Sinn: Ich kann tracy halbwegs benutzen, auch wenn ich mich als absolute Anfängerin bezeichnen würde. Aber ich hab&#x27;s auch gefixt. Der Prozess lief im Grunde auf diese 4 Bereiche hinaus:&lt;&#x2F;p&gt;
&lt;h2 id=&quot;alles-im-system-ram-speichern&quot;&gt;Alles im System-RAM speichern&lt;&#x2F;h2&gt;
&lt;p&gt;Standardmäßig wird bei &lt;code&gt;asset_server.load(&quot;my_thing.png&quot;)&lt;&#x2F;code&gt; das Asset in den System-RAM geladen und beim Spawnen in den VRAM. Bei einem kleineren Bild ist das nicht so wild, aber wenn man eine komplizierte &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;examples&#x2F;tools&#x2F;scene-viewer&#x2F;&quot;&gt;&lt;code&gt;.glb&#x2F;.gltf&lt;&#x2F;code&gt;&lt;&#x2F;a&gt;-Datei lädt, wird&#x27;s schnell heftig. Wenn man eine GLB mit 6 RGBA 4096x4096 Texturen hat (also Normal, Metallic, Roughness etc.) wären das ~384MB System-RAM. Mit &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Mipmap&quot;&gt;Mipmaps&lt;&#x2F;a&gt; eher ~512MB pro GLB-Asset. Das allein war für den GROSSTEIL des irren RAM-Verbrauchs von Exofactory verantwortlich.&lt;&#x2F;p&gt;
&lt;p&gt;Die gute Nachricht ist, dass man nicht alles im System-RAM speichern muss. In Bevy kann man Dinge in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy_render&#x2F;latest&#x2F;bevy_render&#x2F;struct.MainWorld.html&quot;&gt;MainWorld&lt;&#x2F;a&gt; oder in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bevyengine&#x2F;bevy&#x2F;discussions&#x2F;13494&quot;&gt;RenderWorld&lt;&#x2F;a&gt; oder in beidem speichern. MainWorld ist das Spiel, wie man es sich vorstellen würde. Einfach alles im System-RAM. RenderWorld hingegen ist eine Art Tag, das Dinge markiert, sodass sie nur auf der GPU leben.&lt;&#x2F;p&gt;
&lt;p&gt;Ich konnte den System-RAM-Verbrauch senken, indem ich Texturen einfach nicht außerhalb der GPU gespeichert hab, wenn ich eh nichts damit vorhatte.&lt;&#x2F;p&gt;
&lt;p&gt;Bevy hat mehrere Wege dafür, aber der einfachste für mich waren &lt;code&gt;.meta&lt;&#x2F;code&gt;-Dateien.&lt;&#x2F;p&gt;
&lt;p&gt;In Bevy liegen &lt;code&gt;.meta&lt;&#x2F;code&gt;-Dateien neben den Assets und erlauben es, zu überschreiben, wie der Asset-Loader damit umgeht. Sie verwenden &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;asset&#x2F;meta&#x2F;struct.AssetMeta.html&quot;&gt;Bevys RON-ähnliches Format&lt;&#x2F;a&gt; und sind nach der Asset-Datei benannt, die sie konfigurieren. Also für &lt;code&gt;fabricator_01_icon.ktx2&lt;&#x2F;code&gt; hätte man eine &lt;code&gt;fabricator_01_icon.ktx2.meta&lt;&#x2F;code&gt;-Datei direkt daneben.&lt;&#x2F;p&gt;
&lt;p&gt;Für ein einfaches Bild-Asset sieht die Meta-Datei so aus:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;ron&quot;&gt;(
    meta_format_version: &amp;quot;1.0&amp;quot;,
    asset: Load(
        loader: &amp;quot;bevy_image::image_loader::ImageLoader&amp;quot;,
        settings: (
            format: FromExtension,
            is_srgb: true,
            sampler: Default,
            asset_usage: RenderAssetUsages(&amp;quot;RENDER_WORLD&amp;quot;),
        ),
    ),
)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Die entscheidende Zeile ist &lt;code&gt;asset_usage: RenderAssetUsages(&quot;RENDER_WORLD&quot;)&lt;&#x2F;code&gt;. Das sagt Bevy, die Textur nur auf der GPU zu halten und die System-RAM-Kopie komplett freizugeben.&lt;&#x2F;p&gt;
&lt;p&gt;Für GLB-Dateien kann man granularer werden. Hier ein Beispiel von einem der Fließband-Gebäude-Modelle:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;ron&quot;&gt;(
    meta_format_version: &amp;quot;1.0&amp;quot;,
    asset: Load(
        loader: &amp;quot;bevy_gltf::loader::GltfLoader&amp;quot;,
        settings: (
            load_meshes: RenderAssetUsages(&amp;quot;MAIN_WORLD | RENDER_WORLD&amp;quot;),
            load_materials: RenderAssetUsages(&amp;quot;RENDER_WORLD&amp;quot;),
            load_cameras: true,
            load_lights: true,
            load_animations: true,
            include_source: false,
            default_sampler: None,
            override_sampler: false,
            convert_coordinates: None,
        ),
    ),
)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;code&gt;load_meshes&lt;&#x2F;code&gt; behält beide: &lt;code&gt;MAIN_WORLD | RENDER_WORLD&lt;&#x2F;code&gt;. Das liegt daran, dass ich Mesh-Daten im System-RAM brauche für Dinge wie &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;avian3d&#x2F;latest&#x2F;avian3d&#x2F;collision&#x2F;index.html&quot;&gt;Kollisionserkennung&lt;&#x2F;a&gt; und &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;avian3d&#x2F;latest&#x2F;avian3d&#x2F;spatial_query&#x2F;struct.SpatialQuery.html&quot;&gt;Raycasting&lt;&#x2F;a&gt;. Aber &lt;code&gt;load_materials&lt;&#x2F;code&gt; (also die Texturen) ist nur auf &lt;code&gt;RENDER_WORLD&lt;&#x2F;code&gt; gesetzt. Das gibt uns das Beste aus beiden Welten. Meshes bleiben im System-RAM zugänglich wo wir sie brauchen, während die Texturen, die den Großteil des Speicherverbrauchs ausmachen, nur auf der GPU leben.&lt;&#x2F;p&gt;
&lt;p&gt;Das Schöne an Meta-Dateien ist, dass sie keine Code-Änderungen erfordern. Man legt sie einfach neben die Assets und der Loader nimmt sie automatisch auf. Ein kleines &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fishshell.com&#x2F;&quot;&gt;Fish&lt;&#x2F;a&gt;-Skript später und ich war fertig.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;nicht-gpu-native-bitmap-formate-verwenden&quot;&gt;Nicht GPU-native Bitmap-Formate verwenden&lt;&#x2F;h2&gt;
&lt;p&gt;Die Meta-Datei-Änderungen oben haben beim System-RAM geholfen, aber VRAM war immer noch ein Problem. Exofactory hat PNG für eigenständige Texturen und eingebettete PNGs in GLB-Dateien verwendet, was die eigentliche Ursache für den hohen VRAM-Verbrauch war.&lt;&#x2F;p&gt;
&lt;p&gt;Der Wechsel zu &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.khronos.org&#x2F;ktx&#x2F;&quot;&gt;KTX2&lt;&#x2F;a&gt; für Texturen war die Lösung. Es ist ein Container-Format von Khronos, das &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;BinomialLLC&#x2F;basis_universal&#x2F;wiki&#x2F;KTX2-File-Format-Support-Technical-Details&quot;&gt;viele GPU-native komprimierte Formate&lt;&#x2F;a&gt; halten kann.
Von den verfügbaren Formaten hab ich UASTC und ETC1S in Betracht gezogen, wegen nativer Bevy-Unterstützung. Die haben unterschiedliche Tradeoffs:&lt;&#x2F;p&gt;
&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;&lt;&#x2F;th&gt;&lt;th&gt;UASTC&lt;&#x2F;th&gt;&lt;th&gt;ETC1S&lt;&#x2F;th&gt;&lt;&#x2F;tr&gt;&lt;&#x2F;thead&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Qualität&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Fast verlustfrei&lt;&#x2F;td&gt;&lt;td&gt;Verlustbehaftet, niedrigere Qualität&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;VRAM-Verbrauch&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;~1 Byte&#x2F;Pixel&lt;&#x2F;td&gt;&lt;td&gt;~0,5 Bytes&#x2F;Pixel&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Dateigröße&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Größer (mit Zstd)&lt;&#x2F;td&gt;&lt;td&gt;Viel kleiner&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Transcode-Geschwindigkeit&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Schnell&lt;&#x2F;td&gt;&lt;td&gt;Sehr schnell&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Geeignet für&lt;&#x2F;strong&gt;&lt;&#x2F;td&gt;&lt;td&gt;Normal Maps, UI-Elemente, detaillierte Texturen&lt;&#x2F;td&gt;&lt;td&gt;Texturen, bei denen Qualität weniger kritisch ist&lt;&#x2F;td&gt;&lt;&#x2F;tr&gt;
&lt;&#x2F;tbody&gt;&lt;&#x2F;table&gt;
&lt;p&gt;Für Exofactory bin ich pauschal mit UASTC gegangen, hauptsächlich aus Faulheit. Eigentlich sollte ich ETC1S für Texturen nehmen, bei denen niedrigere Qualität nicht auffallen würde und die VRAM-Einsparungen nett wären. Das ist ein TODO für später.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;einen-bug-in-bevy-rund-um-ktx2-gefunden&quot;&gt;Einen Bug in Bevy rund um KTX2 gefunden&lt;&#x2F;h2&gt;
&lt;p&gt;Beim Umstieg auf KTX2-Dateien ist mir aufgefallen, dass Bevy die &lt;code&gt;.meta&lt;&#x2F;code&gt;-Dateien für KTX2-Dateien nicht beachtet hat. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bevyengine&#x2F;bevy&#x2F;pull&#x2F;22992&quot;&gt;Eine kleine PR später&lt;&#x2F;a&gt; und es war gefixt. Der Fix wird in Bevy 0.18.1 enthalten sein.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ktx2-richtig-in-glb-dateien-verwenden&quot;&gt;KTX2 richtig in GLB-Dateien verwenden&lt;&#x2F;h2&gt;
&lt;p&gt;Ein größeres, ernsthafteres Problem das ich gefunden hab ist, dass Bevy KTX2-Texturen in GLTF&#x2F;GLB-Dateien nicht richtig unterstützt. Man kann die KTX-Textur zwar einfach in die Datei reinpacken und es funktioniert in Bevy, aber das Problem ist, dass die resultierende Datei keine konforme GLTF&#x2F;GLB-Datei ist.&lt;&#x2F;p&gt;
&lt;p&gt;Die Ursache ist, dass Bevy &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gltf-rs&#x2F;gltf&quot;&gt;gltf-rs&lt;&#x2F;a&gt; als Teil seiner GLB&#x2F;GLTF-Pipeline verwendet. Die Library ist zwar robust was die offizielle GLTF-2.0-Spec angeht. Aber bei den &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;KhronosGroup&#x2F;glTF&#x2F;blob&#x2F;main&#x2F;extensions&#x2F;README.md&quot;&gt;de-facto verpflichtenden Extensions inklusive KTX2&lt;&#x2F;a&gt; ist sie echt mangelhaft. Ich hab &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gltf-rs&#x2F;gltf&#x2F;pull&#x2F;467&quot;&gt;eine PR eingereicht&lt;&#x2F;a&gt;, aber die letzte Code-Änderung war im November 2025 und ich bin nicht optimistisch.&lt;&#x2F;p&gt;
&lt;p&gt;Im Moment verwendet Exofactory meinen Fork der Library, aber eine langfristigere Lösung muss her.&lt;&#x2F;p&gt;
&lt;p&gt;Ich arbeite gerade an einem Dokument mit ein paar Ideen, die dem Bevy-Core-Team gepitcht werden sollen, basierend auf deren Anfrage.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ergebnisse&quot;&gt;Ergebnisse&lt;&#x2F;h2&gt;
&lt;p&gt;Nach den Verbesserungen in den oben genannten 4 Bereichen ist das Spiel massiv besser optimiert. Das Spiel ging von 7GB System-RAM auf unter 1GB. Von 7GB VRAM auf unter 2GB. Mein alter Laptop schafft jetzt 60fps auf niedrig, was mobile Entwicklung wieder möglich macht. War ein großer Push, aber absolut die Mühe wert.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;tooling&quot;&gt;Tooling&lt;&#x2F;h1&gt;
&lt;p&gt;Als kleines Nebenprojekt hab ich diesen Monat an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevydex.dev&#x2F;&quot;&gt;BevyDex.dev&lt;&#x2F;a&gt; gearbeitet. Ist im Grunde ein dünner Wrapper um die &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&quot;&gt;crates.io&lt;&#x2F;a&gt;-API und eine Postgres-Datenbank.&lt;&#x2F;p&gt;
&lt;p&gt;Aber es ist immer aktuell, zeigt wichtige Details und ist blitzschnell(tm).&lt;&#x2F;p&gt;
&lt;p&gt;Ist ein Nebenprojekt, das nichts mit Exofactory zu tun hat. Aber es wurde gebaut, damit ich mich durch das Ökosystem sortieren kann, und ich hoffe, andere finden es auch nützlich.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;finanzen&quot;&gt;Finanzen&lt;&#x2F;h1&gt;
&lt;p&gt;Zu guter Letzt: Exofactory wird bald offiziell mehrere Publisher kontaktieren. Aufgrund persönlicher Ereignisse kann ich zwar coden, aber das ganze Spiel nicht alleine finanzieren. Hoffentlich kommen da bald interessante Neuigkeiten. Falls jemand Ratschläge hat, immer her damit.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Ich programmiere lieber als an Pitch Decks zu arbeiten. Ich fixe lieber Bugs upstream wenn ich kann. Und ich freue mich, Sachen rauszubringen, die ich für nützlich halte.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Multiplayer, Bevy 0.18 und Fosdem</title>
          <pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2026-02-04/</link>
          <guid>https://exofactory.net/de/blog/2026-02-04/</guid>
          <description xml:base="https://exofactory.net/de/blog/2026-02-04/">&lt;h1 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h1&gt;
&lt;p&gt;Diesen Monat ging es im Grunde ausschließlich darum, Multiplayer-Funktionalität einzubauen – mit einer kleinen Pause für die Bevy-0.18-Migration.&lt;&#x2F;p&gt;
&lt;p&gt;Wenn du das interessant findest und das Spiel spannend klingt, gib dem Spiel gern eine &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;3615720&#x2F;Exofactory&#x2F;&quot;&gt;Wunschliste auf Steam&lt;&#x2F;a&gt;. Das hilft enorm.&lt;&#x2F;p&gt;
&lt;p&gt;Ich muss sagen, ich bereue es, nicht früher mit dem Multiplayer-Code angefangen zu haben. Wie bei Internationalisierung und Speicherständen ist Multiplayer etwas, das man von Anfang an in die Architektur einplanen sollte. Die gute Nachricht: Der Code war sauber genug, dass der Refactor nicht &lt;em&gt;allzu&lt;&#x2F;em&gt; schmerzhaft war.&lt;&#x2F;p&gt;
&lt;p&gt;Ansonsten war die &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;learn&#x2F;migration-guides&#x2F;0-17-to-0-18&#x2F;&quot;&gt;Migration von 0.17 auf 0.18&lt;&#x2F;a&gt; ziemlich unkompliziert. Ich musste ein paar weniger gepflegte Crates aufgeben, aber die eigentliche Migration war simpel.&lt;&#x2F;p&gt;
&lt;p&gt;Zu guter Letzt hab ich mir die Zeit genommen, zur Fosdem zu fahren, um die Bevy-Community zu treffen. Ich selbst hatte keinen Talk, aber &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.gamedev.place&#x2F;@Vrixyz&quot;&gt;Thierry Berger&lt;&#x2F;a&gt; hat einen &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fosdem.org&#x2F;2026&#x2F;schedule&#x2F;event&#x2F;NKVSUJ-bevy_engine_bof_-_demo_and_chat&#x2F;&quot;&gt;hervorragenden Vortrag über mobile Bevy-Spieleentwicklung&lt;&#x2F;a&gt; gehalten.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;multiplayer&quot;&gt;Multiplayer&lt;&#x2F;h1&gt;
&lt;div style=&quot;display: flex; flex-direction: column; align-items: center; margin: 1rem 0;&quot;&gt;
  &lt;figure style=&quot;width: 100%; max-width: 1200px; margin: 0;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2026-02-04&#x2F;join_menu.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2026-02-04&#x2F;join_menu.webp&quot; type=&quot;image&#x2F;webp&quot;&gt;
      &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2026-02-04&#x2F;join_menu.webp&quot; alt=&quot;Das Spiel unterstützt gleichzeitiges Hosten und Beitreten über Direct Connect, LAN und Steam-Multiplayer.&quot; style=&quot;width: 100%; height: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
    &lt;&#x2F;picture&gt;
    
    &lt;figcaption style=&quot;margin-top: 0.5rem; text-align: left;&quot;&gt;Das Spiel unterstützt gleichzeitiges Hosten und Beitreten über Direct Connect, LAN und Steam-Multiplayer.&lt;&#x2F;figcaption&gt;
    
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Leuten, die Spiele mit Bevy schreiben, hab ich bisher immer geraten, sich früh Gedanken über Internationalisierung, Gamepad-Unterstützung und Speicherstände zu machen. Jetzt bereue ich, dass ich den wahrscheinlich wichtigsten Faktor vergessen habe – nämlich Multiplayer und Netcode.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Dementsprechend meine aktualisierte Liste von Dingen, die man früh bedenken sollte:&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Multiplayer &#x2F; Netcode&lt;&#x2F;li&gt;
&lt;li&gt;Gamepad-Unterstützung&lt;&#x2F;li&gt;
&lt;li&gt;Speicherstände&lt;&#x2F;li&gt;
&lt;li&gt;Internationalisierung&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;All das nachträglich einzubauen ist nervig und schmerzhaft. (Fragt mich, woher ich das weiß! &#x2F;s)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exofactory-spezifika&quot;&gt;Exofactory-Spezifika&lt;&#x2F;h2&gt;
&lt;p&gt;Exofactory ist ein Fabrikspiel, in dem man als KI spielt, die über kleine Roboter namens „Exoframes&quot; mit der Welt interagiert. Diese müssen erst gebaut werden. Wenn man gerade keinen Exoframe steuert, kann man im globalen Kameramodus über die Fabriken fliegen.&lt;&#x2F;p&gt;
&lt;p&gt;Das ergibt einen ziemlich natürlichen kooperativen Ansatz: Neue Spielende können im globalen Modus beitreten, sich umschauen und bestehende Maschinen konfigurieren. Sobald ein Exoframe frei ist, kann man ihn „besetzen&quot; und die Welt jenseits der Fabrik-Sensorreichweite erkunden und ausbauen.&lt;&#x2F;p&gt;
&lt;p&gt;Das führt zu einem schönen Multiplayer-Metaplot und gleichzeitig zu einer klaren technischen Aufgabenstellung für den Netcode:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Im globalen Modus mit der Welt interagieren, einschließlich Bauen.&lt;&#x2F;li&gt;
&lt;li&gt;Einen Exoframe aus einem Pool auswählen und steuern.&lt;&#x2F;li&gt;
&lt;li&gt;Den Rest der Welt simulieren und die relevanten Komponenten aktualisieren.&lt;&#x2F;li&gt;
&lt;li&gt;Sicherstellen, dass der Client die Welt korrekt sieht.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Für mich führt das ziemlich natürlich zu einem Server-autoritativen Modell. Die Server-Instanz des Spiels simuliert die Welt, und die Client-Instanzen nehmen einfach daran teil.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bibliothek-auswahlen&quot;&gt;Bibliothek auswählen&lt;&#x2F;h2&gt;
&lt;p&gt;Zum Zeitpunkt auf Bevy 0.18 scheint es zwei gut unterstützte Crates zu geben: &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;bevy_replicon&quot;&gt;bevy_replicon&lt;&#x2F;a&gt; und &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;lightyear&quot;&gt;lightyear&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Ich empfehle, sich beide anzuschauen – beide haben ihre eigenen Vorteile. Nach meinem (möglicherweise fehlerhaften) Verständnis bietet lightyear mehr Features wie &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Client-side_prediction&quot;&gt;Client-Side Prediction&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;cBournhonesque&#x2F;lightyear&#x2F;tree&#x2F;main&#x2F;examples&#x2F;deterministic_replication&quot;&gt;deterministische Replikation&lt;&#x2F;a&gt; und Interest Management (nur relevante Daten synchronisieren), allerdings mit mehr initialem Aufwand und Komplexität. Replicon lässt diese Features standardmäßig weg, ist dafür aber einfacher aufzusetzen mit weniger Entwicklungsaufwand. Falls ich hier falsch liege, korrigiere ich das gerne – meldet euch einfach.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Edit:&lt;&#x2F;strong&gt; Jemand hat sich tatsächlich gemeldet! Wie sich herausstellt, unterstützt bevy_replicon doch deterministische Replikation und Interest Management. Die Features, die im Vergleich zu lightyear fehlen, sind Client-&amp;gt;Server-Replikation, Lag Compensation, Client-Side Prediction und Interpolation. Außerdem plant lightyear, Replicon für die Replikation wiederzuverwenden.&lt;&#x2F;p&gt;
&lt;p&gt;Für Exofactory habe ich mich für das einfachere Replicon entschieden, weil das Spiel definitiv &lt;em&gt;kein&lt;&#x2F;em&gt; hektischer Shooter ist, mein geplantes Feature-Tempo eher gemächlich ist und ich bei Netcode noch relativ grün hinter den Ohren bin.&lt;&#x2F;p&gt;
&lt;p&gt;Das gesagt: Wenn die Spielarchitektur bereits gut strukturiert ist, dürfte ein späterer Wechsel kein allzu schmerzhafter Prozess sein.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;von-singleplayer-zu-multiplayer&quot;&gt;Von Singleplayer zu Multiplayer&lt;&#x2F;h2&gt;
&lt;p&gt;Im Kern macht Replicon zwei Dinge: Komponenten replizieren und Netzwerk-Events&#x2F;Nachrichten an und von Clients verarbeiten.&lt;&#x2F;p&gt;
&lt;p&gt;Um Multiplayer zu ermöglichen, musste ich mehrere Systeme refactoren und logisch gruppieren.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2026-02-04&#x2F;multiplayer_architecture.webp&quot; alt=&quot;Exofactory Multiplayer-Architektur&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;autoritative-kernsysteme&quot;&gt;Autoritative Kernsysteme&lt;&#x2F;h3&gt;
&lt;p&gt;Diese laufen nur auf der Server-Instanz und aktualisieren die Welt (also alle Komponenten, die den Spielzustand speichern) für alles, was nicht direkt vom Spieler manipuliert wird.&lt;&#x2F;p&gt;
&lt;p&gt;Dazu gehören Dinge wie der Maschinenzyklus, der Eisenerz in Eisenbarren verwandelt, welche Sounds abgespielt werden sollen, und sogar die Abbaurate, die ein Exoframe hat, während man zuschaut. Es gibt noch viel mehr Systeme, aber das sind die typischen in dieser Gruppe.&lt;&#x2F;p&gt;
&lt;p&gt;Diese Systeme dürfen direkt in Komponenten schreiben. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy_replicon&#x2F;latest&#x2F;bevy_replicon&#x2F;#replication&quot;&gt;Replicon repliziert diese Änderungen automatisch zur Client-Instanz der Komponenten.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;player-ui-systeme&quot;&gt;Player-UI-Systeme&lt;&#x2F;h3&gt;
&lt;p&gt;Diese laufen nur auf Spielinstanzen, in denen tatsächlich jemand spielt. Sie spielen Sounds ab, zeigen die Bau-UIs an und informieren den Spieler über den Weltzustand. Diese Systeme lesen den Weltzustand, indem sie die lokalen Komponenten lesen, die automatisch synchron gehalten werden.&lt;&#x2F;p&gt;
&lt;p&gt;Der Teil, der den großen Refactor erforderte: In diesen Systemen ist keine direkte Manipulation von Komponenten erlaubt. Die Clients müssen &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy_replicon&#x2F;latest&#x2F;bevy_replicon&#x2F;#network-messages-and-events&quot;&gt;ein Event&#x2F;eine Nachricht an den Server schicken&lt;&#x2F;a&gt;, der dann im Auftrag des Clients die Komponenten manipuliert und die Änderungen repliziert.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;netzwerk-nachrichten-events&quot;&gt;Netzwerk-Nachrichten &amp;amp; Events&lt;&#x2F;h3&gt;
&lt;p&gt;Im obigen Diagramm hab ich nur ein Beispiel gezeigt, aber in Wirklichkeit passiert so ziemlich alles im Spiel über &lt;em&gt;„Gucken&quot;&lt;&#x2F;em&gt; hinaus per Event oder Nachricht. Das gilt auch für den Spieler auf der Server-Instanz des Spiels.&lt;&#x2F;p&gt;
&lt;p&gt;Das ist meiner Meinung nach DER wichtigste Faktor, wenn man an einem Bevy-Spiel arbeitet, das irgendwann Multiplayer unterstützen soll. Hätte ich das von Anfang an so gemacht, wäre das Hinzufügen der Multiplayer-Funktionalität einfach gewesen. Auch wenn man anfangs nicht an Netzwerk denken möchte – allein sicherzustellen, dass alle Spieler-Manipulationen der Welt über die nativen &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;ecs&#x2F;event&#x2F;trait.Event.html&quot;&gt;Bevy-Event-Systeme&lt;&#x2F;a&gt; oder &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;prelude&#x2F;struct.Messages.html&quot;&gt;Message-Systeme&lt;&#x2F;a&gt; laufen, spart später enorm viel Zeit.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;auswirkungen-ergebnisse&quot;&gt;Auswirkungen &amp;amp; Ergebnisse&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2026-02-04&#x2F;multiplayer_architecture_headless.webp&quot; alt=&quot;Exofactory Multiplayer-Architektur Headless&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Es gab zwei interessante Nebeneffekte. Der erste war etwas, das ich eigentlich erst später angehen wollte, aber durch den Refactor deutlich einfacher wurde: eine Headless-Server-Instanz, die man per Docker&#x2F;Podman etc. selbst hosten kann. So kann die Fabrik weiterlaufen, ohne dass jemand das Spiel auf dem PC offen halten muss.&lt;&#x2F;p&gt;
&lt;p&gt;Durch den Refactor und einen neuen Feature-basierten Build, der &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;struct.MinimalPlugins.html&quot;&gt;MinimalPlugins&lt;&#x2F;a&gt; statt &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;struct.DefaultPlugins.html&quot;&gt;DefaultPlugins&lt;&#x2F;a&gt; verwendet, bekommt man eine schlanke Headless-Server-Instanz, die so ziemlich überall laufen kann – sogar auf den meisten RISC-V-SBCs!&lt;&#x2F;p&gt;
&lt;p&gt;Das muss noch getestet werden, aber es sieht gut aus. Oben ist ein ähnliches Diagramm, aber für die Headless-Version des Spiels.&lt;&#x2F;p&gt;
&lt;p&gt;Der zweite interessante Nebeneffekt: Ich verwende deutlich weniger &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;learn&#x2F;quick-start&#x2F;getting-started&#x2F;resources&#x2F;&quot;&gt;Bevy Resources&lt;&#x2F;a&gt;, weil Replicon keine Resources repliziert. Stattdessen nutze ich viel mehr &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Singleton_pattern&quot;&gt;Pseudo-Singletons&lt;&#x2F;a&gt; (also eine „leere&quot; Entity, die nur die Komponente hat, die die Daten hält, die vorher in der Resource steckten).&lt;&#x2F;p&gt;
&lt;p&gt;Ich bin kein großer Fan von objektorientierten Design Patterns, also ist das schon etwas witzig und fühlt sich ein bisschen dreckig an.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;bevy-0-18-migration&quot;&gt;Bevy-0.18-Migration&lt;&#x2F;h1&gt;
&lt;p&gt;Ich hab das Licht gesehen! Nein wirklich – jedes Bevy-Spiel mit Beleuchtung sollte die Migration priorisieren. Da wurde richtig was gemacht, und das Spiel sieht merklich besser aus. Aber auch wenn euer Spiel kein Licht verwendet, solltet ihr trotzdem migrieren.&lt;&#x2F;p&gt;
&lt;p&gt;Abgesehen von ein paar Shader-Bind-Group-Sachen (also BindGroupLayout -&amp;gt; &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;render&#x2F;render_resource&#x2F;struct.BindGroupLayoutDescriptor.html&quot;&gt;BindGroupLayoutDescriptor&lt;&#x2F;a&gt;) und &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;examples&#x2F;3d-rendering&#x2F;atmosphere&#x2F;&quot;&gt;Atmosphere&lt;&#x2F;a&gt;-Änderungen war es eine einfache Migration.&lt;&#x2F;p&gt;
&lt;p&gt;Schön zu sehen, dass der Release-Zyklus wieder im Takt ist.&lt;&#x2F;p&gt;
&lt;p&gt;Allerdings muss ich sagen: Mit jedem Upgrade sehe ich mehr Plugins, die auf der Strecke bleiben. Das lässt mich die Maintainer von Plugins umso mehr schätzen. Mit Bevys Release-Zyklus Schritt zu halten, ist im Vergleich zu jeder anderen Game Engine eine ordentliche Aufgabe.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fosdem&quot;&gt;Fosdem!&lt;&#x2F;h1&gt;
&lt;p&gt;Apropos – ich hatte das Vergnügen, die &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;fosdem.org&#x2F;&quot;&gt;Fosdem&lt;&#x2F;a&gt; zu besuchen, ein Open-Source-Treffen, das jedes Jahr in Brüssel stattfindet.&lt;&#x2F;p&gt;
&lt;p&gt;Wenn ihr euch für Open-Source-Game-Engines interessiert – oder ehrlich gesagt für Open Source generell – kann ich nur empfehlen, hinzugehen. Es gibt massenhaft spannende Talks, aber das Beste (zumindest für mich) ist, die Leute zu treffen, mit denen man sonst nur online redet. Das Bevy-Abendessen mit &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.gamedev.place&#x2F;@Vrixyz&quot;&gt;Thierry Berger&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;friz64.de&#x2F;&quot;&gt;Gee&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;mastodon.online&#x2F;@nikl_me&quot;&gt;Niklas Eicker&lt;&#x2F;a&gt;,  &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Firestar99&#x2F;&quot;&gt;Firestar99&lt;&#x2F;a&gt; und einigen anderen netten Leuten war richtig gut.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Ich dachte, ich krieg Multiplayer in einer Woche hin, aber es hat einen Monat gedauert – wie irgendwie erwartet. Ich bin ein besserer Spieleentwickler durch die Erfahrung. Man kann sich halt nicht für alles nur auf Backend-Patterns verlassen.&lt;&#x2F;p&gt;
&lt;p&gt;Die Bevy-0.18-Migration war unkompliziert.&lt;&#x2F;p&gt;
&lt;p&gt;Ich kann die Fosdem nur empfehlen, wenn ihr die Gelegenheit habt.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Echtzeit-Einstellungen, Speicher-Überarbeitung &amp; ein Wiki</title>
          <pubDate>Tue, 30 Dec 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-12-30/</link>
          <guid>https://exofactory.net/de/blog/2025-12-30/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-12-30/">&lt;h1 id=&quot;ubersicht&quot;&gt;Übersicht&lt;&#x2F;h1&gt;
&lt;p&gt;Frohe Feiertage! Diesen Monat ist einiges passiert, das weitere Quality-of-Life-Verbesserungen ins Spiel bringt. Nämlich eine Überarbeitung des Speichersystems, Logging, Crash-Reporting und Live-Einstellungen! Dazu ein neues, aber noch leeres Wiki.&lt;&#x2F;p&gt;
&lt;p&gt;Ich bin super stolz auf das Live-Einstellungen-Zeug. So etwas habe ich woanders noch nicht gesehen. Wenn du das interessant findest und das Spiel spannend klingt, gib dem Spiel gern eine &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;3615720&#x2F;Exofactory&#x2F;&quot;&gt;Wunschliste auf Steam&lt;&#x2F;a&gt;. Das hilft enorm.&lt;&#x2F;p&gt;
&lt;p&gt;Außerdem habe ich kürzlich die öffentliche Demo von Steam genommen. Sie spiegelt inzwischen &lt;em&gt;WIRKLICH&lt;&#x2F;em&gt; nicht mehr die Qualität und den Feinschliff des aktuellen Spielstands wider. Ich plane, irgendwann einen „Demo 2&quot;-Build auf Steam hochzuladen, der die Arbeit der kommenden Monate zeigt.&lt;&#x2F;p&gt;
&lt;p&gt;Also, hier die neuesten Arbeitsbereiche.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;speicher-uberarbeitung&quot;&gt;Speicher-Überarbeitung&lt;&#x2F;h2&gt;
&lt;div style=&quot;display: flex; flex-direction: column; align-items: center; margin: 1rem 0;&quot;&gt;
  &lt;figure style=&quot;width: 100%; max-width: 1200px; margin: 0;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;save_screen.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;save_screen.webp&quot; type=&quot;image&#x2F;webp&quot;&gt;
      &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;save_screen.webp&quot; alt=&quot;Wir können jetzt das letzte Spiel fortsetzen oder einen bestimmten Spielstand laden.&quot; style=&quot;width: 100%; height: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
    &lt;&#x2F;picture&gt;
    
    &lt;figcaption style=&quot;margin-top: 0.5rem; text-align: left;&quot;&gt;Wir können jetzt das letzte Spiel fortsetzen oder einen bestimmten Spielstand laden.&lt;&#x2F;figcaption&gt;
    
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Das Nervigste in einem Fabrikspiel: Du steckst einen Haufen Arbeit rein und verlierst dann den Fortschritt. Das ist ein paar Spielern passiert, also wollte ich einen soliden Ansatz finden. Hab&#x27;s simpel gehalten: Ein Loop-Timer speichert das Spiel automatisch alle 5 Minuten mit einem rotierenden Set von 5 Speicherständen, wobei jeder neue den ältesten überschreibt. War ziemlich trivial mit einem &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;time&#x2F;struct.Timer.html&quot;&gt;Bevy-Timer&lt;&#x2F;a&gt; und einer kleinen State Machine.&lt;&#x2F;p&gt;
&lt;p&gt;So wird automatisch gespeichert, während manuelle Speicherungen weiterhin möglich sind.&lt;&#x2F;p&gt;
&lt;p&gt;Zusätzlich kann man den neuesten Spielstand fortsetzen ODER manuell einen vorhandenen auswählen. Im Moment ist der Ladebildschirm nur ein minimales Bevy-UI-Fenster. Deutlich sicherer zu spielen für nicht viel Programmieraufwand.&lt;&#x2F;p&gt;
&lt;p&gt;Aktuell sind 5 Speicherstände im 5-Minuten-Takt Standard, aber wenn du die &lt;code&gt;config.toml&lt;&#x2F;code&gt; bearbeitest, kannst du das ändern.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;crash-reporting-logging-uberarbeitung&quot;&gt;Crash-Reporting &amp;amp; Logging-Überarbeitung&lt;&#x2F;h2&gt;
&lt;p&gt;Das Top-Feature, das ich als Entwickler wollte, war ordentliches Logging und Crash-Reporting in Produktions-Builds. Zwar hab ich versucht, alles sauber zu halten, aber das Logging hab ich vernachlässigt. Ich habe wild &lt;code&gt;print!&lt;&#x2F;code&gt; &lt;code&gt;println!&lt;&#x2F;code&gt; &lt;code&gt;eprint!&lt;&#x2F;code&gt; &lt;code&gt;eprintln!&lt;&#x2F;code&gt; &lt;code&gt;info!&lt;&#x2F;code&gt; &lt;code&gt;warn!&lt;&#x2F;code&gt; &lt;code&gt;error!&lt;&#x2F;code&gt; durcheinander benutzt. Debug-Prints wurden zu permanenter Ausgabe.&lt;&#x2F;p&gt;
&lt;p&gt;Im Windows-Build konnte man die Hälfte davon nicht sehen, selbst wenn man das Spiel aus PowerShell gestartet hat. Hab das Problem in drei Schritten angegangen:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Alle stdout&#x2F;err-Sachen rauswerfen außer &lt;code&gt;info!&lt;&#x2F;code&gt; &lt;code&gt;warn!&lt;&#x2F;code&gt; &lt;code&gt;error!&lt;&#x2F;code&gt; und &lt;code&gt;panic!&lt;&#x2F;code&gt;. Plugin für Plugin migriert.&lt;&#x2F;li&gt;
&lt;li&gt;Ein non-blocking Tracing-Capture-System hinzugefügt, das die Ausgabe an eine Log-Datei anhängt.&lt;&#x2F;li&gt;
&lt;li&gt;Logik rund um die Log-Datei geschrieben. Wenn es keinen sauberen Exit gab, bekommt der Spieler die Option, die Logs automatisch als Teil eines Crash-Reports hochzuladen.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;div style=&quot;display: flex; flex-direction: column; align-items: center; margin: 1rem 0;&quot;&gt;
  &lt;figure style=&quot;width: 100%; max-width: 1200px; margin: 0;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;crash_report.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;crash_report.webp&quot; type=&quot;image&#x2F;webp&quot;&gt;
      &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;crash_report.webp&quot; alt=&quot;Nach einem erkannten Crash können wir Logs hochladen.&quot; style=&quot;width: 100%; height: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
    &lt;&#x2F;picture&gt;
    
    &lt;figcaption style=&quot;margin-top: 0.5rem; text-align: left;&quot;&gt;Nach einem erkannten Crash können wir Logs hochladen.&lt;&#x2F;figcaption&gt;
    
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Spieler haben jetzt Logs, die sie bei Bedarf prüfen können, und können diese Logs automatisch als Teil eines Crash-Reports hochladen. Klar, etablierte Game-Engines haben sowas eingebaut, aber ich bin einfach froh, es jetzt zu haben. Keine &lt;em&gt;„was hast du gemacht, kurz bevor das Spiel abgestürzt ist?&quot;&lt;&#x2F;em&gt;-Diskussionen mehr.&lt;&#x2F;p&gt;
&lt;p&gt;Zuletzt habe ich eine &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;crates.io&#x2F;crates&#x2F;bevy-panic-handler&quot;&gt;kleine Library hinzugefügt, die Panics in der GUI anzeigt&lt;&#x2F;a&gt;. Im allerschlimmsten Fall kann ein Spieler die Ausgabe kopieren und einfügen.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;einstellungen-uberarbeitung&quot;&gt;Einstellungen-Überarbeitung&lt;&#x2F;h2&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;graphics_settings.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;graphics_settings.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Du kannst Grafikeinstellungen in Echtzeit ändern.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Das ist das Zeug, auf das ich super stolz bin. Vor dem neuesten (internen) Build konnte man nicht auf die Einstellungen im Spiel zugreifen, und jede Änderung erforderte einen Neustart. Nicht gut.&lt;&#x2F;p&gt;
&lt;p&gt;Ich schieb&#x27;s auf meine Backend-Programmier-Vergangenheit. Nachdem Spieler mir gesagt hatten, dass der Zustand der Einstellungen nicht wirklich akzeptabel war, hab ich mich an die Überarbeitung gemacht.&lt;&#x2F;p&gt;
&lt;p&gt;Hab einen ECS&#x2F;Bevy-zentrierten Ansatz gewählt und finde, es ist gut gelaufen.&lt;&#x2F;p&gt;
&lt;p&gt;Die Einstellungen funktionieren jetzt so: Sie werden zur&#x2F;von der &lt;code&gt;config.toml&lt;&#x2F;code&gt;-Datei serialisiert&#x2F;deserialisiert und sind im Spiel als eine Reihe von Resource-Structs dargestellt.&lt;&#x2F;p&gt;
&lt;p&gt;Hab ein paar Systeme hinzugefügt, die laufen, wenn diese Structs erstellt oder geändert werden, und die Komponenten aktualisieren, die die jeweilige Einstellung widerspiegeln.&lt;&#x2F;p&gt;
&lt;p&gt;Nehmen wir zum Beispiel das Ändern der &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;pbr&#x2F;struct.ScreenSpaceAmbientOcclusion.html&quot;&gt;ScreenSpaceAmbientOcclusion&lt;&#x2F;a&gt;-Einstellungen im Spiel.&lt;&#x2F;p&gt;
&lt;p&gt;In einer ECS-Welt ist das einfach. Wir finden die globale Kamera-Entity, indem wir Entities mit der Exofactory-&lt;code&gt;GlobalCamera&lt;&#x2F;code&gt;-Komponente abfragen. Da die Kamera nur ein Bundle von Komponenten ist, können wir auch die ScreenSpaceAmbientOcclusion-Komponente greifen und in Echtzeit modifizieren, synchron mit der Grafikeinstellungs-Resource.&lt;&#x2F;p&gt;
&lt;p&gt;Das Gleiche gilt für jede Einstellung.&lt;&#x2F;p&gt;
&lt;p&gt;Alle Einstellungen sind einfach Properties in einem &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;learn&#x2F;quick-start&#x2F;getting-started&#x2F;resources&#x2F;&quot;&gt;Resource&lt;&#x2F;a&gt;-Struct, die auf spezifische Komponenten gespiegelt werden.&lt;&#x2F;p&gt;
&lt;p&gt;Das Ergebnis: Man kann jede Einstellung jederzeit in Echtzeit ändern – inklusive Sprache, Grafik, Fenstergröße&#x2F;-modus und alles andere.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;control_language.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-30&#x2F;control_language.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Sprache und alles andere auch.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ziemlich cool, finde ich.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wiki&quot;&gt;Wiki&lt;&#x2F;h2&gt;
&lt;p&gt;Die Idee hinter dem Wiki: Ein &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiki.exofactory.net&#x2F;&quot;&gt;community-orientiertes Wiki&lt;&#x2F;a&gt; bereitstellen, das performant, verfügbar und nicht ausbeuterisch ist. Falls niemand einen besseren Ansatz hat, plane ich, das Wiki unter &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;creativecommons.org&#x2F;licenses&#x2F;by-nc-sa&#x2F;4.0&#x2F;&quot;&gt;Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International&lt;&#x2F;a&gt; zu lizenzieren.&lt;&#x2F;p&gt;
&lt;p&gt;Ich weiß, es ist etwas früh, das Wiki aufzusetzen, aber ich wollte es aus folgenden Gründen tun:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Ein echter Bedarf an Dokumentation rund um die &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;wiki.exofactory.net&#x2F;index.php&#x2F;Technical_Reference&#x2F;config.toml&quot;&gt;config.toml&lt;&#x2F;a&gt;-Datei.&lt;&#x2F;li&gt;
&lt;li&gt;Der Wunsch, Wikis auf weniger community-orientierten Plattformen zuvorzukommen.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Es gibt nicht viel zu sagen, außer dass das Wiki immer nützlicher wird, je näher das Spiel dem Launch kommt.&lt;&#x2F;p&gt;
&lt;p&gt;Im Moment ist die Account-Erstellung geschlossen, wird aber später geöffnet, wenn das Spiel spielbarer wird. Das gesagt: Wenn jemand ein MediaWiki-Theme-Spezialist ist, meldet euch gern. Das Standard-Theme ist okay, aber nicht gerade ideal.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;ECS zeigt mal wieder, wie cool es ist. Von „Neustart bei jeder Einstellungsänderung&quot; zu „alle Änderungen werden live angewendet&quot; war schockierend einfacher als erwartet.&lt;&#x2F;p&gt;
&lt;p&gt;Das und das Speichersystem &lt;strong&gt;MIT&lt;&#x2F;strong&gt; Crash-Reporting ist super nice.&lt;&#x2F;p&gt;
&lt;p&gt;Ziemlich happy und freu mich drauf, richtig an der viel besseren Demo 2 zu arbeiten.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Ziehbare Fließbänder, Elektrizität &amp; Ansichtsmodi</title>
          <pubDate>Thu, 04 Dec 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-12-04/</link>
          <guid>https://exofactory.net/de/blog/2025-12-04/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-12-04/">&lt;h1 id=&quot;ubersicht&quot;&gt;Übersicht&lt;&#x2F;h1&gt;
&lt;p&gt;Diesen Monat habe ich mich auf ein paar neue Bereiche konzentriert: wichtige Spielmechaniken, Visuals und große Quality-of-Life-Verbesserungen bei der Fließband-Platzierung.&lt;&#x2F;p&gt;
&lt;p&gt;Wir kommen dem Ziel immer näher, das gesamte Feedback vom Oktober-Nextfest umzusetzen, das sich durch reines Programmieren lösen lässt – und ich denke, man sieht es dem Spiel an.&lt;&#x2F;p&gt;
&lt;p&gt;Ich bin super happy, Elektrizität hinzugefügt zu haben. Es ist ein Kern-Feature, und während das Hinzufügen selbst nicht so schwer war, war die Visualisierung kniffliger. Aber ich finde, der Shader-basierte Ansatz sieht richtig cool aus. Super zufrieden mit dem Produktivitäts-&#x2F;Effizienz-Ansichtsmodus-Shader unten.&lt;&#x2F;p&gt;
&lt;p&gt;In den folgenden Abschnitten gehe ich etwas tiefer ins Detail.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ziehbare-fliessbander&quot;&gt;Ziehbare Fließbänder&lt;&#x2F;h1&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;belt_bend.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;belt_bend.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Fließbänder ziehen, um Gebäude zu verbinden, ist jetzt einfach.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ziemlich viel Zeit ging für ziehbare Fließbänder drauf. Die Band-für-Band-Platzierung wie in Factorio funktioniert zwar, aber beim Spielen wurde mir klar, dass es schnell nervt. Das Feedback war da universal einer Meinung.&lt;&#x2F;p&gt;
&lt;p&gt;Das Interessante ist, dass Exofactory einen &quot;kachelbasierten&quot; Fließband-Ansatz verwendet, weshalb der Spline-basierte Ansatz anderer Fabrikspiele nicht wirklich möglich war. Nach &lt;del&gt;dem Spielen vieler anderer Fabrikspiele&lt;&#x2F;del&gt; ausgiebiger Recherche habe ich einen Ansatz gefunden, der ähnlich wie bei &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;shapez2.com&#x2F;&quot;&gt;Shapez2&lt;&#x2F;a&gt; funktioniert – angepasst für 3D und die Eigenheiten von Exofactory.&lt;&#x2F;p&gt;
&lt;p&gt;Kurz gesagt: Man platziert das erste Fließband-Segment und kann dann ein gerades oder &quot;L&quot;-förmiges Segment beliebiger Länge herausziehen, solange man die Ressourcen dafür hat. Die einzige echte technische Einschränkung ist, dass man nur eine Biegung pro gezogenem Segment haben kann. Mehr würde nur zu Mehrdeutigkeit und unvorhersehbaren Ergebnissen führen.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;belt_connect.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;belt_connect.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Längere Fließband-Verbindungen brauchen jetzt viel weniger Aufwand.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Das macht das Spiel deutlich weniger mühsam und ich bin super froh, dass es fertig programmiert ist.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;elektrizitat&quot;&gt;Elektrizität&lt;&#x2F;h1&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;power_new_building.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;power_new_building.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Gebäude verbinden sich automatisch mit der nächsten Stromquelle in Reichweite.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Ich habe auch kürzlich Strom ins Spiel eingebaut. Alle Gebäude verbrauchen jetzt Elektrizität und funktionieren ohne nicht. Gebäude im Bereich einer Stromquelle oder eines Verstärkers verbinden sich automatisch und beginnen Strom zu verbrauchen.&lt;&#x2F;p&gt;
&lt;p&gt;Im Moment erzeugt der Core genug Strom, um eine kleine Fabrik zu betreiben. Sobald ich Brennstoffe und Rohrleitungen richtig einbaue, wird es möglich sein, die Stromproduktion richtig hochzufahren.&lt;&#x2F;p&gt;
&lt;p&gt;Vom Programmier-Standpunkt aus war das ein ziemlich einfaches Feature. Einfach ein paar &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;learn&#x2F;quick-start&#x2F;getting-started&#x2F;ecs&#x2F;&quot;&gt;ECS&lt;&#x2F;a&gt;-Komponenten hinzufügen und fertig – Gebäude aktualisieren ihre Komponenten während ihrer Zyklen und die Stromsysteme fragen sie entsprechend ab.&lt;&#x2F;p&gt;
&lt;p&gt;Der schwierige Teil war die Visualisierung. Dazu unten mehr.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ansichtsmodi&quot;&gt;Ansichtsmodi&lt;&#x2F;h1&gt;
&lt;p&gt;Ein Feedback-Punkt war: &lt;em&gt;„Was bringt der Global-Modus eigentlich?&quot;&lt;&#x2F;em&gt; – und ehrlich gesagt ist der globale Ansichtsmodus in der Demo weniger nützlich, als er sein sollte. Der Hauptgrund: Die Ansichtsmodus-Features waren noch nicht da.&lt;&#x2F;p&gt;
&lt;p&gt;Jetzt kann ich sie endlich zeigen. Meine Güte, musste ich viel über &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;examples&#x2F;shaders&#x2F;custom-render-phase&#x2F;&quot;&gt;Shaders&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;render&#x2F;render_resource&#x2F;struct.DepthStencilState.html&quot;&gt;Stencils&lt;&#x2F;a&gt; und &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;pbr&#x2F;fn.setup_morph_and_skinning_defs.html&quot;&gt;Skinning&lt;&#x2F;a&gt; lernen, um das zum Laufen zu bringen.&lt;&#x2F;p&gt;
&lt;p&gt;Die Ansichtsmodi sind im Global-Modus über die Tab-Taste oder den entsprechenden Controller-Button erreichbar.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;strom&quot;&gt;Strom&lt;&#x2F;h2&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;power_global.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;power_global.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Man sieht die versorgten Zonen und welche Gebäude und Kabel Strom haben oder nicht.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Dieser Ansichtsmodus zeigt, welche Gebäude Strom haben und welche nicht. Man sieht auch die versorgten Zonen und welche Kabel verbunden sind. Einfach, schnell und nützlich.&lt;&#x2F;p&gt;
&lt;p&gt;Obwohl die Ansichtsmodi ein Feature für den Global-Modus sind, kann man beim Platzieren von Stromverstärkern die versorgten Zonen und so weiter sehen – einfach um den Verstand zu schonen.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;produktivitat&quot;&gt;Produktivität&lt;&#x2F;h2&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;productivity.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-12-04&#x2F;productivity.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Die Farbe der Gebäude zeigt ihre Produktivität. Grün für 100%, Rot für 0%.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Darauf bin ich ziemlich stolz und ich denke, es bringt etwas Neues ins Fabrikspiel-Genre. Der Produktivitätsmodus zeigt auf einen Blick die Produktivität einer ganzen Landschaft von Maschinen. Rote oder gelbe Bereiche einer Fabrik fallen sofort auf.&lt;&#x2F;p&gt;
&lt;p&gt;Im Video oben sieht man, wie die Produktivität sinkt, wenn sich der Ausgabepuffer füllt. Wie der Strom-Ansichtsmodus ist dieser Modus über die Tab-Taste im Global-Modus erreichbar.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Es hat sich richtig gut angefühlt, endlich mal wieder ein neues Feature hinzuzufügen nach so vielen Bugfixes. Super happy damit. Jetzt muss ich nur noch das Emotional-Core-&#x2F;Dialogsystem anpassen, um diese neuen Systeme widerzuspiegeln. Viel Spaß und viel zu tun.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Quality-of-Life-Änderungen, welche sich für ein Fabrikspiel gehören</title>
          <pubDate>Sun, 16 Nov 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-11-16/</link>
          <guid>https://exofactory.net/de/blog/2025-11-16/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-11-16/">&lt;h1 id=&quot;ubersicht&quot;&gt;Übersicht&lt;&#x2F;h1&gt;
&lt;p&gt;In den letzten Wochen gab es zwei Haupttreiber für meine Arbeit: das Feedback aus der Demo und die Portierung von &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;learn&#x2F;migration-guides&#x2F;0-16-to-0-17&#x2F;&quot;&gt;Bevy 0.16 auf 0.17&lt;&#x2F;a&gt; sowie der Wechsel zur &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;avianphysics&#x2F;avian&quot;&gt;Avian&lt;&#x2F;a&gt;-Physik-Engine.&lt;&#x2F;p&gt;
&lt;p&gt;Unten gehe ich auf die neuen Quality-of-Life-Verbesserungen aus dem Feedback ein, aber zuerst möchte ich erklären, warum ich zu Avian gewechselt bin und welche Arbeit das mit sich brachte.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wechsel-zu-avian&quot;&gt;Wechsel zu Avian&lt;&#x2F;h2&gt;
&lt;div style=&quot;display: flex; flex-direction: column; align-items: center; margin: 1rem 0;&quot;&gt;
  &lt;figure style=&quot;width: 100%; max-width: 1200px; margin: 0;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;collider_avian.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;collider_avian.webp&quot; type=&quot;image&#x2F;webp&quot;&gt;
      &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;collider_avian.webp&quot; alt=&quot;Automatisch generierte Avian-Collider-Meshes&quot; style=&quot;width: 100%; height: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
    &lt;&#x2F;picture&gt;
    
    &lt;figcaption style=&quot;margin-top: 0.5rem; text-align: left;&quot;&gt;Automatisch generierte Avian-Collider-Meshes&lt;&#x2F;figcaption&gt;
    
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Ursprünglich habe ich das bewährte &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;dimforge&#x2F;bevy_rapier&quot;&gt;Rapier 3D&lt;&#x2F;a&gt; genutzt, war aber aus mehreren Gründen unzufrieden.&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Hohe Entwicklungslatenz. Angesichts der schnellen Veränderungen im Bevy-Ökosystem und den großen Verbesserungen in jeder Version war das ein echter Motivationskiller. Zum Zeitpunkt dieses Posts unterstützt Rapier noch immer kein Bevy 0.17.&lt;&#x2F;li&gt;
&lt;li&gt;Etwas sperrige, nicht ganz elegante API.&lt;&#x2F;li&gt;
&lt;li&gt;Keine automatische Collider-Generierung.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Trotzdem: Rapier ist eine solide Engine, und die Arbeit von &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;dimforge.com&#x2F;&quot;&gt;dimforge&lt;&#x2F;a&gt; für die Bevy-Community ist großartig. Sie ist einfach nicht der beste Fit für mich.&lt;&#x2F;p&gt;
&lt;p&gt;Der Wechsel zu Avian hat all diese Punkte adressiert und Dinge wie &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;avian3d&#x2F;latest&#x2F;avian3d&#x2F;spatial_query&#x2F;struct.RayCaster.html&quot;&gt;Raycasting&lt;&#x2F;a&gt; deutlich angenehmer gemacht.&lt;&#x2F;p&gt;
&lt;p&gt;Dazu kommt das hervorragende &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;avian3d&#x2F;latest&#x2F;avian3d&#x2F;collision&#x2F;collider&#x2F;enum.ColliderConstructor.html&quot;&gt;Collider-Konstruktionssystem&lt;&#x2F;a&gt;. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;avian3d&#x2F;latest&#x2F;avian3d&#x2F;collision&#x2F;collider&#x2F;enum.ColliderConstructor.html#variant.ConvexDecompositionWithConfig&quot;&gt;&amp;lt;3 ConvexDecompositionWithConfig&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ein kleines Problem gab es dennoch: Avian hat keinen eigenen &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;rapier.rs&#x2F;docs&#x2F;user_guides&#x2F;bevy_plugin&#x2F;character_controller&quot;&gt;Character Controller&lt;&#x2F;a&gt; wie Rapier. Nach einem Blick in die &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;avian3d&#x2F;latest&#x2F;avian3d&#x2F;#frequently-asked-questions&quot;&gt;Avian-FAQ&lt;&#x2F;a&gt; bin ich aber bei &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;idanarye&#x2F;bevy-tnua&quot;&gt;bevy_tnua&lt;&#x2F;a&gt; gelandet – eine ausgezeichnete Alternative.&lt;&#x2F;p&gt;
&lt;p&gt;Zeitlich hat der gesamte Port einen Tag gedauert. Ungefähr:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;2 Stunden für alle Collider und das Feintuning.&lt;&#x2F;li&gt;
&lt;li&gt;3 Stunden, um das Raycasting auszutauschen und die &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;avian3d&#x2F;latest&#x2F;avian3d&#x2F;collision&#x2F;collider&#x2F;struct.CollisionLayers.html&quot;&gt;Collision Layers&lt;&#x2F;a&gt; einzurichten. (Mit Enums sehr angenehm.)&lt;&#x2F;li&gt;
&lt;li&gt;3 Stunden, um die komplette Spielersteuerung auf tnua umzuziehen.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Dank der Arbeit von &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Jondolf&quot;&gt;Joona Aalto&lt;&#x2F;a&gt; bin ich sehr zufrieden mit Avian. Ich unterstütze ihn gern – und wenn ihr Avian mögt, könnt ihr das auch überlegen.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;allgemeine-quality-of-life&quot;&gt;Allgemeine Quality of Life&lt;&#x2F;h1&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;jump.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;jump.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Wir können jetzt springen!&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Da tnua das Implementieren eines Sprungs einfach gemacht hat, habe ich ihn direkt eingebaut. Mit einer leicht umfunktionierten Animation – mehr dazu später – war das schnell erledigt.&lt;&#x2F;p&gt;
&lt;div style=&quot;display: flex; flex-direction: column; align-items: center; margin: 1rem 0;&quot;&gt;
  &lt;figure style=&quot;width: 100%; max-width: 1200px; margin: 0;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;build_cost_menu.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;build_cost_menu.webp&quot; type=&quot;image&#x2F;webp&quot;&gt;
      &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;build_cost_menu.webp&quot; alt=&quot;Die Baukosten werden jetzt direkt im Menü angezeigt.&quot; style=&quot;width: 100%; height: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
    &lt;&#x2F;picture&gt;
    
    &lt;figcaption style=&quot;margin-top: 0.5rem; text-align: left;&quot;&gt;Die Baukosten werden jetzt direkt im Menü angezeigt.&lt;&#x2F;figcaption&gt;
    
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Hier kommt die erste große Verbesserung basierend auf Feedback. Es wurde sehr deutlich, dass die Kosten von Gebäuden klar und zu jedem Zeitpunkt sichtbar sein müssen: davor, währenddessen und wenn man etwas nicht bauen kann. Jetzt sieht man beim Hovern oder Auswählen eines Gebäudes sofort die Kosten.&lt;&#x2F;p&gt;
&lt;div style=&quot;display: flex; flex-direction: column; align-items: center; margin: 1rem 0;&quot;&gt;
  &lt;figure style=&quot;width: 100%; max-width: 1200px; margin: 0;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;build_cost_placement.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;build_cost_placement.webp&quot; type=&quot;image&#x2F;webp&quot;&gt;
      &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;build_cost_placement.webp&quot; alt=&quot;Beim Platzieren sieht man die Kosten plus vorhandene Ressourcen.&quot; style=&quot;width: 100%; height: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
    &lt;&#x2F;picture&gt;
    
    &lt;figcaption style=&quot;margin-top: 0.5rem; text-align: left;&quot;&gt;Beim Platzieren sieht man die Kosten plus vorhandene Ressourcen.&lt;&#x2F;figcaption&gt;
    
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;maschinenproduktivitat&quot;&gt;Maschinenproduktivität&lt;&#x2F;h1&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;mining_machine.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;mining_machine.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Die Mining-Maschine zeigt jetzt ideale und reale Outputs.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Hier steckt der Großteil der Arbeit drin. Durch das Feedback von Factory-Game-Fans wurde mir schmerzhaft bewusst, dass ich einen absolut grundlegenden Punkt des Genres vergessen hatte: Spieler müssen klar sehen können, was verbraucht wird, was erzeugt wird und wo sie optimieren können.&lt;&#x2F;p&gt;
&lt;p&gt;Ich spiele selbst gern &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.satisfactorygame.com&#x2F;&quot;&gt;Satisfactory&lt;&#x2F;a&gt; und &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;factorio.com&#x2F;&quot;&gt;Factorio&lt;&#x2F;a&gt;. Keine Ahnung, wie ich das übersehen habe. Aber jetzt ist es drin.&lt;&#x2F;p&gt;
&lt;p&gt;Und: Es war ein Vergnügen, das mit Bevys ECS-System umzusetzen. Für solche Berechnungen gibt es schlicht keinen besseren Ansatz. Man fragt einfach alle Maschinen ab, deren Werte aktualisiert werden müssen, verarbeitet sie parallel und macht weiter. Wunderbar.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;furnace.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-11-16&#x2F;furnace.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Der Ofen zeigt klar, was er wirklich braucht und was er produzieren sollte.&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h1 id=&quot;einstellungen&quot;&gt;Einstellungen&lt;&#x2F;h1&gt;
&lt;p&gt;Ein weiterer Grund, warum ich auf Bevy 0.17 gewartet habe, war das &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;examples&#x2F;ui-user-interface&#x2F;standard-widgets-observers&#x2F;&quot;&gt;überarbeitete UI-System mit Observers&lt;&#x2F;a&gt;. Damit konnte ich weg von Buttons und hin zu Slidern – deutlich sauberer. Mit Observers fühlt sich UI-Programmierung weniger sperrig an. Die Einstellungsseite ist jetzt viel besser.&lt;&#x2F;p&gt;
&lt;p&gt;Eine wichtige Verbesserung betrifft die Controller-Anzeige. Zuvor wurden Tastatur- und Maussteuerungen angezeigt, außer man hatte einen Xbox- oder Steam-Controller eingesteckt. Das führte zu Situationen, in denen Spieler nicht die passenden Hinweise sahen. Jetzt zeigt das Spiel standardmäßig an, was zuletzt genutzt wurde. Sehr viel besser.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-11-16&#x2F;graphics_settings.webp&quot; alt=&quot;Grafikeinstellungen mit neuen Qualitätsslidern, Laubdetail-Umschalter und Render-Scale-Anzeige.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-11-16&#x2F;audio_settings.webp&quot; alt=&quot;Audioeinstellungen mit getrennten Slidern für Ambient, UI, Musik und Maschinen sowie Auswahl des Ausgabegeräts.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-11-16&#x2F;control_settings.webp&quot; alt=&quot;Steuerungsübersicht mit Rebinding für Tastatur&#x2F;Maus, Controller-Prompts und Steam-Deck-Preset.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;website-uberarbeitung&quot;&gt;Website-Überarbeitung&lt;&#x2F;h1&gt;
&lt;p&gt;Noch im Aufbau, aber ein klares Feedback war, dass die Website kaum erklärt, worum es im Spiel überhaupt geht. Eine reine Textseite ist für ein Videospiel eher unüblich. Daher gibt es jetzt eine animierte Startseite.&lt;&#x2F;p&gt;
&lt;p&gt;In den kommenden Wochen werde ich weitere Bereiche mit mehr Medien und Informationen ergänzen. Dranbleiben lohnt sich.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Viele Quality-of-Life-Verbesserungen basierend auf viel Feedback, und es kommt noch mehr. Ich bin ziemlich zufrieden damit und freue mich auf die nächsten Features.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Steam-Next-Fest-Nachklang</title>
          <pubDate>Tue, 21 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-10-21/</link>
          <guid>https://exofactory.net/de/blog/2025-10-21/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-10-21/">&lt;h1 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h1&gt;
&lt;p&gt;Das Steam Next Fest war ein Erfolg – wenn auch ein stressiger. Die gute Nachricht: Über Steam, Discord und andere Kanäle kam massenhaft Feedback, und viele Edge-Case-Bugs konnten schnell gefixt werden.&lt;&#x2F;p&gt;
&lt;p&gt;Ich wusste nicht, dass so viele Tastaturen dem Betriebssystem melden, sie seien Xbox-HID-Geräte. Verrückt.&lt;&#x2F;p&gt;
&lt;p&gt;Auf Basis all der Erkenntnisse kann ich den Fahrplan fürs Spiel nun klarer definieren.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;next-fest-ergebnisse&quot;&gt;Next-Fest-Ergebnisse&lt;&#x2F;h1&gt;
&lt;h2 id=&quot;viel-gutes&quot;&gt;Viel Gutes&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Zahlreiche Bugs wurden entdeckt und fixiert. Vielen Dank an alle, die sie gemeldet haben.&lt;&#x2F;li&gt;
&lt;li&gt;Das Spiel hat enorm viel Interesse geweckt, sowohl bei Wunschlisten als auch bei Spielzeit.&lt;&#x2F;li&gt;
&lt;li&gt;Es gab viele Ideen, wie man Dinge verbessern oder reparieren kann.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;weniger-gutes&quot;&gt;Weniger Gutes&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;Ich habe die Hardwarevielfalt außerhalb der Soft-Launch-Tester unterschätzt. Einige Spieler:innen konnten das Spiel erst starten, nachdem mehrere Hotfixes veröffentlicht waren.&lt;&#x2F;li&gt;
&lt;li&gt;Ich dachte, das Spiel wäre vollständig barrierefrei für Geräte und Controller – das Feedback zeigte, dass noch Lücken bestehen.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;neuer-zeitplan&quot;&gt;Neuer Zeitplan&lt;&#x2F;h1&gt;
&lt;p&gt;Mit dem Demo-Feedback, dem Rat erfahrener Entwickler:innen und dem Input von Leuten, die erfolgreiche Spiele produzieren, ergibt eine Anpassung des Release-Plans Sinn.&lt;&#x2F;p&gt;
&lt;p&gt;Q4 2025 war schlicht unrealistisch. Punkt.&lt;&#x2F;p&gt;
&lt;p&gt;Also braucht es einen neuen Plan:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Eine deutlich funktionsreichere und polierte Demo veröffentlichen, die sich für ein Pitch-Deck eignet und die Zielqualität zeigt.&lt;&#x2F;li&gt;
&lt;li&gt;Prüfen, wie die weitere Finanzierung aussehen kann – etwa Kickstarter, Investment oder Zusammenarbeit mit einem Publisher.&lt;&#x2F;li&gt;
&lt;li&gt;Den Full Release für Ende 2026 anpeilen.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Wie jemand einmal sagte: &lt;em&gt;„Ein verschobenes Spiel wird irgendwann gut, ein übereilt veröffentlichtes bleibt für immer schlecht.“&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ob Meme oder nicht – ich will ein Spiel veröffentlichen, auf das ich stolz bin.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Ich lerne ständig dazu – sowohl beim Spiel als auch bei meiner Sicht auf die Branche. Next Fest und all die Menschen, die sich gemeldet haben, haben mir unglaublich viel beigebracht. Dadurch wird das Spiel besser. Spannende Zeiten stehen bevor – jetzt gibt es einen Berg Feedback, den ich angehen kann.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Demo-Release und Feinschliff</title>
          <pubDate>Tue, 07 Oct 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-10-07/</link>
          <guid>https://exofactory.net/de/blog/2025-10-07/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-10-07/">&lt;h1 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h1&gt;
&lt;p&gt;Es ist viel passiert, aber das Wichtigste: Die Demo wurde als Soft-Launch auf Steam veröffentlicht – pünktlich zum Steam Next Fest. Du kannst sie über den Link am Ende dieses Beitrags laden. Es gibt Builds für Linux und Windows.&lt;&#x2F;p&gt;
&lt;p&gt;Die Arbeit dafür war enorm, und hier fasse ich einiges davon zusammen.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;steam-next-fest&quot;&gt;Steam Next Fest&lt;&#x2F;h2&gt;
&lt;div style=&quot;display: flex; flex-direction: column; align-items: center; margin: 1rem 0;&quot;&gt;
  &lt;figure style=&quot;width: 100%; max-width: 1200px; margin: 0;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-10-07&#x2F;demo_steam.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-10-07&#x2F;demo_steam.webp&quot; type=&quot;image&#x2F;webp&quot;&gt;
      &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-10-07&#x2F;demo_steam.webp&quot; alt=&quot;Der hübsche Demo-Download-Button.&quot; style=&quot;width: 100%; height: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
    &lt;&#x2F;picture&gt;
    
    &lt;figcaption style=&quot;margin-top: 0.5rem; text-align: left;&quot;&gt;Der hübsche Demo-Download-Button.&lt;&#x2F;figcaption&gt;
    
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Die große Neuigkeit: Wir machen offiziell beim Steam Next Fest im Oktober mit. Alles ist eingerichtet und genehmigt. Der Prozess war überraschend schwierig und deutlich komplizierter, als ich dachte. Es reicht eben nicht, einfach eine &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;Executable_and_Linkable_Format&quot;&gt;ELF&lt;&#x2F;a&gt;- oder &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;.exe&quot;&gt;.exe&lt;&#x2F;a&gt;-Datei hochzuladen. Man muss eine Menge &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;partner.steamgames.com&#x2F;doc&#x2F;sdk&#x2F;uploading#Introduction&quot;&gt;Steam-spezifischer Tools&lt;&#x2F;a&gt; verwenden – immerhin laufen sie nativ auf Linux. Aber es ist viel zu lernen, besonders wenn man sich nur einen Tag zum Verpacken und Hochladen gegeben hat.&lt;&#x2F;p&gt;
&lt;p&gt;Mein Tipp an alle Programmierer:innen, die zu Game-Devs werden: Plant fürs Packaging mehr Zeit ein, als ihr meint zu brauchen. Für mich war ein Steam-Build härter vorzubereiten als ein &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;RPM_Package_Manager&quot;&gt;RPM&lt;&#x2F;a&gt;- oder &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;Deb_(Dateiformat)&quot;&gt;DEB&lt;&#x2F;a&gt;-Paket.&lt;&#x2F;p&gt;
&lt;p&gt;Die gute Nachricht: Die Deadline wurde gehalten – knapp, aber geschafft.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;testpannen&quot;&gt;Testpannen&lt;&#x2F;h2&gt;
&lt;p&gt;Damit sind wir beim nächsten Punkt. Falls du dich für Alpha&#x2F;Beta-Tests angemeldet hast: Du wurdest nicht vergessen. Durch&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;die ungeplanten Verzögerungen bei der Steam-Freigabe,&lt;&#x2F;li&gt;
&lt;li&gt;die unerwarteten Schwierigkeiten beim Packaging und&lt;&#x2F;li&gt;
&lt;li&gt;die vielen „Blocker“-Bugs, die ich auf Zuruf von Freund:innen und Familie gefixt habe,&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;konnte ich keine frühen Test-Keys hochladen, bevor die Demo fürs Next Fest rausmusste.&lt;&#x2F;p&gt;
&lt;p&gt;Sorry dafür. Künftig strukturiere ich den Entwicklungsprozess klarer – mit gezielten Phasen für Features, Tests und Polishing. Für das Hauptspiel wird es regelmäßige, besser planbare Testzeiträume geben.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;animationen-mechaniken&quot;&gt;Animationen &amp;amp; Mechaniken&lt;&#x2F;h2&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-10-07&#x2F;belt_loop.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-10-07&#x2F;belt_loop.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Lifter, Bänder, Splitter und Merger&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Hier landete der meiste Crunch. Ein Nachteil von ECS: Unabhängige Animationen zu synchronisieren ist knifflig. Es fühlt sich an, als würde die Welt nach einer &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;Psychophysischer_Parallelismus&quot;&gt;Leibnizschen prästabilierten Harmonie&lt;&#x2F;a&gt; laufen – keine expliziten Verbindungen, nur Async-Systeme, die so orchestriert werden, dass Illusion zur Realität wird.&lt;&#x2F;p&gt;
&lt;p&gt;Kurz gesagt: Das Spiel verhält sich jetzt wie ein echtes Spiel – mit Animationen, Sound und allem, was dazugehört.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;demo-veroffentlicht-trailer&quot;&gt;Demo veröffentlicht + Trailer&lt;&#x2F;h2&gt;
&lt;p&gt;Der spaßige Teil: Auch wenn noch keine Mails rausgingen, lässt sich die Demo schon herunterladen und spielen. Vielleicht schaffe ich noch einen kleinen Bugfix-Build vor dem offiziellen Start des Next Fest. Wenn dir Fehler auffallen, melde sie gern im &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;1393503401073180803&#x2F;1400190777136644157&quot;&gt;Exofactory-Bugreport-Channel auf Discord&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Außerdem gibt es einen kurzen Gameplay-Trailer! Mangels verifiziertem YouTube-Account läuft er direkt auf der Steam-Seite.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;roadmap&quot;&gt;Roadmap&lt;&#x2F;h2&gt;
&lt;p&gt;Die Demo ist nur der Anfang. Für das vollständige Spiel stehen große Verbesserungen an. Ich bin offen für Vorschläge – poste sie gern im &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;discord.com&#x2F;channels&#x2F;1393503401073180803&#x2F;1400190867280629820&quot;&gt;Feature-Suggestion-Channel auf Discord&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Eine ausführlichere Roadmap folgt bald auf dieser Website. Die Listen hier sind vorläufig und sehr unvollständig.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bald&quot;&gt;Bald&lt;&#x2F;h3&gt;
&lt;div style=&quot;display: flex; flex-direction: column; align-items: center; margin: 1rem 0;&quot;&gt;
  &lt;figure style=&quot;width: 100%; max-width: 1200px; margin: 0;&quot;&gt;
    &lt;picture&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-10-07&#x2F;gamepad.avif&quot; type=&quot;image&#x2F;avif&quot;&gt;
      &lt;source srcset=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-10-07&#x2F;gamepad.webp&quot; type=&quot;image&#x2F;webp&quot;&gt;
      &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-10-07&#x2F;gamepad.webp&quot; alt=&quot;Barrierefreiheit zuerst: Steam Deck und Controller&quot; style=&quot;width: 100%; height: auto;&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot;&gt;
    &lt;&#x2F;picture&gt;
    
    &lt;figcaption style=&quot;margin-top: 0.5rem; text-align: left;&quot;&gt;Barrierefreiheit zuerst: Steam Deck und Controller&lt;&#x2F;figcaption&gt;
    
  &lt;&#x2F;figure&gt;
&lt;&#x2F;div&gt;
&lt;ul&gt;
&lt;li&gt;Vollständige, barrierefreie Steam-Deck- und Controller-Unterstützung.&lt;&#x2F;li&gt;
&lt;li&gt;Überarbeitung von Terrain- und Vegetations-Assets.&lt;&#x2F;li&gt;
&lt;li&gt;Massive Optimierungsrunde.&lt;&#x2F;li&gt;
&lt;li&gt;Erste verzweigende Tech-Tree-Pfade basierend auf deinen Entscheidungen.&lt;&#x2F;li&gt;
&lt;li&gt;Öffentliches Wiki – wie es sich für ein Fabrikspiel gehört.&lt;&#x2F;li&gt;
&lt;li&gt;Weitere Arbeit am „richtigen“ Terrain.&lt;&#x2F;li&gt;
&lt;li&gt;Echter Energieverbrauch.&lt;&#x2F;li&gt;
&lt;li&gt;Flüssigkeiten.&lt;&#x2F;li&gt;
&lt;li&gt;Deutsch.&lt;&#x2F;li&gt;
&lt;li&gt;Tests von ELF-Binaries für &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;AArch64&quot;&gt;aarch64&lt;&#x2F;a&gt; und &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;RISC-V&quot;&gt;RISC-V&lt;&#x2F;a&gt;, sofern möglich.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;spater&quot;&gt;Später&lt;&#x2F;h3&gt;
&lt;ul&gt;
&lt;li&gt;Spiel-Binaries für mehr &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doc.rust-lang.org&#x2F;beta&#x2F;rustc&#x2F;platform-support.html&quot;&gt;Rust Tier 1- und Tier 2-Plattformen&lt;&#x2F;a&gt;. (Wer hilft beim Test auf den BSDs?)&lt;&#x2F;li&gt;
&lt;li&gt;Steam-freie Spieloption à la &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.factorio.com&#x2F;&quot;&gt;Factorio&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Offiziell unterstützte &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;flathub.org&#x2F;&quot;&gt;Flathub&lt;&#x2F;a&gt;-&#x2F;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;Flatpak&quot;&gt;Flatpak&lt;&#x2F;a&gt;-Images.&lt;&#x2F;li&gt;
&lt;li&gt;Laufende Arbeit am „richtigen“ Terrain.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Die Demo ist draußen, und ich freue mich darauf, am vollständigen Spiel weiterzuarbeiten. Ich bin gespannt, was ihr daraus macht.&lt;&#x2F;p&gt;
&lt;div class=&quot;cta-buttons&quot; style=&quot;margin: 1.5rem 0;&quot;&gt;
  &lt;a href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;3615720&#x2F;Exofactory&#x2F;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; class=&quot;steam-button&quot;&gt;
    &lt;div class=&quot;steam-button-content&quot;&gt;
      &lt;img src=&quot;&#x2F;media&#x2F;home&#x2F;steam_logo_white.svg&quot; alt=&quot;Steam&quot; class=&quot;steam-logo steam-logo-light&quot;&gt;
      &lt;img src=&quot;&#x2F;media&#x2F;home&#x2F;steam_logo_black.svg&quot; alt=&quot;Steam&quot; class=&quot;steam-logo steam-logo-dark&quot;&gt;
      &lt;span class=&quot;wishlist-text&quot;&gt;Demo auf Steam&lt;&#x2F;span&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Private Alpha, Steam &amp; Kernfunktionen</title>
          <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-09-08/</link>
          <guid>https://exofactory.net/de/blog/2025-09-08/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-09-08/">&lt;h1 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h1&gt;
&lt;p&gt;In den letzten 30 Tagen hat das Spiel den Sprung von „ein bisschen Sorge“ zurück auf Kurs geschafft. Wir planen, beim Steam Next Fest im Oktober dabei zu sein! (Mehr unten.) Der Großteil der Arbeit betraf fundamentale Systeme – viel Code, wenig neue Optik. Aber der Code ist jetzt in einem großartigen Zustand. Nächsten Monat sollte das Demo voller neuer Visuals und Sounds sein. Der September steht im Zeichen von Grafik, Feinschliff und Tests. Spannende Zeiten!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;private-alpha&quot;&gt;Private Alpha&lt;&#x2F;h2&gt;
&lt;p&gt;In der zweiten Monatshälfte möchte ich eine kleine, fokussierte private Alpha zum Testen veröffentlichen. Wenn du Interesse hast, kannst du dich auf der &lt;a href=&quot;&#x2F;&quot;&gt;Homepage&lt;&#x2F;a&gt; anmelden – dort findest du einen Button dafür.&lt;&#x2F;p&gt;
&lt;p&gt;Nur zur Warnung: Das wird eine echte technische Alpha mit potenziell vielen Bugs, UI-&#x2F;UX-Problemen und Playability-Schmerzen. Wenn du einfach nur spielen möchtest, warte lieber auf das Steam Next Fest. Wenn du Lust hast zu debuggen und Feedback zu geben, bist du herzlich willkommen.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;steam-next-fest&quot;&gt;Steam Next Fest&lt;&#x2F;h2&gt;
&lt;p&gt;Wir liegen im Zeitplan und planen fest mit dem Steam Next Fest im Oktober. Die Freigabe ist da – wir müssen nur bis Ende September den finalen Demobuild einreichen.&lt;&#x2F;p&gt;
&lt;p&gt;Geplant ist eine kostenlose Vertical-Slice-Demo. Ziel: Lass die Leute eine Fabrik nach ihren Vorstellungen bauen und schau zu, wie sich basierend darauf die Story verändert. Ich peile eine kurze Demo an – je nach Bauweise soll sich Stimmung, Ton und Richtung aber unterscheiden. Ohne Skripts sollte jede Session zumindest ein wenig, wahrscheinlich sogar stark variieren.&lt;&#x2F;p&gt;
&lt;p&gt;Das Ganze steuert der emotionale Kern – und der ist ziemlich cool.&lt;&#x2F;p&gt;
&lt;p&gt;Zur Einordnung: Die Demo wird eher kurz (ca. 10–15 Minuten bei schnellem Spiel). Das vollständige Spiel entsteht gemeinsam mit der Community im Early Access, mit einem Full Release irgendwann 2026.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;forderband-grundlagen-logistik&quot;&gt;Förderband-Grundlagen &amp;amp; Logistik&lt;&#x2F;h2&gt;
&lt;p&gt;Der Löwenanteil der Entwicklung steckte hier drin. Ein Fabrikspiel ohne robustes, performantes Band- und Logistiksystem existiert schlicht nicht.&lt;&#x2F;p&gt;
&lt;p&gt;Ich denke, das habe ich jetzt. Erst seit dieser Arbeit verstehe ich, warum andere Devs über den Schmerz von Förderband-Entwicklung klagen. Ich gehöre jetzt offiziell dazu.&lt;&#x2F;p&gt;
&lt;p&gt;Der Vorteil: Dank Bevys ECS-Architektur bekomme ich quasi gratis Performance. Alles läuft parallel und nutzt alle CPU-Kerne, damit deine Fabrik smooth durchzieht. Wenn du die Grafik extrem aufdrehst, kannst du die FPS sicher drücken, aber die Größe der Fabrik allein sollte nie zum Problem werden.&lt;&#x2F;p&gt;
&lt;p&gt;Hier folgt eine grobe technische Erklärung. Überspring sie gern, wenn du magst.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-09-08&#x2F;belt_connect.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-09-08&#x2F;belt_connect.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Förderbänder in Aktion&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h3 id=&quot;wie-forderbander-wirklich-funktionieren&quot;&gt;Wie Förderbänder wirklich funktionieren&lt;&#x2F;h3&gt;
&lt;p&gt;Bänder organisieren sich automatisch in gerichtete „Segmente“. Segmente bestehen aus Ketten von Bändern zwischen allem, was Items ausgibt, und allem, was welche annimmt. Jede Band-Entität bekommt eine Komponente, die markiert, zu welchem Segment sie gehört. Das passiert über Observer und nur beim Platzieren&#x2F;Entfernen der Bänder.&lt;&#x2F;p&gt;
&lt;p&gt;Zur Klarstellung: Es gibt nirgendwo eine Linked List. Wir taggen schlicht die Band-Entities mit Segment-Komponenten.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;verbindungen-und-segmentbildung&quot;&gt;Verbindungen und Segmentbildung&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-09-08&#x2F;working_rotation.webp&quot; alt=&quot;Fabricators in 90°-Rotationen. Große Debug-Würfel markieren Ein- und Ausgänge.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Gebäude und Bänder deklarieren ihre Ein- und Ausgänge auf dem Grid. Beim Platzieren schaut der IO-Punkt ein Feld in Blickrichtung und verbindet sich nur, wenn der Nachbar kompatibel ausgerichtet ist. Bei Verbindung fügt das Gebäude dem Segment eine Quelle oder Senke hinzu. Oben die großen Debug-Würfel zeigen die überwachten Tiles.&lt;&#x2F;p&gt;
&lt;p&gt;Während du Bänder oder Gebäude platzierst, ordne ich die Bänder von echtem Anfang bis Ende neu, damit die Kette kohärent bleibt, und baue einen „Visual Path“-Spline direkt aus den Weltkoordinaten jedes Bandes. Entfernst du ein Band, berechne ich die verbundenen Gruppen neu, splitte Segmente bei Bedarf und weise Gebäuden die richtigen neuen Segmente zu.&lt;&#x2F;p&gt;
&lt;p&gt;Das waren gut 95 % der Arbeit.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;item-bewegung&quot;&gt;Item-Bewegung&lt;&#x2F;h3&gt;
&lt;p&gt;Items bewegen sich entlang eines stückweise zusammengesetzten Satzes von &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;docs.rs&#x2F;bevy&#x2F;latest&#x2F;bevy&#x2F;prelude&#x2F;struct.CubicHermite.html&quot;&gt;Cubic-Hermite-Splines&lt;&#x2F;a&gt;, die aus den Band-Positionen erzeugt werden. Das ist super effizient, da alle Splines vorab berechnet sind. Wir verschieben die Items nur mit einem Timer, der ebenfalls vorab anhand Segmentlänge und Bandgeschwindigkeit ermittelt wird.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;kapazitat-durchsatz-und-backpressure&quot;&gt;Kapazität, Durchsatz und Backpressure&lt;&#x2F;h3&gt;
&lt;p&gt;Kapazität wurde nach dem „as simple as possible“-Prinzip gelöst: Eine Band-Entität = ein Item. Ein Segment mit 20 Band-Entities fasst 20 Items. Einfügen klappt nur, wenn Platz ist. Maschinen mit Output-Puffer schieben Items ins Segment, sobald Luft ist. Ist das Segment voll, füllt sich der Puffer und die Produktion pausiert auf natürliche Weise; sobald die Linie frei wird, läuft alles automatisch weiter. Ähnlich funktioniert es bei Inputs.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;performance&quot;&gt;Performance&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-09-08&#x2F;working_input_output.webp&quot; alt=&quot;Gebäude mit markierten Ein- und Ausgängen.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Alles basiert auf ECS und läuft komplett parallel. Weil Segmente isoliert sind und Bevy großartig ist, kann ich einen Async-Pool aufsetzen, der so breit wie deine CPU-Kerne ist. Segmente verarbeiten ihre Items und schicken sie über das beziehungsbasierte Source&#x2F;Sink-System weiter. Oben siehst du Gebäude mit hervorgehobenen IOs.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;neue-gebaude-ressourcen&quot;&gt;Neue Gebäude &amp;amp; Ressourcen&lt;&#x2F;h2&gt;
&lt;p&gt;Seit dem letzten Dev-Blog kamen einige neue Gebäude hinzu – alle ziemlich spannend.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;mining-platform-v1&quot;&gt;Mining Platform v1&lt;&#x2F;h3&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-09-08&#x2F;mining_machine.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-09-08&#x2F;mining_machine.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Die Mining Platform in Aktion&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Das ist der erste Rohstoff-Extraktor für Spielende. Er holt Erze vom Planeten, wie es die Menschen einst beigebracht haben.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ancient-ai-core&quot;&gt;Ancient AI Core&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-09-08&#x2F;LostAICore_04.webp&quot; alt=&quot;Der uralte KI-Kern mit Tür und Kommunikationsantennen, überwuchert von Moos.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Hier sitzt der Verstand der Spieler-KI. Hier warst du … sehr lange.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sneak-preview-gasforderer&quot;&gt;Sneak Preview: Gasförderer&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-09-08&#x2F;Gas_Extractor_Rig.webp&quot; alt=&quot;Gasförderer in Blender mit zahlreichen technischen Nodes.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Hier ein erster Blick auf den Gas-Extraktor. Nicht alles ist schließlich ein Mineral.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;musik&quot;&gt;Musik&lt;&#x2F;h2&gt;
&lt;p&gt;Ich freue mich riesig über die Zusammenarbeit mit &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.instagram.com&#x2F;kilianliccia&#x2F;&quot;&gt;Repto Eternef&lt;&#x2F;a&gt;. Sie erschaffen großartige Musik fürs Spiel und helfen, die Exofactory-Music-Engine aufzubauen, die wir 2026 vor Release als Open Source veröffentlichen wollen.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dialog-der-emotionale-kern&quot;&gt;Dialog &amp;amp; der emotionale Kern&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-09-08&#x2F;dialogue.webp&quot; alt=&quot;Dialogbox mit Text „I am alone here and things are not as they should be.“&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Nicht zuletzt wurde der emotionale Kern plus Dialogsystem implementiert.&lt;&#x2F;p&gt;
&lt;p&gt;Der emotionale Kern ist das Herzstück von Exofactory. Technisch betrachtet beobachtet er alle Aktionen der Spielenden: jedes Bauen, Zerstören, jede Bewegung, Produktion – wirklich alles. Zusammen mit einem Blick auf das Gesamtbild deiner Fabrik, die Interaktionen der Systeme und fehlende Verbindungen leitet er die Story-Richtung ab.&lt;&#x2F;p&gt;
&lt;p&gt;Ziel ist eine von den Spielenden getriebene Erzählung, allein basierend auf ihrer Fabrik. Ich möchte niemals ein „Wähle Option A oder B“-Popup einsetzen. Das Spiel soll deine Prioritäten kennen, weil es sieht, wie, wo und was du baust.&lt;&#x2F;p&gt;
&lt;p&gt;Am deutlichsten spürst du das durch den inneren Monolog der KI, dem du im Spiel zuhörst. Tonfall, Gedankenrichtung und Inhalt werden vom emotionalen Kern an das Dialogsystem geliefert, das sie anzeigt und vertont. Derzeit evaluiere ich Open-Source-TTS-Systeme, die die vielen, vielen potenziellen Zeilen einsprechen können.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Es gab massive Fortschritte an den Kernsystemen und alles liegt im Plan. Ich bin gespannt, wie Spieler:innen die Systeme nutzen, an denen ich arbeite. :)&lt;&#x2F;p&gt;
&lt;p&gt;Exofactory ist jetzt auf Steam verfügbar! Wenn dich das Spiel interessiert, würde ich mich freuen, wenn du es dort auf die Wunschliste setzt.&lt;&#x2F;p&gt;
&lt;div class=&quot;cta-buttons&quot; style=&quot;margin: 1.5rem 0;&quot;&gt;
  &lt;a href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;3615720&#x2F;Exofactory&#x2F;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; class=&quot;steam-button&quot;&gt;
    &lt;div class=&quot;steam-button-content&quot;&gt;
      &lt;img src=&quot;&#x2F;media&#x2F;home&#x2F;steam_logo_white.svg&quot; alt=&quot;Steam&quot; class=&quot;steam-logo steam-logo-light&quot;&gt;
      &lt;img src=&quot;&#x2F;media&#x2F;home&#x2F;steam_logo_black.svg&quot; alt=&quot;Steam&quot; class=&quot;steam-logo steam-logo-dark&quot;&gt;
      &lt;span class=&quot;wishlist-text&quot;&gt;Auf Steam vormerken&lt;&#x2F;span&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
</description>
      </item>
      <item>
          <title>Animation, Bewegung &amp; Terrain v3</title>
          <pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-08-07/</link>
          <guid>https://exofactory.net/de/blog/2025-08-07/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-08-07/">&lt;p&gt;Exofactory ist jetzt auf Steam verfügbar! Wenn dich das Spiel interessiert, freue ich mich, wenn du es dort auf die Wunschliste setzt.&lt;&#x2F;p&gt;
&lt;div class=&quot;cta-buttons&quot; style=&quot;margin: 1.5rem 0;&quot;&gt;
  &lt;a href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;3615720&#x2F;Exofactory&#x2F;&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; class=&quot;steam-button&quot;&gt;
    &lt;div class=&quot;steam-button-content&quot;&gt;
      &lt;img src=&quot;&#x2F;media&#x2F;home&#x2F;steam_logo_white.svg&quot; alt=&quot;Steam&quot; class=&quot;steam-logo steam-logo-light&quot;&gt;
      &lt;img src=&quot;&#x2F;media&#x2F;home&#x2F;steam_logo_black.svg&quot; alt=&quot;Steam&quot; class=&quot;steam-logo steam-logo-dark&quot;&gt;
      &lt;span class=&quot;wishlist-text&quot;&gt;Auf Steam vormerken&lt;&#x2F;span&gt;
    &lt;&#x2F;div&gt;
  &lt;&#x2F;a&gt;
&lt;&#x2F;div&gt;
&lt;h1 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h1&gt;
&lt;p&gt;Mehrere große Ziele wurden erreicht: Das Spiel ist animiert, wir haben erste Ressourcen und das Terrain-System nähert sich dem Status „fertig“. Es war nicht die produktivste Periode überhaupt, aber der Kurs stimmt.&lt;&#x2F;p&gt;
&lt;p&gt;Außerdem habe ich auf &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.bornhack.dk&#x2F;bornhack-2025&#x2F;&quot;&gt;Bornhack 2025&lt;&#x2F;a&gt; einen Vortrag über Spieleentwicklung in Bevy mit Rust gehalten. Er ist noch nicht veröffentlicht – sobald das Video online ist, verlinke ich es in einem späteren Dev-Blog.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;animation&quot;&gt;Animation&lt;&#x2F;h1&gt;
&lt;p&gt;Es gibt jetzt Animationen im Spiel! Animationen in Bevy zu lernen hat Spaß gemacht. Der Lebensretter (und enorme Zeitersparnis) war das Bevy-Ökosystem, konkret das hervorragende Bevy&#x2F;Blender-Plugin &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevyskein.dev&#x2F;&quot;&gt;Skein&lt;&#x2F;a&gt; von &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;hachyderm.io&#x2F;@chrisbiscardi&quot;&gt;Chris Biscardi&lt;&#x2F;a&gt;. Er tut unglaublich viel für die Bevy-Community und ich sehe seine Arbeit überall.&lt;&#x2F;p&gt;
&lt;p&gt;Skein ist ein Plugin sowohl für Bevy als auch für Blender und erlaubt 3D-Artists, Bevy-Komponenten (falls dir Bevy neu ist: Komponenten sind quasi Tags) direkt an Teilen eines 3D-Assets zu hinterlegen. Beim Export als glb&#x2F;gltf werden diese Komponenten mit gespeichert.&lt;&#x2F;p&gt;
&lt;p&gt;Auf der Bevy-Seite liest Skein die eingebetteten Komponenten aus und stellt sie im &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;learn&#x2F;quick-start&#x2F;getting-started&#x2F;ecs&#x2F;&quot;&gt;Entity Component System&lt;&#x2F;a&gt; bereit. Das spart massig Zeit und Boilerplate.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-08-07&#x2F;motion_control.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-08-07&#x2F;motion_control.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Programmgesteuerte Steuerung der Lifter-Animation&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Wir nutzen Skein, um Animation-Bones mit Komponenten zu versehen. So lassen sich Animationen programmatisch steuern und auf Spielereignisse reagieren, statt nur stupide Schleifen abzuspielen. Hauptsächlich setzen wir das derzeit bei den Liftern ein, wie oben zu sehen.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-08-07&#x2F;motion_trans.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-08-07&#x2F;motion_trans.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Animationstransitionen&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Zusätzlich verwenden wir Bevy&#x27;s &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;examples&#x2F;animation&#x2F;animation-graph&#x2F;&quot;&gt;Animation-Graph-System&lt;&#x2F;a&gt;. Damit wechseln wir weich von einem Animationszyklus zum anderen – ohne Ruckler oder Artefakte. Im Beispiel geht der Exoframe fließend vom Laufen in den Idle-Zustand über.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;ressourcen&quot;&gt;Ressourcen&lt;&#x2F;h1&gt;
&lt;p&gt;Wir haben nun Ressourcen! Den Anfang machen Eisen und Kupfer. Bald werden Maschinen richtig loslegen.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-08-07&#x2F;copper.webp&quot; alt=&quot;Kupfer-Ressource&quot; &#x2F;&gt;
Hier siehst du Kupfererz und -barren. Davon wird es reichlich geben, unter anderem für stromsparende Kabel.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-08-07&#x2F;iron.webp&quot; alt=&quot;Eisen-Ressource&quot; &#x2F;&gt;
Und hier Eisen. Ich liebe die Details auf der Oberseite der Barren. Da wir als KI spielen, kann ich mir vorstellen, dass die KI den Look ebenfalls feiert.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;terrain-v3&quot;&gt;Terrain v3&lt;&#x2F;h1&gt;
&lt;p&gt;Die Bevy-Welt ist voll von halbgar gepflegten und schlecht dokumentierten Terrain-&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;Level_of_Detail&quot;&gt;Level-of-Detail-Systemen (LoD)&lt;&#x2F;a&gt;. Es gibt unzählige Ansätze, aber ich habe keinen gefunden, der gepflegt, funktionsreich und ordentlich dokumentiert ist. Deshalb hat Exofactory jetzt eine eigene LoD-Implementierung. Noch relativ simpel, aber sie erfüllt meine Basisanforderungen:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Terrain abhängig von der Position &lt;em&gt;mehrerer&lt;&#x2F;em&gt; Kameras ein- und ausblenden.&lt;&#x2F;li&gt;
&lt;li&gt;Höher- und niedrigauflösende Meshes sowie Texturen anhand dieser Kameras austauschen.&lt;&#x2F;li&gt;
&lt;li&gt;LoD auch für Details wie Vegetation oder Steine handhaben.&lt;&#x2F;li&gt;
&lt;li&gt;Das Ganze performant und Bevy-nativ im ECS umsetzen.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-08-07&#x2F;level_of_detail.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-08-07&#x2F;level_of_detail.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Tests des Level-of-Detail-Systems&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Oben siehst du das Testterrain, mit dem ich das System geprüft habe: Grün markiert die Kachel unter der aktiven Kamera, Gelb die höher aufgelösten Tiles, Rot die niedrigeren – und das entfernte Rot wird despawnt.&lt;&#x2F;p&gt;
&lt;p&gt;Das ist eine deutlich stärkere Grundlage für Terrain, auch wenn viel Arbeit aus früheren Versionen neu geschrieben werden musste. Gute Nachricht: Terrain v3 lässt sich hervorragend auf Ästhetik oder Performance abstimmen. Selbst auf meinem alten 11th-Gen-Intel-Laptop mit iGPU lief die volle Sichtweite bei 60fps. Klar, das kann sich ändern, wenn mehr Systeme hinzukommen.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-08-07&#x2F;terrain_v3_with_color.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-08-07&#x2F;terrain_v3_with_color.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Terrain v3 nur mit Grundfarben&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Hier eine weiterentwickelte (weiterhin texturlose und noch leere) Version des Terrain-v3-Systems mit kompletter LoD-Funktionalität. Texturen und Details kommen später per Shader auf der GPU – die Grundfarben geben schon eine Idee, wohin es stilistisch geht. Sobald wir Terrain-Details ergänzen, wird das richtig gut aussehen.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;In dem Zeitraum hätte ich gern mehr geschafft. Trotzdem war alles, was fertig wurde, sehr wirkungsvoll: Das Spiel ist spielbarer – und wichtiger in dieser Phase – besser testbar. Keine Ruckler mehr beim Überqueren von Terrain-Kacheln. Alles wirkt weich und angenehm. Und die Animationen bringen richtig Leben in die zuvor statische Welt.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Terrain, Animationen und jede Menge Fortschritt</title>
          <pubDate>Sun, 06 Jul 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-07-06/</link>
          <guid>https://exofactory.net/de/blog/2025-07-06/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-07-06/">&lt;p&gt;&lt;strong&gt;UPDATE:&lt;&#x2F;strong&gt; Wir wurden freigeschaltet – Exofactory ist jetzt &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;store.steampowered.com&#x2F;app&#x2F;3615720&#x2F;Exofactory&#x2F;&quot;&gt;auf Steam verfügbar&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h1&gt;
&lt;p&gt;Der vergangene Monat war voller Fortschritte. Das Terrain wurde komplett überarbeitet (mehr dazu gleich), dank &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;julef.myportfolio.com&#x2F;&quot;&gt;Julef&lt;&#x2F;a&gt; gibt es zahlreiche animierte 3D-Assets, und alles ist vorbereitet, um auf Steam präsent zu sein.&lt;&#x2F;p&gt;
&lt;p&gt;Außerdem durfte ich an der großartigen Hacker- und Maker-Konferenz &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;entropia.de&#x2F;GPN23&#x2F;en&quot;&gt;GPN23&lt;&#x2F;a&gt; teilnehmen – eine der chilligsten Veranstaltungen überhaupt (Stimmung, nicht Temperatur). Ich wurde „überredet“, einen Lightning Talk darüber zu halten, wie man Spiele mit Rust und Bevy entwickelt. Falls du Lust hast, kannst du ihn &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;media.ccc.de&#x2F;v&#x2F;gpn23-50-lightning-talks-ii#t=72&quot;&gt;hier anschauen&lt;&#x2F;a&gt;. Das Feedback war so positiv, dass ich bald sogar einen längeren Vortrag auf einem weiteren Event halten werde.&lt;&#x2F;p&gt;
&lt;p&gt;Als Bonus teilt &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;julef.myportfolio.com&#x2F;&quot;&gt;Julef&lt;&#x2F;a&gt; in ihrem ersten Blogbeitrag Einblicke in ihre Arbeit an Exofactory.&lt;&#x2F;p&gt;
&lt;p&gt;Mehr folgt!&lt;&#x2F;p&gt;
&lt;h1 id=&quot;animationen&quot;&gt;Animationen&lt;&#x2F;h1&gt;
&lt;p&gt;Ein riesiger Batzen Arbeit steckt in den Animationen und 3D-Arbeiten von &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;julef.myportfolio.com&#x2F;&quot;&gt;Julef&lt;&#x2F;a&gt;. Ich freue mich unglaublich darauf, sie ins Spiel zu integrieren.&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;wave.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;wave.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Wave-Animation&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;walk.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;walk.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Walk-Animation&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;idle.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;idle.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Idle-Animation&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;scene.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;scene.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
  &lt;figcaption&gt;Szene mit Bändern und Maschinen&lt;&#x2F;figcaption&gt;
  
&lt;&#x2F;figure&gt;
&lt;h1 id=&quot;hinter-den-kulissen-mit-julef&quot;&gt;Hinter den Kulissen mit Julef&lt;&#x2F;h1&gt;
&lt;p&gt;Hallo, hier ist Julija – Art Director und Leiterin des gesamten Art-Teams von Exofactory.&lt;&#x2F;p&gt;
&lt;p&gt;Ich möchte ein kurzes Kunst-Update teilen.&lt;&#x2F;p&gt;
&lt;p&gt;Im letzten Monat haben wir Assets verfeinert und das Terrain weiter verbessert.&lt;&#x2F;p&gt;
&lt;p&gt;Ein Highlight: Der Fabricator hat ein komplettes visuelles Makeover erhalten.&lt;&#x2F;p&gt;
&lt;div style=&quot;display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; margin: 1rem 0; align-items: center;&quot;&gt;
  &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;julef_image1.webp&quot; alt=&quot;Fabricator 1&quot;&gt;
  &lt;img src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;julef_image2.webp&quot; alt=&quot;Fabricator 2&quot;&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Wir haben weitere Bänder der Stufen 1 und 2 ergänzt und ihnen Leben eingehaucht. Es kommt Bewegung ins Spiel!&lt;&#x2F;p&gt;
&lt;figure class=&quot;video-figure&quot;&gt;
  &lt;video class=&quot;looping-video&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;scene.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
    &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;scene.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
  &lt;&#x2F;video&gt;
  
&lt;&#x2F;figure&gt;
&lt;p&gt;Auch der Exoframe wurde dank funktionierendem Rig und Animationen lebendig – großes Danke an &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;vimeo.com&#x2F;1066535461&quot;&gt;Juan&lt;&#x2F;a&gt;, der beim Rig-Aufbau unterstützt und die Animationen erstellt hat!&lt;&#x2F;p&gt;
&lt;div style=&quot;display: grid; grid-template-columns: repeat(3, 1fr); gap: 1rem; margin: 1rem 0; align-items: center;&quot;&gt;
  &lt;div style=&quot;display: flex; flex-direction: column; align-items: center;&quot;&gt;
    &lt;video class=&quot;looping-video&quot; style=&quot;width: 100%;&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
      &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;walk.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
      &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;walk.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
    &lt;&#x2F;video&gt;
    
    &lt;p style=&quot;margin-top: 0.5rem; text-align: center;&quot;&gt;Walk-Animation&lt;&#x2F;p&gt;
    
  &lt;&#x2F;div&gt;
  &lt;div style=&quot;display: flex; flex-direction: column; align-items: center;&quot;&gt;
    &lt;video class=&quot;looping-video&quot; style=&quot;width: 100%;&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
      &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;wave.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
      &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;wave.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
    &lt;&#x2F;video&gt;
    
    &lt;p style=&quot;margin-top: 0.5rem; text-align: center;&quot;&gt;Wave-Animation&lt;&#x2F;p&gt;
    
  &lt;&#x2F;div&gt;
  &lt;div style=&quot;display: flex; flex-direction: column; align-items: center;&quot;&gt;
    &lt;video class=&quot;looping-video&quot; style=&quot;width: 100%;&quot; autoplay muted loop playsinline preload=&quot;auto&quot;&gt;
      &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;idle.av1.mp4&quot; type=&quot;video&#x2F;mp4; codecs=av01.0.05M.08&quot;&gt;
      &lt;source src=&quot;https:&#x2F;&#x2F;exofactory.net&#x2F;media&#x2F;2025-07-06&#x2F;idle.h264.mp4&quot; type=&quot;video&#x2F;mp4; codecs=avc1.4D401E&quot;&gt;
    &lt;&#x2F;video&gt;
    
    &lt;p style=&quot;margin-top: 0.5rem; text-align: center;&quot;&gt;Idle-Animation&lt;&#x2F;p&gt;
    
  &lt;&#x2F;div&gt;
&lt;&#x2F;div&gt;
&lt;p&gt;Wir haben die ersten visuellen Assets für Steam erfolgreich fertiggestellt und eingereicht.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;julef_image7.webp&quot; alt=&quot;Steam-Visuals&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Und hier seht ihr, was hinter den Kulissen passiert.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;julef_image8.webp&quot; alt=&quot;Blick hinter die Kulissen&quot; &#x2F;&gt;
&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;julef_image9.webp&quot; alt=&quot;Blick hinter die Kulissen&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;terrain&quot;&gt;Terrain&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;terrain_basic.webp&quot; alt=&quot;Terrain – Basis&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Hier ist wieder Cait! Wenn das Bild oben Terrain v2 zeigt, seht ihr unten v2.5.&lt;&#x2F;p&gt;
&lt;p&gt;Das Terrain-System wurde überholt. Im neuen System haben wir kein Terrain mehr der Kategorie „Müll“. Ganz zufrieden bin ich trotzdem noch nicht. Wenn das hier Version 2 ist, brauchen wir wahrscheinlich mindestens v4 oder v5, bevor es wirklich gut aussieht. Aber Terrain gehört nun mal zu den härtesten Teilen des Fabrikspiel-Genres. Wenn ich eines Tages damit zufrieden bin, wäre das ein großer Sieg – bis dahin arbeiten wir weiter daran.&lt;&#x2F;p&gt;
&lt;p&gt;Etwas subtiler: Es gibt jetzt ein neues Terrain-Ladesystem. Es streamt Assets und Texturen dynamisch nach, während man durch die Welt navigiert. Das eröffnet spannende Möglichkeiten, beispielsweise später ein Level-of-Detail-System einzubauen.&lt;&#x2F;p&gt;
&lt;h1 id=&quot;steam-screenshots&quot;&gt;Steam-Screenshots&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;1.webp&quot; alt=&quot;Screenshot 1&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Die Screenshots waren der härteste Brocken. Ursprünglich wollte ich unseren Steam-Auftritt &lt;em&gt;viel&lt;&#x2F;em&gt; früher vorbereiten, aber ich bekam die Bilder nicht auf einen Stand, der dem Spiel gerecht wurde.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevy.org&#x2F;&quot;&gt;Bevy&lt;&#x2F;a&gt;, die Engine hinter Exofactory, bietet weder Szenen-Viewer noch Preview oder ein Paint-Tool – gar keine GUI. Also musste ich die Fabriken in den Screenshots &lt;strong&gt;durch echtes Spielen&lt;&#x2F;strong&gt; aufbauen, genau wie jemand, der das Spiel kauft. Da Funktionen wie „Gebäude löschen“ noch fehlen, kannst du dir vorstellen, wie das lief.&lt;&#x2F;p&gt;
&lt;p&gt;Der Vorteil: Dabei habe ich jede Menge Dinge entdeckt, die ich für mehr Komfort verbessern möchte. Ein Gewinn also.&lt;&#x2F;p&gt;
&lt;p&gt;Hier sind die In-Game-Bilder, die an Steam übermittelt werden. Wir rechnen mit einer baldigen Freigabe.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;2.webp&quot; alt=&quot;Screenshot 2&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;3.webp&quot; alt=&quot;Screenshot 3&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;4.webp&quot; alt=&quot;Screenshot 4&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-07-06&#x2F;5.webp&quot; alt=&quot;Screenshot 5&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h1&gt;
&lt;p&gt;Unterm Strich war es ein produktiver Monat. Überall wurde großartige Arbeit geleistet – besonders von Julef.&lt;&#x2F;p&gt;
&lt;p&gt;Einziger Wermutstropfen: Durch das hohe Tempo hat sich etwas Brüchigkeit im Code eingeschlichen. Ich freue mich darauf, wieder „reine“ Programmierarbeit zu leisten und die Codebasis zu härten. Immerhin – wozu schreibt man ein Spiel in Rust, wenn man Code-Brittle zulässt?&lt;&#x2F;p&gt;
&lt;p&gt;Dieser Monat war großartig und bald wird diese Größe richtig solide sein.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Art Lead, ESC und der 3D-Umbau</title>
          <pubDate>Sun, 25 May 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-05-24/</link>
          <guid>https://exofactory.net/de/blog/2025-05-24/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-05-24/">&lt;h2 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h2&gt;
&lt;p&gt;Die letzten zwei Wochen waren voller Arbeit – größtenteils nicht programmieren. Die gute Nachricht: Sie führte zu großen Veränderungen und insgesamt deutlichen Verbesserungen für das Spiel.&lt;&#x2F;p&gt;
&lt;p&gt;Das Wichtigste zuerst: Exofactory hat jetzt eine Art Lead. Bald sollten also sichtbare Fortschritte bei der Optik zu sehen sein.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;art-lead&quot;&gt;Art Lead&lt;&#x2F;h2&gt;
&lt;p&gt;Wie oben erwähnt, ist die große Neuigkeit, dass Exofactory nun eine Art Lead hat. Ursprünglich suchte ich nur nach einer Künstlerin für einzelne Assets. Im Gespräch mit Julija wurde aber klar, dass jemand gebraucht wird, der die künstlerische Gesamtleitung übernimmt.&lt;&#x2F;p&gt;
&lt;p&gt;Mir fehlt schlicht das nötige Skillset, und dem Spiel würde es nicht guttun, wenn ich die Art Direction führen würde.&lt;&#x2F;p&gt;
&lt;p&gt;Wir arbeiten nun seit einiger Zeit zusammen und haben eine klare ästhetische Richtung definiert.&lt;&#x2F;p&gt;
&lt;p&gt;Ich freue mich sehr auf die Zusammenarbeit – es gibt viel zu tun.&lt;&#x2F;p&gt;
&lt;p&gt;Wenn du mehr über Julija erfahren möchtest, schau dir &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;julef.myportfolio.com&quot;&gt;ihr Portfolio an.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;esc&quot;&gt;ESC&lt;&#x2F;h2&gt;
&lt;p&gt;Falls sich der oder die eine Lesende fragt, warum letzte Woche kein Update erschienen ist: Schuld war meine Ablenkung durch den Eurovision Song Contest!&lt;&#x2F;p&gt;
&lt;p&gt;Die Party und das lange Zusammensein haben den Fortschritt dieser Woche vielleicht auch etwas gebremst – aber es war jede Minute wert.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;wir-sind-jetzt-3d&quot;&gt;Wir sind jetzt 3D!&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-05-24&#x2F;terrain.webp&quot; alt=&quot;3D-Screenshot&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Die größte Aufgabe der letzten beiden Wochen war der Umstieg auf 3D. Nicht extrem schwer, aber sehr arbeitsintensiv. (Nur zur Klarstellung: Das sind keine finalen Art-Assets, also keine Sorge.)&lt;&#x2F;p&gt;
&lt;p&gt;Teil der Arbeit war ein prozeduraler Terrain-Generator. Egal ob das Spiel später eine unendliche Karte oder eine begrenzte, von Hand abgestimmte Welt hat – automatisch generiertes Terrain reduziert den Aufwand enorm.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-05-24&#x2F;terrain_zoom.webp&quot; alt=&quot;3D-Screenshot&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Interessanterweise dauert das Generieren des Terrains gerade lang genug, um einen Ladebildschirm zu rechtfertigen. Den gibt es jetzt also ebenfalls.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-05-24&#x2F;load_screen.webp&quot; alt=&quot;Screenshot des Ladebildschirms&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h2&gt;
&lt;p&gt;Ich bin sehr zufrieden mit dieser Woche. Viele wichtige Arbeiten haben begonnen, und das Spiel hat nun eine klare künstlerische Richtung.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Kunst und Künstler:innen</title>
          <pubDate>Sat, 10 May 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-05-10/</link>
          <guid>https://exofactory.net/de/blog/2025-05-10/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-05-10/">&lt;h2 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h2&gt;
&lt;p&gt;Diese Woche stand vor allem nicht programmieren im Mittelpunkt. Ich habe mich auf ein Gebiet konzentriert, in dem ich kaum Erfahrung habe: Künstler:innen finden, sortieren und auswählen. Das war mühsam und ehrlich gesagt nicht besonders spaßig – aber es muss nun einmal erledigt werden.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;kunst-und-kunstler-innen&quot;&gt;Kunst und Künstler:innen&lt;&#x2F;h2&gt;
&lt;p&gt;Ich bin Programmiererin, keine Künstlerin, also habe ich ein paar Fehler gemacht. Der größte: Ich habe mich auf 2D-Künstler:innen fokussiert.&lt;&#x2F;p&gt;
&lt;p&gt;Das war unklug, denn wie mir eine der angefragten Personen freundlich erklärte, bräuchte ich für jedes Gebäude und jede Ausrichtung eine komplett neue Animation. Das ist enorm viel Arbeit.&lt;&#x2F;p&gt;
&lt;p&gt;Der Rat lautete stattdessen, eine 3D-Künstlerin oder einen 3D-Künstler zu engagieren und über eine &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;de.wikipedia.org&#x2F;wiki&#x2F;UV-Koordinaten&quot;&gt;UV-Map&lt;&#x2F;a&gt; Sprite-Sheets zu erzeugen. Nach etwas Recherche stimme ich zu. Der Hinweis war super hilfreich und hat mir die Richtung gezeigt.&lt;&#x2F;p&gt;
&lt;p&gt;Bevor ich diesen Tipp bekam, ist allerdings noch ziemlich cooles Konzeptart entstanden.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-05-10&#x2F;design_1.webp&quot; alt=&quot;2D-Konzeptzeichnung eines Gebäudes.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ein bisschen zu rund für meinen Geschmack, aber trotzdem spannend.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-05-10&#x2F;design_2.webp&quot; alt=&quot;2D-Konzeptzeichnung eines Gebäudes.&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Dieses hier mag ich besonders.&lt;&#x2F;p&gt;
&lt;p&gt;Leider lässt sich dieses 2D-Konzept nicht sinnvoll weiterverfolgen, aber es hilft, die Stimmung des Spiels zu definieren – also trotzdem wertvoll.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h2&gt;
&lt;p&gt;Die Woche war voller neuer Erfahrungen, und ich habe viel gelernt. Jetzt geht es darum, eine passende 3D-Fachkraft zu beauftragen. Bald sollte es mehr zu zeigen geben.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Offsets, Menüs, Barrierefreiheit und 0.16</title>
          <pubDate>Sat, 03 May 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-05-03/</link>
          <guid>https://exofactory.net/de/blog/2025-05-03/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-05-03/">&lt;h2 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h2&gt;
&lt;p&gt;Letzte Woche hatte ich große Pläne: ein kurzer Mikro-Crunch und anschließend eine technische Vorschau. Wegen persönlicher Umstände konnte ich die nötige Zeit aber nicht investieren. Deshalb hat das Spiel nicht den Stand erreicht, den ich präsentieren wollte. Ich reiche es vermutlich später ein – Nachhaltigkeit geht vor, also musste ich das Ziel für diese Woche fallen lassen.&lt;&#x2F;p&gt;
&lt;p&gt;Trotzdem ist viel passiert, sowohl im Hintergrund als auch für Spieler:innen sichtbar. Und das ist alles sehr motivierend.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bevy-0-16&quot;&gt;Bevy 0.16&lt;&#x2F;h2&gt;
&lt;p&gt;Der erste große Brocken war der Port von &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevyengine.org&#x2F;learn&#x2F;migration-guides&#x2F;0-15-to-0-16&#x2F;&quot;&gt;Bevy 0.15 auf 0.16&lt;&#x2F;a&gt;. Drei Gründe sprachen dafür:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Ich möchte bald mit Förderbändern beginnen und die neuen &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevyengine.org&#x2F;news&#x2F;bevy-0-16&#x2F;#ecs-relationships&quot;&gt;ECS Relationships&lt;&#x2F;a&gt; intensiv nutzen, um Quellen und Senken zu verwalten. Ohne sie hätte ich mir am Ende eine eigene Version davon gebaut.&lt;&#x2F;li&gt;
&lt;li&gt;Ich wollte die stabilisierte &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevyengine.org&#x2F;news&#x2F;bevy-0-16&#x2F;#input-focus-improvements&quot;&gt;Input-Focus-Funktion&lt;&#x2F;a&gt; verwenden. Sie ist essenziell für Barrierefreiheit und Gamepad-Support (mehr dazu unten).&lt;&#x2F;li&gt;
&lt;li&gt;Bevy entwickelt sich rasant. Hinterherzuhinken wäre für Exofactory aktuell fatal. Sobald Bevy stabiler wird, ändert sich das vielleicht – bis dahin sind Upgrades Pflicht.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Der Port war keine große Hürde, größtenteils ging es um den Abschied von veralteten Funktionen und etwas Refactoring. Ich habe die Gelegenheit genutzt, älteren Code aus meinen ersten Bevy-Tagen aufzuräumen, vor allem durch den Wechsel von &lt;code&gt;Queries&lt;&#x2F;code&gt; zu &lt;code&gt;Single&lt;&#x2F;code&gt;, wo möglich. So konnte ich einige verschachtelte &lt;code&gt;if let Some(x) =&lt;&#x2F;code&gt;-Blöcke entfernen – viel aufgeräumter.&lt;&#x2F;p&gt;
&lt;p&gt;Ein paar Abhängigkeiten waren noch nicht aktualisiert, daher habe ich vorübergehend deren 0.16-PR-Branches oder Release-Candidates eingebunden.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;menus-barrierefreiheit&quot;&gt;Menüs &amp;amp; Barrierefreiheit&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-05-03&#x2F;build_menu.webp&quot; alt=&quot;Animiertes Bild des Baumenu&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Das zweite große Projekt war das neue, ziemlich vollständige Baumenu.&lt;&#x2F;p&gt;
&lt;p&gt;Ich habe damit nach 0.16 gewartet, weil ich unbedingt das neue Accessibility-&#x2F;Focus-Feature nutzen wollte – hier kam es zum ersten Mal im Spiel zum Einsatz. Barrierefreiheit ist für mich Best Practice. Was Menschen mit Einschränkungen hilft, hilft letztlich allen – auch Entwickler:innen. So wird Gamepad-Unterstützung zur Kleinigkeit. Aus Code-Sicht sind Gamepads und spezialisierte Accessibility-Hardware im Grunde dasselbe.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h2&gt;
&lt;p&gt;Ich habe diese Woche nicht ganz die gewünschte Qualität erreicht, bin aber zufrieden mit dem, was entstanden ist. Nachhaltigkeit bleibt mir wichtig – Burn-out gilt es zu vermeiden.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>Gebäudemenüs, Gamepads und Kurswechsel</title>
          <pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-04-26/</link>
          <guid>https://exofactory.net/de/blog/2025-04-26/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-04-26/">&lt;h2 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h2&gt;
&lt;p&gt;Die Woche begann mit völlig anderen Zielen, als sie geendet hat. Der Wendepunkt kam, als &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;www.twitch.tv&#x2F;pokinsson&quot;&gt;Pokinsson&lt;&#x2F;a&gt; einen Aufruf für Indie-Games in jedem Entwicklungsstand startete. Nach kurzem Grübeln beschloss ich, eine Einreichung zu wagen. Bedeutet: Bis zum 7. April muss das vorhandene Material poliert werden, damit eine spielbare technische Vorschau entsteht.&lt;&#x2F;p&gt;
&lt;p&gt;Also habe ich die halbfertige Gamepad-Unterstützung auf Eis gelegt und den Fokus auf dieses Ziel gerichtet. Zurück bleibt ein Haufen Gamepad-Code im Beta-Zustand – das künftige Ich darf sich darum kümmern.&lt;&#x2F;p&gt;
&lt;p&gt;Trotzdem gab es Fortschritte.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;halb-gare-gamepad-unterstutzung&quot;&gt;Halb gare Gamepad-Unterstützung&lt;&#x2F;h2&gt;
&lt;p&gt;Zu Beginn der Woche, bevor ich von dem Aufruf erfahren habe, war das der Schwerpunkt. Ich nutze &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;thoseawesomeguys.com&#x2F;prompts&#x2F;&quot;&gt;Xelus großartige Button-Prompts&lt;&#x2F;a&gt; – absolute Empfehlung.&lt;&#x2F;p&gt;
&lt;p&gt;Ich habe viele Mappings und Controller-Management-Code ergänzt. Dadurch kann ich künftig einfach so etwas tun:&lt;&#x2F;p&gt;
&lt;pre&gt;&lt;code data-lang=&quot;rust&quot;&gt;let focus_on_exoframe: Handle&amp;lt;Image&amp;gt; = smart_prompt_collection.focus_on_exoframe.clone();
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;Das Ergebnis ist immer das richtige Prompt-Bild – egal ob Steam Deck, Xbox-One-Controller oder Tastatur und Maus.&lt;&#x2F;p&gt;
&lt;p&gt;Weiter kam ich in dieser Woche nicht, dafür steht jetzt eine Liste geplanter Geräte&#x2F;Steuerungsschemata:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Steam Deck mit integrierten Controllern, Tastatur und Maus oder Xbox-One-Controller&lt;&#x2F;li&gt;
&lt;li&gt;Modernes Linux (Debian 11 und neuer) mit Tastatur und Maus oder Xbox-One-Controller&lt;&#x2F;li&gt;
&lt;li&gt;Windows 10&#x2F;11 mit Tastatur und Maus oder Xbox-One-Controller&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Andere Systeme oder Controller sollten funktionieren, werden aber nicht getestet. Mehr Infos zu eventuellen Kompatibilitäten findest du bei &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;gilrs-project&#x2F;gilrs&quot;&gt;gilrs&lt;&#x2F;a&gt;, der zugrunde liegenden Bibliothek im Zusammenspiel mit Bevy.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;steuerungsubersicht&quot;&gt;Steuerungsübersicht&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-04-26&#x2F;control_guide.webp&quot; alt=&quot;Animation der Steuerungsübersicht&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Außerdem gibt es jetzt ein Panel als „Steuerungsübersicht“. Es zeigt jederzeit an, welche Aktionen möglich sind, und aktualisiert sich dynamisch während des Spiels. Natürlich lässt es sich ausblenden, falls es stört.&lt;&#x2F;p&gt;
&lt;p&gt;Das ist sowohl für die technische Vorschau als auch fürs fertige Spiel enorm hilfreich.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gebaude-interface&quot;&gt;Gebäude-Interface&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-04-26&#x2F;building_interface.webp&quot; alt=&quot;Animation der Gebäudeoberfläche&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Zum Schluss kam ein neues Kernfeature hinzu: Ein Gebäude kann nun tatsächlich etwas produzieren!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h2&gt;
&lt;p&gt;Insgesamt war es eine stressige Woche, und dieses Arbeitstempo soll keine Normalität werden – gerade mit meinen anderen Verpflichtungen. Aber es ist viel passiert, und der Preview-Build sollte Form annehmen.&lt;&#x2F;p&gt;
</description>
      </item>
      <item>
          <title>UI-Grundlagen gelegt</title>
          <pubDate>Sat, 19 Apr 2025 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://exofactory.net/de/blog/2025-04-19/</link>
          <guid>https://exofactory.net/de/blog/2025-04-19/</guid>
          <description xml:base="https://exofactory.net/de/blog/2025-04-19/">&lt;h2 id=&quot;uberblick&quot;&gt;Überblick&lt;&#x2F;h2&gt;
&lt;p&gt;Diese Woche drehte sich vor allem darum, grundlegende UI-Elemente hinzuzufügen, an der Exoframe-Bewegung zu arbeiten und erste Sounds ins Spiel zu bringen.&lt;&#x2F;p&gt;
&lt;p&gt;Aktuell verwende ich extrem einfache Platzhalter-Grafiken, weil der Schwerpunkt weiterhin auf den Kernmechaniken liegt. Rechne also mit ziemlich improvisierter Optik, die eindrucksvoll beweist, dass ich keine Künstlerin bin.&lt;&#x2F;p&gt;
&lt;p&gt;Insgesamt passt die Woche gut zum Zeitplan.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ui-weiter-ausgestalten&quot;&gt;UI weiter ausgestalten&lt;&#x2F;h2&gt;
&lt;p&gt;Exofactory entsteht mit &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;bevyengine.org&quot;&gt;Bevy&lt;&#x2F;a&gt; und so sehr ich das Projekt schätze – die UI-Entwicklung macht schlicht keinen Spaß. &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bevyengine&#x2F;bevy&#x2F;discussions&#x2F;14437&quot;&gt;Future Bevy&lt;&#x2F;a&gt; soll hier Abhilfe schaffen, und ich hoffe für alle Rust-Game-Devs, dass das klappt. Während Hauptmenü und Einstellungen bereits in einem guten Zustand sind, blieb das UI im eigentlichen Spiel bis diese Woche unangetastet.&lt;&#x2F;p&gt;
&lt;p&gt;Das hat sich nun mit der neuen oberen Leiste geändert. Sie soll der zentrale Anlaufpunkt sein, über den Spielende erkennen, in welchem „Modus“ sie sich befinden und was global passiert.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-04-19&#x2F;ui_sample.webp&quot; alt=&quot;Screenshot des Spiels mit UI&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Außerdem habe ich das Grundgerüst für Detail- und Einstellungsfenster von Gebäuden gelegt. Damit kann ich künftig schneller iterieren und den UI-Aufwand beim Einführen neuer Gebäude reduzieren. Im Moment zeigt ein Klick auf ein Gebäude lediglich einige Basisinformationen wie oben zu sehen.&lt;&#x2F;p&gt;
&lt;p&gt;Damit bin ich fürs Erste sehr zufrieden.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sound-experimente&quot;&gt;Sound-Experimente&lt;&#x2F;h2&gt;
&lt;p&gt;Als Abwechslung zur UI-Arbeit habe ich ein paar grundlegende Sounds ergänzt. Nach einigen Aufnahmen und etwas Feinschliff in &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;tenacityaudio.org&quot;&gt;Tenacity&lt;&#x2F;a&gt; gibt es nun mehrere Sounds, mit denen ich sehr happy bin. Besonders das Mouseover im Menü gefällt mir.&lt;&#x2F;p&gt;
&lt;audio controls&gt;
  &lt;source src=&quot;&#x2F;media&#x2F;2025-04-19&#x2F;mouse_over.webm&quot; type=&quot;audio&#x2F;webm&quot;&gt;
  Dein Browser unterstützt das Audio-Element nicht.
&lt;&#x2F;audio&gt;
&lt;p&gt;Einen eigenen Sound-Abschnitt im Einstellungsmenü brauche ich noch, aber das kann warten.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;exoframe-in-bewegung&quot;&gt;Exoframe in Bewegung&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;media&#x2F;2025-04-19&#x2F;movement.webp&quot; alt=&quot;Screenshot des Spiels mit UI&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Zum Schluss habe ich die Exoframe-Bewegung ergänzt. Sie fühlt sich sehr direkt und zufriedenstellend an. Die Bewegungs- und Physiksysteme stammen vom großartigen Rapier-Framework.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fazit&quot;&gt;Fazit&lt;&#x2F;h2&gt;
&lt;p&gt;Unterm Strich bin ich mit dieser Woche zufrieden. Ich plane, wöchentlich Dev-Blogs und monatliche Video-Blogs zu veröffentlichen – also bleib dran.&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
