Skip to main content

Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
TagsGame Engines

Tullio

2
Posts
2
Topics
A member registered Jan 14, 2026 · View creator page →

Creator of

Recent community posts

https://tullio2.itch.io/arena-medievale

The Arena Is Starting to Fight Back

The last Dev Log ended with a simple goal:

We don't want less Medieval Arena. We want the same battle, the same effects, the same number of enemies and the same madness... but we want it to fly.

A lot has happened since then.

Performance work has continued aggressively, especially inside the server-authoritative simulation, but something else happened along the way: the arena itself became much more reactive.

Enemies are no longer just independent units waiting to find a target. Elite enemies can influence the creatures around them. Groups can react when their leader dies. Survivors may run for reinforcements. Landmarks can leave consequences behind. The central Boss can progressively turn parts of its own arena against the players.

And at the same time, we're making all of this cheaper to simulate, not more expensive.

⚙️ Performance: optimizing the battle, not reducing it

A large part of recent development has been focused on the hottest sections of the simulation.

With hundreds of entities interacting, innocent-looking operations can become extremely expensive when repeated every AI tick. Target searches, faction checks, nearby-unit queries, Elite-group management, special abilities, tactical decisions and zone calculations can multiply very quickly.

The recent optimization passes have therefore focused on finding cases where the game was asking the same question more than once.

Several systems now reuse information that was already calculated during the current simulation tick. Elite followers keep direct references to their leader. Frequently used classifications are cached. Multiple zone calculations can be performed during a single population scan. Special-ability targeting can reuse results from the normal AI targeting pass.

The important part is what we didn't do.

We didn't make enemies think less often.

We didn't lower the action tick.

We didn't reduce movement updates.

We didn't solve performance problems by making the battlefield less responsive.

Whenever an optimization saves CPU but introduces visible AI latency, it is the wrong optimization for this game.

📊 Measuring before optimizing

The server diagnostics have also become considerably more detailed.

The FULL-AI simulation can now expose the cost of systems such as targeting, tactical decisions, nearby-unit queries and enemy special abilities. More recent diagnostics can go deeper into telegraph resolution, target scanning and the actual number of fighters evaluated by area attacks.

This has already prevented at least one tempting but counterproductive optimization.

Using another spatial structure for AoE resolution sounded like an obvious improvement. In practice, Medieval Arena usually has a very small number of player fighters to test against an attack. Building and querying another structure could cost more than simply checking those fighters directly.

So it wasn't implemented.

Optimization isn't about making the code look clever.

It's about making the game measurably faster.

👑 Elite enemies are becoming real leaders

Elite enemies now have a much stronger relationship with the creatures fighting around them.

Some Elite groups can appear with one or two dedicated guards. While at least one guard survives, the Elite receives a modest defensive advantage.

It is not invulnerability.

You can still focus the Elite immediately if you want.

But eliminating its guards first is now a meaningful tactical option.

Groups can also briefly adopt formations when combat begins. Melee units can occupy the front while ranged units remain behind, while other groups may attempt a wider approach before normal combat behavior takes over.

Wounded ranged enemies can even try to fall back behind a living Elite, using their leader as a temporary point of protection instead of standing still and dying.

The goal is not military-perfect formations.

The goal is to make a group of enemies feel like a group.

☠️ Killing the leader now matters

The death of an Elite can change the behavior of the remaining enemies immediately.

Nearby followers can react in two different ways.

Some temporarily break and disengage, attempting to create distance from the fight.

Others enter a short frenzy, becoming more aggressive for a few seconds.

This means eliminating the leader is no longer simply removing the enemy with the largest health bar. It can destabilize the entire encounter — although you don't always know whether that instability is going to help you.

And sometimes there is one more problem.

🏃 The last survivor may run for help

If an important group has been almost completely destroyed and only one enemy remains, that survivor can occasionally decide that continuing the fight is a terrible idea.

Instead, it runs.

Not randomly.

It can attempt to reach other enemies in the biome and call them into the fight.

The player then gets a very simple decision:

Chase it, or let it go.

Chasing may drag you away from the position you wanted to hold.

Ignoring it may mean dealing with reinforcements shortly afterward.

Even better, this situation can now become an opportunistic micro-objective. The game can recognize that an actual survivor is escaping and challenge nearby players to stop that specific enemy before it successfully calls for help.

The objective exists because the situation happened.

The situation does not happen because the game needed an objective.

That distinction is becoming increasingly important to how we want events in Medieval Arena to work.

🔗 Elite Chains

Elite encounters can now occasionally develop into a small emergent hunt.

Killing an Elite has a rare chance to reveal a connected, stronger Elite somewhere in the same zone.

Defeat that one and the chain can potentially continue once more.

Then it stops.

There are strict limits specifically to prevent infinite Elite chains or uncontrolled population growth.

Like the escaping survivor, discovering a chained Elite can generate a contextual micro-objective targeting that exact Elite, with its own timer and completion state.

An ordinary Elite fight can therefore unexpectedly become a short hunt across the biome.

😈 A Nemesis can now be created by the match itself

One of the more interesting additions doesn't require spawning a special enemy at all.

Sometimes an ordinary creature simply has a very good day.

If a normal mob manages to kill two fighters without dying, it can be promoted directly into a Nemesis.

The creature doesn't disappear and get replaced.

It is the same enemy.

It keeps its position, its current state and the history that created it, but becomes a considerably more important threat.

So when you encounter a Nemesis that emerged this way, there is an actual reason it exists:

it earned the promotion by killing people.

This is exactly the kind of small emergent story we want the simulation to create naturally.

🚶 Enemies don't always wait for you anymore

Some enemy groups can now patrol between locations inside their biome.

This is deliberately different from simply increasing random wandering distance. A patrol has somewhere to go and can encounter other creatures, players or an active battle along the way.

Reinforcements are also becoming more physical.

Where possible, support doesn't need to magically appear beside an ongoing fight. Existing enemies farther away can be selected and sent toward the battle as actual reinforcements.

That means you may see them coming.

And if you see them coming, you can intercept them.

🏛️ Landmarks now leave a bigger mark on the match

Landmarks continue to evolve beyond isolated missions.

Achieving Excellence during a Landmark can now influence a later short environmental event in that biome, potentially turning what would normally be a danger into something beneficial to the squad — or particularly unpleasant for nearby enemies.

Major enemies can also occasionally treat an inactive Landmark area as a temporary stronghold, creating recognizable combat positions without forcibly starting a Landmark mission.

But failure has become more interesting too.

Previously, failing an event could simply mean that the activity ended.

Now certain Landmark failures can leave a short, thematic consequence behind.

A failed Portal can leave Voidspawn in the area.

A failed Convoy can leave corrupted survivors.

A failed Altar can temporarily destabilize the ground around it.

These consequences are deliberately short.

Failure should change the immediate situation, not punish the player for the next ten minutes.

🌪️ The biomes can strike without warning

The longer atmospheric events are still part of the arena, but we've added another layer: short environmental incidents lasting only a few seconds.

Each biome has its own version.

The North can produce a sudden freezing gust.

The Crypt/South can crack the ground beneath combatants.

The East can release a toxic cloud.

The West can create a brief sand vortex.

These are clearly telegraphed before becoming dangerous and disappear quickly afterward.

They are not missions.

They are not long weather systems.

They are short interruptions that force everyone in the area — player, ally or enemy — to react to the battlefield itself.

⚔️ Breaking enemy dominance

There is another rare situation the simulation now recognizes.

If two Elite enemies are killed within a few seconds of each other in the same zone, the local enemy population can briefly suffer a morale collapse.

The game treats this as Broken Dominion.

Ordinary enemies in the area temporarily lose some of their confidence, giving the squad a short opportunity to push forward.

Again, there is no special mission required.

The players created the situation themselves.

👹 The central Boss fight is becoming less static

The central Demon has also received another major pass.

The fight still uses its established phase structure, but those phases now contain more variation.

During the first phase, the Boss can summon different adds depending on the biome they originate from.

Later phases introduce additional attack patterns, including new spatial pressure around the target.

The final phase can select between multiple patterns rather than always executing the same sequence.

Landmarks completed earlier in the match can even echo into the Boss fight, providing small situational effects connected to the zones the squad previously conquered.

And the arena itself is becoming part of the encounter.

During phases two and three, temporary sections of the central battlefield can become dangerous. Existing telegraph and AoE systems are used rather than physically changing the map.

The result is that the safe space changes from fight to fight.

The arena isn't destroyed visually into a different map.

It becomes progressively less safe to stand still.

🎯 Micro-objectives are becoming contextual

Micro-objectives originally provided small secondary goals during normal play.

They have since expanded with class-specific challenges for all six classes, contextual requirements and now opportunistic objectives generated by real events in the simulation.

The game can recognize that:

an enemy is escaping,

a chained Elite has appeared,

or a particular combat opportunity exists.

It can then offer an objective tied directly to that situation.

The important part is that these objectives remember their actual target. Killing some unrelated Elite does not complete an objective asking you to eliminate the Elite revealed by a chain.

We're moving away from objectives that simply say:

"Do X somewhere."

And toward objectives that say:

"This is happening right now. Do something about it."

🌐 Multiplayer: choose your team

The multiplayer lobby has also gained an important new option.

Players can now choose:

Random, North, South, East or West.

Teams retain their three-player cap.

If three players have already selected North, for example, North becomes unavailable to the remaining players.

The server validates the selection as well, so this is not simply a client-side restriction.

Random remains the default, preserving the original quick-join behavior for anyone who doesn't care which team they join.

Random players are then distributed across available teams while respecting the same three-player limit.

It's a small interface option with a surprisingly large effect for groups who actually want to play together.

📱 Server-backed Singleplayer keeps moving closer to local SP

A lot of recent work has continued to focus on parity between local Singleplayer and the server-backed simulation used by mobile and multiplayer.

One small example is resting.

Sitting down already restored health in local Singleplayer, but the same behavior could fail in server-backed play because high-frequency input updates continuously reset the server's regeneration timer.

The visible state was correct.

The character was sitting.

But the health bar wasn't moving.

The regeneration clock now starts on the transition into the resting state instead of being restarted by every subsequent input packet.

It's a tiny fix on paper.

It is also a good example of why maintaining parity between a local action simulation and a server-authoritative one is much harder than simply copying the same numbers to both.

🧠 More simulation, less wasted work

All of these new behaviors obviously have a cost.

Elite guards, formations, wounded ranged behavior, patrols, physical reinforcements, contextual objectives and increasingly reactive enemies all require decisions.

So the optimization work has continued alongside the feature work.

Recent passes have removed repeated population scans, unnecessary temporary arrays, repeated faction classification and redundant target searches.

Heavy group maintenance can run at a lower administrative frequency while actual movement and combat remain on the fast action path.

This distinction matters.

An Elite doesn't need to rebuild the administrative structure of its group 60 times per second.

A sword swing, dodge or moving enemy absolutely needs to feel immediate.

That separation is allowing us to make the simulation more complicated without simply throwing more CPU at every frame.

⚔️ Where we're going

The previous Dev Log ended by saying that the next phase would focus on performance.

It did.

And it still does.

But optimization has also given us room to make the battlefield more reactive.

The direction is becoming increasingly clear:

We don't want an arena where enemies simply spawn, acquire a target and fight until one side dies.

We want battles where killing a leader changes the group.

Where the last survivor may run.

Where reinforcements physically arrive.

Where an ordinary creature can become a Nemesis because of what happened during the match.

Where Landmark victories and failures leave short consequences.

Where the Boss fight remembers parts of the journey that brought you there.

And where all of those systems can coexist without turning the simulation into a slideshow.

The objective hasn't changed:

Don't reduce Medieval Arena to make it run better.

Make the Medieval Arena we want run better. ⚔️🔥

https://tullio2.itch.io/arena-medievale

Arena PvE -  PvP.
Singleplayer - Multiplayer.
6 characters, multiplayer 9 gamers. Common mobs, Zonal mobs, Elite, Miniboss, Boss.