Welcome back to another week of Plaid Hat Tech and Games! Here's what I've been working on, where the Summoner Wars Online project is, and what I've been thinking about this week.
Spoiler: It's all Summoner Wars, Summoner Wars, Summoner Wars. As a few review copies of the physical game started trickling out and I enjoyed seeing some media people tweet about the game, I worked on Summoner Wars online almost exclusively last week. I also have some thoughts below 9n the reception of the art. Here's where we're at:
All 6 factions coded and tested:DONE Authentication with PHG.com:DONE Beta lobby logic:DONE Creating/joining games: DONE, except matchmaking Working game in beta environment:DONE
More robust in-game options:
Don't wait on server when not necessary:
More animations and effect indicators:
Integrate audio for new factions:
The multiplayer authentication/authorization system was built, as well as lobby logic and the ability to create and join private games. This is actually ALL I planned to do with the game originally, subject to getting a crazy amount of subscribers. But as we've moved closer, turn notifications and matchmaking and single player stuff and time limits has seemed easier, while some of the core challenges have remained difficult. Here's a couple technical challenges I'm working through this week:
(Warning, this week will be a very technical discussion - it won't always be like this. Scroll down for art discussion if that's all you're interested in.)
Boardgame.io is the open source library I use for Summoner Wars Online, and it's great at the things it aims to do. However, as of now there are no features directly supporting asynchronous play - i.e. letting you go away and then notifying you when it's your turn. Some of this I've already taken care of - if you open a game at the beginning of your turn, it automatically remembers and plays the animations for your opponent's last turn. But the other thing we need is turn notifications - email, push notifications, and more.
I'm storing some separate game metadata in a different database which handles user authentication, as part of our main django site. (While boardgame.io runs on a nodejs server.) That way I can look at who's turn it is and whether the game is over very quickly compared to parsing through the game state json objects stored in my boardgame.io database. The question is, how best to keep these 2 things synced?
One strategy would be a boardgame.io plugin that only runs on the server, which posts the info to an endpoint I create. Boardgame.io has a nice little plugin system I've used effectively for tracking animations, so this would be straightforward to code. It would also offer near-instantaneous results. But it has downsides on the reliability and resource standpoint. What if a post request fails? Getting messages about games out of sync sounds like quite a headache. I might need the server to check on this any time someone accesses the game, and if it's out of sync, hit the endpoint again. Also: this process scales up 1:1 with the number of games happening.
Maybe it would be better to have the nodejs server access the metadata database DIRECTLY and update those tables. That would be more reliable, but would still scale up resources 1:1 with games played. But yeah, that's probably a better option.
The less resource intensive option is to make a separate process that runs through the database directly, constantly, and checks each running game one by one looking for a turn change and/or a game end. In that case, it updates the database and sends out notifications. The nice thing, even if we have 100x more games, this process can still run at its own pace. The downside, is that we lose any sense of instantaneousness.
I suppose the ULTIMATE solution is to put #2 and #3 together. Of course, the answer is always to double the amount of work I have to do.
Keeping users up to date
Even when I have the metadata up to date on the server, there's still a scary question haunting me, which is, how do I keep the user's lobby page up-to-date with the server? This authentication and game info runs on a django server, which is not really designed for a socket.io connection or long polling or anything like that. So my options are either to send a request to the server every 5 seconds or so asking for an update on the user's games, OR to run a whole other process for keeping the client up to date. Either option will be a good bit of work, and is a big question mark as far as resource cost goes.
A couple thoughts on art
If you hang around any Summoner Wars discussion, you will know that our new art style by the amazing Martin Abel and Madison Johnson is divisive. I don't know anyone NEW to the game who dislikes it, but some longtime fans miss the old art.
Art is, at the end of the day, subjective. But all of us, every one of us, involved in creating the game, prefer the new art by an order of magnitude. We think it's better in quality and also prefer the feel and atmosphere it provides. But someone who likes the old art also is free to have their own opinion.
Here's the problem, whenever a creator and a fan disagree on on an artistic choice - the creator, if they have artistic integrity, is OBLIGATED to do what THEY as the creator thinks is the best choice. If they do what a fan wants JUST because a fan wants it even though they disagree, they are pandering in the worst way and that will be obvious in the end result - bad for everyone.
We faced some of this in playtesting - playtesters wanted us to move the game design or deck designs in certain directions - but we can't just do that because they want us to, we have to do what we think is best. Our playtest process was long and allowed us time to argue with playtesters and come around on a lot of aspects to their point of view. But art doesn't lend itself to the same kind of compromise and partnership.
So what I would ask of longtime players who liked the old art is, even if you dislike it, please recognize that we made artistic choices about the world that we wanted to build - we're not just a mindless corporation spitting out things designed to please customers, and you wouldn't want that either - the end result would be a gross, pandering mess. Plaid Hat Games' most outstanding strength has always been its wonderful worldbuilding, so please stick with us and trust the plan - maybe things will grow on you.
Thanks for reading
Apologies that there's not much game development or more general content in this post - I am laser focused on getting this beta up as soon as possible this month, and am focused on the essentials right now, which can sometimes be overly technical and not that exciting. This blog today has really helped me think through the solutions in front of me, so I appreciate the forum to do so.
Updates and musings about what I'm working on at Plaid Hat Games.
05 Apr 2021
- [+] Dice rolls