This is a Request For Comments for a project that would allow MetaGame to organically create a skill-tree for players.
A skill-tree represents knowledge and interests of any given player. Plus relationships between these skills and subjects. This topic has been discussed extensively in the past, for example here.
When displayed as a graph, the tree could be used for example used in the following ways:
- One player view: shows the skills and interests of the player
- Two players view: show the players common skills and interests
- Skill/interest view: show related skills/interests OR show players related to that skill/interest
- Tree view: get a birds-eye view of the entire landscape of skills and interests in the community
Below is a proposal for how to build such a skill tree. It’s divided in 3 parts:
- Getting input from players
- Storing the data and exposing it via API
- Creating a data explorer UI
Part 1: Players input
It should be fun and easy for players to input their skills, as well as expand the tree.
For this reasons, I’m thinking of collecting input data through Discord.
A special skill-tree channel is set dedicated to playing the skill-tree minigame.
(It works similarly to how the
brain-exchange works today: posts are about a skill, and emoji reactions tell us about player’s relation to that skill).
There are 2 kinds of messages allowed in the channel:
skill: swdev description: develop software
skill: chicken description: raise and care for chickens
skill: python description: software development using Python
skill/interest relationship messages
python -> swdev
With this 2 messages alone, we can already build something good.
But if we layer more data on top using emoji reactions, we can build something great.
Players can react to messages in the channel to express their relationship with skills.
- ♂ - I am an expert on this
- - I like this
- - I am curious about this
Reactions are internalized in the graph as a relationship between the player and the skill.
Players can also react to
skill/interest relationship messages to confirm that the edge in the skill tree is indeed an important one.
The more votes an skills relationship has, the more confident we become that it’s indeed a valid edge.
- - A is a sub-skill of B
- - A is a parent skill of B
- ↔️ - A is related to B
python -> software development may get
- 5 x
- 2 x ↔️
- 1 x
- 2 x (ignored)
And we know that most people see
python as a sub-skill of
The main work here is to implement a Discord bot that can parse messages, listen for reactions and update the graph database.
The bot also need to tell when they send an invalid message, or introduce a duplicate, or use a reaction that is ignored.
Part 2: Data storage
The data schema is pretty simple. Any database can handle it.
Although using graph database (as opposed to a relational one) could make it easier to handle non-trivial relationships such parent/sub, etc.
The database only needs a simple API for the bot to input data:
- Create skill if not existing
- Create relationship if not existing
- Link player with skill
- Reinforce link among skills
The database should also answer queries such as:
- Give me all the skills player P is related to directly
- Give me all the skills that player P is related to directly or indirectly
- Give me all the skills strongly related to skill S
- Give me the parent and children skills related to skill S
Part 3: Data Visualization and Exploration
There’s an infinite number of ways we could visualize this data.
I mentioned a few in the intro, but the sky is the limit.
I know there are plenty of JS libraries that handle force-directed graphs, and they should be pretty easy to integrate. Front-end is not my area of expertise, so I’m looking for some help on this.