<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Zlormack</title>
    <description>The latest articles on DEV Community by Zlormack (@zlormack_32b7af384d362867).</description>
    <link>https://dev.to/zlormack_32b7af384d362867</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3964454%2F113fc9f7-5a75-4679-baeb-1a1887816681.jpg</url>
      <title>DEV Community: Zlormack</title>
      <link>https://dev.to/zlormack_32b7af384d362867</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zlormack_32b7af384d362867"/>
    <language>en</language>
    <item>
      <title>Publishing My Procedural Rust Game on Game Jolt</title>
      <dc:creator>Zlormack</dc:creator>
      <pubDate>Sat, 18 Jul 2026 15:45:25 +0000</pubDate>
      <link>https://dev.to/zlormack_32b7af384d362867/publishing-my-procedural-rust-game-on-game-jolt-2bm9</link>
      <guid>https://dev.to/zlormack_32b7af384d362867/publishing-my-procedural-rust-game-on-game-jolt-2bm9</guid>
      <description>&lt;p&gt;I brought Zlorma Core: Signal Lost to Game Jolt, published a new gameplay trailer and applied for Creator access for ZlormaStudio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7zawuf2am890jppkmxpx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7zawuf2am890jppkmxpx.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;title: "Bringing Zlorma Core: Signal Lost to Game Jolt"&lt;br&gt;
published: false&lt;br&gt;
description: "I published the new Signal Lost gameplay trailer on Game Jolt and applied for Creator access for ZlormaStudio."&lt;/p&gt;

&lt;h2&gt;
  
  
  tags: gamedev, rust, indiegame, devlog
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Bringing Zlorma Core: Signal Lost to Game Jolt
&lt;/h1&gt;

&lt;p&gt;Today marks another step forward for &lt;strong&gt;Zlorma Core: Signal Lost&lt;/strong&gt; and &lt;strong&gt;ZlormaStudio&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After publishing the prototype on itch.io and sharing its development through this blog, I have now started bringing the project to &lt;strong&gt;Game Jolt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I uploaded the new gameplay trailer, prepared the game presentation and submitted an application for Game Jolt Creator access.&lt;/p&gt;

&lt;p&gt;The application is currently waiting for review.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Signal Lost?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zlorma Core: Signal Lost&lt;/strong&gt; is a procedural science-fiction top-down shooter developed in Rust with my custom lightweight 2D game engine, &lt;strong&gt;ZlormaEngine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The player wakes up inside a damaged digital station being consumed by corruption.&lt;/p&gt;

&lt;p&gt;The main objectives are to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;explore procedurally generated rooms and corridors;&lt;/li&gt;
&lt;li&gt;repair three damaged terminals;&lt;/li&gt;
&lt;li&gt;collect data fragments;&lt;/li&gt;
&lt;li&gt;fight corrupted programs;&lt;/li&gt;
&lt;li&gt;build barriers and automated turrets;&lt;/li&gt;
&lt;li&gt;use the Zlorma Data Forge;&lt;/li&gt;
&lt;li&gt;escape before the system collapses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current release is &lt;strong&gt;Prototype v0.2.1 — Demo Polish Update&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  A More Polished Gameplay Trailer
&lt;/h2&gt;

&lt;p&gt;For this release, I created several versions of the gameplay trailer.&lt;/p&gt;

&lt;p&gt;The main trailer includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an animated introduction;&lt;/li&gt;
&lt;li&gt;faster gameplay cuts;&lt;/li&gt;
&lt;li&gt;cinematic titles;&lt;/li&gt;
&lt;li&gt;visual impact flashes;&lt;/li&gt;
&lt;li&gt;dynamic zoom and camera movement;&lt;/li&gt;
&lt;li&gt;a custom synthwave and chiptune soundtrack;&lt;/li&gt;
&lt;li&gt;a final screen linking to the playable prototype.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also created shorter versions for social networks such as Mastodon, Bluesky, Discord, Facebook and Game Jolt.&lt;/p&gt;

&lt;p&gt;Preparing several trailer formats helped me understand how differently a game needs to be presented depending on the platform.&lt;/p&gt;

&lt;p&gt;A full trailer can explain the mechanics, while a shorter version must immediately show action, visual effects and the main gameplay loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Zlorma Data Forge
&lt;/h2&gt;

&lt;p&gt;One of the most important additions in Signal Lost v0.2 is the &lt;strong&gt;Zlorma Data Forge&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After repairing a terminal, the player receives three randomly selected upgrades.&lt;/p&gt;

&lt;p&gt;Each upgrade provides an advantage, but most of them also introduce a disadvantage.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;faster shooting can reduce weapon damage;&lt;/li&gt;
&lt;li&gt;additional maximum health can reduce movement speed;&lt;/li&gt;
&lt;li&gt;stronger turrets can become more expensive to build;&lt;/li&gt;
&lt;li&gt;additional data rewards can accelerate corruption.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to make each run different and force the player to balance power, survival and risk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo Polish Update
&lt;/h2&gt;

&lt;p&gt;Version 0.2.1 improves the presentation of the prototype with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;screen shake during impacts;&lt;/li&gt;
&lt;li&gt;projectile trails;&lt;/li&gt;
&lt;li&gt;procedural shockwaves;&lt;/li&gt;
&lt;li&gt;glowing enemies and terminals;&lt;/li&gt;
&lt;li&gt;floating score and data indicators;&lt;/li&gt;
&lt;li&gt;clearer objective messages;&lt;/li&gt;
&lt;li&gt;corruption warnings;&lt;/li&gt;
&lt;li&gt;animated system banners;&lt;/li&gt;
&lt;li&gt;improved victory and defeat screens;&lt;/li&gt;
&lt;li&gt;a more animated Data Forge interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All visual effects are generated directly through code.&lt;/p&gt;

&lt;p&gt;Signal Lost does not depend on external level files or large graphical asset packs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Built with ZlormaEngine
&lt;/h2&gt;

&lt;p&gt;Signal Lost is powered by &lt;strong&gt;ZlormaEngine&lt;/strong&gt;, my custom 2D game engine written in Rust.&lt;/p&gt;

&lt;p&gt;The engine currently provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;software-rendered 2D graphics;&lt;/li&gt;
&lt;li&gt;procedural environments;&lt;/li&gt;
&lt;li&gt;procedural effects and sprites;&lt;/li&gt;
&lt;li&gt;a custom bitmap font;&lt;/li&gt;
&lt;li&gt;native Linux and Windows builds;&lt;/li&gt;
&lt;li&gt;very small executable sizes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The current approximate executable sizes are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux: 476 KB;&lt;/li&gt;
&lt;li&gt;Windows: 312 KB.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keeping the engine and games lightweight remains one of the main technical goals of the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Game Jolt?
&lt;/h2&gt;

&lt;p&gt;Game Jolt gives independent developers another place to present their work, publish trailers, share development updates and interact with players.&lt;/p&gt;

&lt;p&gt;My goal is not to replace the itch.io version.&lt;/p&gt;

&lt;p&gt;Instead, I want to use both platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;itch.io for distributing the prototype;&lt;/li&gt;
&lt;li&gt;Game Jolt for sharing videos, updates and building a community around ZlormaStudio.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have configured the Game Jolt marketplace account and submitted a request for Creator access.&lt;/p&gt;

&lt;p&gt;I am now waiting for the Game Jolt team to review the application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Play Signal Lost
&lt;/h2&gt;

&lt;p&gt;The prototype is currently available for Windows and Linux:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://zlorma-studio.itch.io/zlorma-core-signal-lost-prototype-v01" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback about the controls, procedural generation, visual effects, difficulty and Data Forge system is welcome.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Comes Next?
&lt;/h2&gt;

&lt;p&gt;The next steps for Signal Lost include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;improving combat feedback;&lt;/li&gt;
&lt;li&gt;expanding procedural room generation;&lt;/li&gt;
&lt;li&gt;adding more enemy behaviors;&lt;/li&gt;
&lt;li&gt;improving the Kernel Error boss encounter;&lt;/li&gt;
&lt;li&gt;balancing the Data Forge upgrades;&lt;/li&gt;
&lt;li&gt;adding more sound effects;&lt;/li&gt;
&lt;li&gt;preparing the next public release.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also plan to continue improving ZlormaEngine through the development of Signal Lost and Gemfall Arena.&lt;/p&gt;

&lt;p&gt;Every new game helps test a different part of the engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repair the system.&lt;br&gt;&lt;br&gt;
Contain the corruption.&lt;br&gt;&lt;br&gt;
Find the exit.&lt;/strong&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a Procedural Top-Down Shooter in Rust with My Custom Game Engine</title>
      <dc:creator>Zlormack</dc:creator>
      <pubDate>Thu, 16 Jul 2026 18:31:57 +0000</pubDate>
      <link>https://dev.to/zlormack_32b7af384d362867/building-a-procedural-top-down-shooter-in-rust-with-my-custom-game-engine-2gf5</link>
      <guid>https://dev.to/zlormack_32b7af384d362867/building-a-procedural-top-down-shooter-in-rust-with-my-custom-game-engine-2gf5</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fitwdl0mxi4u3nwmmm1hg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fitwdl0mxi4u3nwmmm1hg.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;# Building a Procedural Top-Down Shooter in Rust with My Custom Game Engine&lt;/p&gt;

&lt;p&gt;After developing &lt;strong&gt;Gemfall Arena&lt;/strong&gt;, I wanted to answer a new question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Could my custom Rust game engine support something more complex than a wave-based arena shooter?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That experiment became &lt;strong&gt;Zlorma Core: Signal Lost — Prototype v0.1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Signal Lost is a procedural top-down sci-fi shooter featuring exploration, damaged terminals, collectible resources, defensive structures, corrupted enemies, and a final escape objective.&lt;/p&gt;

&lt;p&gt;It is also the second playable game built with my custom engine, &lt;strong&gt;ZlormaEngine&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The prototype is available for Windows and #Linux:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://zlorma-studio.itch.io/zlorma-core-signal-lost-prototype-v01" rel="noopener noreferrer"&gt;https://zlorma-studio.itch.io/zlorma-core-signal-lost-prototype-v01&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Moving beyond an arena shooter
&lt;/h2&gt;

&lt;p&gt;Gemfall Arena helped me build and test the first important parts of ZlormaEngine:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software rendering&lt;/li&gt;
&lt;li&gt;Keyboard and mouse input&lt;/li&gt;
&lt;li&gt;Player movement&lt;/li&gt;
&lt;li&gt;Projectiles&lt;/li&gt;
&lt;li&gt;Enemy spawning&lt;/li&gt;
&lt;li&gt;Collisions&lt;/li&gt;
&lt;li&gt;Particle effects&lt;/li&gt;
&lt;li&gt;Bitmap text&lt;/li&gt;
&lt;li&gt;Wave progression&lt;/li&gt;
&lt;li&gt;#Linux and Windows builds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, its gameplay takes place inside a combat arena.&lt;/p&gt;

&lt;p&gt;For my second project, I wanted the engine to support:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Exploration&lt;/li&gt;
&lt;li&gt;Multiple connected rooms&lt;/li&gt;
&lt;li&gt;Procedural level generation&lt;/li&gt;
&lt;li&gt;Interactive objectives&lt;/li&gt;
&lt;li&gt;Collectible resources&lt;/li&gt;
&lt;li&gt;Player-built defenses&lt;/li&gt;
&lt;li&gt;Different enemy behaviours&lt;/li&gt;
&lt;li&gt;A final exit condition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Signal Lost became the project used to implement and test those systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The game concept
&lt;/h2&gt;

&lt;p&gt;A digital corruption is spreading through an abandoned station.&lt;/p&gt;

&lt;p&gt;The player controls the last maintenance program still online.&lt;/p&gt;

&lt;p&gt;Three critical terminals have stopped responding. The station cannot activate its emergency exit until the terminals are restored.&lt;/p&gt;

&lt;p&gt;The main gameplay loop is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Explore the generated station&lt;/li&gt;
&lt;li&gt;Locate a damaged terminal&lt;/li&gt;
&lt;li&gt;Restore and defend it&lt;/li&gt;
&lt;li&gt;Collect data fragments&lt;/li&gt;
&lt;li&gt;Build barriers or deploy turrets&lt;/li&gt;
&lt;li&gt;Restore all three terminals&lt;/li&gt;
&lt;li&gt;Defeat Kernel Error&lt;/li&gt;
&lt;li&gt;Reach the emergency exit&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The objective was to combine fast top-down combat with light exploration and construction mechanics.&lt;/p&gt;




&lt;h2&gt;
  
  
  Procedural station generation
&lt;/h2&gt;

&lt;p&gt;The biggest new system is the procedural map generator.&lt;/p&gt;

&lt;p&gt;Each run creates a station containing connected rooms and corridors.&lt;/p&gt;

&lt;p&gt;The generator must produce a layout that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigable&lt;/li&gt;
&lt;li&gt;Large enough for combat&lt;/li&gt;
&lt;li&gt;Small enough to avoid empty exploration&lt;/li&gt;
&lt;li&gt;Suitable for terminal-defense encounters&lt;/li&gt;
&lt;li&gt;Compatible with enemy movement&lt;/li&gt;
&lt;li&gt;Different on each new run&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The generated station contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Floor tiles&lt;/li&gt;
&lt;li&gt;Solid walls&lt;/li&gt;
&lt;li&gt;Connected rooms&lt;/li&gt;
&lt;li&gt;Corridors&lt;/li&gt;
&lt;li&gt;Three damaged terminals&lt;/li&gt;
&lt;li&gt;Data fragments&lt;/li&gt;
&lt;li&gt;Enemy spawn locations&lt;/li&gt;
&lt;li&gt;Construction areas&lt;/li&gt;
&lt;li&gt;A boss encounter&lt;/li&gt;
&lt;li&gt;An emergency exit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This system can later be reused for dungeon crawlers, roguelikes, survival games, and other ZlormaEngine projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  Terminal restoration
&lt;/h2&gt;

&lt;p&gt;The three terminals provide the main objectives.&lt;/p&gt;

&lt;p&gt;The player must explore the map, locate each terminal, and move close enough to begin restoring it.&lt;/p&gt;

&lt;p&gt;While the system is being repaired, corrupted programs continue attacking.&lt;/p&gt;

&lt;p&gt;This changes the rhythm of the game.&lt;/p&gt;

&lt;p&gt;The player is not simply eliminating enemies. They must also decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which terminal to restore first&lt;/li&gt;
&lt;li&gt;Where to stand during a defense&lt;/li&gt;
&lt;li&gt;Which passage should be blocked&lt;/li&gt;
&lt;li&gt;When to spend collected fragments&lt;/li&gt;
&lt;li&gt;Where a turret will be most effective&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After all three terminals are restored, the final phase of the run begins.&lt;/p&gt;




&lt;h2&gt;
  
  
  Data fragments and construction
&lt;/h2&gt;

&lt;p&gt;Signal Lost introduces a simple resource system.&lt;/p&gt;

&lt;p&gt;The player collects &lt;strong&gt;data fragments&lt;/strong&gt; while exploring and fighting corrupted programs.&lt;/p&gt;

&lt;p&gt;These fragments can be spent on two defensive structures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Barriers
&lt;/h3&gt;

&lt;p&gt;Barriers can block passages and slow enemy movement.&lt;/p&gt;

&lt;p&gt;They are useful for protecting terminals and controlling the direction from which enemies can approach.&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated turrets
&lt;/h3&gt;

&lt;p&gt;Turrets automatically fire at nearby enemies.&lt;/p&gt;

&lt;p&gt;They cost more fragments than barriers but provide additional damage during terminal defense and the final battle.&lt;/p&gt;

&lt;p&gt;The construction system is intentionally small in Prototype v0.1.&lt;/p&gt;

&lt;p&gt;The goal is to test:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resource costs&lt;/li&gt;
&lt;li&gt;Object placement&lt;/li&gt;
&lt;li&gt;Collision updates&lt;/li&gt;
&lt;li&gt;Automated targeting&lt;/li&gt;
&lt;li&gt;Structure health&lt;/li&gt;
&lt;li&gt;Interaction with enemies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;More structures can be added after the foundation has been tested.&lt;/p&gt;




&lt;h2&gt;
  
  
  Corrupted enemy programs
&lt;/h2&gt;

&lt;p&gt;The prototype currently includes several enemy behaviours.&lt;/p&gt;

&lt;h3&gt;
  
  
  Glitch
&lt;/h3&gt;

&lt;p&gt;Glitch is a small and fast enemy that directly pursues the player.&lt;/p&gt;

&lt;p&gt;Its purpose is to apply constant movement pressure.&lt;/p&gt;

&lt;h3&gt;
  
  
  Corruptor
&lt;/h3&gt;

&lt;p&gt;Corruptor is slower but more dangerous around objectives and defensive structures.&lt;/p&gt;

&lt;p&gt;It forces the player to protect more than their own health.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sentinel
&lt;/h3&gt;

&lt;p&gt;Sentinel attacks from a distance using corrupted projectiles.&lt;/p&gt;

&lt;p&gt;This prevents the player from remaining safely behind a single barrier.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kernel Error
&lt;/h3&gt;

&lt;p&gt;Kernel Error is the final enemy of Prototype v0.1.&lt;/p&gt;

&lt;p&gt;It appears during the final stage after the terminal network has been restored.&lt;/p&gt;

&lt;p&gt;Defeating Kernel Error unlocks the emergency exit and allows the player to complete the run.&lt;/p&gt;




&lt;h2&gt;
  
  
  Reorganizing ZlormaEngine
&lt;/h2&gt;

&lt;p&gt;While creating Signal Lost, I also reorganized the engine into a cleaner Rust workspace.&lt;/p&gt;

&lt;p&gt;The current structure looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;``text
ZlormaEngine/
├── Cargo.toml
├── crates/
│   └── zlorma_engine/
│       ├── Cargo.toml
│       └── src/
├── games/
│   ├── gemfall_arena/
│   │   ├── Cargo.toml
│   │   └── src/
│   └── signal_lost/
│       ├── Cargo.toml
│       └── src/
├── scripts/
├── docs/
└── dist/
``
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The shared &lt;code&gt;zlorma_engine&lt;/code&gt; crate contains reusable systems.&lt;/p&gt;

&lt;p&gt;Each game remains an independent executable while sharing the same engine foundation.&lt;/p&gt;

&lt;p&gt;This organization makes it easier to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reuse rendering and input code&lt;/li&gt;
&lt;li&gt;Maintain several games&lt;/li&gt;
&lt;li&gt;Build the entire workspace&lt;/li&gt;
&lt;li&gt;Target Linux and Windows&lt;/li&gt;
&lt;li&gt;Produce release archives&lt;/li&gt;
&lt;li&gt;Track executable sizes&lt;/li&gt;
&lt;li&gt;Add future ZlormaStudio projects&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Cross-compiling from Linux to Windows
&lt;/h2&gt;

&lt;p&gt;The Linux builds worked correctly, but the first Windows cross-build failed while compiling &lt;code&gt;minifb&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The error was:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;``text
At least one of the x11 or wayland features must be enabled
``
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The problem came from the dependency features defined in the engine crate.&lt;/p&gt;

&lt;p&gt;After correcting the &lt;code&gt;minifb&lt;/code&gt; configuration, Cargo correctly detected the required feature:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
minifb feature "x11"&lt;br&gt;
└── zlorma_engine&lt;br&gt;
    ├── gemfall_arena&lt;br&gt;
    └── signal_lost&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
plaintext&lt;/p&gt;

&lt;p&gt;The complete workspace now compiles successfully for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
text&lt;br&gt;
x86_64 Linux&lt;br&gt;
x86_64 Windows GNU&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
toml&lt;/p&gt;

&lt;p&gt;A single build script creates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux executables&lt;/li&gt;
&lt;li&gt;Windows executables&lt;/li&gt;
&lt;li&gt;Linux &lt;code&gt;.tar.gz&lt;/code&gt; archives&lt;/li&gt;
&lt;li&gt;Windows &lt;code&gt;.zip&lt;/code&gt; archives&lt;/li&gt;
&lt;li&gt;SHA-256 checksums&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Keeping the executables small
&lt;/h2&gt;

&lt;p&gt;One of the original goals of ZlormaEngine was to keep each game executable below &lt;strong&gt;3 MiB&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The release profile uses size-focused settings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
toml&lt;br&gt;
[profile.release]&lt;br&gt;
opt-level = "z"&lt;br&gt;
lto = true&lt;br&gt;
codegen-units = 1&lt;br&gt;
panic = "abort"&lt;br&gt;
strip = "symbols"&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;br&gt;
plaintext&lt;/p&gt;

&lt;p&gt;Current optimized executable sizes are:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;| Game | Linux | Windows |
|---|---:|---:|
| Signal Lost Prototype v0.1 | 460 KiB | 296 KiB |
| Gemfall Arena Demo v0.2 | 464 KiB | 312 KiB |
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both games remain comfortably below the original target.&lt;/p&gt;

&lt;p&gt;The small size is especially satisfying because the same workspace now supports two different game structures.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Signal Lost adds to the engine
&lt;/h2&gt;

&lt;p&gt;Signal Lost expands ZlormaEngine with several reusable systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Procedural map generation&lt;/li&gt;
&lt;li&gt;Tile-based rooms and corridors&lt;/li&gt;
&lt;li&gt;Interactive terminals&lt;/li&gt;
&lt;li&gt;Objective progression&lt;/li&gt;
&lt;li&gt;Resource collection&lt;/li&gt;
&lt;li&gt;Construction placement&lt;/li&gt;
&lt;li&gt;Automated turrets&lt;/li&gt;
&lt;li&gt;Destructible barriers&lt;/li&gt;
&lt;li&gt;Multiple enemy behaviours&lt;/li&gt;
&lt;li&gt;Boss progression&lt;/li&gt;
&lt;li&gt;Exit activation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemfall Arena demonstrates arcade wave combat.&lt;/p&gt;

&lt;p&gt;Signal Lost demonstrates exploration, objectives, resource management, and construction inside a generated environment.&lt;/p&gt;

&lt;p&gt;Together, the two games provide a much better test of the engine than a single project could.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;The most important lesson was that a second game quickly reveals which systems are truly reusable.&lt;/p&gt;

&lt;p&gt;Code that appears generic inside one project may still contain assumptions about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Map dimensions&lt;/li&gt;
&lt;li&gt;Enemy spawning&lt;/li&gt;
&lt;li&gt;Camera behaviour&lt;/li&gt;
&lt;li&gt;Game states&lt;/li&gt;
&lt;li&gt;Interface layout&lt;/li&gt;
&lt;li&gt;Objective progression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Building Signal Lost forced me to separate engine systems from game-specific logic more carefully.&lt;/p&gt;

&lt;p&gt;It also showed the value of maintaining a shared workspace early, before creating too many separate projects.&lt;/p&gt;




&lt;h2&gt;
  
  
  What comes next?
&lt;/h2&gt;

&lt;p&gt;Prototype v0.1 is a technical and playable foundation.&lt;/p&gt;

&lt;p&gt;Future versions may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More station layouts&lt;/li&gt;
&lt;li&gt;Larger sectors&lt;/li&gt;
&lt;li&gt;Better enemy navigation&lt;/li&gt;
&lt;li&gt;Additional corrupted programs&lt;/li&gt;
&lt;li&gt;New bosses&lt;/li&gt;
&lt;li&gt;More defensive structures&lt;/li&gt;
&lt;li&gt;Player upgrades&lt;/li&gt;
&lt;li&gt;Environmental hazards&lt;/li&gt;
&lt;li&gt;Difficulty settings&lt;/li&gt;
&lt;li&gt;Improved visual effects&lt;/li&gt;
&lt;li&gt;Music and sound effects&lt;/li&gt;
&lt;li&gt;Saved settings and progression&lt;/li&gt;
&lt;li&gt;A clearer tutorial&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My next priority is to test the core gameplay loop and improve it based on player feedback.&lt;/p&gt;




&lt;h2&gt;
  
  
  Play Signal Lost
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Zlorma Core: Signal Lost — Prototype v0.1&lt;/strong&gt; is available for Windows and Linux.&lt;/p&gt;

&lt;p&gt;Download it on itch.io:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://zlorma-studio.itch.io/zlorma-core-signal-lost-prototype-v01" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feedback about the controls, procedural generation, difficulty, enemy behaviour, and construction mechanics is welcome.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Repair the system. Contain the corruption. Escape.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Developed by &lt;strong&gt;ZlormaStudio&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Powered by &lt;strong&gt;ZlormaEngine&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Built with &lt;strong&gt;Rust&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>rust</category>
      <category>gamedev</category>
      <category>gameengine</category>
      <category>procedural</category>
    </item>
    <item>
      <title>Pourquoi j’ai créé ZlormaEngine au lieu d’utiliser un moteur existant</title>
      <dc:creator>Zlormack</dc:creator>
      <pubDate>Thu, 16 Jul 2026 18:19:48 +0000</pubDate>
      <link>https://dev.to/zlormack_32b7af384d362867/pourquoi-jai-cree-zlormaengine-au-lieu-dutiliser-un-moteur-existant-3cj4</link>
      <guid>https://dev.to/zlormack_32b7af384d362867/pourquoi-jai-cree-zlormaengine-au-lieu-dutiliser-un-moteur-existant-3cj4</guid>
      <description>&lt;p&gt;Pourquoi j’ai créé ZlormaEngine au lieu d’utiliser un moteur existant&lt;/p&gt;

&lt;p&gt;Développement d’un moteur de jeu léger en Rust pour créer Gemfall Arena&lt;/p&gt;

&lt;p&gt;Je travaille actuellement sur ZlormaEngine, un petit moteur de jeu développé en Rust pour faire fonctionner mon premier jeu vitrine : Gemfall Arena.&lt;/p&gt;

&lt;p&gt;Je ne cherche pas à créer un concurrent de Unity, Unreal Engine ou Godot. Ces moteurs sont beaucoup plus complets et sont développés par des équipes expérimentées.&lt;/p&gt;

&lt;p&gt;Mon objectif est différent : je veux construire un moteur simple, léger et spécialisé dans les jeux de tir en vue du dessus. Cela me permet de comprendre ce qui se passe réellement derrière une fenêtre de jeu, un déplacement, un tir ou une collision.&lt;/p&gt;

&lt;p&gt;ZlormaEngine est donc à la fois un projet de moteur et un projet d’apprentissage.&lt;br&gt;
Pourquoi créer mon propre moteur ?&lt;/p&gt;

&lt;p&gt;J’aurais pu utiliser un moteur déjà existant pour développer Gemfall Arena plus rapidement.&lt;/p&gt;

&lt;p&gt;Cependant, je voulais répondre à plusieurs objectifs personnels :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apprendre Rust avec un projet concret ;

comprendre la boucle principale d’un jeu ;

contrôler directement le rendu et le gameplay ;

limiter le nombre de dépendances ;

produire un exécutable très compact ;

générer une grande partie du contenu sans assets externes ;

créer une technologie adaptée précisément à Gemfall Arena.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Utiliser mon propre moteur demande plus de travail. Par exemple, une fonctionnalité simple dans un moteur existant peut demander plusieurs fichiers et de nombreux tests dans ZlormaEngine.&lt;/p&gt;

&lt;p&gt;Mais chaque problème résolu m’aide à mieux comprendre la programmation d’un jeu.&lt;br&gt;
Une architecture Rust volontairement simple&lt;/p&gt;

&lt;p&gt;L’architecture de ZlormaEngine reste volontairement légère.&lt;/p&gt;

&lt;p&gt;Le projet peut être séparé en plusieurs parties principales :&lt;br&gt;
Plain Text&lt;br&gt;
Copy&lt;/p&gt;

&lt;p&gt;ZlormaEngine&lt;br&gt;
├── platform&lt;br&gt;
│   ├── linux_x11&lt;br&gt;
│   └── windows_win32&lt;br&gt;
├── renderer&lt;br&gt;
├── input&lt;br&gt;
├── game&lt;br&gt;
├── entities&lt;br&gt;
├── procedural&lt;br&gt;
├── waves&lt;br&gt;
├── difficulty&lt;br&gt;
└── shop&lt;/p&gt;

&lt;p&gt;La partie platform gère les différences entre Linux et Windows.&lt;/p&gt;

&lt;p&gt;Le renderer dessine les formes, les projectiles, les ennemis, les gems et les effets.&lt;/p&gt;

&lt;p&gt;La partie game contient la boucle principale et les règles de Gemfall Arena.&lt;/p&gt;

&lt;p&gt;Les autres modules s’occupent des systèmes plus précis comme les vagues, la boutique ou la génération procédurale.&lt;/p&gt;

&lt;p&gt;Je préfère pour le moment une architecture claire et compréhensible plutôt qu’un système très abstrait. Mon niveau évolue en même temps que le projet, donc je garde du code que je peux relire et modifier facilement.&lt;br&gt;
La boucle principale du moteur&lt;/p&gt;

&lt;p&gt;Comme beaucoup de jeux, Gemfall Arena utilise une boucle principale.&lt;/p&gt;

&lt;p&gt;De manière simplifiée, elle fonctionne comme ceci :&lt;br&gt;
Plain Text&lt;br&gt;
Copy&lt;/p&gt;

&lt;p&gt;while game.is_running() {&lt;br&gt;
    platform.process_events();&lt;br&gt;
    game.update();&lt;br&gt;
    renderer.clear();&lt;br&gt;
    game.render(&amp;amp;mut renderer);&lt;br&gt;
    platform.present(renderer.framebuffer());&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;À chaque image, le moteur :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;récupère les actions du clavier et de la souris ;

met à jour le joueur et les ennemis ;

vérifie les collisions ;

met à jour les projectiles et les particules ;

dessine la nouvelle image ;

affiche le framebuffer dans la fenêtre.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Cette boucle paraît simple, mais beaucoup de systèmes sont exécutés à l’intérieur.&lt;br&gt;
L’objectif des 3 Mio&lt;/p&gt;

&lt;p&gt;L’un des objectifs de ZlormaEngine est de garder le moteur et le jeu final sous une limite d’environ 3 Mio.&lt;/p&gt;

&lt;p&gt;Cette limite est surtout un défi technique personnel. Elle m’oblige à réfléchir à ce qui est réellement nécessaire.&lt;/p&gt;

&lt;p&gt;Pour réduire la taille, j’utilise notamment un profil Rust orienté vers la taille :&lt;br&gt;
Plain Text&lt;br&gt;
Copy&lt;/p&gt;

&lt;p&gt;[profile.release]&lt;br&gt;
opt-level = "z"&lt;br&gt;
lto = true&lt;br&gt;
codegen-units = 1&lt;br&gt;
panic = "abort"&lt;br&gt;
strip = true&lt;/p&gt;

&lt;p&gt;Ces options permettent de demander au compilateur de privilégier un exécutable plus petit.&lt;/p&gt;

&lt;p&gt;J’essaie également de :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;limiter les dépendances externes ;

éviter d’intégrer des textures volumineuses ;

générer les éléments graphiques directement ;

utiliser des structures de données simples ;

ne compiler que les fonctions réellement nécessaires ;

séparer le code Linux et Windows avec la compilation conditionnelle.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;La limite de 3 Mio reste un objectif. Elle doit encore être vérifiée après chaque nouvelle version, car chaque fonctionnalité peut augmenter la taille du programme.&lt;br&gt;
Un rendu logiciel&lt;/p&gt;

&lt;p&gt;ZlormaEngine utilise un rendu logiciel.&lt;/p&gt;

&lt;p&gt;Cela signifie que le moteur dessine directement les pixels dans une zone mémoire appelée framebuffer.&lt;/p&gt;

&lt;p&gt;Par exemple, pour dessiner un pixel :&lt;br&gt;
Plain Text&lt;br&gt;
Copy&lt;/p&gt;

&lt;p&gt;fn put_pixel(buffer: &amp;amp;mut [u32], x: i32, y: i32, color: u32) {&lt;br&gt;
    if x &amp;lt; 0 || y &amp;lt; 0 {&lt;br&gt;
        return;&lt;br&gt;
    }&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let x = x as usize;
let y = y as usize;

if x &amp;gt;= WIDTH || y &amp;gt;= HEIGHT {
    return;
}

buffer[y * WIDTH + x] = color;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;À partir de cette fonction, il est possible de construire :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;des rectangles ;

des cercles ;

des lignes ;

des projectiles ;

des particules ;

des barres de vie ;

des ennemis ;

des gems.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ce système reste moins puissant qu’un rendu moderne utilisant directement le GPU, mais il est suffisant pour mon jeu actuel.&lt;/p&gt;

&lt;p&gt;Il me permet aussi de comprendre précisément comment l’image est créée.&lt;br&gt;
Windows avec Win32&lt;/p&gt;

&lt;p&gt;La première architecture était uniquement compatible avec X11. Elle pouvait fonctionner sous Linux, mais elle ne pouvait pas produire directement une version Windows fonctionnelle.&lt;/p&gt;

&lt;p&gt;J’ai donc prévu un second backend basé sur Win32 et GDI.&lt;/p&gt;

&lt;p&gt;Le gameplay reste identique. Seule la couche liée au système change.&lt;/p&gt;

&lt;p&gt;Rust permet de séparer les plateformes avec des conditions de compilation :&lt;br&gt;
Plain Text&lt;br&gt;
Copy&lt;/p&gt;

&lt;h1&gt;
  
  
  [cfg(target_os = "linux")]
&lt;/h1&gt;

&lt;p&gt;mod linux_x11;&lt;/p&gt;

&lt;h1&gt;
  
  
  [cfg(target_os = "windows")]
&lt;/h1&gt;

&lt;p&gt;mod windows_win32;&lt;/p&gt;

&lt;p&gt;Cela permet d’utiliser X11 uniquement sous Linux et Win32 uniquement sous Windows.&lt;/p&gt;

&lt;p&gt;C’est une étape importante pour ZlormaEngine, car je souhaite proposer Gemfall Arena sur les deux systèmes.&lt;br&gt;
La génération procédurale&lt;/p&gt;

&lt;p&gt;La génération procédurale est une partie importante de l’identité du moteur.&lt;/p&gt;

&lt;p&gt;Au lieu de charger de nombreux fichiers externes, ZlormaEngine peut générer directement certains éléments à partir de nombres et de règles.&lt;/p&gt;

&lt;p&gt;Cela concerne notamment :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;les positions des obstacles ;

les variations de couleurs ;

les formes des ennemis ;

les particules ;

les explosions ;

les trajectoires ;

les vagues ;

certaines variations de difficulté.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Un générateur pseudo-aléatoire simple peut être utilisé pour obtenir des résultats différents :&lt;br&gt;
Plain Text&lt;br&gt;
Copy&lt;/p&gt;

&lt;p&gt;struct Random {&lt;br&gt;
    state: u32,&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;impl Random {&lt;br&gt;
    fn next(&amp;amp;mut self) -&amp;gt; u32 {&lt;br&gt;
        self.state ^= self.state &amp;lt;&amp;lt; 13;&lt;br&gt;
        self.state ^= self.state &amp;gt;&amp;gt; 17;&lt;br&gt;
        self.state ^= self.state &amp;lt;&amp;lt; 5;&lt;br&gt;
        self.state&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;L’utilisation d’une graine permet également de recréer une même génération.&lt;/p&gt;

&lt;p&gt;Ce système est pratique pour produire du contenu sans augmenter fortement la taille du jeu.&lt;/p&gt;

&lt;p&gt;Le système de vagues&lt;/p&gt;

&lt;p&gt;La démo de Gemfall Arena contient actuellement 10 vagues.&lt;/p&gt;

&lt;p&gt;Chaque vague détermine :&lt;/p&gt;

&lt;p&gt;le nombre d’ennemis ; leurs points de vie ; leur vitesse ; les types d’ennemis disponibles ; la quantité potentielle de gems ; la pression exercée sur le joueur.&lt;/p&gt;

&lt;p&gt;Une formule simple peut servir de base :&lt;/p&gt;

&lt;p&gt;let enemy_count = 4 + wave * 2; let enemy_health = 1.0 + wave as f32 * 0.15; let enemy_speed = 0.8 + wave as f32 * 0.04;&lt;/p&gt;

&lt;p&gt;Je dois toutefois faire attention à ne pas augmenter uniquement les nombres.&lt;/p&gt;

&lt;p&gt;Ajouter trop de points de vie peut rendre les ennemis longs à éliminer sans rendre le combat réellement plus intéressant.&lt;/p&gt;

&lt;p&gt;Je préfère donc mélanger plusieurs changements : vitesse, quantité, position et types d’ennemis.&lt;br&gt;
Une difficulté adaptative&lt;/p&gt;

&lt;p&gt;Le numéro de la vague ne suffit pas toujours à déterminer une bonne difficulté.&lt;/p&gt;

&lt;p&gt;Deux joueurs peuvent atteindre la même vague avec des performances très différentes.&lt;/p&gt;

&lt;p&gt;ZlormaEngine peut donc analyser plusieurs éléments :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;le temps nécessaire pour terminer une vague ;

les dégâts reçus ;

la précision des tirs ;

la quantité de vie restante ;

le score ;

les améliorations déjà achetées.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Le moteur produit ensuite une valeur de difficulté.&lt;br&gt;
Plain Text&lt;br&gt;
Copy&lt;/p&gt;

&lt;p&gt;let mut difficulty = wave as f32;&lt;/p&gt;

&lt;p&gt;if accuracy &amp;gt; 0.70 {&lt;br&gt;
    difficulty += 0.4;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;if damage_received == 0 {&lt;br&gt;
    difficulty += 0.3;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;if clear_time &amp;gt; expected_time {&lt;br&gt;
    difficulty -= 0.2;&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Ce système est encore en cours d’équilibrage.&lt;/p&gt;

&lt;p&gt;Le but n’est pas de punir un bon joueur, mais de conserver une tension intéressante pendant toute la partie.&lt;br&gt;
La Zlorma Gem Forge&lt;/p&gt;

&lt;p&gt;La Zlorma Gem Forge est la boutique de Gemfall Arena et l’une des signatures que je souhaite conserver dans les jeux créés avec ZlormaEngine.&lt;/p&gt;

&lt;p&gt;Les ennemis peuvent laisser tomber des gems lorsqu’ils sont éliminés.&lt;/p&gt;

&lt;p&gt;Le joueur les récupère dans l’arène, puis peut les dépenser entre les vagues.&lt;/p&gt;

&lt;p&gt;La particularité est que chaque amélioration possède un avantage et un inconvénient.&lt;/p&gt;

&lt;p&gt;Par exemple :&lt;/p&gt;

&lt;p&gt;Amélioration&lt;/p&gt;

&lt;p&gt;Bonus&lt;/p&gt;

&lt;p&gt;Malus&lt;/p&gt;

&lt;p&gt;Rapid Core&lt;/p&gt;

&lt;p&gt;cadence de tir augmentée&lt;/p&gt;

&lt;p&gt;ennemis plus rapides&lt;/p&gt;

&lt;p&gt;Power Shard&lt;/p&gt;

&lt;p&gt;dégâts augmentés&lt;/p&gt;

&lt;p&gt;santé maximale réduite&lt;/p&gt;

&lt;p&gt;Vital Shell&lt;/p&gt;

&lt;p&gt;santé maximale augmentée&lt;/p&gt;

&lt;p&gt;déplacement plus lent&lt;/p&gt;

&lt;p&gt;Phase Boots&lt;/p&gt;

&lt;p&gt;vitesse augmentée&lt;/p&gt;

&lt;p&gt;prix plus élevés&lt;/p&gt;

&lt;p&gt;Gem Magnet&lt;/p&gt;

&lt;p&gt;attraction des gems améliorée&lt;/p&gt;

&lt;p&gt;ennemis plus résistants&lt;/p&gt;

&lt;p&gt;Je trouve ce système plus intéressant qu’une boutique où chaque achat rend simplement le joueur plus puissant.&lt;/p&gt;

&lt;p&gt;Le joueur doit réfléchir aux conséquences de son build.&lt;/p&gt;

&lt;p&gt;Des prix liés au score&lt;/p&gt;

&lt;p&gt;Le prix des améliorations peut évoluer selon la vague et le score.&lt;/p&gt;

&lt;p&gt;Une formule simple peut ressembler à ceci :&lt;/p&gt;

&lt;p&gt;fn calculate_price(base_price: u32, wave: u32, score: u32) -&amp;gt; u32 { base_price + wave * 3 + score / 500 }&lt;/p&gt;

&lt;p&gt;Un joueur performant gagne davantage de gems, mais les améliorations peuvent également devenir plus coûteuses.&lt;/p&gt;

&lt;p&gt;Ce système doit rester lisible. Si la formule est trop complexe ou trop punitive, le joueur ne comprend plus pourquoi les prix changent.&lt;/p&gt;

&lt;p&gt;L’équilibrage de la boutique sera donc amélioré progressivement grâce aux retours des joueurs.&lt;br&gt;
Les erreurs rencontrées&lt;/p&gt;

&lt;p&gt;Créer un moteur apporte forcément des erreurs.&lt;br&gt;
Le projet ne trouvait pas le script Bash&lt;/p&gt;

&lt;p&gt;Lors des premières versions, le script de génération se trouvait dans le dossier de téléchargement, mais il était lancé depuis un autre dossier.&lt;/p&gt;

&lt;p&gt;Linux indiquait alors :&lt;br&gt;
Plain Text&lt;br&gt;
Copy&lt;/p&gt;

&lt;p&gt;Aucun fichier ou dossier de ce nom&lt;/p&gt;

&lt;p&gt;La solution était simplement de se placer dans le bon dossier ou d’utiliser le chemin complet.&lt;/p&gt;

&lt;p&gt;Cette erreur m’a rappelé qu’un script destiné aux utilisateurs doit afficher clairement où il se trouve et où il crée les fichiers.&lt;br&gt;
Le moteur était uniquement compatible #Linux&lt;/p&gt;

&lt;p&gt;La première version utilisait directement X11.&lt;/p&gt;

&lt;p&gt;Le code ne pouvait donc pas être compilé tel quel pour Windows.&lt;/p&gt;

&lt;p&gt;La solution a été de séparer le moteur en une partie commune et plusieurs backends de plateforme.&lt;br&gt;
L’image du jeu était trop petite&lt;/p&gt;

&lt;p&gt;La résolution interne était affichée directement sans agrandissement adapté.&lt;/p&gt;

&lt;p&gt;Le jeu apparaissait dans un coin avec beaucoup d’espace noir.&lt;/p&gt;

&lt;p&gt;La solution a été de conserver la petite résolution pour les calculs, mais de l’agrandir proprement lors de l’affichage.&lt;br&gt;
Les ennemis se superposaient&lt;/p&gt;

&lt;p&gt;Lorsque plusieurs ennemis poursuivaient le joueur, ils pouvaient se placer exactement au même endroit.&lt;/p&gt;

&lt;p&gt;J’ai ajouté une petite force de séparation entre les ennemis proches.&lt;/p&gt;

&lt;p&gt;Cela donne des déplacements plus naturels et rend les groupes plus lisibles.&lt;br&gt;
Les fonctionnalités augmentent la complexité&lt;/p&gt;

&lt;p&gt;Chaque nouvelle fonction peut créer des effets secondaires.&lt;/p&gt;

&lt;p&gt;Une amélioration de vitesse peut modifier l’équilibrage. Une nouvelle particule peut affecter les performances. Une nouvelle plateforme peut ajouter des erreurs de compilation.&lt;/p&gt;

&lt;p&gt;Je dois donc avancer étape par étape et tester régulièrement.&lt;br&gt;
Ce que j’ai appris jusqu’à présent&lt;/p&gt;

&lt;p&gt;Le développement de ZlormaEngine m’a déjà appris plusieurs choses importantes.&lt;/p&gt;

&lt;p&gt;Un moteur n’est pas seulement un système de rendu. Il doit relier la plateforme, les entrées, les règles de jeu, les collisions, l’affichage et la gestion des ressources.&lt;/p&gt;

&lt;p&gt;J’ai également compris que l’optimisation ne consiste pas uniquement à rendre le code plus rapide.&lt;/p&gt;

&lt;p&gt;Elle concerne aussi :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;la taille de l’exécutable ;

la consommation de mémoire ;

la lisibilité du code ;

la facilité de compilation ;

la compatibilité entre systèmes ;

l’expérience du joueur.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Je suis encore en apprentissage, mais Gemfall Arena me donne un projet concret pour progresser.&lt;br&gt;
Les prochaines étapes&lt;/p&gt;

&lt;p&gt;Mes prochains objectifs pour ZlormaEngine sont :&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;stabiliser les versions Linux et Windows ;

améliorer les effets sonores procéduraux ;

mieux équilibrer les 10 vagues ;

rendre la difficulté adaptative plus naturelle ;

améliorer la Zlorma Gem Forge ;

ajouter de nouveaux comportements ennemis ;

vérifier régulièrement la limite de 3 Mio ;

publier davantage de DevLogs techniques ;

recueillir les retours des joueurs et développeurs.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;ZlormaEngine reste un moteur jeune, mais il fait déjà fonctionner une démonstration complète.&lt;/p&gt;

&lt;p&gt;Je souhaite continuer à l’améliorer progressivement, sans perdre son objectif principal : rester petit, compréhensible et spécialisé.&lt;br&gt;
Conclusion&lt;/p&gt;

&lt;p&gt;J’ai créé ZlormaEngine parce que je voulais apprendre en construisant réellement les différentes parties d’un jeu.&lt;/p&gt;

&lt;p&gt;Cette méthode est plus longue que l’utilisation d’un moteur existant, mais elle me permet de comprendre mes erreurs, de tester mes idées et de développer une technologie adaptée à Gemfall Arena.&lt;/p&gt;

&lt;p&gt;Je ne cherche pas à prétendre que mon moteur est meilleur que les solutions existantes.&lt;/p&gt;

&lt;p&gt;Je veux simplement créer un moteur qui correspond à mon projet, à mon niveau actuel et à ma manière d’apprendre.&lt;/p&gt;

&lt;p&gt;Chaque nouvelle version de Gemfall Arena représente aussi une nouvelle étape dans le développement de #ZlormaEngine.&lt;/p&gt;

&lt;p&gt;Zlormack&lt;br&gt;
Développeur indépendant de ZlormaEngine et Gemfall Arena&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Construire petit, comprendre mieux, progresser à chaque build.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;🎮 Gemfall Arena : &lt;a href="https://zlorma-studio.itch.io/gemfall-arena" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;br&gt;
🎬 Trailer : &lt;a href="https://youtu.be/326Y6vlaWhY" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>learning</category>
      <category>rust</category>
      <category>showdev</category>
    </item>
    <item>
      <title>VectHorde: Surviving the Swarm (Custom Rust Engine) 🦀</title>
      <dc:creator>Zlormack</dc:creator>
      <pubDate>Thu, 04 Jun 2026 11:38:02 +0000</pubDate>
      <link>https://dev.to/zlormack_32b7af384d362867/vecthorde-surviving-the-swarm-custom-rust-engine-2d55</link>
      <guid>https://dev.to/zlormack_32b7af384d362867/vecthorde-surviving-the-swarm-custom-rust-engine-2d55</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/june-game-jam-2026-06-03"&gt;June Solstice Game Jam&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Video Demo
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Prize Category
&lt;/h2&gt;

</description>
      <category>devchallenge</category>
      <category>gamechallenge</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Building a Custom 2D Game Engine in Rust: Lessons from VectHorde</title>
      <dc:creator>Zlormack</dc:creator>
      <pubDate>Tue, 02 Jun 2026 11:05:55 +0000</pubDate>
      <link>https://dev.to/zlormack_32b7af384d362867/building-a-custom-2d-game-engine-in-rust-lessons-from-vecthorde-25c8</link>
      <guid>https://dev.to/zlormack_32b7af384d362867/building-a-custom-2d-game-engine-in-rust-lessons-from-vecthorde-25c8</guid>
      <description>&lt;p&gt;Building a game engine from scratch is a massive undertaking, but it’s one of the most rewarding challenges a developer can face. I’ve recently decided to take on this journey by building the #ZlormaEngine, a 2D engine written entirely in #Rust.&lt;/p&gt;

&lt;p&gt;My goal was to create a lightweight, high-performance engine capable of handling hundreds of entities on screen without frame drops. To test its capabilities, I developed a Twin-Stick Shooter called VectHorde: Swarm Survival.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Rust for a Game Engine?&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**Memory Safety**: Rust’s borrow checker helps prevent common memory-related bugs, which is crucial when managing large numbers of game entities.

**Performance**: The control over memory layout and zero-cost abstractions allows for the kind of arcade fluidity I wanted to achieve.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Challenges &amp;amp; Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**Entity Management**: Handling the swarm survival mechanic required efficient data structures to ensure the game remains stable even when the screen is crowded.

**The "Game Feel"**: Beyond the technical performance, fine-tuning the inputs and the "Terminal Nexus" upgrade system was key to making the game fun to play.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;**&lt;br&gt;
Check out the project**&lt;/p&gt;

&lt;p&gt;I’ve just released the demo for VectHorde on itch.io. If you're interested in game dev, Rust, or just want to challenge your reflexes, feel free to give it a try!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;br&gt;
👉 https://zlormack-studio.itch.io/vecthorde-swarm-survival&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m currently gathering feedback to decide how to approach the full version of the game. If you have any insights on engine architecture or game design, I'd love to discuss them in the comments!&lt;/p&gt;

&lt;h1&gt;
  
  
  rust, #gamedev, #programming  #showdev
&lt;/h1&gt;

&lt;p&gt;Happy coding!&lt;br&gt;
&lt;strong&gt;Zlormack&lt;/strong&gt;&lt;br&gt;
Building the ZlormaEngine in Rust.&lt;br&gt;
Follow my journey on Itch.io&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>performance</category>
      <category>rust</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
