<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Emilien Leroy]]></title><description><![CDATA[I'm passionate with new technologies and specialy by the web! I like making web application from scratch to production build. My favorites technologies are Node]]></description><link>https://blog.emilienleroy.fr</link><generator>RSS for Node</generator><lastBuildDate>Wed, 10 Jun 2026 09:17:27 GMT</lastBuildDate><atom:link href="https://blog.emilienleroy.fr/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Rebooting the Blog]]></title><description><![CDATA[It's been a long time since I wrote something on this blog, but now it's time for a change! For several months, I've wanted to get back to writing articles, but life has been really busy, etc., etc. During the time I wasn't writing, I worked on many ...]]></description><link>https://blog.emilienleroy.fr/rebooting-the-blog</link><guid isPermaLink="true">https://blog.emilienleroy.fr/rebooting-the-blog</guid><category><![CDATA[Blogging]]></category><category><![CDATA[technology]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Wed, 22 Oct 2025 19:14:52 GMT</pubDate><content:encoded><![CDATA[<p>It's been a long time since I wrote something on this blog, but now it's time for a change! For several months, I've wanted to get back to writing articles, but life has been really busy, etc., etc. During the time I wasn't writing, I worked on many personal projects, most of which didn't succeed. That's why writing a devlog is a bit challenging for me, haha!</p>
<p>I really want to share my experiences and opinions on various topics. Previously, this blog was only about development, but I want to expand it to cover all aspects of technology, like new hardware, my gaming experiences, and, of course, continue discussing development and keep some devlogs on my current projects (which I'll talk about soon).</p>
<p>Why write this article? I'm not entirely sure, but I want to talk about things that affect me, both positively and negatively, and I'm not sure how to express them. I don't really care if nobody reads this; I just need to get these thoughts out and also improve my English vocabulary (I'm French ^^).</p>
<p>I don't have a set schedule for these articles; I'll write them when I feel like it, but I think at least one per month could be interesting. Especially for the devlogs, as I find the journey of developing an app or a game really fascinating.</p>
<p>I think that's about it. To sum up, I'm back! I don't know for how long, but I'm back!</p>
]]></content:encoded></item><item><title><![CDATA[From Escape the Wave to Pong Why I'm Taking on a New Challenge]]></title><description><![CDATA[This week marks the start of a new project for me. While my current project, Escape The Wave, is on hold as I'm awaiting visual assets from a friend, I've decided to take on a new challenge. One of the main reasons for starting a new project is that ...]]></description><link>https://blog.emilienleroy.fr/from-escape-the-wave-to-pong-why-im-taking-on-a-new-challenge</link><guid isPermaLink="true">https://blog.emilienleroy.fr/from-escape-the-wave-to-pong-why-im-taking-on-a-new-challenge</guid><category><![CDATA[Game Development]]></category><category><![CDATA[Godot]]></category><category><![CDATA[news]]></category><category><![CDATA[training]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 20 Mar 2023 14:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1679259117791/7b813153-c03b-43e5-a745-b3b31ef9d457.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week marks the start of a new project for me. While my current project, <a target="_blank" href="https://github.com/EmilienLeroy/EscapeTheWave">Escape The Wave</a>, is on hold as I'm awaiting visual assets from a friend, I've decided to take on a new challenge. One of the main reasons for starting a new project is that I want to train myself in implementing online multiplayer functionality, something which is currently too complex for me to implement in Escape The Wave.</p>
<p>For my new game, I've decided to create a simple multiplayer Pong game. The concept of Pong is straightforward, so there isn't much to say about the game itself. This week, I focused on developing the basics of the game, including two-player functionality and a score system.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1679259032091/42e4ad83-44a1-489a-84f1-78fd3dc885ac.gif" alt class="image--center mx-auto" /></p>
<p>Moving forward, I plan to work on the game's style and design to create a simple yet beautiful game. This will be my focus for next week.</p>
<p>Overall, I'm excited about this new project and look forward to continuing to develop it. While Escape The Wave is still a priority, I believe that taking on a new challenge will help me grow as a developer and better prepare me for future projects. You can find the repository of this project <a target="_blank" href="https://github.com/EmilienLeroy/DuoPong">here</a>.</p>
]]></content:encoded></item><item><title><![CDATA[Optimizing Mob Pathfinding. Improving Game Performance for Smooth Gameplay]]></title><description><![CDATA[During this week of development, I focused on improving the performance of my game Escape The Wave when a lot of mobs are searching for the player. This was a challenging task, but I found some effective solutions.
First, I updated the mob pathfindin...]]></description><link>https://blog.emilienleroy.fr/optimizing-mob-pathfinding-improving-game-performance-for-smooth-gameplay</link><guid isPermaLink="true">https://blog.emilienleroy.fr/optimizing-mob-pathfinding-improving-game-performance-for-smooth-gameplay</guid><category><![CDATA[Godot]]></category><category><![CDATA[news]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Programming Blogs]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 13 Mar 2023 14:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1678659306902/bb7e635f-cf12-4696-b575-7d5621d73916.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>During this week of development, I focused on improving the performance of my game <a target="_blank" href="https://github.com/EmilienLeroy/EscapeTheWave">Escape The Wave</a> when a lot of mobs are searching for the player. This was a challenging task, but I found some effective solutions.</p>
<p>First, I updated the mob pathfinding by using a NavigationAgent instead of the get_simple_path function of a Navigation node. This new approach allowed my game to have many more mobs on a small map. Previously, in the demo map, I was limited to around 70 mobs, or else the game would become laggy. But with this new technique, I can have more than 500 mobs without any lag on a small map.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678659169302/f1c784e5-f610-4875-8a99-8cec95f58260.gif" alt class="image--center mx-auto" /></p>
<p>However, this technique alone did not reduce lagging on a large map. To reduce lag on maps larger than a certain size, I had to make some compromises. Not all mobs can constantly search for the player on the map, as this significantly affects the game's performance. To address this, I used a VisibilityNotifier to detect if a mob is displayed on the screen or not. If a mob is displayed on the screen, it will try to reach the player's position. Once the mob is out of the screen, it will keep its current direction without searching for the player. When a mob spawns, it initially does not have any direction to go, which can cause mobs to stack on a single point, creating performance issues when the player is nearby. To prevent this issue, I simply define a random direction for the mob to go in until it crosses the player's path.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678659189227/4071fefa-c981-4141-8d5b-3a2d38a468cc.gif" alt class="image--center mx-auto" /></p>
<p>Using these techniques, my game no longer lags when many mobs are searching for the player. Only the displayed enemies try to attack the player, while the others go in a random direction. However, in the game, it appears as if all the mobs are trying to find and attack the player. Sometimes the game may experience slight FPS drops, but they are minimal and do not disrupt gameplay.</p>
<p>In conclusion, improving game performance can be a challenging task, especially when dealing with multiple mobs searching for the player. However, by using a NavigationAgent and a VisibilityNotifier, it is possible to significantly increase the number of mobs on a small map without causing lag. Additionally, by defining a random direction for mobs to go in when they spawn, it is possible to prevent stacking and performance issues when the player is nearby. These techniques have helped to make the game smoother and more enjoyable for players.</p>
]]></content:encoded></item><item><title><![CDATA[Island Escapades Updates on the Development of Escape The Wave]]></title><description><![CDATA[Game development can be both challenging and exciting. It requires a lot of effort and creativity to come up with a game that is both engaging and enjoyable. In this devlog, I will be sharing my progress on my new game Escape The Wave.
Adding Escape ...]]></description><link>https://blog.emilienleroy.fr/island-escapades-updates-on-the-development-of-escape-the-wave</link><guid isPermaLink="true">https://blog.emilienleroy.fr/island-escapades-updates-on-the-development-of-escape-the-wave</guid><category><![CDATA[Programming Blogs]]></category><category><![CDATA[news]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Game Development]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 06 Mar 2023 14:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1678052079073/1cd72f43-a64d-484e-8a39-c951514118d6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Game development can be both challenging and exciting. It requires a lot of effort and creativity to come up with a game that is both engaging and enjoyable. In this devlog, I will be sharing my progress on my new game <a target="_blank" href="https://github.com/EmilienLeroy/EscapeTheWave">Escape The Wave</a>.</p>
<h2 id="heading-adding-escape-element">Adding Escape Element</h2>
<p>This week, I worked on adding the escape element to the game, which emits a signal when the player enters into the zone. The idea is to allow players to escape from the island they are stranded on. To achieve this, I created a new node and added it to the procedural map using a function that gave me the border of the island. Once I got a random position based on the island's border, I added it to the map.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678042235775/e3df04e4-5f15-48e2-8f90-de2dfbdaa9e6.gif" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678042250806/50b4e34f-6bfc-40e1-8594-eccaf7cb8c5c.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-solving-map-issues">Solving Map Issues</h2>
<p>However, sometimes the island would have small archipelagos that could result in the escape being out of the main island's reach, making it impossible for the player to access it. To fix this, I created a function with the help of Chat GPT that removes all the unconnected islands. This allowed the escape to be always on the island.</p>
<p>But another issue arose when the wall could block the access to the escape. At the moment, I am waiting for assets for the game, so I haven't fixed this problem yet. I plan to work on it once I have implemented the assets. In addition to this, I also improved the loading time of the map when its size is too large.</p>
<h2 id="heading-mob-spawns-and-level-system">Mob Spawns and Level System</h2>
<p>Lastly, I added mob spawns on the island using a random position on the island. I also added a level system, where once the player enters the escape, they go to the next level. The next level will have a bigger map and more mobs, increasing the game's difficulty.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1678042271457/19e536b9-1c87-495b-9660-a5908cb1f67d.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In conclusion, game development is a never-ending process of tweaking and improving. With every step forward, new challenges arise, but with perseverance and determination, they can be overcome. Escape The Wave is still a work in progress, and I can't wait to see how it evolves in the coming weeks.</p>
]]></content:encoded></item><item><title><![CDATA[Introducing Procedural Generation For My Game]]></title><description><![CDATA[In this week's devlog for my new game Escape The Wave, I focused on the procedural generation of the map. It was a challenging but instructive process, and with the help of ChatGPT and a lot of research, I was able to successfully generate a map for ...]]></description><link>https://blog.emilienleroy.fr/introducing-procedural-generation-for-my-game</link><guid isPermaLink="true">https://blog.emilienleroy.fr/introducing-procedural-generation-for-my-game</guid><category><![CDATA[Open Source]]></category><category><![CDATA[Game Development]]></category><category><![CDATA[news]]></category><category><![CDATA[algorithms]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 27 Feb 2023 14:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1677448024584/fc635e4e-b3e2-4574-b459-ee84bac6dc8b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In this week's devlog for my new game <a target="_blank" href="https://github.com/EmilienLeroy/EscapeTheWave">Escape The Wave</a>, I focused on the procedural generation of the map. It was a challenging but instructive process, and with the help of ChatGPT and a lot of research, I was able to successfully generate a map for my game!</p>
<h2 id="heading-exploring-procedural-generation-methods">Exploring Procedural Generation Methods</h2>
<p>The objective of my game is to generate an island with randomly placed walls that have spaces for the player to pass through. To achieve this, I first researched various procedural generation methods. The first method I tried was perlin noise, which uses noise values to determine the position of each tile. While this method was easy to implement, it didn't allow me to control the form of the generated map to match my specific needs for the walls.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677447580590/d7acebce-e050-432f-aa8c-a5b86dd63443.gif" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677447596806/71e90dca-46ed-4e1d-b6a3-35040c3d5974.gif" alt class="image--center mx-auto" /></p>
<p>Next, I experimented with the walker algorithm, which is often used to create dungeon-like environments by creating rooms and links between them. I attempted to use this method to generate walls, but the result was inconclusive.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677447699552/1852f155-1b15-49e3-a8fc-8c971dc90eeb.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-developing-a-custom-algorithm">Developing a Custom Algorithm</h2>
<p>Ultimately, I decided to create my own algorithm inspired by the two previous methods. I began by creating a 2D array with a predefined size, filling it with zeros to represent water. Then, I added an island by placing a circle in the center of the array with a radius equal to one-quarter of the array size. I filled this circle with ones to represent grass. To improve the form of the island, which initially resembled a simple circle, I used perlin noise and added water depending on the noise value. To ensure that the island did not become an archipelago, I applied the noise only on the border of the circle.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677447726094/6283baf3-9d83-4b05-af21-321dfbb831ca.gif" alt class="image--center mx-auto" /></p>
<p>Finally, I added walls with a simple pattern, removing the middle of any wall larger than six tiles to ensure that the player could pass through all walls.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1677447744965/193c1858-8b1a-4a41-ace4-bff3691c71ba.gif" alt class="image--center mx-auto" /></p>
<blockquote>
<p>You can find the full algo <a target="_blank" href="https://github.com/EmilienLeroy/EscapeTheWave/blob/4c86896b3c7923159a6795f52652288af4f32f20/entities/world/world.gd">here</a></p>
</blockquote>
<h2 id="heading-conclusion">Conclusion</h2>
<p>Overall, the procedural generation of the map was a challenging but rewarding process. I am excited to continue developing my new game and to see how the generated map will enhance the player's experience.</p>
]]></content:encoded></item><item><title><![CDATA[Enemies, Health Regeneration, and Scene Updates]]></title><description><![CDATA[Hi everybody! It's the third week of the development of my new game, Escape The Wave. I'm excited to share some of the new features I've added to the game.
Enemies can attack the player
One of the most significant updates to the game is that enemies ...]]></description><link>https://blog.emilienleroy.fr/enemies-health-regeneration-and-scene-updates</link><guid isPermaLink="true">https://blog.emilienleroy.fr/enemies-health-regeneration-and-scene-updates</guid><category><![CDATA[Open Source]]></category><category><![CDATA[Game Development]]></category><category><![CDATA[Programming Blogs]]></category><category><![CDATA[news]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 20 Feb 2023 14:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1676836245344/fbfd683e-b1da-4635-83be-1df9ccf03999.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everybody! It's the third week of the development of my new game, <a target="_blank" href="https://github.com/EmilienLeroy/EscapeTheWave">Escape The Wave</a>. I'm excited to share some of the new features I've added to the game.</p>
<h2 id="heading-enemies-can-attack-the-player">Enemies can attack the player</h2>
<p>One of the most significant updates to the game is that enemies can now attack the player. This feature adds a new level of difficulty to the game, making it even more challenging. When an enemy is near the player, the player will lose some of their life. If the player loses all of their life, the game is over.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676836033139/3d611c58-b3e5-4d4e-86cf-59ea90a8db6e.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-life-item-added">Life item added</h2>
<p>To balance out the increased difficulty, I've added a life item to the game. This item allows the player to regain some of their life when they touch it. Currently, I've added the life item statically to the game, but in the future, it will spawn randomly on the map.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676836052351/f39e644f-3d95-4938-8250-b7d3d5ef1fc2.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-home-and-score-scenes-added">Home and Score Scenes Added</h2>
<p>In addition to these new gameplay elements, I've also worked on the home and score scenes. To make it easier to switch between scenes and pass data between them, I've added a router singleton. The home and score views are currently quite basic, as I haven't defined the theme of the game yet.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676836068236/cfbbf7b1-0f42-43b7-8ba6-63480ba80c5f.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-invulnerable-frames-added">Invulnerable Frames Added</h2>
<p>Finally, I've added some invulnerable frames to the player when they take damage. This means that the player will blink when they're invulnerable, indicating to the user that they cannot take any more damage during this time.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676836086497/b1222571-4421-41e2-9e9b-3e003c7e0759.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-whats-next">What's next</h2>
<p>Overall, I'm happy with the progress I've made in the third week of development. These new features add more depth to the game and make it even more engaging for players. I can't wait to see how the game continues to evolve as I add more elements to it in the coming weeks. Stay tuned for more updates!</p>
]]></content:encoded></item><item><title><![CDATA[Escape the Wave, Week Two Development Update]]></title><description><![CDATA[It's the second week of development for the game "Escape the Wave" and this week was focused on creating the base mob for the game. The goal of the game is to escape the waves of enemies that come at you, and this week was dedicated to creating the f...]]></description><link>https://blog.emilienleroy.fr/escape-the-wave-week-two-development-update</link><guid isPermaLink="true">https://blog.emilienleroy.fr/escape-the-wave-week-two-development-update</guid><category><![CDATA[Game Development]]></category><category><![CDATA[Developer]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Sun, 12 Feb 2023 20:00:16 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1676231769149/c475dbec-c391-488d-a78a-8d8205bdb8d2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It's the second week of development for the game "<a target="_blank" href="https://github.com/EmilienLeroy/EscapeTheWave">Escape the Wave</a>" and this week was focused on creating the base mob for the game. The goal of the game is to escape the waves of enemies that come at you, and this week was dedicated to creating the foundation for these enemies.</p>
<h2 id="heading-creating-the-base-mob">Creating the Base Mob</h2>
<p>The first step in creating the base mob was to create a simple red square with some health. This square will serve as the foundation for all future mobs in the game. When a bullet from the player hits the mob, it will lose some health, and when its health reaches zero, it will be removed from the game. This basic mechanic sets the foundation for creating more complex and challenging enemies in the future.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676228042703/36d3f712-cfd8-4100-894b-9cd55f58c2c6.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-adding-the-pathfinding-system">Adding the Pathfinding System</h2>
<p>The next step was to work on the pathfinding system for the mobs. This system allows the mobs to follow the player, making the game more challenging and engaging. Currently, an old method is used to find the path to the player, which works with a tileset. However, in a future version, this pathfinding system will be improved using the new navigation system in Godot. This will make the pathfinding more sophisticated and accurate, providing a better gaming experience for the player.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676228368550/3011433f-b4bf-4372-9de5-a77f801da8c9.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-adding-the-player-score-system">Adding the Player Score System</h2>
<p>Finally, the player score system was added to the game. Now, when an enemy is killed, the player will earn points towards their score. This score system is simple for now, but it will be improved in the coming weeks to make the game even more engaging and rewarding.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1676228377884/5cd4cb72-dd4d-4d91-8b50-30f622f3df40.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-whats-next">What's next</h2>
<p>In conclusion, this week was a productive one for the development of Escape the Wave. The base mob was created, the pathfinding system was improved, and the player score system was added, providing a solid foundation for creating more challenging enemies and a more engaging gaming experience.</p>
]]></content:encoded></item><item><title><![CDATA[Introducing Escape the Wave. My Exciting New Game!]]></title><description><![CDATA[Last week, I officially released my first game, Falling Square, which marked a great milestone for me. However, the serious work now begins. This week, I'm starting development on my second game, Escape the Wave. It will be a simple shooting game wit...]]></description><link>https://blog.emilienleroy.fr/introducing-escape-the-wave-my-exciting-new-game</link><guid isPermaLink="true">https://blog.emilienleroy.fr/introducing-escape-the-wave-my-exciting-new-game</guid><category><![CDATA[Developer]]></category><category><![CDATA[Game Development]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 06 Feb 2023 02:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1675624576974/ff79d408-e67e-41af-894c-a547ad3bbaae.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Last week, I officially released my first game, <a target="_blank" href="https://github.com/EmilienLeroy/FallingSquare/">Falling Square</a>, which marked a great milestone for me. However, the serious work now begins. This week, I'm starting development on my second game, <a target="_blank" href="https://github.com/EmilienLeroy/EscapeTheWave">Escape the Wave</a>. It will be a simple shooting game with some surprises (which I'll keep secret for now). The game will be available on Android and iOS, like my first game, and may also be available on Windows, Linux, and macOS.</p>
<h2 id="heading-virtual-joysticks-for-player-movement">Virtual Joysticks for Player Movement</h2>
<p>I've made my first addition to the game by incorporating the player and their movements. To cater to mobile devices, I've added a virtual joystick that enables users to move the player. I've also added another virtual joystick for rotation. Both virtual joysticks were developed by MarcoFazioRandom and can be found under the name "Virtual-Joystick-Godot" on GitHub at this link: <a target="_blank" href="https://github.com/MarcoFazioRandom/Virtual-Joystick-Godot">https://github.com/MarcoFazioRandom/Virtual-Joystick-Godot</a>."</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675624374334/e8dba583-2c13-4937-8407-d4ebfbe54bec.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-implementation-of-player-shooting-mechanism">Implementation of Player Shooting Mechanism</h2>
<p>Next, I added the bullet and player shooting functionality. Currently, it's just a simple white ball without any textures, but there will likely be various types of bullets with unique effects in the future. To shoot, use the rotation joystick. Rotating the joystick will automatically trigger a shot.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675624395183/2c5a1767-6d6a-4319-b683-43906001cee4.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-addition-of-first-wall-and-camera-implementation">Addition of First Wall and Camera Implementation</h2>
<p>Finally, I've added the first wall using a simple tileset, as well as a camera that follows the player. When a bullet hits a wall, it is automatically destroyed. The camera and wall serve as the first elements in creating a visually appealing and functional environment for the game.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1675624421312/1194c58a-e2d7-4276-b43b-523992485b10.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-whats-next">What's next</h2>
<p>In the first week of development, I successfully laid the foundation for my new game. Building upon this solid foundation, I plan to add the first enemy in the upcoming week. This will bring the game one step closer to completion and provide players with a new challenge to overcome. I am eager to continue working on this project and can't wait to see how it evolves in the coming weeks.</p>
]]></content:encoded></item><item><title><![CDATA[The tool that revolutionized my workflow. My experience with Vite]]></title><description><![CDATA[In my previous post, I shared my experience with TSED. Today, I want to talk about a tool that has greatly increased my workflow: ViteJS. For those unfamiliar, ViteJS is a web application development build tool created by Evan You and his team.
Befor...]]></description><link>https://blog.emilienleroy.fr/the-tool-that-revolutionized-my-workflow-my-experience-with-vite</link><guid isPermaLink="true">https://blog.emilienleroy.fr/the-tool-that-revolutionized-my-workflow-my-experience-with-vite</guid><category><![CDATA[vite]]></category><category><![CDATA[Productivity]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Open Source]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Wed, 01 Feb 2023 14:00:39 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1675202764729/02a0bbd5-b03c-4b3f-be36-16e7ad79ed66.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In my previous post, I shared my <a target="_blank" href="https://blog.emilienleroy.fr/the-framework-that-revolutionized-my-workflow">experience with TSED</a>. Today, I want to talk about a tool that has greatly increased my workflow: <a target="_blank" href="https://vitejs.dev/">ViteJS</a>. For those unfamiliar, ViteJS is a web application development build tool created by <a target="_blank" href="https://github.com/yyx990803">Evan You</a> and his team.</p>
<p>Before discussing ViteJS, I want to mention the previous build tool I used, Webpack. Webpack has a prominent place in web development and I used it on several projects over the years (and still use it on some legacy projects). However, it is slower than ViteJS due to its bundling process at each change. Even with a cache system, it still lags behind Vite in terms of speed.</p>
<p>I adopted ViteJS early on (<a target="_blank" href="https://github.com/EmilienLeroy/labs/blob/494f185f26aa34251f27deeebd69d434aa19a4ee/todo-vue3/package.json">even before its v1.0.0 release</a>) and it has been one of the most incredible experiences in my developer life. Webpack used to take over 30 seconds to update even small changes, but with ViteJS, these updates take less than a second, just the time it takes to switch to the browser. Speed is one of ViteJS's biggest advantages. This is achieved by not bundling the app during development, but instead using the module script tag to improve module dependencies, which are all served as HTTP endpoints. For the build, Rollup is used to create the final bundle.</p>
<p>Another key advantage over Webpack is its simple configuration. No complicated setup is required. I can't count the number of hours I spent configuring Webpack, but it was a frustrating experience. Vite supports popular web frameworks with official plugins and has a large collection of plugins maintained by the community. It works seamlessly. I even created <a target="_blank" href="https://github.com/Kamiapp-fr/vite-plugin-cem">a plugin</a> for Vite, a simple one for generating a custom-element.json manifest for web components.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> vue <span class="hljs-keyword">from</span> <span class="hljs-string">'@vitejs/plugin-vue'</span>

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> {
  plugins: [vue()],
}
</code></pre>
<blockquote>
<p>For example, it's super easy to configure a vue app using vitejs.</p>
</blockquote>
<p>As someone who has used both ViteJS and Webpack, I can attest to the superiority of ViteJS in many ways. Its lightning-fast update speeds and effortless configuration make it a joy to work with, compared to the headaches of configuring Webpack. The support for popular web frameworks and the wealth of community-maintained plugins only add to its appeal. I have even created a plugin myself, which further highlights the ease of customization. I highly recommend ViteJS to any web developer seeking a hassle-free and efficient build tool.</p>
]]></content:encoded></item><item><title><![CDATA[My First Mobile Game: Falling Square is Officially Out on App Store and Play Store]]></title><description><![CDATA[I am excited to announce that my first mobile game, Falling Square, is officially out on the App Store and Play Store! Falling Square is a fun and challenging game that is easy to pick up and play, but difficult to master.

In Falling Square, the goa...]]></description><link>https://blog.emilienleroy.fr/my-first-mobile-game-falling-square-is-officially-out-on-app-store-and-play-store</link><guid isPermaLink="true">https://blog.emilienleroy.fr/my-first-mobile-game-falling-square-is-officially-out-on-app-store-and-play-store</guid><category><![CDATA[Game Development]]></category><category><![CDATA[Games]]></category><category><![CDATA[Developer]]></category><category><![CDATA[Godot]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Wed, 25 Jan 2023 18:52:28 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1674672361513/428db8a3-67e7-44d8-85c5-f4adcd0293ca.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I am excited to announce that my first mobile game, Falling Square, is officially out on the <a target="_blank" href="https://apps.apple.com/us/app/falling-square-game/id1665452389">App Store</a> and <a target="_blank" href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US">Play Store</a>! Falling Square is a fun and challenging game that is easy to pick up and play, but difficult to master.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1674672389368/7625b7dc-1f60-4d4b-a487-60516053f3e6.gif" alt class="image--center mx-auto" /></p>
<p>In Falling Square, the goal is to touch the square before it leaves the screen. The game starts with a single square falling from the top of the screen, and the player must tap the square before it reaches the bottom of the screen. As the player progresses through the game, more squares will fall at a faster pace, making the game more challenging.</p>
<p>The game also features a life system, where the player starts with three lives. If the player misses a square, they will lose a life. If the player loses all their lives, it's game over. The game features simple yet challenging gameplay, colorful graphics, and a catchy soundtrack. The game is available for free on both the App Store and <a target="_blank" href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US">Play Store</a>.</p>
<p>Overall, Falling Square is a fun and addictive game that is perfect for anyone looking for a new mobile game to play. I hope you enjoy it as much as I enjoyed creating it!</p>
<p>Links:</p>
<ul>
<li><p><a target="_blank" href="https://apps.apple.com/us/app/falling-square-game/id1665452389">App Store</a></p>
</li>
<li><p><a target="_blank" href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US">Play Store</a></p>
</li>
<li><p><a target="_blank" href="https://github.com/EmilienLeroy/FallingSquare">Github</a></p>
</li>
</ul>
]]></content:encoded></item><item><title><![CDATA[Join the beta test for Falling Square on iOS]]></title><description><![CDATA[Hello everyone,
I am excited to announce that the iOS version of Falling Square is currently in testing. You can download it on TestFlight using this direct link. I welcome any feedback from players. Your input will help me to make the game even bett...]]></description><link>https://blog.emilienleroy.fr/join-the-beta-test-for-falling-square-on-ios</link><guid isPermaLink="true">https://blog.emilienleroy.fr/join-the-beta-test-for-falling-square-on-ios</guid><category><![CDATA[Game Development]]></category><category><![CDATA[Testing]]></category><category><![CDATA[Games]]></category><category><![CDATA[iOS]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Tue, 17 Jan 2023 14:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1673904398515/a31f24a2-c616-406b-b91a-85d1a1cc59d4.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello everyone,</p>
<p>I am excited to announce that the iOS version of Falling Square is currently in testing. You can download it on TestFlight using this direct <a target="_blank" href="https://testflight.apple.com/join/FDwsjAQR">link</a>. I welcome any feedback from players. Your input will help me to make the game even better for everyone. I'm thrilled to bring this game to iOS users and can't wait for you to try it out. So, download the game now and let us know what you think!</p>
<p>Falling Square is a fast-paced and highly addictive mobile game that will put your reflexes to the test. The goal of the game is to touch the squares that are falling from the top of the screen before they leave the screen. The game is simple, yet challenging, and it requires quick reflexes.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673904303356/5ef13a77-23b1-493b-806d-72ef58329902.gif" alt="games" class="image--center mx-auto" /></p>
<p><strong>Download link:</strong> <a target="_blank" href="https://testflight.apple.com/join/FDwsjAQR">https://testflight.apple.com/join/FDwsjAQR</a></p>
<p>Thank you for reading this article!</p>
]]></content:encoded></item><item><title><![CDATA[The framework that revolutionized my workflow.]]></title><description><![CDATA[As a developer, it's always important to find ways to streamline the development process and save time. For the past two years, I've been using Ts.ED as the framework for all of my applications and it's been a game-changer. Not only has it allowed me...]]></description><link>https://blog.emilienleroy.fr/the-framework-that-revolutionized-my-workflow</link><guid isPermaLink="true">https://blog.emilienleroy.fr/the-framework-that-revolutionized-my-workflow</guid><category><![CDATA[software development]]></category><category><![CDATA[Developer]]></category><category><![CDATA[APIs]]></category><category><![CDATA[TypeScript]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 09 Jan 2023 14:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1673204652167/d06dde8a-144e-4a67-8445-2cbf7a1ede92.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>As a developer, it's always important to find ways to streamline the development process and save time. For the past two years, I've been using <a target="_blank" href="https://tsed.io/">Ts.ED</a> as the framework for all of my applications and it's been a game-changer. Not only has it allowed me to gain back lost development time, but it's also been the foundation for my open-source project <a target="_blank" href="https://github.com/EmilienLeroy/HighScore">HighScore</a>.</p>
<h2 id="heading-abstraction">Abstraction</h2>
<p>One of the key features of the Ts.ED framework is its abstraction layer, which allows developers to use Express, Koa, or any other HTTP server of their choice. This gives developers the freedom to leverage the vast number of third-party Node.js modules available for the underlying platform, enabling them to build highly customized and feature-rich applications. The abstraction layer provided by Ts.ED makes it easy to integrate with various databases and APIs, and to add additional functionality to your applications.</p>
<h2 id="heading-decorators">Decorators</h2>
<p>Another standout feature of Ts.ED is the implementation of decorators, which makes it easy to describe controllers and services within the framework. The decorators provided by Ts.ED allows developers to clearly define the functionality of their controllers and services, making it easy to understand and maintain their code. Additionally, the dependency injection system in Ts.ED makes it simple to access services from any file, further streamlining the development process.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> {Get} <span class="hljs-keyword">from</span> <span class="hljs-string">"@tsed/schema"</span>;
<span class="hljs-keyword">import</span> {Controller} <span class="hljs-keyword">from</span> <span class="hljs-string">"@tsed/di"</span>;
<span class="hljs-keyword">import</span> {PathParams} <span class="hljs-keyword">from</span> <span class="hljs-string">"@tsed/platform-params"</span>;

<span class="hljs-keyword">interface</span> Calendar {
  id: <span class="hljs-built_in">string</span>;
  name: <span class="hljs-built_in">string</span>;
}

<span class="hljs-meta">@Controller</span>(<span class="hljs-string">"/calendars"</span>)
<span class="hljs-keyword">export</span> <span class="hljs-keyword">class</span> CalendarCtrl {
  <span class="hljs-meta">@Get</span>(<span class="hljs-string">"/:id"</span>)
  <span class="hljs-keyword">async</span> get(<span class="hljs-meta">@PathParams</span>(<span class="hljs-string">"id"</span>) id: <span class="hljs-built_in">string</span>): <span class="hljs-built_in">Promise</span>&lt;Calendar&gt; {
    <span class="hljs-keyword">return</span> {
      id,
      name: <span class="hljs-string">"test"</span>
    };
  }
}
</code></pre>
<blockquote>
<p>A simple example of controller using Ts.ED !</p>
</blockquote>
<h2 id="heading-documentation">Documentation</h2>
<p>Another advantage of Ts.ED is its extensive documentation and support. The Ts.ED team has done a great job of providing detailed documentation on how to use the framework and its various features, as well as maintaining an active community of users who are willing to help answer questions and offer support. This has made it easy for me to get up and running with Ts.ED, and troubleshoot any issues that have arisen along the way.</p>
<h2 id="heading-third-party">Third-party</h2>
<p>The Ts.ED team has already created implementations for a wide range of popular modules, such as Swagger, Mongoose, and Socket.io. This allows developers to easily integrate these tools into their Ts.ED projects, saving time and effort. For a complete list of the available integrations, see the <a target="_blank" href="https://tsed.io/warehouse/">Ts.ED documentation</a>. I have also personally contributed to the development of the Terminus package for Ts.ED. These integrations demonstrate the commitment of the Ts.ED team to support a diverse and growing ecosystem of tools and resources for developers.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673203255403/b9954c80-cbf1-4992-a868-d91e65539d8d.png" alt="Plugin" class="image--center mx-auto" /></p>
<blockquote>
<p>A list of modules available on Ts.ED !</p>
</blockquote>
<h2 id="heading-the-team">The team</h2>
<p>The Ts.ED framework is primarily maintained by <a target="_blank" href="https://twitter.com/RomainLenzotti">Romain Lenzotti</a>, who does an incredible job keeping the framework up-to-date and reliable. One of the standout features of Ts.ED is its frequent releases, which ensure that the framework is continuously improving and addressing any potential issues. This is a major advantage for a framework like Ts.ED, as it helps to ensure that it stays current and relevant in the fast-paced world of web development.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1673203480185/08069c4f-2a6c-4c0a-b325-5c9e37a4a127.png" alt="team" class="image--center mx-auto" /></p>
<h2 id="heading-conclusion">Conclusion</h2>
<p>In conclusion, there are many compelling reasons to consider using Ts.ED for your next project. Its simplicity and ease of use, extensive documentation and support, and reliable performance make it a standout choice for web development. As someone who has personally used the framework to build applications I highly recommend giving Ts.ED a try. Whether you are a beginner or an experienced developer, Ts.ED has something to offer and can help you to streamline your workflow and build better applications.</p>
]]></content:encoded></item><item><title><![CDATA[Maximizing Your Leaderboards with Highscore's New Category System and Meta Field]]></title><description><![CDATA[Hi everyone! Before the holiday I released a new version of Highscore, an open-source leaderboard for indie game developers. This release includes a new category system and some additional small features. If you're not familiar with Highscore, it's a...]]></description><link>https://blog.emilienleroy.fr/maximizing-your-leaderboards</link><guid isPermaLink="true">https://blog.emilienleroy.fr/maximizing-your-leaderboards</guid><category><![CDATA[iwritecode]]></category><category><![CDATA[Open Source]]></category><category><![CDATA[Web Development]]></category><category><![CDATA[software development]]></category><category><![CDATA[GitHub]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 02 Jan 2023 14:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1672410938962/5aa0ef3c-d691-4ead-b0f8-dbd7f368bb3f.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone! Before the holiday I released a new version of <a target="_blank" href="https://github.com/EmilienLeroy/HighScore/">Highscore</a>, an open-source leaderboard for indie game developers. This release includes a new category system and some additional small features. If you're not familiar with <a target="_blank" href="https://github.com/EmilienLeroy/HighScore/">Highscore</a>, it's a great tool for indie game developers to track and compare the scores of their games. I hope you'll check it out and let us know what you think!</p>
<h2 id="heading-category-system">Category system</h2>
<p>One of the main features of this release is the new category system, which allows you to create an unlimited number of leaderboards using a single field for the score. To use it, simply add the <code>category</code> field with the name of the desired category. Scores submitted with a category will not appear on the main leaderboard, but you can now retrieve all scores for a specific category by including the <code>category</code> field in your request. This is a great way to track scores for different groups or categories within your game or application.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672411620717/dcdd1cd9-2bb0-442c-b2e5-6e89d24f9e92.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-the-meta-field">The meta field</h2>
<p>This release also introduces a new field called the <code>meta</code> field in the score model. This field allows you to pass in any object with your data, with no restrictions on what you can include. For example, you could use this field to attach additional stats or metadata to a score, such as the number of turns taken or the difficulty level of the game. The <code>meta</code> field is a flexible and powerful way to add more context and information to your scores, and can be used to tailor your leaderboards to your specific needs.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672411594148/827d11fa-ba74-4e91-a9f2-8eca34952390.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-privacy-policy-view">Privacy policy view</h2>
<p>Highscore now includes a default privacy policy that can be customized using environment variables. You can view the privacy policy by accessing the endpoint <code>/privacy</code>. Using the environment variables, you can configure the country, email, and website information included in the policy. By providing a clear and transparent privacy policy, you can help build trust with your users and ensure that their personal information is protected.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1672411522871/16e6526e-5e24-4cf5-981c-20bfd13657e7.png" alt class="image--center mx-auto" /></p>
<h2 id="heading-whats-next">What's next</h2>
<p>The next release of <a target="_blank" href="https://github.com/EmilienLeroy/HighScore/">Highscore</a> is expected to include a new achievement system, which will allow you to add goals and milestones to your game. In addition, we will be adding websocket events, which will allow you to listen when new scores are added.  We hope these new features will be useful and help you get even more out of Highscore. </p>
<p>Thanks for reading!</p>
]]></content:encoded></item><item><title><![CDATA[Dev Retro 2022, A Retrospective of My Year as a Full Stack Developer and Indie Game Developer]]></title><description><![CDATA[Hi, I'm Emilien Leroy, a Full Stack developer since 2016. If you want to learn more about my technical skills and experience, you can check out my previous introduction post.
This year has been a great one for me in terms of personal and professional...]]></description><link>https://blog.emilienleroy.fr/a-retrospective-of-my-year</link><guid isPermaLink="true">https://blog.emilienleroy.fr/a-retrospective-of-my-year</guid><category><![CDATA[Developer]]></category><category><![CDATA[#DevRetro2022]]></category><category><![CDATA[Game Development]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 19 Dec 2022 14:00:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1671308705260/uGRslfEtv.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi, I'm Emilien Leroy, a Full Stack developer since 2016. If you want to learn more about my technical skills and experience, you can check out <a target="_blank" href="https://blog.emilienleroy.fr/hello-there-let-me-introduce-myself">my previous introduction post</a>.</p>
<p>This year has been a great one for me in terms of personal and professional growth. I've had the opportunity to create my first game and work on some exciting projects at my job.</p>
<h2 id="heading-my-journey-as-an-indie-game-developer-from-beginner-to-published">My Journey as an Indie Game Developer: From Beginner to Published</h2>
<p>One of the highlights of the year for me was completing the development of my first game. It was a challenging and rewarding experience, and I learned a lot about the process of creating a game from start to finish.</p>
<p>In January 2022, I started learning how to develop games using the <a target="_blank" href="https://godotengine.org/">Godot</a> game engine and <a target="_blank" href="https://www.blender.org/">Blender</a> to gain some 3D skills. However, I quickly realized that learning two things at the same time was quite challenging. After three months of trying to juggle both, I decided to focus solely on learning how to create 2D games using Godot.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671306046282/aUh6ajZKa.gif" alt="First 3D game" class="image--center mx-auto" /></p>
<blockquote>
<p>One of my first 3D games made with Godot and Blender.</p>
</blockquote>
<p>During this time, I have made some small games with the help of tutorials. These projects have allowed me to get a better understanding of the Godot engine and the process of game development. While I'm still a beginner, I'm excited to continue learning and improving my skills.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671305818449/P136TWhTy.gif" alt="My second game" class="image--center mx-auto" /></p>
<blockquote>
<p>This game was made following this tutorial from <a target="_blank" href="https://kidscancode.org/godot_recipes/3.x/games/circle_jump/">KidsCanCode</a>.</p>
</blockquote>
<p>In April 2022, I began developing my first game called <a target="_blank" href="https://github.com/EmilienLeroy/FallingSquare">"Falling Square"</a>. The goal of the game is to touch the falling squares as they enter a designated zone before they fall off the screen. Each time a square falls off the screen, the player loses a life. If the player loses three lives, the game is over. After a month of development, I released the first version of the game on Android.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671305851354/k1E1i9vpH.gif" alt="Falling Square" class="image--center mx-auto" /></p>
<blockquote>
<p>This is the current version of Falling Square, after a few months of development. You can download the Android version <a target="_blank" href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US&amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1">here</a>!</p>
</blockquote>
<p>I received positive feedback from my friends who tested the game, and one of them suggested adding an online leaderboard to keep track of high scores. Inspired by this suggestion, I decided to create an open-source leaderboard for indie game developers.</p>
<p>In July 2022, I started working on <a target="_blank" href="https://github.com/EmilienLeroy/HighScore">"Highscore"</a>, an open-source leaderboard platform for indie game developers. After two weeks of development, I released the v0.1.0 version of the project. I also implemented it in my own game, "Falling Square". I'm excited to see how the community uses this tool and hope it helps other indie game developers create more engaging and competitive games.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671306251739/6iLMY_cH2.png" alt class="image--center mx-auto" /></p>
<blockquote>
<p>You can find the HighScore repository <a target="_blank" href="https://github.com/EmilienLeroy/HighScore">here</a>!</p>
</blockquote>
<p>Since September 2022, I've been working on improving both my game "Falling Square" and my project "Highscore". I have big plans for both in the coming year. For "Falling Square", I'm planning to release an iOS version in 2023. This will allow more players to enjoy the game and hopefully bring in a larger audience. As for "Highscore", I'm looking to add more cool features that will make it even more useful for indie game developers. I'm always looking for feedback and ideas from the community, so if you have any suggestions for features you'd like to see, don't hesitate to reach out.</p>
<p>Overall, I'm excited to see what the future holds for both "Falling Square" and "Highscore". I'm looking forward to continuing to develop and improve both projects.</p>
<h2 id="heading-a-look-back-at-my-year-at-savoy-international-developing-applications-and-more">A Look Back at My Year at Savoy International: Developing Applications and More</h2>
<p>Since 2016, I've been working as a Full Stack developer at <a target="_blank" href="https://www.groupe-savoy.fr/?lang=en">Savoy International</a>, an automobile industry company. My job is to develop applications that improve production activities. All the tools I develop are part of the <a target="_blank" href="https://kamiapp.fr/fr/">Kami project</a>, a range of applications designed to enhance the performance of industrial companies.</p>
<p>Initially, Kami was an internal project, but since 2019, we have been working on commercializing it. We are excited to share the benefits of these tools with other businesses and help them streamline their operations.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671306293177/B2x5UVy7R.jpg" alt class="image--center mx-auto" /></p>
<blockquote>
<p>A screenshot of one application of the Kami range!</p>
</blockquote>
<p>This year, we have had the opportunity to work with external companies to install our Kami applications within their businesses. It has been a very enriching experience for me as I've had the chance to meet a lot of new people and learn from their experiences.</p>
<p>In addition to working with external clients, I have also been continuously improving the tools for my company. We have added a lot of new, exciting features that enhance the functionality and usability of the applications. It's always rewarding to see the positive impact of my work on the company and our clients.</p>
<p>Savoy International has several new projects in the works, including <a target="_blank" href="https://kilow.com/">Kilow</a>, an electric car for daily use on the roads. For this project, I have had the opportunity to work on the car's dashboard display. It has been an exciting and unique experience for me, and I've enjoyed being a part of this innovative project.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671306767499/KpLCz1pd-.jpg" alt class="image--center mx-auto" /></p>
<blockquote>
<p>The Kilow car called "La Bagnole" at the "Mondial de l'auto" into Paris!</p>
</blockquote>
<p>The latest project I've been working on is a small plugin for ViteJS called "<a target="_blank" href="https://github.com/Kamiapp-fr/vite-plugin-cem">vite-plugin-cem</a>". This plugin allows developers to generate the manifest of their web components using Vite. It's an open-source project, so anyone is welcome to use it in their own projects or contribute to its development. I'm excited to see how this plugin is used by the community and hope it helps make the process of creating web components with Vite even easier.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1671306183534/yeu7DJIJA.jpg" alt class="image--center mx-auto" /></p>
<blockquote>
<p>Documentation generated with &lt;<a target="_blank" href="https://api-viewer.open-wc.org/">api-viewer</a>\&gt; web component, using my plugin to generate the manifest!</p>
</blockquote>
<h2 id="heading-conclusion">Conclusion</h2>
<p>This year has been a productive and exciting one for me. Overall, I've had the opportunity to work on a variety of projects and learn new skills, which has been a rewarding experience. I'm looking forward to what the future holds. </p>
<p>Thank you for reading!</p>
]]></content:encoded></item><item><title><![CDATA[How I prevent offensive words in my application]]></title><description><![CDATA[Highscore v0.3.0
The last week I worked on my open-source project HighScore and I released a new version. HighScore is an open-source leaderboard and is an alternative to the Google Play Service, which allows you to create leaderboards for your games...]]></description><link>https://blog.emilienleroy.fr/how-i-prevent-offensive-words-in-my-application</link><guid isPermaLink="true">https://blog.emilienleroy.fr/how-i-prevent-offensive-words-in-my-application</guid><category><![CDATA[Open Source]]></category><category><![CDATA[TypeScript]]></category><category><![CDATA[General Programming]]></category><category><![CDATA[software development]]></category><category><![CDATA[Web Development]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 12 Dec 2022 14:00:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1670782683321/Pk8ly3mUd.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-highscore-v030">Highscore v0.3.0</h2>
<p>The last week I worked on my open-source project <a target="_blank" href="https://github.com/EmilienLeroy/HighScore">HighScore</a> and I released a new version. HighScore is an open-source leaderboard and is an alternative to the Google Play Service, which allows you to create leaderboards for your games and add some others features to your game. Highscore is currently under development and a lot of features are missing, but you can try the leaderboards which allow you to store your game score easily. This new version contains a new bad words filter, a custom download link and a rate limit to prevent spam.</p>
<h2 id="heading-filter-bad-words">Filter bad words</h2>
<p>This new feature allows you to prevent poorly words into the name of the score sent. To work I use this <a target="_blank" href="https://github.com/web-mech/badwords">bad-words</a> library which already contains a default list of words. However, you can also add your own words depending on your language.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670781901038/p8vSUtX51.gif" alt class="image--center mx-auto" /></p>
<p>For HighScore, I just created a middleware that cleans each request which contains the name field into his body. This is the sample of the middleware.</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { MiddlewareMethods, Middleware } <span class="hljs-keyword">from</span> <span class="hljs-string">"@tsed/platform-middlewares"</span>;
<span class="hljs-keyword">import</span> { Context, Next } <span class="hljs-keyword">from</span> <span class="hljs-string">"@tsed/common"</span>;
<span class="hljs-keyword">import</span> { words } <span class="hljs-keyword">from</span> <span class="hljs-string">'../../config/ban.json'</span>;
<span class="hljs-keyword">import</span> { envs } <span class="hljs-keyword">from</span> <span class="hljs-string">"../config/envs"</span>;
<span class="hljs-keyword">import</span> BadWordsFilter <span class="hljs-keyword">from</span> <span class="hljs-string">"bad-words"</span>;

<span class="hljs-meta">@Middleware</span>()
<span class="hljs-keyword">export</span> <span class="hljs-keyword">class</span> ScoreMiddleware <span class="hljs-keyword">implements</span> MiddlewareMethods {
    <span class="hljs-keyword">private</span> filter: BadWordsFilter;

    <span class="hljs-keyword">constructor</span>(<span class="hljs-params"></span>) {
        <span class="hljs-keyword">const</span> { HIGHSCORE_DISABLE_BAD_WORDS } = envs;
        <span class="hljs-comment">// Configure the bad word filter on the app start</span>
        <span class="hljs-built_in">this</span>.filter = <span class="hljs-keyword">new</span> BadWordsFilter({
            emptyList: HIGHSCORE_DISABLE_BAD_WORDS === <span class="hljs-string">'true'</span>
        });

        <span class="hljs-comment">// Add more custom words from 'config/ban.json'</span>
        <span class="hljs-built_in">this</span>.filter.addWords(...words);
    }


    use(<span class="hljs-meta">@Context</span>() $ctx: Context, <span class="hljs-meta">@Next</span>() next: Next) {
        <span class="hljs-comment">// Prevent request without body</span>
        <span class="hljs-keyword">if</span> (!$ctx.request.body) {
            <span class="hljs-keyword">return</span> next();
        }

        <span class="hljs-comment">// Clean body name</span>
        <span class="hljs-keyword">const</span> { name } = $ctx.request.body;
        $ctx.request.body.name = <span class="hljs-built_in">this</span>.filter.clean(name);
        <span class="hljs-keyword">return</span> next();
    }
}
</code></pre>
<blockquote>
<p>I use Ts.ed as the framework, go to <a target="_blank" href="https://tsed.io/">this site</a> to know more about this awesome framework.</p>
</blockquote>
<h2 id="heading-custom-download-link">Custom download link</h2>
<p>The second feature of this release is the custom download link. This allows you to redirect to another page depending on the user platform. Why this feature? Because when you create a game for multiple platforms like Android, iOS, Windows, and Linux. You want to have a single entry point to download your app or game. For example, if you want to create a Qr code for your mobile game that is for Android and iOS you can use this endpoint in your QR code. When the QR code is scanned the user is redirected to the good application store.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670781922049/8nibqbRMp.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-rate-limit-to-prevent-spam">Rate limit to prevent spam</h2>
<p>The last feature is a rate limit to prevent spam. Highscore has no auth system all endpoints are public and can be accessible by anybody. That's why adding a rate limit is useful to prevent abuse requests for a malicious users. For this, I used the very good <a target="_blank" href="https://github.com/express-rate-limit/express-rate-limit">express-rate-limit</a> library which does the job perfectly. Like all other features, you can configure the rate limit using env variables.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670781944318/4LWyMyO7r.gif" alt class="image--center mx-auto" /></p>
<h2 id="heading-whats-next">What's next</h2>
<p>The next release will contain a custom privacy page pre-built for the application store, like Google Play or the AppStore. It will also contain a new category system to create a leaderboard for different categories. You can already try HighScore using the official <a target="_blank" href="https://hub.docker.com/r/emilienleroy/highscore">docker image</a> or contribute to it via the <a target="_blank" href="https://github.com/EmilienLeroy/HighScore">GitHub repository</a>.</p>
<p>Thank you for reading this article!</p>
]]></content:encoded></item><item><title><![CDATA[Improving visuals effects of my game]]></title><description><![CDATA[Falling Square v0.4.0
Hi everybody, a new release of my game Falling Square was released the last week. In this release you will find new visual effects, new sound effects and a new statistics view to see how you are good at this game. The game is cu...]]></description><link>https://blog.emilienleroy.fr/improving-visuals-effects-of-my-game</link><guid isPermaLink="true">https://blog.emilienleroy.fr/improving-visuals-effects-of-my-game</guid><category><![CDATA[Developer]]></category><category><![CDATA[Game Development]]></category><category><![CDATA[UX]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 05 Dec 2022 14:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1670174937626/rWTaLPi50.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-falling-square-v040">Falling Square v0.4.0</h2>
<p>Hi everybody, a new release of my game <a target="_blank" href="https://github.com/EmilienLeroy/FallingSquare">Falling Square</a> was released the last week. In this release you will find new visual effects, new sound effects and a new statistics view to see how you are good at this game. The game is currently available only on <a target="_blank" href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US&amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1">Android,</a> but an IOS version should be available begin of 2023.</p>
<h2 id="heading-better-visuals-effects">Better visuals effects</h2>
<p>In this release, the biggest improvement is in the design of the game. A lot of details had been added to improve the user experience. The first change is the touched item animation, which is much better. Before only the color changed, but now the item explodes in little particular, which is very satisfying. The second change is the design of the touch zone. Now this zone is animated which adds a bit of difficulty when the square is little. I have also added a red flash when you lose a life. This help knows when a square is out of the screen. This allows users to always focus on items and not on the number of life</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670174792514/6U_Tjl608.gif" alt="Better visual effects" class="image--center mx-auto" /></p>
<h2 id="heading-adding-sounds-effects">Adding sounds effects</h2>
<p>Music and sound effects are important parts of games. Now Falling Square has background music and sound effect for each item. This improves the user experience. I also added two options to disable music and sound effect. I didn't add a volume slider because this game is only on a phone and on this device, the user often updates the global sound of the phone using the physical button and not the direct app sound.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670174844996/WCJoVRgbZ.png" alt="Options for music control" class="image--center mx-auto" /></p>
<h2 id="heading-statistics">Statistics</h2>
<p>The last feature of this release is the new statistics view. Now after each game, the number of each item touched is stored on the phone. You can access the data via the statistics view.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1670174885750/OFjyWhKJI.png" alt="Statistics" class="image--center mx-auto" /></p>
<h2 id="heading-whats-next">What's next</h2>
<p>That's all for this release. The next release will come in current begin in 2023 with an IOS version of the game. For the moment, you can download <a target="_blank" href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US&amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1">Falling Square on Android</a> and find the source of the game on the <a target="_blank" href="https://github.com/EmilienLeroy/FallingSquare">GitHub repository.</a> Thank you for reading this article!</p>
]]></content:encoded></item><item><title><![CDATA[New leaderboard on my game Falling Square]]></title><description><![CDATA[Falling Square v0.3.0
Last week I released a new version of my game Falling Square which add some new cool features. Falling Square is a simple arcade game where the main goal is to touch squares before they go out of the screen. It currently in deve...]]></description><link>https://blog.emilienleroy.fr/new-leaderboard-on-my-game-falling-square</link><guid isPermaLink="true">https://blog.emilienleroy.fr/new-leaderboard-on-my-game-falling-square</guid><category><![CDATA[Game Development]]></category><category><![CDATA[news]]></category><category><![CDATA[development]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Wed, 23 Nov 2022 14:00:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1669147693242/x_XRSctud.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2 id="heading-falling-square-v030">Falling Square v0.3.0</h2>
<p>Last week I released a new version of my game <a target="_blank" href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US&amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1&amp;pli=1">Falling Square</a> which add some new cool features. Falling Square is a simple arcade game where the main goal is to touch squares before they go out of the screen. It currently in development, but you can download the <a target="_blank" href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US&amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1">Android version</a> to test it. This project is <a target="_blank" href="https://github.com/EmilienLeroy/FallingSquare">open source</a>, you can contribute to it or create your own version of falling square.</p>
<h2 id="heading-new-leaderboard">New leaderboard</h2>
<p>The main features of this version is the leaderboard. It adds a bit a challenge to the game. This feature use <a target="_blank" href="https://github.com/EmilienLeroy/HighScore">HighScore</a> (<em>an open source leaderboard I developed</em>) to work. Highscore only store your username and your score. It uses a simple session id and a cookie to retrieve your score. No account is needed to send a score. Play to the game to send a score and try to beat the current top score!</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1669147808883/ukZPvZsIb.png" alt="leaderboard.png" class="image--center mx-auto" /></p>
<h2 id="heading-internationalization">Internationalization</h2>
<p>The second new feature is the support of two langages: <strong>english</strong> and <strong>french</strong>. If you want add another language feel free to open a pull request.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1669148046960/cVCXSA27B.png" alt="languages.png" class="image--center mx-auto" /></p>
<h2 id="heading-better-home-menu">Better home menu</h2>
<p>In the previous version home page contain only a single button. Now in this version menu have been updated and you can easily access to the option view or the information view. I also add some pretty falling squares to the background of the home view.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1669148268477/ZZBYp_LUC.png" alt="home.png" class="image--center mx-auto" /></p>
<h2 id="heading-whats-next">What's next</h2>
<p>If you want to support my work you can donwload Falling Square or leave a star to the github repository of the game. In the next version <strong>visual effect</strong> and <strong>sound effect</strong> will be improved. The github repository https://github.com/EmilienLeroy/FallingSquare.</p>
<p> <a href="https://play.google.com/store/apps/details?id=fr.emilienleroy.fallingsquare&amp;hl=fr&amp;gl=US&amp;pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1"><img alt="Get it on Google Play" src="https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png" /></a></p>
<p>Thanks you for reading this article !</p>
]]></content:encoded></item><item><title><![CDATA[Hello there, let me introduce myself 👋]]></title><description><![CDATA[Hello everybody, this my first article ever! In this posts I will introduce myself.
About me
My name is Emilien Leroy, I'm 26 years old and I live in France. I work as FullStack developer into a manufacturing company since 2016. I'm passionate with n...]]></description><link>https://blog.emilienleroy.fr/hello-there-let-me-introduce-myself</link><guid isPermaLink="true">https://blog.emilienleroy.fr/hello-there-let-me-introduce-myself</guid><category><![CDATA[introduction]]></category><category><![CDATA[first post]]></category><category><![CDATA[First Blog]]></category><dc:creator><![CDATA[Emilien Leroy]]></dc:creator><pubDate>Mon, 07 Nov 2022 14:00:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/unsplash/cckf4TsHAuw/upload/v1667748526413/fGekAZJ0G.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello everybody, this my first article ever! In this posts I will introduce myself.</p>
<h2 id="heading-about-me">About me</h2>
<p>My name is Emilien Leroy, I'm 26 years old and I live in France. I work as FullStack developer into a manufacturing company since 2016. I'm passionate with new technologies and specially by the web! I like making web application from scratch to production build. I also love to play video game, piano and watch movies!</p>
<h2 id="heading-my-skills">My skills</h2>
<p>My favorites technologies are Nodejs, Typescript and Vuejs. I also master Mongodb, Web Component, Electron and many others. This is a list of all the technologies I master :</p>
<ul>
<li><strong>Frontend</strong>: Javascript, Typescript, Vuejs, Lit, Electron, React Native,Webpack,Vitejs</li>
<li><strong>BackEnd</strong>:  Node.js, Socket.io, Express, Ts.ED, MongoDB, Mysql</li>
<li><strong>DevOps</strong>: Docker, Gitlab CI, Github Action, Grafana, Loki, Prometheus, Nginx</li>
</ul>
<p>I use all these skills at my work to build and maintain applications, but I also use these to build game and some OSS project.</p>
<h2 id="heading-why-this-blog">Why this blog ?</h2>
<p>I decide to create my own blog to write about my futures projects and my technical experiences. My first goal with this it to keep a trace of how I build all my projects and share it with some people. And if this can help somebody, I will be very glad to this ! The second goal is to improve my english skill. Like as say before, I'm french and my english is a bit terrible. I think this blog will help me to improve this!</p>
<h2 id="heading-see-you-soon">See you soon</h2>
<p>Thank you for having read this, your feedback and suggestion will be really appreciated. If you want to get more information about me see my personal site or my github profile. See you soon for my second article !</p>
]]></content:encoded></item></channel></rss>