T5C - Multiplayer 3d RPG

Hi everyone,

GG on the Babylon.js 9 release, by the way.

It’s been a while — I finally had some time over the past couple of months to work on T5C, mainly focusing on combat and abilities. Here’s a quick (non-exhaustive) recap:

Infrastructure

  • Migrated from Webpack to Vite
  • Upgraded Babylon.js to v9
  • Upgraded Colyseus from 0.15 → 0.17
  • Switched server to ESM
  • Migrated from Yuka to NavCat for navigation
  • Added an admin screen to generate VAT textures for each “race”

Performance

  • Implemented a spatial grid on both client and server for distance-based entity filtering
  • Added StateView filtering (entities sync only to nearby players)
  • Introduced dirty-flag DB saves and reduced per-entity network state size
  • Tested with up to 100 simulated players — server still holds up well

Combat system (biggest chunk of work)

  • Full auto-attack rework: T4C-style click targeting, weapon-driven swings, and per-weapon abilities driving animation/VFX
  • Unified damage resolver with hit/crit/miss outcomes
  • Repeating cast loop for spells, including cast bar and spell-target cursor
  • Buff system, AoE abilities (e.g. Meteor Strike), and per-ability cooldowns
  • Ranged attacks (bow) with projectile VFX
  • Fire Dart / Fireball overhaul

UI & polish

  • Registry-based tooltip system with buff support
  • Dedicated cursor assets (spell targeting, hostile hover) and bow icon
  • Notification controller for centralized client alerts
  • Debug panel improvements (resolution controls, performance benchmarks)

AI & bots

  • More realistic bot behaviour (leashing, combat reset, respawn cooldowns)
  • Added a fake bot for solo testing

If you’d like to try it out, here’s the demo:
https://t5c-v2.onrender.com/
(Repo is currently private)

And as tradition dictates — a few screenshots to wrap things up:

Below is an example with 150 bots and 50 fake players runnign aroung attacking everyone.

12 Likes

That looks impressive! :open_mouth:

1 Like

Thanks @AlitarSemiramis

Finally added some enemy variety, we now have a skeleton, wasp and a spider.

4 Likes

This is solid update!
Are you back with the project?

Thanks, I appreciate that @Maiu

I don’t really like the coding part too much (Claude has been helping a fair amount to do things i’m lacking skills in), but I do like the world building, and putting things together if that make sense.

So yes, current goal is to get the combat part to a decent state, then to work on improving the visuals, world building, npcs, ennemies, player feedback loop, quests and generally making it more playable.

1 Like

Yesterday, I started working on implementing a decent terrain. Using Unity as my level editor, and using terrain to mesh plugin, the results looks reasonably good. It did bump up my GLB for that level from 2.4mo to 20mo (using a 4096 splatmap). It can then be compressed to 13mo using the babylonpress optimiser. I could probably use babylon.js terrain using a heightmap generated from my unity terrain but at this stage I’m overall happy with the result. About collisions, I can generate a navmesh using unity, but using terrain forces me to tweak it in blender for it to be usable by the server/client (I probably need to see if NavCat can generate the navmnesh on the fly, but minor issue at this stage).

One thing, that would dratiscally improve the overal feel is using lightmaps, and bake them using blender (I dont think I can do using Unity). I will try that this weekend.

Anyway, no more rambling, see the early result as follows:

2 Likes

Hi all,

It was getting quite hard to manage all the game data, so of course, I made a terrible decision and started making a small level editor scene where I can manage all this data/tools:

  • VAT baking (already existed, just centralizing here)
  • Navmesh Pre-baked (already existed, just centralizing here)
  • Spawns/Interactive elements
  • Abilities / Items / Drops

It’s taking shape, and even if i only use vat and the navmesh baking, it will still be useful :wink:

PS: just in case the humour is lost, the terrible decision is because this will for sure be a time sink :slight_smile:

4 Likes

I saw that like!@Dad72 agrees :slight_smile:

@oriongu Yes, I agree. Creating tools is essential to develop a game. Secondly, it is not a waste of time, as you save time by using these tools.
Also, it simplifies the creation of the game to have small tools dedicated to your game. Later, when you want to evolve your game, these tools will come in handy.
So it’s not useless, it’s essential. :smiley:

2 Likes

I’d also recommend checking out @isaac-mason s crashcat physics library. I’m using it in my game and it’s awesome!

1 Like

Thanks for the suggestion, I did not know that library. I’m already using navcat.js from him, and it’s working great for generating and interacting with navmeshes.

To be honest, I’m a bit scared of how hard it will be to implement physics within my project, but I will check it out for sure.

About the project, I’ve been working on alot of things but nothing that I can really showcase yet:

  • added a green hover outline on all entities (vat instances) (a simple shader did the trick)
  • refactored all current data into a tidy bunch of json files (so it can be read/write to the editor).
  • did a few different versions of the editor, I’m pretty happy with the current version, it’s minimalistic and not too complex at this stage.
  • reworking all game data to be tailored for a level 1 - 10 experience
  • working on creating all the missing assets not included yet (images, meshes, animations)
  • reworked login screen, character selection,
  • reworked character creator screen, now includes stats selection and four presets
  • massive re-work on the combat and improving the overall flow
    – started to narrow down exactly how the combats works.
    – made the choice for every skill/ability to be instant cast, but with cooldowns.
    – depending on the weapon equipped, clicking on a hostile entities will trigger the right animation + auto attack.
    – abilities have they own behaviour (some will start auto attack like “Fireball” and some like “Bless” will just trigger once)
    – added some debug tools so I can test different max levels characters with a different set of skills/abilities/items
    – still lots of work here, but the combat flow feels definitely better.