Personal project to help with the categorisation of Overwatch characters according to their roles. The idea of this project is to classsify characters according to their roles, family relationships, country of origin, and species. For this project, the following resources were used:
-
Neo4j for organising the data and presenting it graphically
-
Arrows.app for presenting the graphic representation
Nodes are used to describe entities of a domain. Entities can be objects, people, or characters like in this case where the domain is the video game "Overwatch", which are:
Ana
Brigitte
Hanzo
Genji
Pharah
Reinhardt
Torbjörn
Zarya
Zenyatta
Properties can be used to describe nodes. In this project, all properties are associated with characters:
-
Species: Overwatch has characters that are human, animal, or omnic (robot)
-
Origin: every character comes from a specific country, except when they are omnics
Nodes can have zero or more labels. They help with the classification of data. In this project, we are using two labels:
-
Character: name of the character
-
Role: role of the character
Relationships express what is the connection between the nodes:
-
FAMILY_WITH: used between characters to express they are members of a same family
-
PLAYS_AS: used between the character and their role, expressing how their gameplay is
When an entry for a character is created, it is necessary to associate it with their role and properties. In some cases, characters can also be members of a same family (i.e. Pharah is family with Ana, who is her mother). All characters have the properties "species" and "origin" which can be also used for different kinds of clustering — for example, both Hanzo and Genji come from Japan.
This is an example of a Cypher query associating the character Hanzo, who plays as DPS as his role:
CREATE (c:Character{name:"Hanzo"})-[p:PLAYS_AS]->(r:Role{type:"DPS"}) RETURN c,p,r
To connect Hanzo with Genji as "family_with" since they are brother, it is important to differentiate the second "Character" with another variable (otherwise the system will read the query as a same character being family with themselves).
MATCH (c:Character{name:"Hanzo"})-[f:FAMILY_WITH]->(cc:Character{name:"Genji"}) RETURN c,f,cc
This project doesn’t include all of the Overwatch characters, it is an example of how to present them after a few categories with the use of Neo4j graph. Apart from adding the full list of characters, here are some expansions that could be done:
-
Counter: what character is strong against the other (e.g. Winston is a counter to Genji). This could be useful for players when choosing their picks and adapting the strategy during gameplay. This could be featured with the use of a new relationship entry (COUNTERS).
-
Map advantage: some characters have abilities that are more advantageous or even overpowered in specific maps. One example is Roadhog (not listed here) in the map Illios Well. This could be featured as a new property entry (Map_Advantage).
-
Ultimate Cancelling: some ultimates can cancel others. This could be useful for neutralising the enemy’s attack. Through a new relationship (CANCELS), it is possible to include this type of information (e.g. Zenyatta’s ultimate cancels Genji’s).
Ultimately, this kind of information could be featured on a specific URL or an app where people can check in real time which character is the best for them to pick depending on the variants.