Steam has a “Curator” feature that allows users to make lists of games. Many are “Games I play on my YouTube channel” or “Popular games that I hope will drive traffic to my curator page” but there are also very specialized curators that I love.
I started a few lists of my own, just for fun. Little did I know this classification project would get out of hand! (See also, Atlanta Fashion Police, convention galleries, Solstice Cyclists, basically all my classification projects get out of hand)
I like to see all the new games that are coming out, and adding to these lists was another fun thing I could do while going through Steam’s new releases. Before I knew it, these lists had hundreds of games each. They are a significant collection of knowledge! But all my work is in the Steam eco-system, making Steam a more attractive place to go and to buy games. Why should I improve someone else’s website with my labor? Especially a functional monopoly whose business practices I dislike. So I resolved to move my curation onto my own website.
Yes, I was gong to build another database, with back-end pages that partially automate creation & editing of information, as well has public-facing search and view features. I’ve done the PHP/SQL thing several times, so for this project, I chose to learn Django and Python.
Two of my lists, and several of the other curators I like, are variations of “Games that contain this particular thing” If my DB had a list of playable species and non-playable species, it would cover both Non-Human Protagonists and Arachnophobia, games w/ spiders, as well as Spike Covered Kittens, Elf Girl Respect Patrol, Satan Enthusiasts, You are a Ghost, THAT’S A GOOD ASS DOG, Mecha Galore, Does It Have Robots?, Dwarves of Gaming, Games Featuring Dogs, Skeletons & Videogames, Games With Cats In Them, Anthro / Furry Tag, and probably a few others. Easy win, right! Generic data models are great!
I defined “species” rather loosely as “a group of creatures of the same type” and let species have parent-child relationships with each other. So “humanoid” includes “human” and “elf” and “Klingon”. Since “drider” and “scorpion” both inherit from “spider-like”, they show up in the list for Arachnophobia, but I can also offer more precise lists for only scorpions or only driders.
But the presence of a particular type of creature isn’t the only relevant information. Some arachnophobes hate cobwebs, others are OK with spiders as long as the spiders don’t leap at them. “Cobweb” isn’t a species, and “leap” is a capability, not a sub-species. Likewise, people who care about dogs in game might want to know if they can pet the dogs, or if the dogs do tricks. They don’t care if they can pet the spiders, and dogs never shoot webs, so adding “is pettable” or “shoots webs” as attributes of a species doesn’t make sense. Any species may have extra attributes that only apply to it. I could easily represent this with object-oriented subclasses, but databases don’t work that way.
Look how hard it is to answer a simple question: “Can I play as a skeleton?”
- In Grim Fandango, you control one character: Manny Calavera, a skeleton. Yes, always.
- In DOTA 2, you pick one hero from a large roster to control. You may choose Skeleton King, or a non-skeleton hero. Yes, sometimes.
- In Din’s Curse, you control one human hero. You can choose from a list, or create your own by combining parts of pre-made heros. If you have the Necromancer skill tree from the Conjurer class, you can summon skeletons which fight for you. You order them to move and attack, but your human hero is more important. Yes, sometimes, indirectly.
- In WarCraft III, you choose one of several armies to control. The Undead Necromancers can raise Skeletons from corpses. Heroes who find a certain item can also summon skeletons. Your control of these skeletons is as detailed as your control over any other unit. There is no main character. Yes, sometimes, as much as anything. But, wait! During the singleplayer game, you guide various heroes through story missions. These heroes are the main characters, so they are more important than any skeletons who may or may not join your army. The mechanical controls do not change, only the context provided to those mechanics by the story. Not really, I’m Arthas right now.
- In Dragon Age: Inquisition, the player can directly control any character in combat, but only the Inquisitor’s appearance and personality can be controlled by the player. The player IS the Inquisitor. The other characters are their own people.
So we can get more useful answers by replacing the question “Can you play as Character X?” with the following questions:
- Can you control Character X?
- Always
- Never
- Sometimes. Arthas from WarCraft III is controllable in some story missions and is an NPC antagonist in others
- Optional. Players can add Polar Bears to their armies in King’s Bounty, or not.
- Partially. Cassandra from Dragon Age: Inquisition can be controlled in combat but not in conversation
- Indirectly. Players have basic control over Fallout: New Vegas‘s Boone in combat, but none in conversation. Control over the Courier is more direct.
- Can you identify with Character X?”
- Always
- Never
- Sometimes Commander Shepard is the player avatar in Mass Effect 3‘s singleplayer, but the player has a separate set of characters in multiplayer.)
- Optional. Players can choose to be Cammy in Street Fighter V or some other character.
According to League of Legends lore, players always and only play Summoners, human magicians who in turn control Champions. But that’s not how people experience League of Legends. People say, “I’m going to play Miss Fortune” or “I’m an Urgot main”. They identify with and directly control a Champion. On the other hand, Princess Maker Refine, has a similar invisible protagonist, but players don’t identify with the princess because ordering a girl around is part of the fantasy.
So simple questions like, “Is there spider stuff in this game?” and “Can I play as a robot?” can be answered in a short English sentence, but creating data structures to codify all the shades of meaning contained in that sentence is very difficult.