<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://legno9.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://legno9.github.io/" rel="alternate" type="text/html" hreflang="en" /><updated>2025-09-23T19:09:44+00:00</updated><id>https://legno9.github.io/feed.xml</id><title type="html">Ángel Formoso</title><subtitle>Personal portfolio of Ángel Formoso, a video game developer. Showcasing projects, skills, and experiences in game development.
</subtitle><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><entry><title type="html">Vorax Breakout</title><link href="https://legno9.github.io/unity/2025-07-21-Vorax-Breakout/" rel="alternate" type="text/html" title="Vorax Breakout" /><published>2025-07-21T00:00:00+00:00</published><updated>2025-09-23T19:09:01+00:00</updated><id>https://legno9.github.io/unity/Vorax-Breakout</id><content type="html" xml:base="https://legno9.github.io/unity/2025-07-21-Vorax-Breakout/"><![CDATA[<p>In <a href="https://eva-qube.itch.io/vorax-breakout"><strong>Vorax Breakout</strong></a>, players manage teams of creatures (Vorax) with unique abilities, strategizing their placement and energy before each automated, round-based battle. The game features preparation, combat, and reward phases, offering tactical depth and replayability.</p>

<!--more-->

<ul id="markdown-toc">
  <li><a href="#project-context" id="markdown-toc-project-context">Project Context</a></li>
  <li><a href="#my-contributions" id="markdown-toc-my-contributions">My Contributions</a>    <ul>
      <li><a href="#1-modular-game-architecture" id="markdown-toc-1-modular-game-architecture">1. Modular Game Architecture</a></li>
      <li><a href="#2-interactive-tutorial" id="markdown-toc-2-interactive-tutorial">2. Interactive Tutorial</a></li>
    </ul>
  </li>
  <li><a href="#gameplay-snapshot" id="markdown-toc-gameplay-snapshot">Gameplay Snapshot</a></li>
  <li><a href="#technical-highlights" id="markdown-toc-technical-highlights">Technical Highlights</a></li>
  <li><a href="#reflection" id="markdown-toc-reflection">Reflection</a></li>
  <li><a href="#link" id="markdown-toc-link">Link</a></li>
</ul>

<hr />

<p><img src="/assets/img/posts/VoraxBreakout/VoraxBreakout_Battle.gif" alt="Combat phase" /></p>

<h2 id="project-context">Project Context</h2>

<p>Developed collaboratively as a <strong>master’s final project</strong>, the goal was to showcase <strong>advanced programming</strong>, design a <strong>modular, scalable architecture</strong>, and deliver a <strong>replayable demo</strong> ready for future features like node-based maps or asynchronous PvP.</p>

<p>The demo serves as a proof of concept for both strategic mechanics and modular content.</p>

<h2 id="my-contributions">My Contributions</h2>

<h3 id="1-modular-game-architecture">1. Modular Game Architecture</h3>

<ul>
  <li><strong>Core systems built with Scriptable Objects</strong>, separating data from behavior.</li>
  <li>Easily add new creatures, abilities, or mechanics without touching the core code.</li>
  <li>Designed and implemented the <strong>attack priority system</strong>, which dynamically calculates the main target and affected targets based on multiple criteria (lane, HP, HP ratio, randomness, etc.).</li>
</ul>

<p><img src="/assets/img/posts/VoraxBreakout/VoraxBreakout_Main_Architecture00.png" alt="Diagram of architecture" /></p>

<hr />

<p><img src="/assets/img/posts/VoraxBreakout/VoraxBreakout_Main_Architecture01.png" alt="Diagram of scriptable objects" /></p>

<h3 id="2-interactive-tutorial">2. Interactive Tutorial</h3>
<ul>
  <li>Guided players step by step through mechanics.</li>
  <li>Highlighted UI and actions with tooltips and optional videos.</li>
  <li>Built modularly to support future additions.</li>
</ul>

<p><img src="/assets/img/posts/VoraxBreakout/VoraxBreakout_Tutorial.gif" alt="GIF showing tutorial in action" /></p>

<h2 id="gameplay-snapshot">Gameplay Snapshot</h2>

<p><strong>Vorax Breakout</strong> operates in <strong>three main phases per round</strong>:</p>

<ol>
  <li><strong>Preparation:</strong> Organize team, rest Vorax, place on combat grid.</li>
  <li><strong>Combat:</strong> Automated resolution of abilities, damage, and status effects.</li>
  <li><strong>Rewards:</strong> Choose new Vorax to add or replace in the team.</li>
</ol>

<p><img src="/assets/img/posts/VoraxBreakout/VoraxBreakout_Preparation.gif" alt="Screenshot showing inventory and combat interface" /></p>

<hr />

<h2 id="technical-highlights">Technical Highlights</h2>

<ul>
  <li><strong>Scalable, modular architecture</strong> with Scriptable Objects, separating data from behavior.</li>
  <li><strong>Dynamic attack priority system</strong>: determines targets based on lane, HP, or randomness, fully supporting new abilities and Vorax types.</li>
  <li><strong>Integrated, interactive tutorial</strong> for new players.</li>
  <li><strong>Dynamic combat system</strong> managing multiple Vorax interactions and effects.</li>
  <li><strong>UI/UX optimizations</strong> for clarity in a visually rich autobattler interface.</li>
</ul>

<hr />

<h2 id="reflection">Reflection</h2>

<p>Working on <strong>Vorax Breakout</strong> strengthened my skills in <strong>system architecture, data-driven design, and player onboarding</strong>.<br />
It also showed how modular thinking and teamwork can transform a student prototype into a polished, expandable foundation.</p>

<hr />

<h2 id="link">Link</h2>

<ul>
  <li>🕹️ <a href="https://eva-qube.itch.io/vorax-breakout">Try out Vorax Breakout!</a></li>
</ul>]]></content><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><category term="Unity" /><summary type="html"><![CDATA[Vorax Breakout is a turn-based roguelike developed in Unity as a master's final project.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://legno9.github.io/assets/img/posts/VoraxBreakout/VoraxBreakout_Main.png" /><media:content medium="image" url="https://legno9.github.io/assets/img/posts/VoraxBreakout/VoraxBreakout_Main.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Tower Defense — C++ vs Unity</title><link href="https://legno9.github.io/unity/unreal/2025-06-01-Tower-Defense/" rel="alternate" type="text/html" title="Tower Defense — C++ vs Unity" /><published>2025-06-01T00:00:00+00:00</published><updated>2025-09-23T19:09:01+00:00</updated><id>https://legno9.github.io/unity/unreal/Tower-Defense</id><content type="html" xml:base="https://legno9.github.io/unity/unreal/2025-06-01-Tower-Defense/"><![CDATA[<p>I developed the same <strong>Tower Defense game</strong> twice: first in <strong>C++ with SFML</strong>, then in <strong>Unity with C#</strong>. Each version explores different approaches, highlighting trade-offs in <strong>control, performance, modularity, and development speed</strong>.</p>

<!--more-->

<ul id="markdown-toc">
  <li><a href="#project-context" id="markdown-toc-project-context">Project Context</a></li>
  <li><a href="#c-sfml-version" id="markdown-toc-c-sfml-version">C++ SFML Version</a>    <ul>
      <li><a href="#key-advantages" id="markdown-toc-key-advantages">Key Advantages</a></li>
      <li><a href="#challenges" id="markdown-toc-challenges">Challenges</a></li>
    </ul>
  </li>
  <li><a href="#unity-c-version" id="markdown-toc-unity-c-version">Unity C# Version</a>    <ul>
      <li><a href="#key-advantages-1" id="markdown-toc-key-advantages-1">Key Advantages</a></li>
    </ul>
  </li>
  <li><a href="#technical-challenges" id="markdown-toc-technical-challenges">Technical Challenges:</a></li>
  <li><a href="#reflection" id="markdown-toc-reflection">Reflection</a></li>
  <li><a href="#links" id="markdown-toc-links">Links</a></li>
</ul>

<hr />

<h2 id="project-context">Project Context</h2>

<p>The objective was to create a <strong>2D Tower Defense game</strong> where players strategically place turrets to defend against waves of enemies. The game includes:</p>

<ul>
  <li>Multiple tower types with unique mechanics.</li>
  <li>Enemy waves with varying behaviors and health.</li>
  <li>A gold-based economy for building and upgrading towers.</li>
  <li>Projectile mechanics including homing, area damage, and slowing effects.</li>
</ul>

<p>The two implementations differ in <strong>tools and workflow</strong>:</p>

<ul>
  <li><strong>C++ with SFML (3–4 weeks):</strong> Everything built from scratch, including rendering, UI, object lifecycle, and game logic.</li>
  <li><strong>Unity with C# (1 week):</strong> Leveraging engine features such as prefabs, Scriptable Objects, and built-in UI to recreate the game faster and more polished.</li>
</ul>

<hr />

<ul>
  <li>💻 <a href="https://github.com/legno9/Cpp_towerDefense">C++ version on github</a></li>
</ul>

<h2 id="c-sfml-version">C++ SFML Version</h2>

<p>Focused on <strong>low-level control and modularity</strong>:</p>

<ul>
  <li><strong>Game Architecture:</strong> Managers for rendering, objects, UI, input, and assets. Object lifecycles handled manually with <code class="language-plaintext highlighter-rouge">std::unique_ptr</code>.</li>
  <li><strong>Data-Driven Design:</strong> Stats, properties, waves, and animations stored in JSON.</li>
  <li><strong>Animation &amp; Events:</strong> Frame-based callbacks to sync attacks with animations.</li>
  <li><strong>Custom UI:</strong> HUD fully built with SFML primitives.</li>
</ul>

<h4 id="key-advantages">Key Advantages</h4>

<ol>
  <li><strong>Full Control:</strong> Every object and memory allocation explicit.</li>
  <li><strong>Performance:</strong> No engine overhead.</li>
  <li><strong>Flexibility:</strong> Freedom to implement mechanics exactly as intended.</li>
</ol>

<h4 id="challenges">Challenges</h4>

<ul>
  <li>Manual memory management required caution.</li>
  <li>Slower development due to coding every system.</li>
  <li>Complex systems demanded careful design.</li>
</ul>

<p><img src="/assets/img/posts/TowerDefense/TowerDefense_CPP.png" alt="C++ gameplay image" /></p>

<p><img src="/assets/img/posts/TowerDefense/TowerDefense_VSCode.png" alt="C++ visual studio code image" /></p>

<hr />

<ul>
  <li>💻 <a href="https://github.com/legno9/TD-OniSiege">Unity version on github</a></li>
</ul>

<h2 id="unity-c-version">Unity C# Version</h2>

<p>The Unity version prioritized <strong>rapid development and polish</strong>:</p>

<ul>
  <li><strong>Scriptable Objects &amp; Prefabs:</strong> Modular data-driven design.</li>
  <li><strong>Built-in UI:</strong> Quick setup of HUD, tower bar, and menus.</li>
  <li><strong>Improved Visuals:</strong> Multiple levels, animations, effects.</li>
  <li><strong>Reusable Systems:</strong> Health, towers, enemies, and attacks designed for easy expansion.</li>
</ul>

<h4 id="key-advantages-1">Key Advantages</h4>

<ol>
  <li><strong>Fast Development:</strong> 1 week vs 3–4 weeks.</li>
  <li><strong>Quick Iteration:</strong> Drag-and-drop workflow.</li>
  <li><strong>Engine Tools:</strong> Animation and UI built-in.</li>
  <li><strong>Automatic Lifecycle:</strong> Garbage collection simplifies memory handling, reducing potential errors.</li>
</ol>

<p><img src="/assets/img/posts/TowerDefense/TowerDefense_Main.png" alt="Unity gameplay image" /></p>

<p><img src="/assets/img/posts/TowerDefense/TowerDefense_Unity.png" alt="Unity screenshot" /></p>

<hr />

<h2 id="technical-challenges">Technical Challenges:</h2>

<p>Both versions required a <strong>predictive health system</strong> to optimize turret behavior:</p>

<ul>
  <li>Turrets calculate expected enemy health immediately when firing.</li>
  <li>Enemies marked as “doomed” by incoming attacks are skipped by subsequent turrets.</li>
  <li>Dirty flags mark enemies to be removed once damage reaches them visually.</li>
</ul>

<p>This system ensures <strong>no wasted projectiles</strong> and efficient targeting. The implementation is conceptually the same in C++ and Unity, though in C++ it required explicit memory and lifecycle handling.</p>

<hr />

<h2 id="reflection">Reflection</h2>

<p>Developing the same game twice highlighted the trade-offs of <strong>low-level vs engine-driven development</strong>:</p>

<table>
  <thead>
    <tr>
      <th>Feature</th>
      <th>C++ SFML</th>
      <th>Unity C#</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Development Time</td>
      <td>3–4 weeks</td>
      <td>1 week</td>
    </tr>
    <tr>
      <td>Control</td>
      <td>Absolute</td>
      <td>Medium (engine-managed)</td>
    </tr>
    <tr>
      <td>Performance</td>
      <td>High</td>
      <td>Medium</td>
    </tr>
    <tr>
      <td>Memory Management</td>
      <td>Manual</td>
      <td>Automatic</td>
    </tr>
    <tr>
      <td>Modularity</td>
      <td>Requires custom design</td>
      <td>Built-in (SO &amp; Prefabs)</td>
    </tr>
    <tr>
      <td>UI &amp; Visuals</td>
      <td>Fully custom</td>
      <td>Built-in components</td>
    </tr>
  </tbody>
</table>

<hr />

<p><strong>Key Takeaways:</strong></p>
<ul>
  <li>C++ gives <strong>maximum control and performance</strong>, but at higher cost in time and complexity.</li>
  <li>Unity enables <strong>fast prototyping, polish, and modular expansion</strong>.</li>
  <li>Both reinforce principles of <strong>game architecture and optimization</strong>.</li>
</ul>

<hr />

<h2 id="links">Links</h2>

<ul>
  <li>🕹️ <a href="https://legno9.itch.io/tower-defense-c-vs-unity">Try both versions on itch.io!</a></li>
</ul>]]></content><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><category term="Unity" /><category term="Unreal" /><summary type="html"><![CDATA[A Tower Defense game built first in C++ with SFML, then recreated in Unity, comparing different development approaches.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://legno9.github.io/assets/img/posts/TowerDefense/TowerDefense_Main.png" /><media:content medium="image" url="https://legno9.github.io/assets/img/posts/TowerDefense/TowerDefense_Main.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Steering Behaviours</title><link href="https://legno9.github.io/unreal/2025-04-04-Steering-Behaviours/" rel="alternate" type="text/html" title="Steering Behaviours" /><published>2025-04-04T00:00:00+00:00</published><updated>2025-09-23T19:09:01+00:00</updated><id>https://legno9.github.io/unreal/Steering-Behaviours</id><content type="html" xml:base="https://legno9.github.io/unreal/2025-04-04-Steering-Behaviours/"><![CDATA[<p>As part of my learning process with <strong>Unreal Engine</strong>, I developed this project to <strong>practice and visualize steering behaviours</strong> in a simple yet interactive environment.<br />
Steering behaviours are widely used in games and simulations to give autonomous agents (<em>boids</em>) lifelike motion without predefined paths.</p>

<p>The goal was to experiment with how different behaviours interact when combined, and to provide a way to <strong>tune their influence in real time</strong> through sliders.</p>

<!--more-->

<ul id="markdown-toc">
  <li><a href="#introduction" id="markdown-toc-introduction">Introduction</a></li>
  <li><a href="#implemented-behaviours-in-unreal-engine" id="markdown-toc-implemented-behaviours-in-unreal-engine">Implemented Behaviours in Unreal Engine</a></li>
  <li><a href="#final-movement-black" id="markdown-toc-final-movement-black">Final Movement (Black)</a></li>
  <li><a href="#conclusion" id="markdown-toc-conclusion">Conclusion</a></li>
</ul>

<h2 id="introduction">Introduction</h2>

<p>Steering behaviours are a classic set of techniques in <strong>artificial intelligence for games</strong>, especially when dealing with groups of agents (commonly called <em>boids</em>).<br />
They allow autonomous agents to move in a way that feels <strong>natural, organic, and responsive</strong>, without needing predefined paths or animations.</p>

<p>👉 <a href="https://legno9.itch.io/steeringbehaviours"><strong>Try it out yourself!</strong></a></p>

<p>In the demo, you can move sliders to define how much each behaviour (from <code class="language-plaintext highlighter-rouge">0</code> to <code class="language-plaintext highlighter-rouge">1</code>) affects the movement of the agents (balls).</p>

<ul>
  <li><strong>Black arrow</strong> → final resulting movement.</li>
  <li><strong>Red arrow</strong> → separation force.</li>
  <li><strong>Green arrow</strong> → cohesion force.</li>
  <li><strong>Blue arrow</strong> → alignment force.</li>
  <li><strong>Yellow arrow</strong> → obstacle avoidance.</li>
</ul>

<h2 id="implemented-behaviours-in-unreal-engine">Implemented Behaviours in Unreal Engine</h2>

<p>All behaviours are calculated every tick in <strong>Blueprints</strong> and combined into a final movement vector.</p>

<ul>
  <li><strong>Cohesion (Green):</strong> pulls each agent towards the center of its neighbors. In Unreal, this is done by averaging neighbor positions and generating a force in that direction.</li>
</ul>

<p><img src="/assets/img/posts/SteeringBehaviours/SteeringBehaviours_Cohesion.png" alt="Image of cohesion" /></p>

<ul>
  <li><strong>Separation (Red):</strong> pushes agents apart to prevent collisions. Implemented by calculating repulsion vectors that grow stronger the closer two agents are.</li>
</ul>

<p><img src="/assets/img/posts/SteeringBehaviours/SteeringBehaviours_Separation.png" alt="Image of separation" /></p>

<ul>
  <li><strong>Alignment (Blue):</strong> aligns each agent with the average heading of its neighbors. In Blueprints, this means weighting neighbors’ velocities and steering towards that combined direction.</li>
</ul>

<p><img src="/assets/img/posts/SteeringBehaviours/SteeringBehaviours_Alignment.png" alt="Image of alignment" /></p>

<ul>
  <li><strong>Obstacle Avoidance (Yellow):</strong> prevents collisions with objects. A forward <strong>Line Trace</strong> detects obstacles and applies a repulsion force based on the hit normal.</li>
</ul>

<p><img src="/assets/img/posts/SteeringBehaviours/SteeringBehaviours_OAvoindance.png" alt="Image of Obstacle avoidance" /></p>

<h2 id="final-movement-black">Final Movement (Black)</h2>

<p>The four vectors are summed and normalized into a single <strong>final direction</strong>. This direction is then applied as torque and velocity to the physics component of each agent.<br />
Forces reset each tick, ensuring smooth and dynamic motion that depends only on the current state of the environment.</p>

<hr />

<h2 id="conclusion">Conclusion</h2>

<p>This project was a great way to practice both <strong>vector math</strong> and <strong>agent-based AI programming</strong>.<br />
Even with just four behaviours, the result feels dynamic and lifelike. Real-time tuning with sliders makes the demo an effective tool for <strong>learning, testing, and experimenting</strong>.</p>]]></content><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><category term="Unreal" /><summary type="html"><![CDATA[A practice project in Unreal Engine to experiment with classic steering behaviours: separation, cohesion, alignment, and obstacle avoidance.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://legno9.github.io/assets/img/posts/SteeringBehaviours/SteeringBehaviours_Main.png" /><media:content medium="image" url="https://legno9.github.io/assets/img/posts/SteeringBehaviours/SteeringBehaviours_Main.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Supermarket Rush</title><link href="https://legno9.github.io/unreal/2025-03-21-Supermarket-Rush/" rel="alternate" type="text/html" title="Supermarket Rush" /><published>2025-03-21T00:00:00+00:00</published><updated>2025-09-23T19:09:01+00:00</updated><id>https://legno9.github.io/unreal/Supermarket-Rush</id><content type="html" xml:base="https://legno9.github.io/unreal/2025-03-21-Supermarket-Rush/"><![CDATA[<p>Developed in just <strong>one week as a team project</strong>, <strong>Supermarket Rush</strong> is a 3-lane runner where players race to reach the supermarket while <strong>avoiding cars, collecting coins, and using power-ups</strong> to gain an edge or hinder opponents.</p>

<!--more-->

<ul id="markdown-toc">
  <li><a href="#project-context" id="markdown-toc-project-context">Project Context</a></li>
  <li><a href="#my-contributions" id="markdown-toc-my-contributions">My Contributions</a></li>
  <li><a href="#reflection" id="markdown-toc-reflection">Reflection</a></li>
  <li><a href="#link" id="markdown-toc-link">Link</a></li>
</ul>

<h2 id="project-context">Project Context</h2>

<p><strong>Supermarket Rush</strong> is a fast-paced runner with a <strong>third-person perspective</strong>. Players automatically move forward, gradually accelerating, and must:</p>

<ul>
  <li><strong>Avoid cars</strong> traveling down three parallel lanes.</li>
  <li><strong>Collect coins</strong> to boost score.</li>
  <li><strong>Use power-ups</strong> strategically to gain an advantage or slow the opponent.</li>
  <li>Compete in <strong>local multiplayer or against AI</strong>, aiming to reach the supermarket first.</li>
</ul>

<p>The main goal is <strong>to outpace your opponent</strong>, combining quick reflexes with strategic collection and use of power-ups.</p>

<p><img src="/assets/img/posts/SupermarketRush/SupermarketRush_Main.png" alt="Supermarket Rush Screenshot" /></p>

<hr />

<h2 id="my-contributions">My Contributions</h2>

<p>I focused on the <strong>player character and core gameplay systems</strong>, making interactions responsive and consistent:</p>

<ul>
  <li><strong>Character Movement:</strong> Lane switching, forward progression, acceleration, and input handling for both single and local multiplayer.</li>
  <li><strong>Collision Handling:</strong> Programmed reactions to crashes, including triggering the death animation and resetting the player.</li>
  <li><strong>Power-Up &amp; Coin Integration:</strong> Built the collection system and feedback UI. I connected power-ups to the player, while a teammate implemented their specific effects.</li>
  <li><strong>Animation Integration:</strong> Created Blueprint-based animations for running, switching, and collisions to ensure clear visual feedback.</li>
</ul>

<hr />

<h2 id="reflection">Reflection</h2>

<p>Developing <strong>Supermarket Rush</strong> in one week was an excellent exercise in <strong>rapid prototyping, teamwork, and iteration</strong>:</p>

<ul>
  <li>Unreal Engine <strong>Blueprints enabled quick implementation</strong> of movement, collisions, and pickups.</li>
  <li>Coordinating with teammates showed the value of <strong>modular design and careful integration</strong>.</li>
  <li>Despite its simplicity, the project demonstrates how <strong>polished mechanics and competitive elements</strong> can create engaging gameplay in a short timeframe.</li>
</ul>

<hr />

<h2 id="link">Link</h2>

<ul>
  <li>🕹️ <a href="https://legno9.itch.io/supermarket-rush">Try out Supermarket Rush!</a></li>
</ul>]]></content><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><category term="Unreal" /><summary type="html"><![CDATA[Supermarket Rush is a 3-lane runner game made in Unreal Engine with Blueprints.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://legno9.github.io/assets/img/posts/SupermarketRush/SupermarketRush_Menu.png" /><media:content medium="image" url="https://legno9.github.io/assets/img/posts/SupermarketRush/SupermarketRush_Menu.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Katanas and Chaos</title><link href="https://legno9.github.io/unity/2025-01-14-KatanasAndChaos/" rel="alternate" type="text/html" title="Katanas and Chaos" /><published>2025-01-14T00:00:00+00:00</published><updated>2025-09-23T19:09:01+00:00</updated><id>https://legno9.github.io/unity/KatanasAndChaos</id><content type="html" xml:base="https://legno9.github.io/unity/2025-01-14-KatanasAndChaos/"><![CDATA[<p><strong>Katanas and Chaos</strong> is a third-person dungeon crawler developed in Unity as a <strong>two-person collaboration</strong>. Players fight through enemies, gather resources, and progress toward a challenging <strong>Dark Souls-inspired boss battle</strong>, with modular combat mechanics and varied enemy behaviors.</p>

<!--more-->

<ul id="markdown-toc">
  <li><a href="#project-context" id="markdown-toc-project-context">Project Context</a></li>
  <li><a href="#my-contributions" id="markdown-toc-my-contributions">My Contributions</a></li>
  <li><a href="#technical-highlights" id="markdown-toc-technical-highlights">Technical Highlights</a></li>
  <li><a href="#link" id="markdown-toc-link">Link</a></li>
</ul>

<hr />

<h2 id="project-context">Project Context</h2>

<p>The game focuses on <strong>combat variety and enemy AI</strong>. Players can choose from multiple weapons:</p>

<ul>
  <li><strong>Melee:</strong> Katana (with parry system) and bare-handed combos (punches, kicks).</li>
  <li><strong>Ranged:</strong> Bazooka, shotgun, and machine gun.</li>
</ul>

<p>Enemies patrol the castle, react to sound and sight, and display distinct behaviors. As the player progresses through the castle’s halls and rooms, they gather ammo and health packs dropped by enemies or placed in corners.</p>

<p>At the end lies the <strong>final boss</strong>, designed around katana combat, where the <strong>parry mechanic</strong> becomes essential to succeed.</p>

<hr />

<p><img src="/assets/img/posts/KatanasAndChaos/KatanasAndChaos_Gameplay00.png" alt="Gameplay Screenshot" /></p>

<hr />

<h2 id="my-contributions">My Contributions</h2>

<p>I was responsible for:</p>

<ul>
  <li>Designing and implementing <strong>all enemy AI behaviors</strong> (Ambusher, Cautious, Guardian, Sassy).</li>
  <li>Programming the <strong>melee combat system</strong>, including modular combos and parries.</li>
  <li>Integrating animations for both <strong>player and enemies</strong>.</li>
  <li>Preparing the full <strong>castle/dungeon layout</strong>, placing resources and encounter spaces.</li>
</ul>

<hr />

<p><img src="/assets/img/posts/KatanasAndChaos/KatanasAndChaos_Gameplay03.png" alt="Katana gameplay screenshot" /></p>

<h2 id="technical-highlights">Technical Highlights</h2>

<p>This project stood out because of two core systems I built from scratch:</p>

<ul>
  <li><strong>Custom Modular Combat System</strong>
    <ul>
      <li>Allowed chaining of <strong>primary</strong> and <strong>secondary attacks</strong> into fluid combos, instead of relying on Unity’s default Animator state machines.</li>
      <li>Attacks were completely interchangeable: developers could add, remove, or swap animations without touching the core logic.</li>
      <li>The <strong>parry mechanic</strong> was tightly integrated into this system, giving precise timing windows and rewarding player skill.</li>
    </ul>
  </li>
  <li><strong>AI with Distinct Archetypes</strong>
    <ul>
      <li>Four behaviors were implemented (Ambusher, Cautious, Guardian, Sassy), each requiring specific movement logic and animation handling.</li>
      <li>Enemies combined <strong>sight and sound detection</strong>, forcing players to consider both stealth and positioning.</li>
      <li>This diversity of AI created varied encounters, from sudden ambushes to territorial defenses.</li>
    </ul>
  </li>
  <li><strong>Boss Fight Design</strong>
    <ul>
      <li>The final boss exploited the parry mechanic, requiring mastery of the katana to succeed.</li>
    </ul>
  </li>
</ul>

<hr />

<p><img src="/assets/img/posts/KatanasAndChaos/KatanasAndChaos_Gameplay04.png" alt="Boss gameplay screenshot" /></p>

<h2 id="link">Link</h2>

<ul>
  <li>🕹️ <a href="https://legno9.itch.io/katanasandchaos">Try out Katanas and Chaos!</a></li>
</ul>]]></content><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><category term="Unity" /><summary type="html"><![CDATA[Katanas and Chaos is a third-person dungeon crawler with modular melee combat and AI-driven enemies.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://legno9.github.io/assets/img/posts/KatanasAndChaos/KatanasAndChaos_Main.png" /><media:content medium="image" url="https://legno9.github.io/assets/img/posts/KatanasAndChaos/KatanasAndChaos_Main.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Arima Lodge</title><link href="https://legno9.github.io/unity/2024-12-10-ArimaLodge/" rel="alternate" type="text/html" title="Arima Lodge" /><published>2024-12-10T00:00:00+00:00</published><updated>2025-09-23T19:09:01+00:00</updated><id>https://legno9.github.io/unity/ArimaLodge</id><content type="html" xml:base="https://legno9.github.io/unity/2024-12-10-ArimaLodge/"><![CDATA[<p>Everything started while I was working part-time with <strong>Praenaris</strong>. The studio asked me to <strong>lead the remake of Arima Lodge</strong>, a short narrative game originally born in a jam.</p>

<p>The project, made in <strong>Unity</strong>, came to me in a broken state: <strong>dialogues, animations, and much of the code</strong> needed to be reviewed and rebuilt. My role was to <strong>take what wasn’t working, make it functional again, and then improve it</strong>. It was both a programming challenge and a chance to learn how to rescue an idea with potential and give it new life.</p>

<!--more-->
<ul id="markdown-toc">
  <li><a href="#context" id="markdown-toc-context">Context</a></li>
  <li><a href="#improvements-in-the-remake" id="markdown-toc-improvements-in-the-remake">Improvements in the Remake</a></li>
  <li><a href="#plus-many-other-polish-details-that-elevated-the-experience" id="markdown-toc-plus-many-other-polish-details-that-elevated-the-experience">…plus many other polish details that elevated the experience.</a></li>
  <li><a href="#gameplay" id="markdown-toc-gameplay">Gameplay</a></li>
  <li><a href="#reflection" id="markdown-toc-reflection">Reflection</a></li>
  <li><a href="#links" id="markdown-toc-links">Links</a></li>
</ul>
<hr />

<h2 id="context">Context</h2>
<p><em>Arima Lodge</em> was originally created during the <strong>Indie Spain Jam 2022</strong>. Later, the studio decided to revisit it, adding quality improvements and officially releasing it on <strong>Steam in December 2024</strong>.</p>

<p>It’s a <strong>short 10-minute story</strong>, set in a near-future dystopia inside a single elevator. You play as <strong>Kai, the bellhop</strong>, when a mysterious man forces him to ride straight to the 100th floor, things quickly spiral into tension and mystery.</p>

<h2 id="improvements-in-the-remake">Improvements in the Remake</h2>
<p>During the remake I implemented a wide range of improvements, including:</p>

<hr />
<ul>
  <li>🌍 <strong>Localization to multiple languages</strong></li>
  <li>✍️ <strong>Better text handling</strong></li>
  <li>📖 <strong>Expanded narrative options</strong></li>
  <li>🎭 <strong>Improved animations</strong></li>
  <li>⏱️ <strong>Refined timing</strong></li>
  <li>💬 <strong>Updated dialogues</strong></li>
  <li>🔀 <strong>Multiple endings</strong></li>
  <li>
    <h2 id="plus-many-other-polish-details-that-elevated-the-experience">…plus many other polish details that elevated the experience.</h2>
  </li>
</ul>

<h2 id="gameplay">Gameplay</h2>
<p>The experience is simple but effective:</p>
<ul>
  <li><strong>Limited dialogue choices</strong> from Kai’s perspective.</li>
  <li><strong>Quick Time Events (QTEs)</strong> to open and close the elevator doors at the right moment.</li>
  <li>A compressed <strong>narrative structure</strong>, where each stop and each passenger adds to the atmosphere.</li>
</ul>

<p>The result is short, immersive, and full of urgency. It makes you feel both trapped and curious about what’s waiting at the top.</p>

<p><img src="/assets/img/posts/ArimaLodge/ArimaLodge_Screenshot.png" alt="Image of gameplay" /></p>

<hr />

<h2 id="reflection">Reflection</h2>
<p>Working on <em>Arima Lodge</em> in Unity was both a <strong>technical challenge and creative rediscovery</strong>. I had to <strong>rebuild broken systems while aligning them with the narrative</strong>, but it was rewarding to see how a jam-born idea found a polished second life.</p>

<p>It’s a <strong>short, free, and highly recommendable</strong> experience. You can finish it in under ten minutes, but it leaves you wanting more.</p>

<hr />

<h2 id="links">Links</h2>

<ul>
  <li>
    <p>🎮 <a href="https://store.steampowered.com/app/3310190/Arima_Lodge/?l=english">Arima Lodge (Steam, 2024 release)</a></p>
  </li>
  <li>
    <p>🕹️ <a href="https://praenaris.itch.io/arima-lodge">Arima Lodge (Itch.io, original 2022 version)</a></p>
  </li>
</ul>]]></content><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><category term="Unity" /><summary type="html"><![CDATA[A brief look at my work remaking Arima Lodge: fixing broken code, improving animations and dialogues, and revitalizing a small jam game.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://legno9.github.io/assets/img/posts/ArimaLodge/ArimaLodge_Main.png" /><media:content medium="image" url="https://legno9.github.io/assets/img/posts/ArimaLodge/ArimaLodge_Main.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Proyecto Manthanō and Doom of tools</title><link href="https://legno9.github.io/unity/2023-09-18-Proyecto-Manthan%C5%8D/" rel="alternate" type="text/html" title="Proyecto Manthanō and Doom of tools" /><published>2023-09-18T00:00:00+00:00</published><updated>2025-09-23T19:09:01+00:00</updated><id>https://legno9.github.io/unity/Proyecto-Manthan%C5%8D</id><content type="html" xml:base="https://legno9.github.io/unity/2023-09-18-Proyecto-Manthan%C5%8D/"><![CDATA[<p><strong>Proyecto Manthanō</strong> was my final degree project: a solo challenge to learn <strong>Unity</strong> while creating a complete game from scratch. The result is <strong>Doom of Tools</strong>, a 2D turn-based, deck-building roguelite inspired by <strong>Slay the Spire</strong> and <strong>Into the Breach</strong>.</p>

<p>Every aspect of the game—programming, mechanics, design, art, and animation—was developed by me. Players control “tool-humans,” cursed by the demon Bael, battling through the underworld on grid-based maps using strategic card-based abilities. Each run is procedurally generated, offering unique challenges and requiring constant adaptation.</p>

<!--more-->

<ul id="markdown-toc">
  <li><a href="#project-goal--methodology" id="markdown-toc-project-goal--methodology">Project Goal &amp; Methodology</a></li>
  <li><a href="#core-gameplay" id="markdown-toc-core-gameplay">Core Gameplay</a></li>
  <li><a href="#production-highlights" id="markdown-toc-production-highlights">Production Highlights</a></li>
  <li><a href="#reflection" id="markdown-toc-reflection">Reflection</a></li>
  <li><a href="#link" id="markdown-toc-link">Link</a></li>
</ul>

<hr />

<h2 id="project-goal--methodology">Project Goal &amp; Methodology</h2>

<p>The main goal was to <strong>learn Unity independently</strong> while producing a playable demo. My methodology included:</p>

<ol>
  <li><strong>Game Design Document (GDD):</strong> Defined the story, visual style, core mechanics, characters, levels, and interfaces.</li>
  <li><strong>Knowledge Assessment:</strong> Identified skills required, from C# programming to pixel art, and learned them through tutorials and experimentation.</li>
  <li><strong>Practical Exercises:</strong> Applied concepts in small prototypes to solve potential technical and design challenges.</li>
  <li><strong>Demo Development:</strong> Built the final demo with all core mechanics, balancing gameplay and producing content iteratively.</li>
</ol>

<p>This approach allowed me to develop both technical and creative skills simultaneously, reinforcing my self-learning abilities and project management.</p>

<p><img src="/assets/img/posts/ProyectoManthano/ProyectoManthano_Gameplay00.png" alt="Image of gameplay" /></p>

<h2 id="core-gameplay">Core Gameplay</h2>

<ul>
  <li><strong>Turn-Based Strategy:</strong> Grid-based combat emphasizes positioning and card management.</li>
  <li><strong>Deck-Building:</strong> Characters’ abilities are represented by cards, which evolve during each run.</li>
  <li><strong>Roguelite Progression:</strong> Randomized events, levels, and rewards ensure replayability and strategic depth.</li>
</ul>

<h2 id="production-highlights">Production Highlights</h2>

<p><strong>Programming:</strong></p>
<ul>
  <li>Characters’ movement, attacks, health system, enemy AI.</li>
  <li>Card and energy system, turn system, menus, tutorials, and sound management.</li>
</ul>

<p><strong>Art &amp; Animation:</strong></p>
<ul>
  <li>10 characters with idle, movement, and damage animations.</li>
  <li>Pixel art backgrounds, level tiles, and menus created in <strong>Aseprite</strong>.</li>
  <li>60 skill cards with visual effects for attacks, feedback indicators, and UI elements.</li>
</ul>

<p><strong>Learning Process:</strong></p>
<ul>
  <li>Overcame technical challenges such as pixel-perfect rendering, managing Unity’s Animator efficiently, and separating visual objects from logic to prevent conflicts.</li>
  <li>Learned to iterate on art and animations, balancing aesthetics with gameplay functionality.</li>
  <li>Gained confidence in self-directed problem-solving, independent learning, and project planning.</li>
</ul>

<p><img src="/assets/img/posts/ProyectoManthano/ProyectoManthano_Gameplay01.gif" alt="Image of gameplay" /></p>

<h2 id="reflection">Reflection</h2>

<p>Completing <strong>Proyecto Manthanō</strong> allowed me to:</p>
<ul>
  <li>Combine <strong>Unity, C#, and pixel art</strong> into a complete project.</li>
  <li>Understand scope management in solo projects.</li>
  <li>Prove my adaptability and independence as a developer.</li>
</ul>

<p>The final demo is not only a game but also a showcase of <strong>end-to-end production experience</strong>.</p>

<h2 id="link">Link</h2>

<ul>
  <li>🕹️ <a href="https://legno9.itch.io/doom-of-tools">Try out Doom of tools!</a></li>
</ul>]]></content><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><category term="Unity" /><summary type="html"><![CDATA[A solo journey into learning Unity from scratch, culminating in a turn-based, deck-building roguelite.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://legno9.github.io/assets/img/posts/ProyectoManthano/ProyectoManthano_Main.png" /><media:content medium="image" url="https://legno9.github.io/assets/img/posts/ProyectoManthano/ProyectoManthano_Main.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Neon N Bullets</title><link href="https://legno9.github.io/unreal/2022-08-23-NeonNBullets/" rel="alternate" type="text/html" title="Neon N Bullets" /><published>2022-08-23T00:00:00+00:00</published><updated>2025-09-23T19:09:01+00:00</updated><id>https://legno9.github.io/unreal/NeonNBullets</id><content type="html" xml:base="https://legno9.github.io/unreal/2022-08-23-NeonNBullets/"><![CDATA[<p><strong>Neon N Bullets</strong> is an isometric bullet-hell game developed in Unreal Engine 4 using Blueprints. I handled all <strong>gameplay programming and player mechanics</strong>, creating a fast-paced combat system and responsive controls in a <strong>team project</strong> setting.</p>

<!--more-->

<ul id="markdown-toc">
  <li><a href="#project-context" id="markdown-toc-project-context">Project Context</a>    <ul>
      <li><a href="#gameplay-overview" id="markdown-toc-gameplay-overview">Gameplay Overview</a></li>
    </ul>
  </li>
  <li><a href="#my-contributions" id="markdown-toc-my-contributions">My Contributions</a></li>
  <li><a href="#development-process" id="markdown-toc-development-process">Development Process</a></li>
  <li><a href="#link" id="markdown-toc-link">Link</a></li>
</ul>

<hr />

<h2 id="project-context">Project Context</h2>

<p>The game tells the story of <strong>Neon Johnson</strong>, a researcher specializing in network cases, who receives new information about his sister, <strong>Neon Smith</strong>, a former top agent who died under mysterious circumstances. To uncover the truth, Neon Johnson dives into the darkest sectors of the network.</p>

<p>The world of Neon N Bullets imagines a society where <strong>internet access is a basic necessity</strong>, and VR pods allow users to fulfill nearly all daily needs without leaving their cabins. Players explore this digital underworld while advancing through the story.</p>

<h3 id="gameplay-overview">Gameplay Overview</h3>

<ul>
  <li><strong>Isometric perspective</strong> with fully 3D environments.</li>
  <li><strong>Player movement:</strong> WASD for navigation, mouse for aiming.</li>
  <li><strong>Combat:</strong> Shoot, dash (Space), and survive waves of enemies.</li>
  <li><strong>Objectives:</strong> Advance through levels while neutralizing enemies, avoiding damage, and discovering the story.</li>
  <li><strong>Levels:</strong> Each stage offers multiple routes, all converging at a single exit.</li>
  <li><strong>Enemies:</strong> Diverse and challenging, programmed with <strong>Behavior Trees</strong>.</li>
  <li><strong>Bullet Hell Mechanics:</strong> Avoid being hit while managing positioning and timing.</li>
</ul>

<hr />

<p><img src="/assets/img/posts/NeonNBullets/NeonNBullets_Gameplay.png" alt="Gameplay screenshoot" /></p>

<hr />

<h2 id="my-contributions">My Contributions</h2>

<p>I handled <strong>all gameplay programming and player mechanics</strong> using Unreal Blueprints:</p>

<ul>
  <li><strong>Player Control:</strong> Movement, aiming, shooting, dashing, and camera interaction.</li>
  <li><strong>Enemy AI:</strong> Implemented using Behavior Trees for pathfinding and attacks.</li>
  <li><strong>Health &amp; Regeneration:</strong> Player life, orbs, and regeneration effects.</li>
  <li><strong>Visibility System:</strong> Material effect that fades objects between the camera and player.</li>
  <li><strong>Particle Effects:</strong> Dash particles and hit effects.</li>
  <li><strong>Game Settings &amp; Adjustments:</strong> Configurations for gameplay balance and feel.</li>
</ul>

<h2 id="development-process">Development Process</h2>

<p>The demo for the first level was developed in <strong>four months</strong>:</p>

<ol>
  <li><strong>Preproduction:</strong> Concept art, sound design, GDD, level design documents, and narrative.</li>
  <li><strong>Production:</strong> 3D modeling, rigging, animation, programming, music composition, UI, and voice-over.</li>
  <li><strong>Polishing:</strong> Refined gameplay, visuals, and balanced mechanics.</li>
</ol>

<p>Despite time constraints forcing the team to <strong>cut some original GDD features</strong>, the project lays the foundation for a full game with rich narrative and advanced mechanics.</p>

<h2 id="link">Link</h2>

<ul>
  <li>🕹️ <a href="https://legno9.itch.io/neon-n-bullets">Try out NeonNBullets!</a></li>
</ul>]]></content><author><name>Ángel Formoso Caamaño</name><email>angel.formoso.caamano@gmail.com</email></author><category term="Unreal" /><summary type="html"><![CDATA[Neon N Bullets is an isometric bullet-hell game set in a dystopian, cyberpunk-inspired world.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://legno9.github.io/assets/img/posts/NeonNBullets/NeonNBullets_Main.png" /><media:content medium="image" url="https://legno9.github.io/assets/img/posts/NeonNBullets/NeonNBullets_Main.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>