Price of Power is now officially over 20 votes in all relevant categories, so I guess it is time to sit back and reflect on how things gone this time around.
Pre-Jam As usual I started being hyped up by the incoming jam a month in advance. Though again I couldn't scrape enough time to go through the slaughtering process - lots of thing to do in day job. And then, out of the blue exactly on the day Jam starts I... lost the job. Which was (and still is) a huge thing, and definitely got to me, but I just decided to shove the gravity of this situation away and focus on the Jam as much as I can. And probably this allowed me to get through the worst part of this situation intact. So, thank you, LD for helping me keep myself together.
Theme Selection and initial Ideas I never worry too much about the theme selection, but this time it looks like we go a Theme most of people liked. And I wasn't disappointed with it as well. The two original ideas I had for the Theme were - remake of "NetStorm" and a card game with important and inevitable sacrifice mechanic. I have contemplated the first idea for a long time, but in the end I decided that it would definitely be over scoped for developing solo. The bridge-collapsing mechanic alone would raise quite a few questions I am not ready to answer. And I really didn't remember the mechanics of this game all that well, so while it would definitely have been a good idea to pay homage to an awesome game of the old, I couldn't pull it off. So Card sacrificing came it was from then on.
Process - Day1 After contemplating over the idea of a card game for a bit I drafted a set of rules that I envisioned as fun (in my warped perception of "fun" anyway...) and started... modelling in Blender. It is probably a good place to notice that the workstation I had available to me through most of the process was a 2010 macBook air... which had blender installed, but no 2D editors I would be familiar with. So I spent about 1,5 hour playing around with Blender sculpting mode and generated textures to get a picture I could use for card background. Which I basically ended up never using as cards are basically face up all the time, but at least I got what I wanted.
Making a table was a cakewalk after this, but the first time I made it I forgot to save the texture image and had to start it over again. Though this was probably a good thing as I liked the second iteration a bit more...
Then I added the model into Unity and started playing with adding contents to the card. And here working on a rather small screen played another prank on me, as I ended up adding quite a large info elements on the cards. All those circles and number could have been way smaller in reality, but when I saw them in my tiny editor windw I though that making them small would render them unreadable, and so the card ended up being a little too cluttered. Though it looks I managed to pull off normal conventions of card game layout and the meaning of all those numbers and colours were clear enough.
After I got one card done, I multiplied it a few times and started hacking on the script that would arrange several cards into a "Hand". The basic idea was to have 2 transforms, and a script that would trace a path from one transform to another using cubic spline and then arrange cards from the array into positions along this path.
This being done I decided to work on some subtle UI element - Highlighting. Basically when you mouse over a card a faint outline would appear around it. The way I though this should work is to have a secondary camera that would use a simple shader to render everything. Basically check if an object has a specific color attribute, and render only those where this color is not transparent, using this color to render all pixels. This camera outputs to a render texture which is then used by an after effect that checks if the helper texture is not transparent, then the main camera pixel is unchanged. If the helper texture is transparent on this pixel, it would modify the main camera pixel by a Gaussian-blurred helper texture color. So basically the highlighted object is displayed as is, but pixels around it get a halo of a sort.
The initial script was buggy as I basically messed up x and y offset amounts (this got fixed) and the halo ended up being too faint (which I didn't fixe eventually even though it is probably just a number I should multiply the blurred color by...) so it was a bit hard to tell the color of the highlight, but I was still pretty happy with how it turned out. All the shaders involved can be found in the source code, if you are interested.
And at that point day 1 basically ended. It wasn't really late, but I felt kind of tired and decided to call this a day.
Process - Day2 Day 2 started and I didn't have any game mechanics coded. So I started panicking a bit. But I got myself together and started working on... even more general stuff that wasn't actually related to the game rules I had drafted on paper. :) Namely I started working on the mechanic to pick a card from hand and drag it to the table. The idea to separate card graphic from the root game object is nothing new, and with Blender and Unity working in different Axis orientations, this is kind of a necessity, but here I got the idea that I don't have to keep them together. Basically the card graphic can be moved wherever I need, while the card object is still in hand (so I don't rearrange other cards until the card actually leaves hand by being played or sacrificed.
I have iterated on this idea for some time and the final pattern was... pretty trivial actually. Basically a card has a position and rotation used as an override for graphic position, and a flag to tell the script if the card graphic should move to override position or to main object position (and moving is done by lerping for smoother card movements on screen).
After this I started working on sacrificing mechanic. And here I got the idea of showing actual mana as tokens which would move across the table to give even more actual board game feel. And on the other hand I made the sacrificing area into something tat looks like fire to throw this feel out the window. :smile: By the way figuring out how to control the particle effects from script was pretty fun.
When the cards could be sacrificed and played, I started making enemies, using the same card texture (with added tint) as a base, removing some elements, and replacing other with something specific to how enemies should behave. Then I started working on the enemy target selection AI. To animate enemy attacks I created the projectiles with particle effects. Then player cards abilities, at which point I once again came to a point of exhaustion, but as I didn't need to go to work on Monday, I decided to call this a day again and went to bed.
Process - Day3 With most of mechanics done I finally could get something that could have been played with one hand and 2 enemy cards. I polished up the projectile effects to something I liked a bit more, then added burning effects to cards upon their death, and... remembered that the game was actually supposed to give you more cards when a new turn starts. And that excess mana is supposed to burn on turn ending. So I had my hands full with scripting again. I really like how my Deck class turned up. Basically it has 2 lists to store cards. One is Draw pile from which the cards would be picked, and the other is scrap pile to which cards that leave the game would be added. And a boolean flag that determines which of the lists serve which function at this moment. If a Draw call is made and there are no cards in current draw pile, the flag is flipped and all functions run as normal ((with an extra safety check to make sure that at least one card is available in new draw pile - former scrap pile)).
Having finished this I realised that player HP bar is now covering cards sacrifice values, so I had to reposition camera and hand to keep all the information visible. And it is at this point that a "right click to inspect card" mechanic was added to UI.
And now it was time to populate the deck with actual cards... at which point I realised that I have no idea how to assign values... After rushing to ideas for probably an hour I ended up with 4 basic archetypes for cards, and then each archetype having 9 variations with different health/damage types and costs (with costs staying mostly the same amounts but different color combinations) which were assigned basically at random. Yes, this was not the best thing in terms of game balance, but time was running short by now.
Having figured player cards I started thinking up about enemy cards, and my original idea was to have a deck of enemy cards from which you have to draw some and fight them on the table. But I couldn't think of an interesting way to ensure that a challenging combination would appear, so I opted out to make one combination... which hilariously ended up not being all than challenging, unless you get really unlucky with card draws...
And thus I started the process of building the executables... for which purpose I moved to my Windows10 desktop workstation. I used this access to actual 2D editor I am familiar with to make some sprites (Shield, Cross and Arrowhead) used on cards, and started compiling, and suddenly... game started crashing on me.
At first I though that this might be a difference in Unity versions but updating to latest version didn't fix a thing. The game was still unstable crashing after about 30 seconds of play, and taking the graphic card drive down with it. This was a disaster... which I fortunately was able to fix. Turned out the culprit was the helper texture used for the highlighting. Or rather the script that was initialising it. Basically it was set up to reinitialise the texture with correct size if the screen size was changed. But it didn't save the previous size, so it was effectively reinitialising the texture every frame. And this was not healthy for the game. My old macBook was running a pretty low framerate so it wasn't an issue as it had time to clean up now unused instances of the textures. But a more powerful desktop ran itself out of memory pretty fast.
Thankfully the but was fixed and I was able to rebuild all versions and upload them to itch.io with about 2 hours to spare before Jam ends.
Woot! That was a blast!
What went right
- Creating assets. Even though I had some setbacks (like I forgot to save the texture, or I forgot to use the card with rounded corners...) I was pretty happy with my ability to create assets for the game.
- Multiple experiments Usually I manage to only pull off one thing in a game that I don't immediately know how to do, and need to experiment and iterate. This time I managed to pull off quite a few of those, starting with highlight effects, to animations of particle effects and sequences where next action is only started once previous one is complete.
- Scoping - I can't say I didn't have to drop features from the game... for example originally the draw mechanic was supposed to give you some cards face down, and let you pick as many as you need to have 6 in your hand, while seeing only the sacrifice values... but overall the game turned out basically as I imagined it initially. So Yay!
- Animations - I really like how the animations of cards, tokens and attacks turned out to look. Those are not Hearthstone of course, but they were by far the most polished animations I had created in a game by now.
What wend wrong
- Game balance - Or lack thereof. The game turned out to have some strategic depth, and takes some effort not to mess yourself up by getting excess mana and burning yourself to death, but once you figure out the basics the challenge is just not there. Another rules for enemy are required. Maybe I do need to have the enemy deck and let it draw more cards from this deck as play goes on, but reduce the timeouts for enemy card activations.
- Card layout - As mentioned above it is too cluttered and has 3 blocks which are a set of 3 coloured circles with numbers... so I had to write a lengthy manual and I feel like it deterred some players from playing, and others who played the game without reading the manual ended up confused and enjoying the game less than they could have.
- Tutorial - As a continuation from the previous item, a tutorial level within the game itself, to explain the basics of the game could really help. but there was none...
- Sounds - as usual there were none. Though probably I could have added some pew-pew sounds on card attacks and Whooosh on cards burning, but I was a little tired by the time I got to desktop, so I skipped them.
Thank you for reading, and I hope to see you next jam!
PS: If you want me to play your game - add a comment an I will check it out!