<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://arnobpl.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://arnobpl.org/" rel="alternate" type="text/html" /><updated>2026-02-20T05:59:12+00:00</updated><id>https://arnobpl.org/feed.xml</id><title type="html">Arnob Paul - Software Engineer (Backend, Cloud, Fintech)</title><subtitle>Arnob Paul | Software Engineer with experience at Circle &amp; Amazon. Skilled in backend engineering, AWS cloud, distributed systems, and fintech platforms.
</subtitle><entry><title type="html">Game Analysis AI Assistant: Smart Expert Match Comparisons for More Relevant Reviews</title><link href="https://arnobpl.org/2026/01/31/game-analysis-ai-assistant-smart-expert-match-comparisons" rel="alternate" type="text/html" title="Game Analysis AI Assistant: Smart Expert Match Comparisons for More Relevant Reviews" /><published>2026-01-31T00:00:00+00:00</published><updated>2026-01-31T00:00:00+00:00</updated><id>https://arnobpl.org/2026/01/31/game-analysis-ai-assistant-smart-expert-match-comparisons</id><content type="html" xml:base="https://arnobpl.org/2026/01/31/game-analysis-ai-assistant-smart-expert-match-comparisons"><![CDATA[<h2 id="introduction">Introduction</h2>

<p>Hello! Today I’m sharing another update to the Game Analysis AI Assistant for Age of Empires IV. This update focuses on improving how the assistant compares your matches with expert gameplay to generate more relevant and actionable reviews.</p>

<h2 id="background">Background</h2>

<p>In my previous <a href="/2025/10/11/game-analysis-ai-assistant-for-age-of-empires-iv">post</a>, I shared an overview of Age of Empires IV and the Game Analysis AI Assistant. If you haven’t read it yet, I recommend checking it out first.</p>

<p>Let me quickly explain what the Game Analysis AI Assistant does before we look at the new feature. It analyzes your Age of Empires IV matches by comparing with expert matches and generates detailed reports highlighting your mistakes, areas for improvement, and how experts handle <em>similar</em> situations. I’m deliberately emphasizing the word <em>similar</em>, because that’s exactly what this post is about.</p>

<p>And since introducing the tool, I’ve been steadily improving it with new features and refinements.</p>

<h2 id="recent-improvements">Recent Improvements</h2>

<ul>
  <li><strong>Sharable Review Links:</strong> You can now share your match reviews with a single link. Previously, you had to input the same match URL again to get the same review. Now anyone can access your review instantly with one click.</li>
  <li><strong>Faster Analysis:</strong> The AI analysis now completes in under 3 minutes on average, down from around 5 minutes before.</li>
  <li><strong>Better Accuracy:</strong> Continued refinements have improved the quality and relevance of the generated reviews.</li>
</ul>

<p>Now, let’s dive into the latest update: smart expert match comparisons.</p>

<h2 id="the-challenge-with-expert-comparisons">The Challenge with Expert Comparisons</h2>

<p>The Game Analysis AI Assistant compares your gameplay with expert matches and highlights the key decision differences. However, the quality of these comparisons depends on matching you with the <em>right</em> expert matches.</p>

<p>Previously, the assistant would:</p>
<ul>
  <li>Find expert games with the civilizations reversed (so if you lost to French as English, it looked for expert games where English beat French)</li>
  <li>Pick one of those matches for comparison</li>
</ul>

<p>Because any of those matches could be selected, your review insights could vary from one analysis to another.</p>

<h2 id="whats-new-smart-expert-match-comparisons">What’s New: Smart Expert Match Comparisons</h2>

<p>The latest update adds intelligent playstyle matching on top of the existing filters. Now the assistant doesn’t just find compatible games, it picks the one that most closely matches how your opponent actually played.</p>

<h3 id="the-key-insight">The Key Insight</h3>

<p>When you submit a game for analysis, it’s usually because you lost to an opponent who used specific strategies to beat you. To learn effectively, you need to see what you could have done differently against that same style of play.</p>

<p>The assistant now finds expert games where:</p>
<ul>
  <li>The opponent played <strong>very similarly</strong> to the one who beat you (same overall approach and strategy)</li>
  <li>But the expert <strong>won</strong> despite facing that same style of play</li>
</ul>

<p>This means that when the assistant compares your game to the expert’s, the difference in results comes from the decisions you made versus what the expert did. The assistant can then highlight exactly where you could have played better to counter your opponent’s strategy.</p>

<h3 id="how-it-works">How It Works</h3>

<p>When you submit a match for analysis, the assistant now:</p>

<ol>
  <li>
    <p><strong>Find Compatible Games:</strong> First, it looks for expert matches that were broadly similar to yours, using a reversed version of your matchup as the starting point.</p>
  </li>
  <li><strong>Pick the Best Playstyle Match:</strong> From those compatible games, it studies how each game unfolded and selects the one where the expert’s opponent played most similarly to your opponent, looking at:
    <ul>
      <li>Overall approach and strategy</li>
      <li>When they transitioned between game phases</li>
      <li>How they allocated resources and applied pressure</li>
    </ul>
  </li>
  <li><strong>Generate Relevant Comparisons:</strong> It then compares your decisions with this well-matched expert game, giving you reviews that actually fit your situation.</li>
</ol>

<p>Here’s a simplified overview of the process:</p>

<pre><code class="language-mermaid">flowchart TD
    subgraph MatchFinder [Smart Expert Matching]
        direction TB

        %% Step 1: Hard Filter
        UserGame[Your game] --&gt; HardFilter[Hard filter:&lt;br/&gt;find broadly compatible expert games]
        HardFilter --&gt; Candidates[Compatible&lt;br/&gt;expert games]

        %% Step 2: Playstyle Matching
        UserGame --&gt; UserOppPlaystyle[Study your&lt;br/&gt;opponent's playstyle]
        Candidates --&gt; ExpertOppPlaystyle[Study expert's&lt;br/&gt;opponent playstyle]
        UserOppPlaystyle --&gt; PlaystyleMatch[Find best match&lt;br/&gt;by playstyle similarity]
        ExpertOppPlaystyle --&gt; PlaystyleMatch
        PlaystyleMatch --&gt; BestMatch[Best matched&lt;br/&gt;expert game]
    end

    BestMatch --&gt; Reviews[Your personalized review]

    style UserGame fill:#e3f2fd,stroke:#1976d2,rx:5,ry:5
    style HardFilter fill:#fff3e0,stroke:#f57c00,rx:5,ry:5
    style Candidates fill:#e8f5e9,stroke:#388e3c
    style UserOppPlaystyle fill:#e3f2fd,stroke:#1976d2,rx:5,ry:5
    style ExpertOppPlaystyle fill:#e8f5e9,stroke:#388e3c
    style PlaystyleMatch fill:#fff3e0,stroke:#f57c00,rx:5,ry:5
    style BestMatch fill:#e8f5e9,stroke:#388e3c
    style Reviews fill:#fce4ec,stroke:#c2185b,rx:5,ry:5
</code></pre>

<h3 id="the-result">The Result</h3>

<p>By matching the opponent’s playstyle, you get expert comparisons that focus on what you could have done differently in that situation. Instead of comparing your game to an expert who faced a different style of opponent, you’ll see how top players handle opponents who play just like the one that beat you.</p>

<h2 id="why-this-matters">Why This Matters</h2>

<p>More relevant expert comparisons lead to better reviews. You get insights that reflect what successful players actually do in situations similar to yours, making the advice more applicable to your specific game.</p>

<p>For example, instead of comparing your loss to any French matchup, the assistant now finds expert games where the French applied the same kind of pressure you faced, and shows how experts playing English handled it.</p>

<h2 id="whats-next">What’s Next</h2>

<p>This update is just the beginning. I’m excited to explore more ways to make expert comparisons smarter and more helpful.</p>

<p>Stay tuned for more improvements coming soon!</p>

<h2 id="try-it-out">Try It Out</h2>

<p>The <a href="https://game.arnobpl.org" target="_blank">Game Analysis AI Assistant</a> is free to use. Submit your AoE4 match link and see how the expert comparisons become more targeted and relevant.</p>

<p>If you find it helpful, consider supporting the project through <a href="https://ko-fi.com/arnobpl">Ko-fi</a>. Your support helps keep the tool free and enables continued improvements.</p>

<p>Thanks for reading, and happy gaming!</p>]]></content><author><name></name></author><category term="games" /><category term="aoe4" /><summary type="html"><![CDATA[Introduction]]></summary></entry><entry><title type="html">Game Analysis AI Assistant for Age of Empires IV</title><link href="https://arnobpl.org/2025/10/11/game-analysis-ai-assistant-for-age-of-empires-iv" rel="alternate" type="text/html" title="Game Analysis AI Assistant for Age of Empires IV" /><published>2025-10-11T00:00:00+00:00</published><updated>2025-10-11T00:00:00+00:00</updated><id>https://arnobpl.org/2025/10/11/game-analysis-ai-assistant-for-age-of-empires-iv</id><content type="html" xml:base="https://arnobpl.org/2025/10/11/game-analysis-ai-assistant-for-age-of-empires-iv"><![CDATA[<iframe width="560" height="315" src="https://www.youtube.com/embed/n10X3u8_9Ks?si=bKQeOcpfvibUKNR0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

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

<p>Hope everybody is doing great whenever you are reading this! I’d like to share some information about the popular real-time strategy (RTS) game, Age of Empires IV (AoE4), and the tool I’ve developed to help players analyze their matches and improve their gameplay.</p>

<p>AoE4 was released in 2021 but still remains one of the most active RTS games as of October 2025. Excitingly, a new DLC called “The Dynasty of the East” is set to release in early November 2025.</p>

<h2 id="what-is-aoe4">What is AoE4</h2>

<p>As mentioned, AoE4 is an RTS game but don’t worry if RTS sounds intimidating or too “click-click-click.” AoE4 is actually slower-paced compared to other strategy games, which is a good thing. It gives players time to think and make decisions based on what’s happening in real time.</p>

<p>Before each match, you pick a civilization (civ). During the match, you build your base, manage your economy, train your army, and battle your opponent. There are different victory conditions, but landmark victory is the most common in ranked 1v1 matches.</p>

<p>Winning requires strategy. You need to consider your civ’s bonuses, your opponent’s civ, and the map layout.</p>
<ul>
  <li>Is it an open map where villagers can be harassed easily?</li>
  <li>Are there gold mines close to your base?</li>
  <li>How far is your opponent’s starting position?</li>
  <li>What kind of army composition is your opponent using?</li>
</ul>

<p>The game is set in the post-classical era, so you’ll command knights, archers, infantry, and more.</p>

<p>There are currently 18 civilizations in AoE4: English, French, Mongols, Delhi Sultanate, Chinese, Rus, Holy Roman Empire, Abbasid Dynasty, Ottomans, Malians, Japanese, Byzantines, Order of the Dragon, Zhu Xi’s Legacy, Ayyubids, Jean d’Arc, House of Lancaster, and Knight Templar. The upcoming DLC will add four more civilizations.</p>

<p>Each civ has its own playstyle and unique units. For example, the English have the Longbowman, a long-range archer with slower movement but better range and higher cost compared to a regular archer.</p>

<h2 id="how-the-game-analysis-ai-assistant-helps">How the Game Analysis AI Assistant Helps</h2>

<p>The <a href="https://game.arnobpl.org" target="_blank">Game Analysis AI Assistant</a> is a tool I built to help AoE4 players review their matches, identify mistakes, and learn better strategies over time. It also helps players interpret their opponent’s strategy and plan effective counters. The assistant can even compare your performance with top players to highlight differences in decision-making and execution.</p>

<p>I’ve shared a sample output of the AI assistant’s analysis later in this post so you can see how it works.</p>

<h2 id="updates-to-the-game-analysis-ai-assistant-and-why-they-matter">Updates to the Game Analysis AI Assistant and Why They Matter</h2>

<p>I’ve been working on the Game Analysis AI Assistant for a few months now, continuously looking for ways to make it more accurate and insightful. Recently, I’ve made an important improvement that enhances the quality of the AI-generated reviews.</p>

<p>Before describing the update, here’s a quick overview of how the assistant works. When you provide a match link, it processes your game data through multiple steps such as parsing your match info, augmenting it with expert-level data, and connecting it with relevant game knowledge such as civilization bonuses, economy strategies (1TC or 2TC), military strategies (cavalry-heavy or infantry-heavy compositions), etc.</p>

<p>To connect your match data with the right game knowledge, the AI assistant uses a “vector database” containing thousands of game knowledge entries. Only a portion of these entries are relevant for a given match, so the AI performs a “vector search” to find the most relevant ones.</p>

<p>You don’t need to understand all of this to use the tool, but I’m sharing it just to explain why this update matters.</p>

<p>Previously, the assistant used an embedding model for the vector search that didn’t always distinguish relevant from irrelevant game information accurately. As a result, some analyses could include mismatched or incomplete context.</p>

<p>To improve it, I’ve researched and tested multiple embedding models on a sample dataset and found fascinating results. The following table shows a simplified version of my tests, where 1.0 means two sentences are identical and 0.0 means they’re completely different. A better embedding model should give higher similarity scores for related sentences and lower scores for unrelated ones.</p>

<table>
  <thead>
    <tr>
      <th>Sentence A</th>
      <th>Sentence B</th>
      <th>Model A</th>
      <th>Model B</th>
      <th>Model C</th>
      <th>Model D</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Balancing food and gold to sustain Japanese mounted Samurai production</td>
      <td>Balancing food and gold for Delhi Ghazi Riders Feudal</td>
      <td>0.763817</td>
      <td>0.780322</td>
      <td>0.784596</td>
      <td>0.613802</td>
    </tr>
    <tr>
      <td>Chinese counters to Abbasid archers and battering rams Castle Age</td>
      <td>Chinese Castle Age answers to enemy mangonels</td>
      <td>0.774029</td>
      <td>0.773624</td>
      <td>0.882328</td>
      <td>0.667558</td>
    </tr>
    <tr>
      <td>Counters to French early knights with archer support</td>
      <td>Counters to spearman and archer mass as French</td>
      <td>0.820385</td>
      <td>0.797822</td>
      <td>0.88552</td>
      <td>0.777139</td>
    </tr>
    <tr>
      <td>Balancing food and gold for English men at arms and knights</td>
      <td>Balancing food and gold for archers and men-at-arms</td>
      <td>0.813494</td>
      <td>0.7815</td>
      <td>0.913027</td>
      <td>0.841913</td>
    </tr>
    <tr>
      <td>Knights Templar Hospitaller Knight unit role training building and counters</td>
      <td>Hospitaller Knight unit role training building and counters</td>
      <td>0.95965</td>
      <td>0.894969</td>
      <td>0.969956</td>
      <td>0.944327</td>
    </tr>
  </tbody>
</table>

<p>As you see, different models behave differently. After careful testing, I’ve switched to a new model that performs better for this task. I’ve also rebuilt the entire vector database with it.</p>

<p>As a result, the AI assistant can now connect match data to more relevant knowledge, producing analyses that are more accurate, contextual, and useful.</p>

<h3 id="sample-review-before-and-after-updates-same-match">Sample Review Before and After Updates (Same Match)</h3>

<p>Below is a real comparison of how the AI Assistant analyzed the same match before and after the latest update. The update improved the way it understands and connects in-game events with strategic knowledge.</p>

<table class="equal-cols">
<thead>
<tr>
<th scope="col">Review before updates</th>
<th scope="col">Review after updates</th>
</tr>
</thead>
<tbody>
<tr>
<td>

        <h3 id="what-went-wrong-in-your-game">What went wrong in your game?</h3>
        <ul>
          <li><strong>Early game (0:00–6:00):</strong> You faced early_knight_pressure (the french trained lancers immediately on hitting Feudal at ~04:00), but you had only a single barracks and very few donso, with no quick walls/outpost on exposed resources. You lost villagers at 05:00–06:00, which ceded tempo and map control right as the opponent’s first lancers arrived.</li>
          <li><strong>Time: 06:00–12:00:</strong> From ~09:00–11:00 you floated large resources (e.g., &gt;800 gold, &gt;300 wood at 09:00–10:00) without either clicking Castle or adding enough production/counters, and you stayed on archers. Into growing french lancers + arbaletriers, that composition trades poorly; you gave up the initiative and bled more eco.</li>
          <li><strong>Mid game (12:00–18:00):</strong> You hit Castle at ~13:00 with Grand Fulani, but continued prioritizing archers/sofa and delayed key armor upgrades, while the french hit Castle at ~15:00 and powered up lancers (chivalry/bloodlines). The result was heavy villager losses (~11 at 14:00) and losing fights due to composition mismatch (too few sustained donso + javelins) versus knights + arbaletriers.</li>
          <li><strong>Time: 18:00–24:00:</strong> You repeatedly floated big banks (e.g., 21:00 gold 1704; 22:00 food 1023/gold 1098; 23:00–24:00 still &gt;1k) but did not scale production or siege enough, even as the french added a keep at 22:00. Without more production and siege, you couldn’t convert eco into map control, and villager pickoffs continued.</li>
          <li><strong>Late game (24:00+):</strong> You clicked Imperial at 26:00 with large banks but without a stabilized army/production. You then lost huge armies (e.g., at 28:00: 26 archers/47 donso/12 sofa; at 29:00: 8 villagers) while still floating thousands. The core issues were insufficient production scaling (far short of the 20–30 buildings typically needed at this stage) and continued composition mismatch into mass lancers + arbaletriers.</li>
        </ul>

        <h3 id="how-could-you-improve">How could you improve?</h3>
        <ul>
          <li><strong>Early game (0:00–6:00):</strong> Scout for the first french stable. Add 4–6 early donso, quick palisade walls/gates, and an outpost on your first gold/food; garrison and repair to blunt the first lancer. Keep 1–2 donso parked with vulnerable villagers. As wood allows, keep placing houses around your pit mine to stabilize your gold income.</li>
          <li><strong>Time: 06:00–12:00:</strong> Commit to a plan and spend to hit it. Either: (a) Feudal pressure with donso + javelin (2–3 production buildings, constant queues, ranged armor early), or (b) fast Castle—click the moment you hit the food/gold threshold. If you’re floating, add production first and reassign villagers to balance spend (don’t sit on 800+ gold in Feudal while being raided).</li>
          <li><strong>Mid game (12:00–18:00):</strong> Versus french knights + arbaletriers, anchor your army with mass donso and sustained javelin production; stop investing in archers into arbaletriers. Prioritize early ranged armor and melee armor. If you choose Farimba in future, use it to power a mass javelin timing push; if you go Grand Fulani, still keep donso + javelins as your core. Wall in expansions, add a defensive outpost on exposed eco, and focus-fire lancers to deny chivalry value.</li>
          <li><strong>Time: 18:00–24:00:</strong> Spend your banks by scaling to ~10–15 production in Castle (more barracks + archery, with a stable if you’re using sofa), and add siege access. Use siege (rams/mangonels) to break keeps and punish arbaletrier clumps. Keep armor/damage upgrades rolling and rally armies to a safe staging point to prevent trickle losses.</li>
          <li><strong>Late game (24:00+):</strong> Before clicking Imperial, cap out army and production; target 20–30 production buildings to spend thousands per minute. In Imperial, add hand cannoneers behind your donso to punish heavy units, keep javelins for arbaletriers, and use sofa to dive their backline when knights are pinned. Add long-range siege to remove fortifications, and tighten villager safety with layered walls and safer farm placements.</li>
        </ul>

        <h3 id="how-do-better-players-handle-this">How do better players handle this?</h3>
        <ul>
          <li><strong>Early game (0:00–6:00):</strong> They expect the first french lancers, pre-wall key approaches, park early donso at vulnerable resources, and add a single outpost to keep miners/gatherers safe—while maintaining a clean pit mine + house ring for steady gold.</li>
          <li><strong>Time: 06:00–12:00:</strong> They don’t sit on big floats. They either hit a Feudal donso + javelin timing (open-map pressure) or click Castle immediately, adjusting villager distribution to meet the timing cleanly.</li>
          <li><strong>Mid game (12:00–18:00):</strong> They pick a strong Malian core (donso frontline + mass javelins). If using Farimba, they power out javelins in batches; if not, they still avoid archer vs arbaletrier trades and start armor upgrades early. They pressure french gold to slow knight numbers.</li>
          <li><strong>Time: 18:00–24:00:</strong> They scale production ahead of income and add siege to break keeps and ranged masses, spending down banks quickly and rallying for decisive fights rather than trickling in.</li>
          <li><strong>Late game (24:00+):</strong> They delay Imperial until the field is secure. When they go up, they’re already on 20–30 production, with compositions that answer lancers + arbaletriers (donso front, javelins and hand cannoneers behind, sofa to dive, and siege for structures).</li>
        </ul>

      </td>
<td>

        <h3 id="what-went-wrong-in-your-game-1">What went wrong in your game?</h3>
        <ul>
          <li><strong>Early game (0:00–6:00):</strong> You floated a lot of wood and gold (e.g., by 06:00) while French <code class="language-plaintext highlighter-rouge">lancer</code> appeared as early as 04:00 and you had only a handful of <code class="language-plaintext highlighter-rouge">donso</code>. The light defensive setup led to early villager picks (05:00–06:00) and ceded tempo.</li>
          <li><strong>Time: 06:00–12:00:</strong> The opponent scaled into a growing <code class="language-plaintext highlighter-rouge">archer</code> mass (13 by 09:00, 16 by 10:00) with continuing <code class="language-plaintext highlighter-rouge">lancer</code> presence, but you added very few <code class="language-plaintext highlighter-rouge">javelin_thrower</code> until 10:00–12:00. You banked heavily for Castle and then took fights around 10:00–11:00 with a composition that underperformed into archers+lancers, costing units and momentum.</li>
          <li><strong>Mid game: 12:00–18:00:</strong> You clicked Castle at 13:00 but immediately lost big (10 <code class="language-plaintext highlighter-rouge">donso</code>, 7 <code class="language-plaintext highlighter-rouge">javelin_thrower</code>). Then at 14:00 you lost 11 villagers. Despite that pressure, you added a second Town Center at 17:00, which slowed army output while raids continued.</li>
          <li><strong>Time: 18:00–24:00:</strong> A decisive fight around 19:00 wiped much of your army (large <code class="language-plaintext highlighter-rouge">donso</code>/<code class="language-plaintext highlighter-rouge">sofa</code> losses) into a French <code class="language-plaintext highlighter-rouge">arbaletrier</code> + <code class="language-plaintext highlighter-rouge">lancer</code> core, while your <code class="language-plaintext highlighter-rouge">blacksmith</code> only appeared at 20:00. Your ranged/melee upgrades came very late (many after 22:00+), so your army fought with worse stats, and you floated &gt;1k resources without converting into the right counters.</li>
          <li><strong>Late game (24:00+):</strong> You aged to Imperial at 26:00 while still trading poorly and then lost a massive fight at 28:00 (26 <code class="language-plaintext highlighter-rouge">archer</code>, 47 <code class="language-plaintext highlighter-rouge">donso</code>, 12 <code class="language-plaintext highlighter-rouge">sofa</code>, plus villagers). Upgrades like ranged attack/armor finished very late (27:00–28:00), and your rebuild after the wipe lagged despite large resource banks.</li>
        </ul>

        <h3 id="how-could-you-improve-1">How could you improve?</h3>
        <ul>
          <li><strong>Early game (0:00–6:00):</strong> Expect early French cavalry. Open <code class="language-plaintext highlighter-rouge">barracks</code> in Dark Age and get continuous <code class="language-plaintext highlighter-rouge">donso</code> production; add a few palisade segments/gates and an early outpost on a key resource. Spend early wood/gold on anti-cavalry and defenses instead of banking. Keep queues active so wood/gold don’t sit idle.</li>
          <li><strong>Time: 06:00–12:00:</strong> As <code class="language-plaintext highlighter-rouge">archer</code> numbers grow, add an early <code class="language-plaintext highlighter-rouge">archery_range</code> and start <code class="language-plaintext highlighter-rouge">javelin_thrower</code> production to deter ranged mass while maintaining <code class="language-plaintext highlighter-rouge">donso</code> for cavalry. If you’re banking for Castle, avoid big fights until you’re up; otherwise, spend the bank on units and the first ranged attack upgrade to win Feudal trades.</li>
          <li><strong>Mid game: 12:00–18:00:</strong> Stabilize before greedy eco. Finish basic walls/outposts and park a few <code class="language-plaintext highlighter-rouge">donso</code> on common paths to reduce villager losses. Versus French knights in Castle, add <code class="language-plaintext highlighter-rouge">musofadi_warrior</code> for heavy counters and scale <code class="language-plaintext highlighter-rouge">javelin_thrower</code> versus <code class="language-plaintext highlighter-rouge">arbaletrier</code>. Use your Malian archers’ poison arrow upgrade with focus fire on knights to stack damage over time.</li>
          <li><strong>Time: 18:00–24:00:</strong> Don’t take even fights without your upgrades. Start blacksmith techs as soon as practical: ranged attack first, then ranged armor, then melee armor, then melee attack. Spend your bank on more production and the correct mix (frontline <code class="language-plaintext highlighter-rouge">donso</code>, backline <code class="language-plaintext highlighter-rouge">javelin_thrower</code>, a few <code class="language-plaintext highlighter-rouge">sofa</code> for chase). Tighten macro by cycling production hotkeys so queues never idle. Balance food/gold for <code class="language-plaintext highlighter-rouge">donso</code>+archer lines by leaning on Pit Mines and the <code class="language-plaintext highlighter-rouge">mansa_quarry</code>, supplementing food with cattle so you can keep gold-heavy unit production running.</li>
          <li><strong>Late game (24:00+):</strong> If behind or mid‑fight, delay Imperial and pump army/upgrades first. If you do click up, avoid engagements until upgrades complete; wall and buy time. After a wipe, re‑max instantly from all military buildings and rally away from the front to avoid trickle deaths. Versus <code class="language-plaintext highlighter-rouge">arbaletrier</code> + <code class="language-plaintext highlighter-rouge">lancer</code>, favor <code class="language-plaintext highlighter-rouge">javelin_thrower</code> + <code class="language-plaintext highlighter-rouge">musofadi_warrior</code> with <code class="language-plaintext highlighter-rouge">donso</code> cover over mass <code class="language-plaintext highlighter-rouge">donso</code>/<code class="language-plaintext highlighter-rouge">archer</code>. Use <code class="language-plaintext highlighter-rouge">griot_bara</code> festivals and cattle to convert your big food bank into continuous production.</li>
        </ul>

        <h3 id="how-do-better-players-handle-this-1">How do better players handle this?</h3>
        <ul>
          <li><strong>Early game (0:00–6:00):</strong> They blind‑respect French early cavalry with immediate spear‑line production, light walls, and a stabilizing outpost. Early resources are converted into units and safety, not banked.</li>
          <li><strong>Time: 06:00–12:00:</strong> They pivot to <code class="language-plaintext highlighter-rouge">javelin_thrower</code> as soon as enemy <code class="language-plaintext highlighter-rouge">archer</code> mass is visible and either take a clean Feudal timing (with early ranged attack) or a clean, fight‑free Castle click—never scrappy fights during the transition.</li>
          <li><strong>Mid game: 12:00–18:00:</strong> They secure eco first (walls/outposts) before adding extra Town Centers. Against French knights and <code class="language-plaintext highlighter-rouge">arbaletrier</code>, they field <code class="language-plaintext highlighter-rouge">musofadi_warrior</code> for heavies and <code class="language-plaintext highlighter-rouge">javelin_thrower</code> for ranged, then layer Malian archer poison for focused DOT on priority targets.</li>
          <li><strong>Time: 18:00–24:00:</strong> They line up fights with completed upgrades and correct ratios, add production to keep spend high, and maintain reinforce paths that prevent trickle losses. Ranged attack → ranged armor → melee armor → melee attack is the default upgrade flow for mixed infantry/archers.</li>
          <li><strong>Late game (24:00+):</strong> They only go Imperial with map stability and an army buffer, then power-spike with immediate upgrades. After a loss, they re‑queue a full army instantly and adjust composition toward <code class="language-plaintext highlighter-rouge">javelin_thrower</code>/<code class="language-plaintext highlighter-rouge">musofadi_warrior</code> + <code class="language-plaintext highlighter-rouge">donso</code> to specifically counter <code class="language-plaintext highlighter-rouge">arbaletrier</code> + <code class="language-plaintext highlighter-rouge">lancer</code>.</li>
        </ul>

      </td>
</tr>
</tbody>
</table>

<h2 id="what-is-next">What is Next</h2>

<p>Next, I plan to add support for the new DLC civilizations. The Game Analysis AI Assistant won’t support them on day one, but I’ll add them as soon as possible, realistically, within a few weeks after release.</p>

<p>Hopefully, I’ll continue posting updates and improvements as the project evolves.</p>

<h2 id="support--thanks">Support &amp; Thanks</h2>

<p>The <a href="https://game.arnobpl.org" target="_blank">Game Analysis AI Assistant</a> is completely free to use. There is no signup or account creation required. You can simply visit the tool, share your match link, and get your analysis instantly.</p>

<p>If you find it helpful, you’re welcome to support my work through donations. It’s completely optional, and donations are not connected to any usage limits.</p>

<p>Thanks to everyone who has tried, shared, or supported the tool so far. Your feedback keeps this project alive!</p>

<div class="donate-kofi" aria-label="Ko-fi donation button">
<script type="text/javascript" src="https://storage.ko-fi.com/cdn/widget/Widget_2.js"></script>
<script type="text/javascript">
  kofiwidget2.init('Support me on Ko-fi', '#006d73', 'O4O01L2D7P');
  kofiwidget2.draw();
</script>
</div>]]></content><author><name></name></author><category term="games" /><category term="aoe4" /><summary type="html"><![CDATA[]]></summary></entry></feed>