Once Upon A Card – The Game
|Genre||Turn-based / Card / Cooperative / Multiplayer|
|Control||Mouse & keyboard|
|Target audience||Midcore players|
Once upon a card is a turn based cooperative game with a traitor feature creating a perpetual atmosphere of suspicion between players.
Once Upon A Card – The Project
|Team||4 game design students / 2 concept art students|
|Context||2nd year school project|
|My main roles||Game Designer / Lead Programmer / Technical Artist|
My work as Game Designer
Create a suspicious atmosphere
“Suspicion” was the keyword of this project. We wanted to create a suspicous atmosphere between players.
In this idea, the game is asymmetric. Players have to cooperate in order to reach and kill the final boss, in exception of one being the traitor. The traitor will have to sneak among the other players and wait for a good opportunity in order to kill the others.
In combat, players can attack each others, or even heal and buff enemies. It allows the traitor to turn a fight in his favor, but also create confusion in some situations, like a player using a card attacking everyone for example.
Moreover, all loots are shared between players, the first to click will get the loot which gives opportunities to steal from someone else.
Slay The Spire was a strong reference. We used the same kind of path system, which will led to differents events like a combat or a campfire for example. We decided to add a vote system in order to encourage social interactions between players.
Another reference was The Werewolfes of Millers Hollow which strongly inspired our campfire phases. During the day, players will have several cards representing actions (stab another player, steal a card, heal yourself…). The night represent the resolution of all this actions. Note that you can’t know what the others did, and you will have to figure it by yourself.
3 different characters
To have good treasons, we needed a good cooperative aspect. Having multiple characters allowed us to create synergy between players.
We have created 3 different characters:
- The mage which can use more cards in a single turn
- The warrior which can equip more passive items and has more hp
- The priest which pick 1 more card each turn, can heal and have access to unique buffs
We added character cards, which have an additionnal effect when used by a specific character. But also dual character cards, with two different character effects in order to create even more potential conflicts.
All these synergy elements create long terms strategy, which leads to interactions between players, and so potential conflicts and interesting situations.
Some multiplayer UX
Interactions between players start directly in menus. They choose the name of the room they’re playing in, and their pseudo when joining.
Players playing one after another, it was important to not have long turn and long waiting time. That’s why Action Points are low which limit card spamming, and also why all animations had to be short.
In the case you are playing with other players in the same room, the allegeance (traitor/loyal) is displayed in a sneaky way.
My work as Lead Programmer
We were two programmers working on this project.
As lead, i was responsible of the global architecture of the code, and had to make sure my teammate understood and knew what to do.
I made some technical documentation and diagrams. But also distributed tasks, and had to be available for any technical questions regarding the project.
Most of my programming time was spent on the combat system. This system being the core gameplay of the game, it contained a bunch of sub-systems.
- Entity system : responsible of generating and keeping tracks of all entities (players or mobs) in the combat.
- Health system : represent the health of an entity. It contains differents events in order to trigger feedbacks and sync between players.
- Deck system : responsible of keeping tracks of players cards.
- Turn system : determine which entity (player or mobs) has to make an action (card or mob attack).
- Effect system : determine what an action (card or mob attack) should do (damage, heal, buff, debuff…).
- Targeting system : determine which entities (players or mobs) are affected by an action (card or mob attack). It has different modes (yourself, single target, team, all…).
- Buff and Debuff system : keep tracks of all modifiers (armor reduction, damage boosts…) on entities (players or mobs).
For the networking part, we used the Photon Bolt asset. It allowed us to create a lobby / room system, communicate between server and client thanks to UDP protocols, use network events, states with callbacks, and convenient functions in order to switch scene and instantiate objects for all clients.
Being both a card game and an online multiplayer game, Once Upon A Card contains a lot of UI.
Most of my job was to design and code some specific UI elements and all the game menus.
My work as Technical Artist
I created a game event system in order to easily play sfx, vfx, camera shakes etc…
For the characters and mobs animations, we used the Animator Override Controller within Unity in order to use the same Animator logics and just override the animations. Moreover, we used the 2D IK & Rigs package in order to ease the animations production.
I also made some simple tools for repetitive task like filling and sorting the card library for example.
I worked on different shaders using Amplify Shader (node base shader editor), these were mostly used in UI and VFXs.
The most interesting ones are the card shaders with culling allowing to have recto / verso on 2D sprites, or the fire shader which is used in several VFXs.
Once Upon A Card contains a lot of cards which required a big amount of VFXs.
In order to handle that, i created the VFXs in an additive way.
For example, a weak card has few particles systems, when a strong card contains more layers of complexity and more impactful and impressive effects.
In the case you want to know more about the game technical aspect, here is the technical design document
Other team members’ portfolio :