PROGRAMMING

Wizard Tactics - Year 1 Retrospective

Intro

The end of 2020 marked the end of my first year of development on my game Wizard Tactics, and I wanted to take some time to reflect on how development has gone, post some fun stats, and detail what my plans are for the coming year. (Technically January 25th, 2021 will mark 1 year since I wrote the first line of code, but I’m fine with writing the 1 year retrospective now in the spirit of the new year.)

Retrospective

I started development on Wizard Tactics on January 25th, 2020. This was not actually the first time I had attempted making it. I’ve had the idea for it tumbling around in the back of my head for a few years, and sometime in 2018 or 2019 I had attempted to start developing it in Unity and, as I do with many of my projects, I got distracted and let it fall to the wayside after a week or so. I knew this had been a pattern in a lot of the projects I started, and joked on Twitter soon after starting the 2nd attempt that I was excited to post development GIFs for a week before “I inevitably get distracted.”

Actually, I think I have the old code repo for the initial attempt floating around, lemme go track that down…

Okay, yup, I made my first attempt on Christmas of 2018, and my last commit to the code repository was on New Year’s Day of 2019! So it took me 6 days to drop that attempt.

I had also dabbled in game development growing up, and had made a few very small, very bad games in Game Maker. But any attempts to use Unity failed pretty fast. Conscious of this, I decided to try and pick an engine that would help me get into the flow of game development as smoothly as possible. I figured, I develop in JavaScript a lot at work, why not try to make a game in JavaScript? JavaScript is obviously not an ideal language to write a large game in, and I’m more than willing to pick up new languages (working as a support dev for a few years really forced me to get comfortable hopping into new languages), but I realized I kept bouncing off game development because I was trying to learn game development and a new development workflow at the same time. If I used JavaScript, I could just use the workflow I’m used to and focus on learning the ropes of game development. So I picked up Phaser 3 and got to work. I’m still working on the game almost a year later, so I think this idea was a success! Once I’m done with Wizard Tactics I’d like to move to a more robust engine (not to knock Phaser 3, it’s worked wonderfully), but am very happy with the choice I made because I don’t know if I’d still be working on the game otherwise.

I recently went back and compiled all of my development tweets into a Twitter Moment, and I was struck by how fast I had a prototype of the core game concept up and running. Twitter and my Git history say that it took 9 days to go from the first code commit to a prototype that I tried out with my roommates at the time, who seemed to have fun. Obviously not all games hit that point that quickly and just because I did doesn’t mean that ultimately the final product will be good, but I think that early positive feedback helped give me the motivation and excitement to push past the honeymoon stage and stick with it into the parts of development that aren’t as fun!

One of the things I’m most proud of is that I stuck with it to the point where I was able to do a closed alpha release on October 4th. My brother Daniel was very kind and helped me setup a Discord server for my game so I could try to create some form of a community around it and have a place where I could send out keys and get alpha feedback. I was able to convince 31 people to join during the preceding week by announcing it on Twitter and a few Slack and Discord communities I’m in, and I sent out keys at noon on the release date.

As of today (January 5th, 2021), 17 of those 31 alpha testers have logged onto Itch.io and claimed their key. I have no clue what percentage of those 55% have played it, and I’ve received no feedback in the alpha channels on my server (although I got a few direct messages from testers). And to be clear, this isn’t to shame any of my alpha testers! Everyone’s busy, and to them it’s just a random game made by a guy they know who asked them to try it out. They were under no obligation to try it out or give me any feedback - I’m grateful anyone was even interested enough to join my server! I went into the alpha with very tempered expectations and so wasn’t particularly disappointed by any of this.

To celebrate the alpha release, a group of my friends and I ended up playing the game for 2 or 3 hours online using Parsec and from what I could tell, everyone was genuinely having fun. I’d also been doing some playtesting in the preceding week with my brother and a couple of my best friends, and they seemed to be having fun as well. The game was partially inspired by how much I love playing local versus games with these friends, and so watching them enjoy playing it was incredibly cool. I’ve played the game with my friends off and on over the past few months as I’ve added more content, and it’s been a lot of fun seeing everyone start to latch onto certain spells as their favorite. The favorites have also been pretty varied, which has made me feel good about the game’s balance so far!

I’d like to give a shoutout to a few friends who helped with playtesting outside of the alpha release:

  • Jeff, who tried out the game before alpha release and gave some incredibly detailed and thoughtful feedback. Among other very good recommendations and bugs found, he helped me catch that I straight up forgot to give collision detection to a spell and somehow hadn’t noticed for months.
  • Iulia and Naomi, who let me lurk on a Discord call with them and watch as they tried the game out for the first time and pick their brains after having played it. They also didn’t recoil in horror at my menus and they’re both designers, so I count that as a win.
  • Adam, Nathan, and my brother Daniel, who all playtested the game with me in the week before alpha. Nathan’s obsession with punching things in video games is why I added Ice Punch and Gravity Tether to the game.
  • My roommates at the time I started development, Anna, Nathan (same Nathan as the last bullet point), and Benson, who playtested the game occasionally with me over the initial few months of development before I moved.

I’d also like to give a longer shoutout to my coworker Karl. He was very instrumental in the early days of development because of 2 key pieces of advice:

  1. Have a mana system for spells.
  2. Use mixins for your spells.

I was originally going to use a cooldown system for spells and was bouncing ideas off him during a break at work and was complaining about conceptual difficulties I was having when thinking through it, and he was just like “… why don’t you just have spells cost mana?” Which, in hindsight, yeah, mana as a concept makes perfect sense given how ubiquitous it is in games with magic, but I just was too laser focused on my original idea. Mana costs for spells has worked out very well though.

He also suggested (during the same discussion, I think) that I look into mixins, as it would make reusing functionality for my spells much easier. I had been wanting to use a systems-based design (ex: fire and ice always interact in a consistent way) to help give players more tools to be creative in fights, and so mixins were an incredibly helpful recommendation. I don’t think making the element system would have gone nearly as smoothly as it did without that suggestion.

So, thanks Karl!!

(Apologies if you helped out before alpha and I missed you - it’s been a long year and I’m sure I missed someone. I’m very thankful to you regardless!)

A few more miscellaneous thoughts before I move into the stats portion:

  1. I did not realize how time consuming menus would be. Easily my least favorite part of the development process so far, and I think I spent at least a month working on menus. But incredibly necessary, and making menus and a title screen is probably what made my game start to feel like “a real game”.
  2. Prototyping spells with colored rectangles is such a huge time saver and I don’t know why I didn’t realize it sooner. Drawing sprites should come after you figure out the functionality, but that’s not how I worked at first.
  3. Sprite art is fun, but difficult! I am very much not an artist, but I realized early on that searching for free sprite art for what I wanted to represent would be incredibly difficult. I also realized that I didn’t want to spend much money on what is still, after a year, just a hobby project, which meant hiring an artist was out (at least for now). So, I decided to do the rest of the art myself, aside from a few sprites still in the game that I found in the initial stages of development. I’ve definitely noticed myself improving even if I wouldn’t classify myself as “good”, and it’s been fun stretching into a new area as someone who mostly thinks of himself as a programmer and musician.

On the whole, I’m pretty pleased with the amount of work I got done on Wizard Tactics. I had a lot of fun working on it this year, and I felt I was able to keep a healthy balance between working on it and still spending time on other hobbies and hanging out with friends and family (mostly online, given this year). I’ve learned a lot about game dev over the past year, and feel confident that it’s something I’d like to continue to do as a hobby. This is one of the most fulfilling projects I’ve worked on, and I’m looking forward to finishing it up into something that I feel comfortable releasing to the public! I’ll talk more on that in a bit, but as an intermission, here’s some stats on Wizard Tactics from the first year of development.

Stats

  • Released versions: 6
  • Spells created: 9
  • Sprite frames drawn: 128
  • Lines of code added: 38,593
  • Lines of code deleted: 20,272
  • Current lines of code: 18,321
  • Commits: 510
  • Days commits were made: 121
Commit Count by Month
month	sum

Jan	9	|█

Feb	108	|████████████████

Mar	10	|█

Apr	1	|

May	6	|

Jun	33	|█████

Jul	51	|████████

Aug	78	|████████████

Sep	98	|███████████████

Oct	57	|████████

Nov	53	|████████

Dec	6	|
Commit Count by Day of Week
day	sum

Mon	45	|███████

Tue	36	|█████

Wed	57	|████████

Thu	36	|█████

Fri	51	|████████

Sat	126	|███████████████████

Sun	159	|████████████████████████
Commit Count by Hour of Day
hour	sum

00	42	|██████

01	15	|██

02	0	|

03	0	|

04	0	|

05	0	|

06	0	|

07	0	|

08	0	|

09	1	|

10	18	|██

11	35	|█████

12	42	|██████

13	23	|███

14	33	|█████

15	33	|█████

16	15	|██

17	17	|██

18	20	|███

19	32	|█████

20	45	|███████

21	52	|████████

22	41	|██████

23	46	|███████

Plans for the Future

I took my holiday break off from working on Wizard Tactics to give myself some space and to focus on finishing and launching this website. I’m pretty excited to get back to work, and I already have the next few releases tentatively planned out. When I paused work, I was midway through version 0.3.3, which is another round of bugfixes. After I finish up that version, I’ll begin the slow progress towards adding all the game features I want in before I release the game as an open beta. These main features are controller support, screen resolution support, sound and music, and online multiplayer. I actually have a good amount of the work on controller support done already, but adding all the menu options and control indicators in along with testing it thoroughly will take awhile. I’ll then move onto supporting various screen resolutions, followed by attempting to make the game allow for up to 4 players. This latter feature might go… poorly. I have no clue how chaotic this will be, so I might end up just limiting the game to 1v1 duels, but I’m going to at least attempt it! After this, I’m going to dedicate some more time to cleaning up code to make sure the codebase is in a good place, and then I’ll tackle sound and music, and then finally, online multiplayer! For each major release, I’d also like to add at least 1 new spell to the game, both to give me something fun to work on in between some of these more technical features and to keep fleshing out the games spell list. After this, it’ll be time for open beta release!

All of this is definitely open to change, but I feel pretty confident with this plan! I also have no clue how long all this will take me. As this is my first big game, I don’t feel particularly comfortable trying to estimate any of the tasks, and honestly, I have to do enough estimating at work, I don’t want to do it at home too. This is a hobby for me, and as long as I’m conscious not to fall into the trap of letting scope creep and keep this project going on forever, I’m comfortable with just plugging away like this until the game’s done. This might change as I get closer to a full release, but, for now, no estimating for me. All I know is that I know enough of networking to know that adding online multiplayer will take longer than I’d like it to, which is why I’m leaving it until last. Hopefully the turn-based nature of things will make it less of a pain than adding online multiplayer to an action game would be, but, I’ll see!

The only big thing left to figure out on the path to open beta is if I want to hire an artist or not. The true questions lurking behind that question are, do I want to try to make money off of this game, and how much money do I want to put into it? So far I’ve only bought licenses for Aseprite, TexturePacker, and PhysicsEditor. I landed the last two on sale, so I think the total amount I’ve spent so far is about $100-$150, and given these are all tools I think I’ll be able to reuse for future games, I’m pretty comfortable with that amount so far. Obviously the answer to “do I want to make money” is “well, yeah!”, but I have few illusions as to the likelihood that I will make much (or any) money from my games as a hobby indie dev, especially as a first time indie dev. I’m relatively confident that Wizard Tactics is fun, but:

  1. It’s a multiplayer only game.

I am aware that multiplayer only games are a harder sell, especially as an indie dev. You can’t just have a cool game - you have to have a cool game and an active player base. Which, I knew going into making this game. I’m making Wizard Tactics because I love local versus games, and I wanted to make one of my own that didn’t rely on quick reaction speed but still kept the thrill of a tense, close match with friends. I’m adding online multiplayer because I know a local multiplayer game is even more of a stretch for attracting interest in the current games climate, and I’d love for people to play the game. Also, given that we’re in a pandemic as of when I’m writing this, local multiplayer games are a bit more of a hard sell (although services like Parsec help with that). I have some ideas on content I could add to help make this multiplayer only issue less of a problem (bots and single player challenges are some), but that’s then adding more work to my plate, so… I dunno how I feel about adding those in right now.

  1. There’s not much visually that will grab someone’s attention on a quick scroll through Twitter.

Basically… my art is bad. I think I’ve been improving as a pixel artist, but I definitely don’t have a cohesive or interesting art style yet. And a good way to to get noticed is to have a cool looking game to get people to pay attention to your cool game mechanics. I’m not saying you can’t have a good game without an interesting art style! But, y’know, marketing is still a thing. There are a lot of really cool indie devs out there with some very talented artists. I follow a good amount of indie devs on Twitter because their game popped up on my feed and I instantly was like “whoa, that looks sick.” Having better art would increase my chances of someone doing that for me, and, when release comes around, reviewers and players doing the same.

So, ultimately, I need to determine if I want to spend the money to take the gamble of increasing my chances of the game getting noticed. Because it is a gamble! Ultimately I just want to people to play my game, because I’ve put a lot of work into it and I think it’s good. Making money and getting compensated for some of the time I put in would be nice too, but I started doing this because I’ve wanted to make a game since I was a kid.

I don’t really have an answer to all these questions, I’ve just been mulling them over for a few months now and wanted to put them to digital ink. I’ll have to come up with an answer at some point, though not necessarily before open beta. Hiring an artist could always wait until after that if that’s what I decide I want to do. Maybe I’ll get lucky and my game will blow up regardless of my art, and then I can have the data to feel more comfortable with spending money on an artist. But I’m not counting on it!

Anyways! I’m very excited to work more on Wizard Tactics this year. The core of the game is there, I’m feeling pretty confident in its direction, and now I can focus on adding all these cool features and spells. I’ll try to post some longer updates here on my blog, but if you’d like to keep up to date with development, feel free to follow me on Twitter!

Thank you very much for taking the time to read or skim this. I appreciate it so much.

Here’s to hopefully another productive year of game dev!

-- Tyler