- Blog/
Grand Chase II. - Playing day
Table of Contents
Grand Chase - This article is part of a series.
I was not sure when to publish this article. I was undecided between the last article in the series, or one of the first. And now I came to conclusion that it is good to go with this article as soon as possible.
Here I will explain the day when Grand Chase was actually played from my point of view. And in the next article I will focus on post game analysis. After that we will dive into the technical aspects on how the game was actually build.
Days before the big day #
We we’re forced to seriously prioritize what we can make in time and what not. In the following chapters of this series I will explain the issues we faced in more detail. Approximately week before the big day we had to scratch couple features from todo list. We just run out of time and both me and second developer Tomáš Vrba/Kaen have fulltime jobs and other responsibilities.
Two months of quite heavy development took their toll on us. We wanted to avoid spending more nights awake till 2 AM. So after some reduction of features that would be available in app we started working on last few features that we’re absolutely mandatory. We managed to finish all of those by friday. Except for one.
T-minus 24 hours #
One day before the game we had our last meeting with other event organizers. We also did some heavy testing that night. And because we we’re forced to prioritize the week before, we did not had time to test all of our new features properly. That night we found probably more than 10 big bugs in the application. Few of them we’re literally game breaking.
Some of us stayed up till 5:15 AM. We we’re testing everything properly, fixing it right away and then testing again. With those quick fixes we probably created few new bugs too. Which then required more quick fixes and so on :). Because it was really late we decided to take a quick power nap. I went to sleep and set up new alarm clock for 7:30 AM.
Worst thing was that we did not had time to finish one last feature at all. Basically, we we’re still missing that one feature that I mentioned in previous chapter.
T-minus 7 hours #
It was now less than 7 hours before the game begun. I woke up before Kaen so I started preparing the last feature. That feature was combat between players. There was some basic math needed to be done on server side so I decided to try and ask AI for help. To my surprise it generated function which was like 95% of what I needed. SO only with few light modifications I finished writing server side function which might took me one or two hours on my own. Thanks to AI it was matter of 20 minutes maximum.
Then it was time to integrate this feature with client as well. That was Kaen’s job. So after we met on Discord I explained to him how server side logic works and he started working on the client side. We managed to get it working quite quickly. We also did few tests and everything seemed okay. We had one or two hours that we could spend on improving little things like texts in application etc. And everything went quite well at that point.
I actually felt sense of relief at that moment. And if I recall correctly that was the last time I felt calm that day.
T-minus 1 hour #
I arrived at 13:05 at the registration center. Here the players would come in, confirm their attendance, receive their login into the app and then download the app. The issue was that we still did not had final version of installation file. Kaen was still working at small fixes and he was using every minute of his time to improve the game as best as he could. That what I thought because at this time we we’re not in touch for 20 minutes or more.
At 13:30 I joined Discord to ask Kaen for installation file. And the first thing he said was something along these lines: “We are so screwed, nothing works. Nothing at all.”
It might have been different words but that’s what my brain registered at that moment. At this exact time first players started to arrive at the registration center.
One last fix #
Kaen found really weird bug. The new feature that we created this morning - combat between players. It did not worked on the phone. We did not had time to test it on the phones. And since then everything worked the same way on both the phone and the PC. Later on in this series I will try and explain what exactly happened.
So I had to boot up my work notebook, connect to VPN to the server and start working on the fix. The worst thing is that the registration center had no Wi-Fi and the signal reception was really bad. And we promised the players they would have Wi-FI on site so they would not waste their data on app download. Other organizers did not knew that we had this issue and they started giving my mobile hotspot password to everyone who needed Wi-Fi. This combination of multiple people present on my hotspot and bad reception lead to really poor working experience.
Couple players had already finished their registration and only thing they needed was to download the app to their phone. But we still did not had latest build which contained fix to the combat system. In the end we managed to fix it. It was not proper fix. It was just a simple workaround in our game logic. But that was all we needed at that time.
So at 13:48 we had installation file ready and people could begin downloading the app. 12 minutes before the registration was supposed to officially start.
The password problem #
People started downloading and installing the app. And we started receiving reports about few people who could not login into the app. So we did some tests and we discovered combination of 2 issues.
- The passwords contained Czech characters (ě,š,č,ř,ž, …)
- The input field for password in the app had limit of 15 characters. And some password we’re up to 19 characters long.
These issues we’re result of us preparing a lot of things in a rush. The person who generated the passwords tested if they work with Czech characters and they indeed worked. But only some of them. And we did not communicate to this person that they had to be maximum 15 characters long.
To quickly solve this issue we changed everyone’s password to “asdf”.
The game start #
Everyone then moved to their starting locations. My stress was way over the healthy limits at this point. I kept asking myself what else would went wrong.
Before the game started we had one group who started playing before everyone else. We did not had time to implement some kind of lock or countdown that would prevent people from playing before they we’re allowed to. Luckily through our database we we’re able to quickly find out who was the culprit. We called them and found out it was just a misunderstanding. So we restarted the game map to the default state and the game could finally begin.
I was really afraid that server could get overloaded with requests. Especially at the beginning when everybody was using the app all the time. But that luckily did not happen. To my surprise the server was running really well. The response time was almost same as when we played with just couple people.
Only outage was at 14.47-14:49 when I accidentally turned off the server. I forgot to turn off unnecessary services on the server that we’re using its resources. And while I was turning everything off I managed to turn one of the critical parts of the system.
Last issue #
About 40 minutes after the game started I noticed one issue. In the game players we’re capturing and unlocking territories. These unlocks and interactions we’re locked behind 30 minutes cooldown which affected their entire fraction. So if one player failed quest to unlock some zone it would lock that zone for everyone else in their fraction for 30 minutes. And for some weird reason this lock did not disappeared after 30 minutes.
I managed to find the issue quite quickly. I even fixed it on my local version of server. But I was deciding if I should push this update to the production server. I knew this update would take only a minute or two maximum. I knew that I changed only 2 lines of the code and there was no chance of it breaking everything else. But in the end I decided to not push this update. I was just really afraid of breaking something else. Even if I knew it was probably impossible :)
So I decided to write small script which would check all locked zones and it would check if the lock is older than 30 minutes. If it was older then it would unlock the zone for that faction. And for the entire duration of the game I had to run this script manually every 5 minutes or so.
The end #
The game was finished at 20:00. And in the next chapter I will talk about the post game analysis. I plan to show some stats about how players performed etc. And in the chapters after the next one we will dive into the more technical side of Grand Chase.