Rivalry Status Update #62 - More Leaderboards and More Skins.
Sorry for not making an update for a while, I instead focused on spending the last month creating two new features which are both almost complete. These are both the Skins feature which is around halfway complete and the Leaderboard feature which is already in the base game.
Now when you look at the Ranking UI within the Networking feature it will rank every person who has a score into the leaderboard. This score is currently based on how many players you have killed, which I feel displays experience more than skill, as an experienced player with a low win rate could still have more kills than a newer player with a higher win rate. Also, there is currently an issue where if you wish to see the updated statistics on the leaderboard you have to restart the game.
Test players on local server
I am still thinking of other ways to calculate this effect while also staying balanced. For example simply ranking the leaderboard based on the win rate would mean newer players could get a lucky first kill and never play again as they already have a 100% win rate. So I have done some simple testing of a few algorithms that may display skill over experience while still staying balanced. Some of which incorporate the other players score so beating a player with a higher score than you would increase your score more than beating someone with a lower score than you.
I am number one on the live server.. come at me :)
Then there is also the issue whereby people can farm points by constantly killing another owned account which is one of the more difficult issues to address. For this issue the only real way of stopping it is by limiting how much score one can gain from killing the same player over and over again.
I would encourage people to test it out and give some feedback on ways to improve it.
The other feature I have been working on is the Skins feature which can currently display local skins that are built into the game.
Crazy test skins I'm using to debug skinning
The selector at the top will change the entire player's skin while clicking on each limb with change its individual skin. This leaves room for some simple customisation as you can easily mix stains together.
Example of Skinning in Choose Weapons UI
Same Skin In Game
However when you select the fists skin you will more often than not change your weapon combination which is quite irritating to deal with. I have considered having it so clicking on the fist changes its skin while clicking on the area around the fist changes its weapon. However this functionality may confuse first time users.
My next step in finishing skins will be implementing Steam Workshop support which will allow for a wider variety of more interesting skin designs to be added to the game. I must then also allow for skins to be displayed online which would require an approval process which could then also lead to skins being implemented into the base game.
The skins I've made to test and develop skinning are very primitive but this is what I am aiming for once Steam Workshop is integrated. http://steamcommunity.com/sharedfiles/filedetails/?id=624733305
In order to implement this feature I had to do a lot of work on polishing the player models as well as ensuring that both players are exactly the same.
Previously both players had different sprites associated with them that meant player 2 had slightly higher resolution limbs than player 2. Not only that Player 2 actually had shorter arms and a slightly smaller further back head.
When I noticed all these inconsistencies I began not only refurbishing Player 2’s limb sprites but also the shape and structure of Player 2. And to ensure that both players are identical Player 1 is now a direct copy of Player 2 just flipped the other way around.
Pending tasks are now
Chat System (Keeping in theme with the game).
Finish Leaderboard (I need to think of an algorithm that can't be exploited).
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Steam workshop for player skins.
Research different arenas and backgrounds.
General bug fixing, tidy up and enhancement of look and feel..
Rivalry Status Update #61 - Leaderboards and Skins.
Over the past 2 weeks I have been working primarily on Leaderboards with some investigation into Skins.
On the Rivalry Beta you will now notice that there is a new “Rank” UI that is a fairly barebones leaderboard containing a Scrollable list of player names and scores. (These players are merely there as an example to test the feature).
There have also been a few changes to the UI layout including an extra network menu option allowing you to choose between the networking and ranking feature. Some menu names have also been changed to aid in the consistency of the UI.
I have also added some new commands to the network protocol that can add and request scores from a set on a database. With this whenever someone wins a game their score can be incremented on the database and then retrieved by others when the ranks are displayed. However in its current state I have not yet wired up the client with the server.
Currently peoples scores are simply judged on how many players they have killed. This can be gamed with people kill farming accounts they have control over. I have experimented with algorithms that scale against the player you are fighting and will discourage killing the same person over and over again. This I must put more thought into and would definitely welcome suggestions on improvements.
I have also looked at how to effectively add skins into Rivalry and have started working on replacing the current player sprite in the choose weapons screen with an actual player.
Pending tasks are now
Chat System (Keeping in theme with the game).
Leaderboard (I need to think of an algorithm that can't be exploited).
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General bug fixing, tidy up and enhancement of look and feel..
I also had a little experiment :)
Rivalry Status Update #60 - Bug Fixing and lobby sound effects.
This week I managed to fix a critical bug that would cause all games to fail if people had some special characters in their Steam name.
I have also doubled the network screen resolution which should make the mouse movement smoother. This resulted from a fix that solved an issue causing network mouse pointers to cluster in the bottom left of the screen when players were in a game.
I have also changes to the network protocol so you will need to upgrade to the latest version on steam or it won’t allow you to play online. For now the game engine will keep trying to reconnect after being rejected by the server so it will be a bit messy for a few days until everyone has upgraded :( I have also added some warning text on the network button if the protocol is mismatched so that in the future these updates are a bit cleaner.
When posting replay videos to Twitter it now lets you use the new 280 character limit.
Fixed numerous other small bugs that had been nagging at me for the last few months and finally managed to work on some new functionality. I have added lobby sound effects to alert players waiting in the lobby when players are available to fight. I'm learning how the Unity sound system works and am using this as the basis for future gameplay sounds such as sword hits.
Next week hoping to start working on an online chat which keeps within the style of the game :)
Pending tasks are now
Chat System (Keeping in theme with the game).
Leaderboard (I need to think of an algorithm that can't be exploited).
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General bug fixing, tidy up and enhancement of look and feel..
Rivalry Status Update #59 - Back To Work And Windows Updates
School assignments are over and so I am now free to get back to work on Rivalry! However I wasn’t able to achieve as much as I had hoped for this week as I had to work on upgrading components of my local test server including my version of windows.
I did manage to fix a bug which posed a major risk towards the server. If someone were to quit and rejoin after their network connection dropped out while they were in a game. Then that person's game would remain as a broken game that people could join but never destroy. Technically people could create as many of these games as they wanted creating a huge list of broken games. So far I believe that this effect can no longer be recreated as once you rejoin after quitting the server now deletes your previous game.
Pending tasks are now
Various networking bug fixes.
Audio Notification that a game has started.
Chat System (Keeping in theme with the game).
Leaderboard (I need to think of an algorithm that can't be exploited).
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General bug fixing, tidy up and enhancement of look and feel..
Rivalry Status Update #58 - Drowning In School Assessments.
For the next two weeks I won't have much time to work on Rivalry as I am in the middle of the main school assessments period for this year.
I've been loving watching people play and enjoy the game. There have been some great suggestions which I am now adding to my list and prioritising.
I have noticed that people using IPv6 have been having problems playing online games and is something I will be looking into but can't for a few weeks.
Pending tasks are now
Various networking bug fixes.
Audio Notification that a game has started.
Chat System (Keeping in theme with the game).
Leaderboard (I need to think of an algorithm that can't be exploited).
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General bug fixing, tidy up and enhancement of look and feel..
Rivalry Status Update #57 - Bug Fixes, Network UI and Playing Lots of Games.
Over the past week I have been playing a lot of games with a lot of different people, and I would just like to thank all who used the Network feature as you helped me find a lot of bugs and I have had a lot of fun playing with everyone.
I spent most of the time just identifying bugs instead of fixing them but I did get to fix a few. For example: when someone left their game, their cursor would become globally visible even to people already playing games meaning that randomly player mouse cursors could just pop into games that were already in the middle of a match. This has now been fixed so that once you finish a game your cursor will only be visible to those who are in the lobby.
I also spent some time to modify the networking lobby. I have changed the way filtering by Steam friends works so now instead of removing all games that aren’t from that friend, it will highlight the game your friend has created to a different colour. I have also added some text at the top of the screen to prompt players on what to do and have changed the colour and style of certain text boxes.
(Before)
(After)
However I didn’t get much done when it comes to new game modes and instead spent most of the time playing with others :)
Pending tasks are now
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General bug fixing, tidy up and enhancement of look and feel..
Rivalry Status Update #56 - Network Play Released!
The Network Play feature is now available in Rivalry’s base game allowing you to now play a game with anyone, anywhere around the world.
Over the past two weeks I worked on both getting peer to peer to an acceptable state, re-structured the server back to using containers, disabling and fixing broken network game modes and added a new Steam invite feature that allows you to invite your friends to an online game of Rivalry.
Soooo.. Networking is going Live!
Although now the client can restart its Peer to Peer connection, the success rate of this restart is currently very low. It will usually take 4 tries for a peer to peer connection to form taking around 30 seconds. However I feel that this success rate can be improved with further investigation. I have asked the developer of the NAT traversal plugin I’m using what could possibly be going wrong and methods of improving it.
The server has also been restructured back into containers. This means that all the components of my server are now deployed as Docker containers.
The game mode “Players” which allows for network games with more than 2 players has been disabled from the network play feature as there were still a lot of game breaking bugs. For example if more than one person were to drag a limb at once as their turn ended, the player would stay floppy allowing for players to fly around the map with ease. So because of this I have decided to remove it until I have managed to remove these game breaking edge cases.
However, on another note I have re-added the “Weapon Choice” mode back into the network play feature as I now believe all game breaking bugs have been fixed. Previously if you were to choose the “Quick” mode, (which randomly selects a weapon combination that will be given to both players). While both sides did get the same weapon combinations, the combinations would be different on each player's screen. For example while the host may see both sides wielding a sword and a knife, the client would see both sides holding an axe and a shield. This always ended in chaos as players would be seen with certain weapons that they didn’t necessarily have. However, the mode has now been fixed and re-added into the network play feature.
The final feature I added was the ability to invite friends to join network games. All you have to do is change the filter below the network games list to anyone of your Steam friends and click on their name. In its current state I do believe it is too easy to invite someone to a game and may prove to be irritating without a text prompt of some sort to ask whether you truly do want to invite someone to a game. If the person you invited accepts then they will be automatically sent to the network lobby. This could be improved by instead of taking you to the lobby, it then took you into the network game itself.
If anything strange happens during a network game, don’t be afraid to tell me, as I would greatly appreciate bug reports and feedback to further improve the game!
This is a brilliant Review. Thank you very much :)
Pending tasks are now
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General bug fixing, tidy up and enhancement of look and feel..
Rivalry Status Update #55 - Strengthening Peer To Peer Startup Process
This week I worked primarily on strengthening the startup process of the Peer to Peer network connection method. Initially during the startup process if any of the ping messages sent failed to be received, especially if due to latency and a race condition I started listening after the message was sent, then the Peer to Peer connection would also fail as a result. However, now the machine that is sending the ping messages will not only retry sending, but will also retry the connection negotiation process as well. From what I have seen so far the machine sending the ping messages hasn't failed since the change. There was, however, an exception to this when the machine receiving the messages loses all communication from the machine attempting to send them. This only happened twice but that is still enough to warrant an investigation. I will likely need to add a timeout that re-attempts the connection end to end.
Another problem I found was that when I tested peer to peer games with more than 2 players joining at once the whole Unity engine would crash. The obvious conclusion would be that the two people joining at once would be too much traffic for the NAT traversal plugin I am using to handle but even when I changed it so connections would be made synchronously, one after the other, the issue persisted.
The final change made was refactoring the server from a massive block of Javascript into many smaller Typescript classes. This ensures that the server can be both easily understood and modified. It was getting a bit out of hand :)
https://www.youtube.com/watch?v=pusoANI9FC4
Pending tasks are now
Finish and Test Peer to Peer
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General tidy up and enhancement of look and feel..
Rivalry Status Update #54 - Peer To Peer Life Cycle and Server Relay Coordination
The Peer to Peer networking method now has a complete life cycle meaning you can play multiple Peer to Peer network games one after the other without trouble. Previously trying to start a new peer to peer game after already playing one would end in a mess of errors and jumbled network states. But now you can continue to play more peer to peer games after already completing one.
However I have still found more issues relating to Peer to Peer that limit me from releasing it into the public version. Occasionally during the setup process of peer to peer, Something stops the client from punching through to the listener resulting in a failed peer to peer connection. This could be caused by the protection levels of the machines attempting to connect, players joining and starting games too quickly for the setup process to complete or UDP packets getting lost between machines. Once these issues are fixed and more testing is done then there is a real possibility of releasing networking (including Peer to Peer) into the public version.
I also worked on getting the server to coordinate who it should relay packets too without causing the repetition of packets as well as ensuing everyone receives the information they require. Previously if you had a game of 4 people 3 using peer to peer and one using the relay method. Then everyone else who was using peer to peer would also receive the relayed packets from the server, resulting in double the amount of possibly outdated information being sent. However now the host sends client connection status information to the server, so the server can know which machines not to send relayed packets too.
Pending tasks are now
Finish and Test Peer to Peer
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General tidy up and enhancement of look and feel..
Rivalry Status Update #53 - Functional Peer To Peer!!
This week I managed to get peer to peer network play functional! It is now possible to play a game of Rivalry with a friend anywhere around the world by using the peer to peer method which is considerably faster than using the server relay method.
However, I still have to fix the peer to peer lifecycle and how it dismantles its connections once a game is finished. Currently you can only really have one game before things start to fall apart. There are also still some optimizations that can be made to the architecture of the code and how packets are unpacked and processed.
But once this has been done, all the peer to peer related bugs are fixed and the networking UIs are polished I could say that the network feature has been completed and I can move onto the next feature, player skins.
I also looked at how to optimise network speed times by controlling the rate of host frames being sent by the host to all the clients. I can change the network frame rate dynamically, so in theory I can have it scale with network performance. I could potentially also have it so if there is a large influx of players using the server relay method I could lower the host frame rate which would decrease the amount of information on the network allowing the server more time to process requests.
Pending tasks are now
Finish Peer to Peer
Complete network game lobby UI (make pretty and complete all network game modes).
Complete network game restart UI (make pretty).
Research player skins.
Research different arenas and backgrounds.
General tidy up and enhancement of look and feel..