All posts by KenOfNZ


Connecting Together

As you already know {Soul}Ascension is a server based multiplayer game. As such, I gave a lot of thought on how to approach player connectivity. I did some prototyping on P2P model but I eventually stuck with a client-server model instead. This meant I had to decide between whether or not I should delegate the hosting responsibility to the players or myself.


Of course there are pros and cons to both choices. Delegating the hosting to a player’s machine meant that all players can play the game at anytime as well as have good latency between themselves and others within the same region. But using that approach introduces a few questions to address. What are the system requirements for the hosting player? How can I keep all the players to the same version of the game? What if the host radically changes the game settings? What’s an inexpensive way to prevent cheating?

Screen Shot 2017-03-17 at 10.19.41 AM
Running server console

If I were to be hosting, I could maintain all control and consistency for the game between all players. You would have to be on the latest version of the game if you wish to play with others on the server. I could alter the game experience however I wanted and the changes would be propagated to everyone. This approach sounded great for keeping a consistent game but it did have a few draw backs. I would have to pay for a server to host the game. I would need a way for players to discover the servers I’m hosting. Should I still allow players to host their own servers? Which regions should I host the game?

Screen Shot 2017-03-17 at 10.06.32 AM
Cost of running the game server

In the end, I decided to be responsible for hosting the game server.¬† I decided to host in 2 regions at the time, Australia and US West, as I expected only a few people to give the game a try. This also meant I had to address the server discovery problem, which I used a simple central hub design to solve. However, by hosting only in these regions it excluded a lot of potential players due to latency and poor experience. This didn’t mean I abandoned the idea of letting player’s to host entirely.¬†Players are able to host their own using a few launch options, although not officially supported. I gained a few a bonuses from implementing the ability to also let players host. It introduced ways to alter many settings for the game server without needing a release and encouraged me to come up with a few primitive ways to combat cheating.


Now, after a few months of maintaining the game server in production, I gained some insight I didn’t expect I would have. By running the servers myself, I collected statistics about the server’s health, the game server’s stability and performance, and more importantly the cost of running it. It also taught me how to maximize my the machines’ resources since I was trying minimize cost without hindering the game’s overall experience. What I really didn’t expect was gaining confidence in my server code. After seeing it had ran well and good in the last few months of production, I was hugely confident in it’s stability! Any hiccups or issues that did occur I had already implemented self-recovery and they worked, which was great! Even though hosting my own servers costed me some money, I have to say it was an excellent experience. For the future, I’m looking to use more Cloud engineering techs to potentially scaling servers to meet demand rather than have them on all the time to save costs.

Alpha Version 0.23.1 Released!

New Skill – Adrenaline

This update brings minor balance changes to some Sword Skills and a new Utility Skill, Adrenaline, to replace Fortify.

Screen Shot 2017-02-23 at 1.56.14 PM.png

Adrenaline inherits the original function of Fortify to buff one’s defenses when necessary and adds a new utility to it by increasing one’s movement speed. With this addition, Adrenaline vastly improves over Fortify by no longer being just a defensive Utility but both an offensive and defensive Utility much like Dash.

There are also some visual changes for Damage numbers and effects.

Check out all the changes here!

Update is available to download and play now!

Having good developer habits

When you are working on a project by yourself, its really easy to get into bad or lazy developer habits. One of the big ones is not branching your features!

When you are working on multiple different features/bugfixes, it becomes rather “convenient” to just commit changes into master(first mistake was not branching) since you’ll just think “hey noone else will be working on this, so where’s the harm in that.”

But quickly a feature becomes complex, and you forget where the other feature was going. Wish you had branches now!

So here’s a list of must do’s when you are making new features:

  • Every time you start new feature, branch off from the latest master commit, assuming its working.
  • Rebase off master whenever master gets updated.
  • Switch branches when you want to work on a different feature
  • Review and merge into master when you are done

Posted Image
Doing those things even if you aren’t in a team is good practice. It will allow you to roll back changes, keep/remove features in the works and ease work tracking.

I just finished implementing spatial hashing to improve performance for collision detection. While working on that, I also started on an Emote feature. And doing those things I listed, it seriously helped me track the features I’m working on.

A Brief History of Ascension

Didn’t even notice its been almost over 2 years *cry* since I started this hobby project. It definitely went through a lot of changes in visuals, scope and code base.

September 2014

A simple multiplayer platformer. You can only knock people around. Even has a static HUD placeholder(Wow I really did plan this UI all the way at the beginning *shock* ).

January 2015

Ugh, ugly static menu prototype that you click to connect to the server. *ehh* Some super early sprite attempt. I probably removed the useless HUD and started working on a functional one.

Feburary 2015

Early menu designs and most were functional. Poor choice of bright static for the menu now that I see it again *annoyed* . Lots of the skills were implemented although the visual assets were not done. The HUD is starting to be functional.

Rest of 2015

Was working on the first level boss since the original concept of the game was playing with others to defeat bosses. Ultimately development stopped around March because I just didn’t want to do it. Don’t have screen shots of this era.

Janurary 2016

Here’s a screen shot of the boss and a now removed skill.
Decided to scrap the old concept and just go with PvP. Also scrapped old character sprites for some temporary placeholder sprites.

August 2016

With the core gameplay and features completed. I’m just adding new minor features and looking at server deployments.