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/interest
skill/interest relationship
Example skill/interest
messages
skill: swdev
description: develop software
skill: chicken
description: raise and care for chickens
skill: python
description: software development using Python
Example 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.
Reactions
Players can react to messages in the channel to express their relationship with skills.
For example:
- - 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
For example, 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 software development
.
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
- Etc.
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.