Unreal MMO Development with Yaz

Aarkun | Devlog #92 | Indie MMORPG | March Update (Part 3)

Aarkun | Devlog #92 | Indie MMORPG | March Update (Part 3)

Another small update, in early April we also created the primary site for Aarkun! About | Aarkun

Welcome to Part 3 of the March update. After the crafting demo and starter island tour in Part 2, this one goes deeper — both literally, into the starter island dungeon, and technically, into the template systems that make Aarkun scalable to build. If you’re curious about how we add new monsters, items, and races without rebuilding things from scratch, this is the post for you.

Inside the Dungeon — Lighting, Lore & Advanced Crafting

The starter island dungeon is large enough that even I get lost in it on camera. As you move deeper inside, the lights gradually thin out — fewer candles, fewer wall sconces — until you’re effectively forced to bring your own light source.

This ties directly into the mage progression path. Mages aren’t just damage dealers in Aarkun; the class is designed to be dynamic and utility-driven. Putting points into mage abilities unlocks light spells that change how you navigate the world, not just how you fight. Players who don’t go that route will need to rely on torches and consumables instead.

The Advanced Smithing Station

Tucked inside one of the dungeon rooms is a second crafting station — and this one is more advanced than the village station you saw in Part 2. The temperature mini-game from the village setup has a soft cap on how hot it can run. To craft higher-tier items, you need stations that can reach those temperatures, which means:

That progression is woven into the lore of the world, not just the mechanics. Going to the volcano isn’t a grindy unlock; it’s part of the journey for any serious crafter.

Bandits, Dragons & Future Trap Systems

The dungeon is currently infested with bandits searching for treasures connected to dragons. There’ll be multiple dragons scattered across the world, and one of them is on the starter island — there’s some interesting dragon lore coming that I’ll save for a dedicated post.

Future dungeon features in the pipeline include:

The goal is to make dungeons feel like genuine expeditions where preparation matters.

Template Systems — How We Keep Aarkun Scalable

This is the part of the dev log that probably matters most to anyone interested in the engineering side. Aarkun’s content scales because we’ve built template systems that separate generic logic from per-entity configuration. Let’s walk through them.

Monster Definition Template

Adding a new NPC starts with a monster base class that gives every NPC the abilities it needs. From there, each monster just specifies:

Take the brown bear as an example. Its stat block is:

Then comes the skill configuration. The bear has access to:

The “decision interval” is part of the state machine — every 1 second, the bear evaluates whether to use one of its available skills based on the configured probabilities and conditions. We can also override default skill cooldowns per monster, which is how the bear’s instant heal becomes a once-every-five-minutes panic button rather than a spammable ability.

Scaling Up — The Giant Crab Boss

The same template that defines the bear also defines the giant crab boss, just with much heavier numbers:

StatBrown BearGiant Crab
Health100~1,000
Strength15130
Movement Speed500Faster
Skill Decision Chance40%60%
Heal Cooldown5 minutes7 seconds

The giant crab also gets:

There are more skills planned to push boss combat further. For example, when a boss is surrounded by multiple players, future skills might grant bonus HP, regeneration, or physical/magical damage amplification — making coordinated group fights genuinely tactical rather than just DPS races.

The Java ↔ Unreal Bridge

Once a skill is defined Java-side and triggered in combat, here’s what happens:

  1. Java sends a message: “this actor used this skill”
  2. The actor is mapped to its Unreal blueprint
  3. The skill ID is looked up in the monster’s animation blueprint
  4. The matching animation plays from the animation hit list

The framework underneath this lives on the C++ side, but the Java configuration and the Unreal animation lookup are both clean and generic. That means adding new monsters and skills is a configuration job, not a coding job — which is exactly what makes content scaling viable for a small team.

Item Data Template — One System, Every Item Type

The item system used to live in Blueprints. We’ve moved it over to C++ with a template-driven approach, so every item type follows the same loading pattern but gets type-specific behaviour.

Take a footman’s helmet as an example:

The slot-to-component mapping is where this system really pays off. The same skeletal mesh can be reused with different materials for bronze, iron, and steel variants of the same helmet. We’re not fully utilising this yet, but the infrastructure is in place — when crafting variants ship, we won’t be authoring three separate helmets, just three materials.

Why This Matters

Adding a new item now means:

  1. Drop in the skeletal mesh and 2D icon
  2. Pick the correct item class (e.g. PotionBase, HelmetBase)
  3. Map the slot components for each supported race

That’s it. The Java side handles gameplay effects (potion stat boosts, weapon damage), and Unreal handles visuals and animations (drinking VFX, equip animations). It’s configuration-driven, which is exactly the property you want when your content roadmap keeps growing.

Player Appearance Template — Modular Characters

Currently we support four playable templates:

The death knights were originally added for testing purposes while orcs and dwarves were still being configured — they may or may not be playable in the initial release. Orcs and dwarves are coming soon.

Each appearance entry specifies an animation class that drives several animation lists:

When you drink a potion, the system requests your character class to play its specific drink animation — so the same potion ID will look right whether you’re a human, a death knight, or eventually a dwarf.

Modular Character Composition

We’re using Enhanced Studios assets, which break characters down into many independent components. To make those work cleanly with our backend, we built a template that composes the components together and exposes a clean entry point on the C++ side.

Adding a new race now means:

  1. One new entry in the player appearance template
  2. Slot updates in the item data template — e.g. adding a dwarf_male entry alongside human_male for every gear slot, with the appropriate skeletal meshes and materials

It’s a one-off setup per race. Once it’s done, every existing item works for the new race automatically. That’s the kind of leverage you need when planning multiple playable races on a small-team budget.

Mining Nodes & The Cave System

To wrap up, a quick look at mining nodes inside the cave. They’re scattered through the dungeon and tied to the dynamic backend spawning, so positions and density will be tuned as we test.

The cave layout is being designed around a few core principles:

There’s going to be a lot of play on lighting throughout dungeons and at night across the open world. The combination of darkness, traps, and bandit ambushes is what we want dungeons to feel like — places where preparation and class choice matter.

Wrapping Up

Part 3 was a denser one — more about the systems behind Aarkun than the visible content. But these template systems are what make the content roadmap realistic. Every monster, item, and race we’ve shown so far is built on infrastructure designed to scale, which is what gives a small studio like ours a real shot at the open-world MMO scope we’re aiming for.

If you’ve got questions about any of this — the template architecture, the Java/Unreal bridge, the modular character system — drop them in the YouTube comments or jump into the Discord. I read everything.

Thanks for sticking with the dev log series. Next time, we’ll either dive into the dragon lore or the mount system that’s currently in progress — both are getting close to showable.

Exit mobile version