[#03] Yin-Yang of Development

It’s been a while, hope everyone is doing well and also hope that you find the wait worthy! Although we will get started with the relatively bad news that contains some good in them. Then onto the good news that doesn’t necessarily contain anything bad, just more work for us.

Netcode

About 2 months ago we held a bigger playtest than our within team ones and tried the game on different network conditions as well as different computer specs. Putting aside some bugs, in the end some had no trouble at all and gave us feedback about what we could improve. However some had more latency and choppy gameplay than they should’ve. We tracked it down to the networking library and the fact that missing inputs in between not being simulated… This was such a late discovery because it wasn’t really part of our expectations nor was it really visible on your own. Ideally if the game server has no received player inputs due to low fps, it would continue with the earlier received inputs to fill in the blanks and continue simulating. So now at least we know the problem and how to solve it, how hard can it be… right?

Enter the networking libraries.

When we first started working on Code ZIN, we were using Photon Bolt which is a very well known library. However at some point their focus shifted to their new product, understandably. The problem was that Bolt and PUN was pretty much dropped, they are still there as well as the documentations but do not expect any updates whatsoever, you can’t even find Bolt under the main menu of their website anymore. And coming across some bug I wouldn’t be able to fix and not knowing if we’ll ever need more out of the library, best course of action was to move on to something more flexible but we didn’t want to rush that decision.

Until a different networking solution went open source! It was what we needed, feature set was looking like it met our needs and I could just jump into the code and do improve or fix things. And that’s exactly what I did, until the above problem on the playtest. I have tried to implement my idea but apparently this was going to require a bigger rewrite than just inserting old inputs and updating necessary fields. Besides there was another problem. Remember, inputs are tied to the simulation. Yes low inputs meant looking laggy, but high inputs means..? Speed hacking. So now it’s no longer about inserting inputs but actually ripping apart the simulation logic and possibly more of the related parts. As for why I didn’t simply check the input frequency, I did try that. It’s just that input packets arrived so inconsistently that I was afraid of getting false positives in real life conditions and kicking out players unfairly. This frustration and some earlier but smaller parts aside, it was honestly a happy relationship but I forgot to mention something. Shortly after going open source, this second library also stopped receiving support but it went with a bang unlike Bolt. They have taken down the website that had the documentation without being archived and their discord server is gone. We are pretty much alone in this and who knows what else might pop up in the future. After so long into the development, it was once again time to switch. And at this point I’m kicking myself as making my own solution (with possibly help of some friends to speed it up) might’ve been less work than doing this twice.

A fake in game ad because nobody likes a wall of text

Now where are we?

Fish-Net, that’s the new one. Looks promising, we are supporting them monthly now and hope that it continues to receive updates and fixes, which it does at the moment. My work on replacement isn’t finished yet, in the past 2 months a few things happened, and I finally went on a vacation to relax a bit and no the military service I did this year doesn’t count. There are some little things that aren’t really production ready on their side as of now but it seems pretty close, one is the client side prediction version 2 and another update I am waiting for is the improved version of SyncVar (variables of your player such as health that is synced over online). I have finished most of the important rewrites, after some smaller ones and bug fixes I want to add in features that were hard to do on the older netcode. Soon after those we should have a playtest to see if everything is properly in place now. I am frankly hopeful this time but so far the combination of being unlucky and wasting time has been honestly sad. Let’s see how fast we can get over this and focus on the game itself once again!

Now into the Unity news!

I hope this is the last time I have to talk about the Unity here. And by Unity I am referring to the company Unity Technologies here, not the game engine itself. Albeit some bad choices and replacements that aren’t capable of filling in the earlier solutions, I have been happy with the engine for many years so let’s move onto the problem instead. I’m sure many of you heard of the pricing changes the company had in mind, the fact that it’s a retroactive change that is possibly against the laws and going against what they have promised before, as well as the incredibly stupid and unfeasible install tracking(runtime fee). However there is no need to flog a dead horse, if you weren’t aware of those just search it up on google, twitter, reddit, youtube or some developer blogs… I think it’s been covered plenty. The reason why I talk about this now is to bring the latest news and explain how ZIN is affected, or rather not affected.

Currently the per install pricing is optional and we still have the revenue share option. Not that we would go for it as we plan to go free to play after Early Access, but now at least the numbers will be self reported without some sort of tracking on Unity’s side which is important. Furthermore, this is no longer a retroactive change and it will apply after the 2023 LTS version. Now another frustration on that part is that according to here that version comes around at the end of 2024 and after the UI(Canvas) breaking fiasco we had from updating to 2022 LTS, I do not plan to switch versions right away. We will wait a few months and keep an eye on bugs before updating our engine version. In the end if everything goes as planned then it means ZIN will neither use this new pricing until 2025 nor will it get any major engine updates, only bug fixes of our current LTS version.

Gameplay & Content decisions

There has been some question marks regarding the way focus system has been currently implemented, so we want to do experimenting with the upcoming playtests. Starting with separation of resources once again and trying out a middle ground. So if the system doesn’t come out as mentioned on the earlier blog post, this is the reason why. Other than that crowd control functionality needs to be reconsidered according to the new netcode, this is a high priority task as those added a lot to the game feel. So we will make sure you can properly throw your enemy away, or get thrown away with as minimal server corrections as possible. This will be slightly different than how it worked out on S4 as it was P2P client authoritative, but it will work the same fundamentally.

For the initial alpha release it seems like we’ll only include one of the skills and others will follow during the alpha instead. The choice has been the “Platform” skill which allows you to move a distance greater than a dodge in 4 directions: Forward, left, right and Up! By default it’s triggered with the shift key, although we will provide key bindings as well. If you tap the trigger key while idling or moving backwards then it will take you up, if you are moving forwards then it will be a forward one and similarly there is one for left and right as well. Additionally if you want to reach a higher place without letting go of your current movement keys, then just hold down the button and it will trigger the upwards option again regardless of your inputs. Currently hold duration is 0.3 seconds, meanwhile tapping can be instant as long as it’s registered.

Now on the other hand, we decided to have more weapons on the initial alpha release. I will not get into details but basically the main types are: Straight Sword(may not be the best name out there), Swordgun, Revolver, Bat, Rifle Cannon and Healgun. Quick heads up, I didn’t even start working on some of these yet but they are up next, in the end I would like to make no promises but we believe that these are the main types that we should have in the alpha right away. Also in the game their item names will be different, such as Scorpio for swordgun. Archetype and Type names will be written below the weapon’s own name to make things clear. For example:

Inventory view of an item

This is related to the item searches, you will be able to search them by each of these names so essentially you have the ability to find every swordgun, gunblade or just the base weapon(Scorpio).

But! We are also planning to move onto our item skin system, so this will look a little bit different. Aside from that, the “trash/sell” option will not be available initially since there will be no shop for you to get items back for a while. We wouldn’t want you to delete your precious items now would we 🙂

Audio

This was something that we didn’t bring up before since the plan was to have the necessary visual effects in place and then try to get sound effects fitting to those and the animation timings. Well we made it through and we have many sounds effects to make use of. Keeping up with the theme we generally went for a mix of Sci-Fi while trying not to make everything sound too Sci-Fi-y. ✨

Character spawn in sound
The classic sound of destruction… of a map part, not us
Two plus two is four~ Minus one that’s three, quick maths

Now first two and nearly all of the sound effects we have are made by Serban Matei while the announcer lines are from Jeran Ugokwe, both are pretty skilled and has been a pleasure to work with. Upon time as we add more content we will of course need more from them.

And that’s it!

At least for now. I’m sorry about the long time frame since the last post but we are basically as busy as ever. And I hope soon we all get to hear the following in the game.

Until then, take care!