GameDev 2019 Week 37: Miscellaneous Tasks
Projectiles, rsync, reinstalling31.10.2019 - 18:43
It's been a few weeks since the last release build, so I wanted to make another one to be able to test the game with other people. I started by testing a local multiplayer game with multiple clients and discovered a few things that needed fixing: The wave details window would sometimes show incorrect information if events/network packets happened in the wrong order, the game could crash if a player let the wave selection timer run out, the game could crash if a player closed the game while in the multiplayer lobby and the ready button in the multiplayer lobby didn't move to the correct slot. After these bugs were fixed, I was able to make a client release build and a Linux server release build, so I could test a multiplayer game on a real server with a real ping and it still worked.
Over the whole day I noticed that Dropbox didn't sync my Truecrypt file anymore, which was very annoying.
I did some more extensive tests with the server based multiplayer and found a few more bugs, mostly to do with leaving a game and starting another one without closing the game: The minimap wasn't cleared, some windows remained open and if a player picked up the more options item in the first game and then started a second, he would still see more choice and if he picked one of the ones that he shouldn't see, the game would crash.
Additionally I investigated the Dropbox issue some more and found out that I could turn on the "change modification time" option in Truecrypt, which does work, but only if I open the Truecrypt volume with the Truecrypt gui. When I open the volume with my script Dropbox still doesn't sync the file, and opening mounting the volume via the gui is very annoying, because I am using a keyfile and I have to click through several windows and navigate to it every single time.
Saturday 19.10 - rsync
A while ago a friend developed his own cloud program and he was using rsync to sync the files, which is a Linux command line program, that supports delta sync. With the Dropbox problems I was having I looked into it and did some research which command line arguments I would need (it has like 100 possible arguments...). Then I made a small test Truecrypt file and tried to sync it via rsync. At first I was worried whether it would work on Windows, because as mentioned rsync is a Linux only command line tool. There are some Windows ports, but I generally don't like 3rd party programs. However, the relatively new Linux Subsystem for Windows is the savior once again: via the command "wsl /path/to/script.sh" you can call any Linux script directly from the windows command line. In conclusion, rsync is a valid alternative for Dropbox and I am going to switch to it in the near future (as of writing this I still haven't done it though, still using the stupid opening via gui method... ^.^).
In preparation of switching to rsync and it's been long overdue anyway, I reinstalled Ubuntu on my laptop. I was using Ubuntu 14.04 and Windows 10 in a dual boot setup, but the network drivers for Windows were broken for years, so I never used it. I was only using Ubuntu which only had 50 GB out of the 250 GB total SSD capacity. Now I completely removed Windows and installed the newest LTS version of Ubuntu 18.04.
With the freshly installed Ubuntu, I still had to download, install and reconfigure a bunch of programs, wait for ownCloud to sync and moved the backupped laptop data to my main computer.
After all that admin stuff for the past 3 days it was finally time to get back into programming. The first thing I worked on was completely changing the way projectiles are specified in the tower blueprint files. Previously it was only possible to choose from a few predefined projectiles without any further customisation. Now the rendering type of the projectile has to be set and then the projectile type can either be one of the predefined ones or a completely custom model or texture filename. For example you could use "models/arrowtower.lglm" and make a tower shoot arrow towers, not that shooting towers makes sense, but it can be done. Furthermore, the size of the projectile and the number of frames for an animated billboard particle or whether a model particle has a backspin or not can also be set. While the core game will have most of its projectiles predefined, if a player wants to create their own towers, this will give them a lot more freedom.
In the same way projectiles can now be custom, I also changed the attack sound in the blueprint files to either be predefined or a custom sound file. Then I removed the custom on hit functions from the blueprint files. They have been replaced by the effect system, which is a lot better integrated. Only one of the test towers was using the custom on hit functions anyway and it was the explosion trap, which would self destruct on hit. Instead of its custom on hit function I added self destruct as a proper effect. When testing it I found a major bug, if an entity is eliminated from an attack on hit effects were not applied. I did this for on hit effects that apply debuffs, because there is not need to poison an entity that isn't there anymore. But some on hit effects have to be applied even if the entity is eliminated, for example the pirate effect of the self destruction or the tower. In preparation for working on balancing I also made it so that projectiles that fly in an arc cannot miss entities anymore. In the rare cases were the entity would be stunned while the projectile is in the air and would miss it, it will now deal damage once it goes below the ground. It won't happen often and the player isn't really going to notice, but it makes calculating average damages of a tower easier.
Using one of the last warm days of the year, I was working on the front porch on my laptop. And I didn't have any C++ programs setup yet, so I did some work on the web balancing tool. Unfortunately the new mysql version I installed didn't want my tool to work at first. For some reason there are no implicit default value anymore, e.g. when creating a table with a column `name` VARCHAR(20) NOT NULL and then trying an INSERT INTO query that does not explicitly set a value for the `name` column, the query fails. To fix this I had to add DEFAULT '' behind every column in the creation query. While it only took a few minutes for this tool, I have a lot of web projects and it looks like I have to update all of them at some point to make them work on the new mysql version... Anyway enough ranting about unnecessary changes: I changed the web tool so it now supports the new projectile settings and the attack sound, I also added the effect images from the game to the tool and made a better overview over all buildings.
In the evening I implemented 2 more (cheat) commands to the game: one to add lives to a player and another one to force an item to appear in the next selection.
I didn't really get anything done on the game, I spend the whole morning picking apples from my grandmothers trees and wasn't motivated in the afternoon.
by Christian - 31.10.2019 - 18:43