I have started redoing / upgrading the animations. Beginning with the run and turn animations. It’s not easy to get them to blend smoothly when everything else isn’t working perfect. First trouble I had was that the controller was snapping to full value on key press, that is they were digital. So I had to do some scripting to tween out the states and get a smoother transition. But of course that did so you barely could control the robot at all, because he was turning to slow. Eventually I solved that aswell by make him turn back faster if you try to turn the other way. It still needs some tweaking but it works for now.
Then Felix started working on the robots impulses (earlier he couldnt be pushed by balls). Which for a while made the animations all jittery, when that was fixed I noticed that sometimes the robot didn’t move as expected. It was like he froze for a moment before continuing, what I didn’t notice was that he lost the contact to the ground when running over uneven terrain, since he didn’t have a “fall” state he just continued to run in the air without moving. The camera also sometimes makes the game look like its lagging(mostly when turning). I can’t really test the animations in game with these problems. A smarter person would hold off with updating the work directory but “luckily” I still have alot of other animations to do.
Anyway enough ranting, here’s a short video of me running around with some new animations and controller.
“When you understand something, then you can find the math to express that understanding. The math doesn’t provide the understanding.” – Lamport
Lately I have been working with analyzing different ways to calculate, update and track user skill depending on different pre and post parameters. The first question I asked myself was: what is actually player skill? This might seem like a question with only one answer, but if you think about it you will soon notice that you can twist it in many different ways; e.g. is the player that helps the team (true sportsmanship) the best player, or is it the single player with most kills that should earn that title? As I have been working and studying a lot in the area of game design I soon realized that the number of answers to this question is a function that depends on the complexity for the game. That is, in a game like chess the answer to the question might be trivial and depends only on the winning and losing condition of the particular match.
During my research I came across the TrueSkill algorithm, which is a skill based ranking system for Xbox Live developed at Microsoft Research. For long (far too long in my opinion) the Elo ranking system has been widely used and modified for different kinds of games and today many refer to the word “Elo” when talking about how skilled and experienced they are. However, the Elo system comes with many flaws, such as not taking team composition into account (and you already know that teams are a big part of our game).
So, what is the TrueSkill algorithm and how does it work? Well, to put it really really simple it takes two different factors into consideration:
The mean (average) value which is often represented by the Greek letter μ (mu)
The standard deviation, represented by the Greek letter σ (sigma). This indicates the systems uncertainty of the player.
If a player got a high sigma this means that the system is unsure about that particular player and in the same way a low sigma means that the system is pretty safe about the players skill level. This means that a player with high mu and high sigma isn’t certainly going to be merged with other players with high skill, but instead depends on the conservative skill value that is a composition of both the player’s mu and sigma value.
These two diagrams illustrate two players:
Eric with a pretty high μ and low σ (the system is sure about this player)
Natalia with a quite the same μ but much higher σ than Eric.
After Natalia won the match we see that Eric’s skill curve remains almost the same but Natalia’s curve has been both narrower and taller, which means that the system has been surer about the skill of Natalia.
I just realised I haven’t posted about the texturing, but it was pretty straightforward.
I decided I´m going to use a 1k map for the shields, a 2k for the body of the robot and a 1k for the tire and core in ball form.
I baked out AO and Normals in Xnormal in 2x the resolution and scaled it down in PS (Photoshop) to get smoother edges. The textures themselves are based on metal pictures with dirt ontop. I freehand erased the amount on spots wich are more exposed and added more on the areas closer to the ground.
So now 3 weeks to Milestone 3, I’m beginning the animating. Which was fine when I originally planned it. The problem being we really need more animations than I thought. I’m going to focus on the forward running/walking and the transform animations, because that’s the ones I wrote in my proposal. Then do as much as possible on the rest.
I already have mockups/tests on all of them so I don’t need to start from scratch.
I have often struggled making stuff to complex. Forgetting that less is more and that allot of details can be added in the texture for better result without wasting time to modeling it. What I have tried to do is leave some simple areas on the models, where your eyes can rest, and use all that saved up geometry to small complex areas. It gives a better aesthetic look because of interesting balance and contrast.It also makes a more optimize geometry and really make details pop, better one good handle than 2 bad. Can you see The small complex area on the first image, hint, handle.
I have started texturing some items for the game, you can see on the screen below my rocket launcher and missile. I started studying computer graphics because i painted and draw allot digitally. When I later learn about 3d and render-passes(diffuse, Ao) I better understood my own pictures that i drew before. I have been focusing to much on diffuse rendering when sketching(the angle between plane and light source) and forgetting dark corners and popping edges. It is maybe not exactly as it looks in real life but it makes thing interesting and softens the otherwise so hard cg edges. I really works good in computer games when the meshes are so sparse. The black rocket launcher is to show a curvature render, used to help masking out edges for a faster and more procedural workflow.
Here is a little technique that i am going to try and use when baking items standing on the ground. I copy my highpolly mesh, smooth it and combine it back with the original using booleans(scary). The result is a pretty good transition between edges and simulates sand or dirt trapped in corners.
I was curious on how the current network physics would work with something more than just the players around, so I set out and created a simple projectile that the player could fire in a rapid fashion. These “shells” rolls around in the world and explode after a set time, pushing nearby objects away but don’t deal any actual damage.
Here’s the result
Now, that was a single-player scenario, but I did try out with 4 players shooting like crazy. The results were not that surprising, the rapid spawn of a crap ton of projectiles did cause the simulation to break apart a little, even on a local connection. One could see some shells blinking to their correct position or taking weird turns mid-air. Part of the issue is that my current extrapolation method is extremely simple, it merely uses the velocity and position of the latest received state to determine where it should be. If the difference is small enough it does a smooth interpolation of it, otherwise it snaps the position. The reason for leaving out gravity was because it lead to bothersome results at higher latencies in my test environment, although the real error was something else which I mentioned in my previous blog.
Still gravity is somewhat problematic since I can’t run collision detection in a good way, and gravity will try to pull objects through the ground all the time. To solve this I’m thinking of saving away the changes in and position velocity caused by objects colliding with each other. This will have to be done in retrospect of course, so before adding a new state I need to alter the last added state. The whole method does sound a little weird, using information from the wrong path to guess how the corrected path should look like. Still the differences are usually pretty small, so I think it will yield some improvement.
Progress is slow on the asset creation. This week have been very stressful and as of now I’m behind schedule.
My lack of posts this week is due to staggering modeling progress and I have not been able to pull up any fully textured models to show here on the blog. I’m now forced to lower the level of detail on my assets to make due.
My workflow have been interrupted a couple of times after every game test by tending to small fixes here and there on the level and have been very time consuming. Various inputs from testers have led to improvements to the level gameplay, but not the aesthetics of it.
With 3 weeks to go until milestone 3, I have made alterations to my schedule to try and put out a fully textured level, but I will not be able to have the level of detail I first set out to create. This is a disheartening realization, but I remain true to the goal: To make a fun prototype level to show the game’s potential.
As can be seen in our gameplay videos, the level have received ramps on both sides of the pit of death as well as a pipe dangling from the crane. This addition has gotten both positive and negative response from the testers. The negative critique often come from the players who lack the skill and precision to fly into the pipe and take part of the power-up inside.
But after a few tries, they too get to savor the sweet taste of extra damage.
“Not knowing something doesn’t mean you’re dumb— it just means you don’t know it.”
Yesterday was a day filled with both nightmare and relief. I have been struggling a lot lately getting my Apache2 registration web server to work properly. This has been a pain as everything I do seems to return errors…errors that is both unpredictable and can accrue from time to time, which makes them hard to debug and solve. Simple things like ordinary PHP $_POST variables could really mess up things, even if I knew that everything I did was on the right track. Maybe I did take some wrong steps along the twisted journey when configuring the web server?
So, what do you do when all hope seems to be lost, and you struggle with a problem that is far beyond repairable? Well, often you do what every programmer and developer hates to do, you kill your darlings. This was exactly what I did; wiped out every PHP setting, MySQL setup, debugging configurations and started from the very beginning. However, this time I installed the WAMP server, which allows you to create web applications with Apache2, PHP and MySQL already fully configured with the correct versions. My guesses seemed to be correct, after the installation I used my old web files and everything worked like magic.
It is however important to note that the WAMP server is not recommended for production purposes, but instead for development and debugging only. In other words, I will have to switch out this solution in a soon future.
I can surely say that I felt really dump last day, when trying to implement stuff that should be really straightforward but can’t get it to work. Although, I guess that everyone should think like Jamie Zawinski when it comes to development of areas that you haven’t ventured before.
A new week means new assignments, new progressions, new happy-hours and of course… a lot of newly brewed coffee ( 🙂 ). This week the team has made some awesome features to the game; some examples are ammo capacity for weapons, a lot of implemented audio such as motor-sound, robot implementation, flag trail-renderer, more particles, kill announcements etc.
We would like to share these implementations by showing you a video that we recorded recently. The matches played in this video demonstrated Hold the Flag game mode with a total of 6 players involved (3 on each team). I can promise you that rolling has never been more exciting and tense! We played 4 different matches with distinctive teams and all matches turned out to be really really close (not more than 5-10 points difference when finishing).
This is rather interesting if analyzed further as we haven’t put down much time at all on balancing the game AND some players involved had played a lot more than others. Yesterday when I was going to sleep I thought to myself that it has been long since a played a game this exciting, which makes me feel incredibly good and exalted for our upcoming game.
Cheers from north Sweden.
(This is not an entry of “Video of the Week” series, but it will be posted later this week. So… stay tuned =) )
Recently I have started to work on our new web server that will mainly be used for user registration and user management (such as changing user password, retrieving password etc.). I have been using Apache 2.4, which is currently the number one HTTP Server on the Internet. During our course in Network programming here at Campus Skellefteå one assignment was to setup a webserver using Apache, so one could say that I already got some experience of using it. However, all my backpack experience was to configure Apache to work with PHP 5, which is just one tiny part of my upcoming project and all the different parts that I will be needing.
The HTTP server now runs with support for PHP 5, MySQL, SSL and some other important extensions. My yet biggest problem was to enable support for sending simple mails to the end-point user. This seems like a rather straight forward task but I can guarantee that it produced some serious headache before I was done with it. I started off by using ordinary PHP for this purpose, but ended up with a PHP extension called PHPMailer 0.9 for PHP 5/6 (http://phpmailer.worxware.com/), which can easily be used to send ordinary mails and mails through a SMTP server.
My problem was that I couldn’t simple get PHPMailer to work with the use of a SMTP server (and it took me a lot of time just to figure out the proper debugging methods). I first thought that my workstation was blocked from sending mails through SMTP as it was located behind the school network, but this wasn’t the case (not even close). At the end I figured out that I had failed to configure SSL properly on my webserver that was actually the very first step that I took before starting with PHPMailer.
So, what lesson did I learn from this? I guess that it is always important that you are 100% sure that all parts of one development step is finished before moving on in order to prevent situations of my own 🙂
As you all know sound is one of the key parts when playing games. I’m not much of a sound effects guy but someones gotta do it. I’ve been working a bit on implementing some sound effects to the game such as explosions, weapon sound and collisions. There are alot of free sounds out there on the internet but most of them are very lacking when you are trying to produce a quality game. And as we have no budget to purchase sound or hire a sound guy to produce them for us, we will just have to make due with whats available at the moment. The biggest set back was when I started working on an engine sound for the vechicle when I realised that there is almost no good engine sound loops that fit our game.
We posted an entry on facebook asking for people to help us out with the sound and please dont hesitate to contact us here also if you think you can provide any sound or other things you might think we need for the game.
Other than that, I’ve been working on the customization screen for the players. All thats left right now until it’s fully functional is enabling it over the network and after that, it’s just more features like graphical manipulation and other fun things for the users to enjoy!