I've been building a 3D MMORPG in Godot 4.7 – Valrok

Hi everyone!

For the past several months I’ve been working on Valrok, a 3D fantasy MMORPG built with Godot 4.7.

I thought it was finally time to share the project here, especially because Godot has become the foundation of pretty much everything I’ve been building.

A little about me first: I’ve been programming since around 2012, but my background is actually very different from game development. I started with Linux/Shell Script, Fortran and C while working with theoretical and computational chemistry, and later moved heavily into Python, R, data science, AI and web development.

Around 8 months ago I decided to start learning game development from scratch.

And, perhaps not very wisely for a first serious game project :sweat_smile:, I decided to build an MMORPG.

That’s how Valrok started.


What is Valrok?

Valrok is a 3D fantasy MMORPG with a Nordic-inspired world, although I’m not trying to restrict the game completely to Norse mythology.

Some of my biggest references are MMORPGs I grew up playing, particularly Metin2, World of Warcraft and MU Online.

One of my main goals is to bring back something I really enjoy from older MMORPGs: relatively simple controls, but with satisfying combat, character progression, equipment progression, PvE farming and meaningful differences between classes and weapons.

The project is still heavily in development, so you’ll see placeholder assets, unfinished environments and systems that will certainly change.

But quite a lot is already playable.


Weapon-Based Combat

Combat has probably received the most attention so far.

I didn’t want weapons to simply change the character’s stats while keeping essentially the same gameplay.

Different weapon categories have their own attack animations, combo sequences, timings and combat behavior.

Currently I’ve implemented combat for several weapon types, including:

  • Sword
  • Greatsword
  • Axe
  • Daggers
  • Bow
  • Staff
  • Sword + Shield

Here’s an early demonstration of the weapon-based combat and combo system:

Weapon-Based Combat & Combo System – Godot 4.7

The melee attacks use sequential combo logic, animation timing and attack windows, so changing weapons can significantly change how combat feels.


Sword & Shield – from code to combat

One of my most recent additions was Sword & Shield combat.

For this one I documented much more of the actual development process instead of showing only the final result.

It involved:

  • animation retargeting;
  • attaching and positioning the shield on the character skeleton;
  • inventory/equipment integration;
  • allowing the shield to coexist with compatible melee weapons;
  • creating a new attack sequence;
  • implementing the combo using a state machine;
  • configuring attack windows;
  • adding the shield as an actual world/merchant item;
  • and finally testing everything in-game.

Sword & Shield – From Code to Combat | State Machine, Animations & Godot 4.7

This is also the direction I’d like to take more often with the project: showing not only the result, but also some of the implementation behind it.


Multiplayer and real PvP

Valrok isn’t being developed as a single-player prototype that I hope to turn into multiplayer later.

The multiplayer architecture is already part of the project.

I currently have the game communicating with its backend infrastructure, including the game server/API/database side, and I’ve been testing combat between actual connected players.

One of my earlier tests was simply checking whether the basic weapon-combo system behaved correctly during online PvP:

Testing Online Basic PvP & Weapon Combos | Godot 4.7

Since then, I’ve started testing actual class vs class combat.

For example:

Archer vs Rogue

Archer vs Rogue | Online PvP 1v1 Combat | Godot 4.7

And the opposite perspective:

Rogue vs Archer

Rogue vs Archer | Online PvP 1v1 Combat | Godot 4.7

These tests have been particularly useful because problems that aren’t obvious while fighting monsters become much more noticeable when another real player is moving, attacking, dodging and using abilities.

There’s still a lot of work ahead regarding synchronization, combat feedback and balancing, but having actual PvP running relatively early has been extremely useful.


Classes, skill trees and hybrid builds

I’m also working on the class system.

Instead of every character following one completely fixed progression, classes have different sides to their skill trees.

Players will eventually be able to select abilities from both sides, allowing hybrid builds rather than forcing everyone into exactly the same specialization.

One of the most developed class sets right now revolves around Archer and Rogue gameplay.

And this led to another system I’ve spent quite a lot of time experimenting with:

skill mastery progression.


Skills that visually evolve

Skills in Valrok can progress through several mastery stages:

M → G → P → X

Instead of progression simply being:

Damage: 100 → 120 → 150 → 200

I’m experimenting with making abilities visually evolve as the player masters them.

The effect should communicate progression before the player even looks at the numbers.

For example, this is the progression I created for Fire Arrow:

Fire Arrow – Skill Visual and Status Progression (M → G → P → X)

The projectile, cast and impact effects become increasingly pronounced as the ability progresses.


Eagle Eye

Another example is Eagle Eye, an Archer buff focused around accuracy and evasion.

Its visual identity also changes across the mastery levels:

Eagle Eye – Skill Visual Progression (M → G → P → X)


Shackling Arrow & Rain of Arrows

I’ve been applying the same philosophy to other Archer abilities.

Shackling Arrow focuses more on control, while Rain of Arrows is designed around an area attack.

Both have their own progression through the mastery stages:

Shackling Arrow & Rain of Arrows – Visual Progression

Creating these has also been one of my first deeper experiences with particles, shaders and VFX inside Godot.


Why Godot?

Game development was completely new territory for me when I started this.

And Godot ended up being one of the main reasons I kept going.

Coming primarily from Python, I felt comfortable with GDScript very quickly, but what surprised me more was how much I’ve enjoyed working with the rest of the engine.

During Valrok I’ve had to learn about:

AnimationTree, AnimationPlayer, Skeleton3D, retargeting, state machines, shaders, particles, VFX, 3D optimization, networking, multiplayer synchronization, UI and many other systems.

There have definitely been moments where building an MMORPG in Godot made me question my life choices. :sweat_smile:

But it has also been an extremely fun way to learn the engine.


What’s next?

My current priorities are:

  • finishing the first playable classes;
  • expanding Rogue gameplay;
  • starting/expanding the other classes;
  • improving PvP synchronization and combat feedback;
  • creating more enemy types;
  • improving PvE;
  • continuing the first playable region;
  • improving animations;
  • creating more VFX;
  • polishing UI/HUD;
  • balancing abilities and combat;
  • and gradually replacing placeholder assets.

I’m documenting the development on YouTube as I go, usually with short videos showing either a feature, an experiment or the actual development process.

I’ll also try to keep this thread updated as the project evolves.


I’d especially love to hear from other Godot developers working on 3D games, multiplayer/networking, RPG combat systems or larger projects.

Feedback about the combat, architecture, visuals or even things you think I should be careful about while attempting something of this scope is very welcome.

Thanks for reading!

1 Like