Crossbow
We recently added crossbows to the game – so we also needed some bolts.
Since the bolt is an object which is only seen for a few seconds (while the weapon is fired), we went with a low poly 3D model, no baked maps and low resolution textures.
Automated Builds & Bug Reporting
Automated Builds
Integrating a system that allows us to create automated nightly builds will help us a great deal to iterate features a lot quicker than before. Besides giving stakeholders the chance to see live updates regularly. I started working on an external C# application since the beginning of the project but failed to keep up with the constant changes to our system structures. So I decided that this is finally the time to implement it correctly. On the one side I was sick of all the manual updating and on the other side we want to have excessive internal tests over the course of the next months which makes manual updates untamable.
This is how the tool will work: The user (or system) can choose between a number of pre-configured solution files which are build out of multiple self-contained tasks. A task might contain code for building the game in Unity or copying some files over to another folder. The tool itself will provide us with the ability to build new versions of the game on an external server system and update the live server itself. All of this is easily configurable through an application (see the screenshot). Since the current server, which was meant to use for creating the automated builds, hasn’t got enough space to deal with the size of our data, we have requested more disk space which will hopefully be implemented by the end of the next week. Afterwards I can start testing the process on the server itself.
Bug Reporting
Another thing I worked on is the possibility for our players to submit bug reports from within the game. This will hopefully give us a great deal of knowledge about what is broken in the game. Unity provides easy access to system information which is submitted alongside the bug report.
At the moment it isn’t possible yet to submit any screenshots with the bug report, but I hope to find the time to add it in the upcoming weeks.
Mounts and Bugfixes
At the beginning of this week I continued with the implementation of mounts, which I started at the end of last week. The rest of the week however I’ve been bug hunting and fixing, with gamescom coming up next week and meeting investors.
- UMA bug: The avatar’s textures got corrupted when changing resolutions using DirectX. Since UMA uses render textures to create the avatar’s textures, there are two ways to fix that problem. Copying the atlassed textures from GPU to CPU, so they‘re in RAM or rebuild the atlas by checking if the render textures are valid. Since copying the textures from GPU to CPU is slower, and thus created a noticable delay when changing equipment, I opted to rebuild the atlas after each resolution change.
- Another thing I did was changing the way the player behaves when having an overloaded inventory. That covers no running and increased stamina costs in combat. This hopefully fixes some related bugs.
- I fixed some bugs regarding crossbow combat.
NPC pathfinding
This week I implemented a new pathfinding system on the server. The pathfinding is based on navmeshes to provide a fast and memory friendly navigation all over the world. Performance is critical to support a high amount of NPCs, so I am using a lod system which reduces the request calls for entities. They aren’t in close proximity to players for example, or disables them completely if needed.
Besides, I made first tests with our new wolf model, which will be integrated next week.
My next task is the new AI system, which will be integrated very soon.
Job System & Bugfixes
Jobs
I improved the job system and added some minor features like a limitation for creating a job. Now a player can only create three jobs – except clan leaders or co-leaders, which can create jobs depending on his clan size.
Moreover a player now needs to pay a tax for the job creation. The amount’s height is based on the reward gold and the amount of items he gives as a reward.
Furthermore, I improved the feedback in the job system. For example, the player now gets a notification when he is able to collect his reward at the jobboard.
Bugfixes
- A health potion had no effect while the player had various conditions.
- I improved the extended features of healing items, e.g. only a bandage heals bleeding.
- The God’s influence could reach a higher negative value than 100.
Internal Tests, Project Management & Player Rejection-Problems
We are using Trello for Project Management a long time now, but ultimately decided to part ways and use it as a bug tracking tool only. The new tool is similar to Trello but more tailored towards Game Development in general. It’s called HackNPlan. Its currently still in beta, but there are already a lot of functions that can be used.
Have a look at hacknplan.com if you’re interested. They are planning a lot of additional functionality along the way, too.
Player Rejection-Problems
As I mentioned before we found a very bad bug which – if we ignore it – gives cheaters the possibility to ignore collision detection on the server. Some background how modern online games operate nowadays:
“A lot of online games rely on the client – server architecture where the server is the master of the world so to speak. To make it more clear: the server checks every input made by the player and simulates the player’s movement. Accordingly the client simulates his movement, too and sends the inputs to the server. Once the server realizes that the movement between the player and the server is off. The server corrects the client and teleports it back to the last valid position. What would happen if the server wouldn’t do this? Players could easily intercept and modify messages to the server which might result in player’s teleporting all over the place and giving them an unfair advantage over the other players.”In our case the problem lies within the server code. During the tests we deactivated collision detection on the client and realized that we could just go through all the geometry. Normally the player should be corrected by the server that we can’t go there. This is really bad since players could just peek behind geometry or teleport themselves somewhere they can’t go. So we figured that the root of the problem lies within the server code. The first thing I verified was if all the collision geometry was correctly exported onto the server. It wasn’t! In order to export our collision we analyze the entire world and export it into a special data format which is then loaded on the server. I quickly found a bug in the exporter. Unfortunately this didn’t fix it. At the moment I’m still looking for the root of the bug and hopefully will have more on this matter in the next blog post next week.