[OPEN SOURCE] Multiplayer 3D RPG Using Colyseus

Better tooltips

  • can now specify where the tooltip appears
  • can show stats of item and abilities
  • bigger and more readable

Hi all,

It took me longer than expected but I pretty much completed the roadmap I established earlier in Jan this year (minus a few bugs) so it is time for another retrospective:

What I accomplished in approx 250 commits and over 5 months:

  • Basic name, logo & branding
  • Basic levelling up & experience system
  • Improve AI pathfinding & behaviour
    • completely revanped AI (finite state machine)
    • when in aggro mode, make sure AI does not go though walls
  • Better monster and player selection
  • New game UI
    • inventory panel
    • character stats panel (assigning stats points)
    • abilitiy panel (learn and unlearn abilities)
  • Item drops from monsters
  • Ability for players to pickup to inventory
  • Items & Abilities database
  • Better player camera (rotate and zoom)
  • Every assets is now either made by me or is open source.
  • Lots of improving in ability feedback (casting bar, etc…)
  • Much better & flexible tooltip
  • Player data can easily saved to DB is need be
  • Arguably better assets loading
  • initial colyseus state reduced (still more to do there)
  • probably more stuff that I forgot about

What I have not finished from my original roadmap

  • Having NPC’s (may have been a little optimitisc on that one)
  • Dropping item from inventory
  • A few remaining bugs
  • Existing Roadmap: @T5c · GitHub

Marketing

I’ve also manage to do a little bit of promotion on a couple discord channel and made 3 small dev post on DEV.TO :

Let’s talk numbers

I was trying and see if anyone is actually interested in this project, as there is no point in building something that will never get used or serve no purpose, so let’s check the numbers:

  • BABYLON.JS: over 4400 views as of today (woot!)
  • GITHUB Forks: 10
  • GITHUB Views: 600-1000 week
  • GITHUB Clones: 90-120 week
  • GITHUB Stars: currently standing at 30
  • DEV.TO views: 500 views in total over 3 posts
  • DEV.TO followers: 150 followers in total over 3 post
  • DEV.TO comments: 0 in total over 3 post

That was a fun exercise to do even if I dont really know what these numbers means as I have nothing to compare too, but they are growing overall, so I guess that’s probably a good thing.

Things I’ve worked but not implemented yet

There is alot of stuff of other local branches that I’ve worked on but not showned yet for the simple reason it is to complex for my current skillset and/or just not working correctly currently:

  • baked animation
  • how to implement clothes and different materials (different face for example)
  • better dropped item hightlight (really wonky currently)
  • retargeting animations (not sure of the term but having the same animation set for multiple characters)

Conclusion

I will sum this 5 month sprint with: It is alot of work in building a basic 3d multiplayer rpg, and To realistically be able to “finish” or get it close to a playable prototype, I’m going to need a lot more time (which I don’t have a lot of), or get help from other people for things I’m not very good at (like level design or character animations for example).

This said, I have no idea how to get help? And would anyone even be interested in helping/contributing? Where would I start this process?

Next step

In all cases, I’m going to keep working on it as much as I can, whether I find help or not, and will prepare an updated roadmap for the next 6 months in the coming days.

Lastly, a big thanks all the Babylon.js community, and especially @mawa for all the encouragement and help

5 Likes

31 stars

1 Like

Glad you recognize this :sweat_smile: Makes me feel a bit less old and useless :wink: I think I’m not just the only one here who told you that the amount of work, the pace and the results you achieved are beyond (often way beyond) the average. You undoubtedly have great skills; not just in dev, but also PM, organizing things, keeping with a roadmap and overal for the ‘Make it happen’ factor :smiley:.
So I guess for anyone interested in working with you on this project, these should be reassuring. I hope you will find your contributors and I believe a good place to start with for building your team might be just here, in this very forum. Honestly I don’t have much time and I’d like to work on some other projects (including a TD game) but I will continue to support and follow your project and if, here or there, I find I can give some useful tip, comment or small contribution, I shall be happy to do so. Meanwhile, have a great day and congrats again for all you’ve done already :sunglasses:

1 Like

This is amazing to see where you are at and It hope some ppl in the community will help get this project going even further :slight_smile:

1 Like

@jeremy-coleman A man of few words :wink: Thanks!

@mawa Thanks! Note that having a roadmap without a deadline date is cheating a little :slight_smile:

Thanks @sebavan , I’m sure some people will chip in but I may need to advance the project a little more before that happens.

1 Like

Hi there,

I’ve worked on the next roadmap, should be a little more realistic this time around:

Mostly trying to finish the items implementation and improving the AI.

Roadmap: @T5c · GitHub

Cheers,
Orion

1 Like

Did the UI refactor involve making it use BabylonJS GUI or is it HTML?

I used Babylon.js gui for all the UI. It’s quite effective once you get the hang of it :slight_smile:

2 Likes

Agreed. And then, with ‘the Editor’ or the ‘Figma plugin’, now new in version 5 with even more awesome features, we have something real solid to use also in productivity. Long live the BJS GUI :smiley:

2 Likes

Funny you mention the FigmaPlugin. I just forked the code for this project and if I have time I will use the figma plugin to spice up the ui for this game :wink:

2 Likes

Ooooh that’s going to be so cool!

@oriongu Love seeing your roadmap it is super nicely organized :smiling_face_with_three_hearts:

1 Like

How did you go? I haven’t used the figma plugin yet and curious if it can improve the worflow?

I got distacted and added a “critical” post processing black & white effect when player dies :slight_smile:

2 Likes

Check out “GOAP” (goal oriented action planning). You can make super smart (looking) agents that follow entire action plans. idk maybe sth like:

  • Goal: need planks
  • Action plan: get axe → chop wood → build saw mill → convert wood to planks

And the best thing: There is zero transition logic. The goap solver figures out the action plans for you! No FSM complexity. Your game seems like the perfect use case for it.

btw using (an adapted version of) this one: (GitHub - wmdmark/goap-js: A proof-of-concept implementation of Goal Oriented Action Planning in JavaScript)

1 Like

Very interesting way of doing AI. Thanks for sharing @Joe_Kerr :slight_smile:

About finite state machines, I realize now it is not very flexible and creates lots of code duplication (still much better than my previous nested if and buts everywhere).

Didn’t have a go yet. I took a look at the code and my main issue is I don’t have a nice way to port the existing UI to Figma first so was thinking about adding a Babylon To Figma function into the plugin!

lol, errm, sorry. You know if you have opened some tabs. Get interrupted, get some coffee, a pee break. I kinda meant to post the GOAP idea over at @Alexander_Sosnovskiy Village Craft thread. :woozy_face:

2 Likes

Haha makes more sense now :slight_smile:

This one is not going to be as fun (no screenshot or funky stuff), but I thought I should still share.

So, I’ve been working on improving AI to allow different types of spawning, but I first need to prepare the ground, this is what I came up with:

Every map has a associated JSON key (under shared/data/locations.ts) and you can setup your spawn points following the rules below:

[
  {
      type: "global",
      behaviour: "patrol",
      aggressive: 1,
      description: "will randomly patrol along the navmesh",
      points: [],
      radius: 0,
      amount: 5,
      race: "male_enemy",
  },
  {
      type: "area",
      behaviour: "patrol",
      aggressive: 1,
      description: "will randomly patrol along the navmesh within the defined points",
      points: [
          { x: -14, y: 0, z: 3.6 },
          { x: 3.7, y: 0, z: 3.4 },
          { x: 3.7, y: 0, z: 15.3 },
          { x: 13.45, y: 0, z: 14.63 },
      ],
      radius: 0,
      amount: 5,
      race: "male_enemy",
  },
  {
      type: "path",
      behaviour: "patrol",
      aggressive: 1,
      description:"Will patrol along a path of points going back and forth (not sure about this one, maybe once it gets to the end it should go back to the first point?)",
      points: [
          { x: -14, y: 0, z: 3.6 },
          { x: 3.7, y: 0, z: 3.4 },
          { x: 3.7, y: 0, z: 15.3 },
          { x: 13.45, y: 0, z: 14.63 },
      ],
      radius: 0,
      amount: 1,
      race: "male_enemy",
  },
  {
      type: "point",
      behaviour: "patrol",
      aggressive: 1,
      description: "will randomly patrol along the navmesh within the defined radius around a point.",
      points: [{ x: -8, y: 0, z: 14.7 }],
      radius: 5,
      amount: 5,
      race: "male_enemy",
  },
  {
      type: "point",
      behaviour: "idle",
      aggressive: 0,
      description: "will spawn on a point and stay idle, maybe useful for potential NPC's?.",
      points: [{ x: -9, y: 0, z: 15.7 }],
      radius: 0,
      amount: 1,
      race: "male_enemy",
  },
],

Upon map being created on the server, the new spawnController.ts will be in charge of spawning and setting up AI behaviour. I will need to add a few more states, but it shouldnt be too hard to update my AI to cater for these new behaviours.

It feels a little naive, buit it should be a good base.

This exercize is showing me the need of a map editor :slight_smile:

That’s it folks,

1 Like