One year already

So, yesterday was Insane Unity first anniversary.

illu-birthday

When we first started the project, two and a half years ago, I already knew we would have a lot of work to do, I knew that would take time, and I knew it would be hard to make it real. But, well, we did it: now, Insane Unity team has grown, we’re 10 members, and when I think about all we got through from the start, I admit I’m kind of proud of us, and I’m thrilled. I’m thrilled because I realize that if you’re persevering enough, you actually can make your project comes true.

Yet, we must confess we don’t really have much good reasons to boast: we’re progressing on the game development but it’s not ready to be available on Steam…. yet.
Just one year. It makes me feel like Insane Unity is just a baby, thinking he has already did a lot since he born, but he still has everything to learn about life. And we still have lots of things to learn about being a “company”. Everyday we learn, everyday we do some self-analysis: are we going the right way?

Moving from a 2 members team to a 10 members team actually involves to do self-analysis often: you must be able to accept criticism, from outside and from inside the team, to justify every choice you make puting your ego aside, to trust others and just hand down a lot of all these things you were used to be in charge of. By joining the team, every single new member brings with him some new ideas, as consistent as your own, and as “founders” we have to connect all these ideas, let everybody in the team knows they’re important and necessary, and to make the good choices for the game. We attempt to take this way, and trust me, that’s not that easy everyday. But, after all, designing and developing a game is mostly about humans relationships, isn’t it?

So, in the months to come, I swear you’ll see what this new team is able to do!

Etham

 

Goodbye, silence

Once upon a time, we were a small and quiet team sharing a tiny office, then it was 2016. This new year brings us some noise ! No, no, I’m not talking about those 10 team members in a fenzy of brain activity, no, I’m talking about the 20.000-sounds-man, Jpeg, our sound designer who’s now working with us at the studio.

After some days plinking on his keyboard (you know, the one made of long black and white keys) he’s just gone into an exile by himself, entered the solo mode in his own room. But, it hasn’t put a stop to his silent-breaker skill. At the contrary, since he’s working in his very own “sounds cavern”, he’s testing and testing again, creating and making again the sounds of explosion, circulation… We even surprised him hitting his own car to record a base to create an impact sound.

Well, you can listen at these new sounds by watching these short videos right below.

 

That’s still not the final version for everything you’re listening here. Anyway, for the ones interested to know what changed from december 15th, we made a small list right here:

  • Artillery
  • Airknocker
  • Laser
  • Shooting impact
  • Explosion
  • Missile
  • Ship background sound
  • In-game sounds polishing

A large part of those sound effets are created from “noises” recorded outside, in the real world. That’s why this strange creature who is the sound designer sometimes hits his own car or to bring back to the office some plastic bags full of  gravels. Well, of course, for some sound effects, it’s a bit more complicated: I don’t imagin Jpeg standing behind a plane which is taking off. That’s why he also uses online sound banks potential. And after that, come the time to mix, brutalise and twist all these sounds with the help of a sound processing software, then it’s integrated in the game with the help of Wwise.

And here is a present for you, you little snoop, a picture of the lair. Hope you’ll be back on next Friday for a bit special post !

jpegwinthatwarweb

Happy new year 2016!!

The Insane Unity team wishes you the best for 2016!

card-Style-realiste2

Airknocker is coming!

… and Winter is already there. That’s old, that’s a shitty joke and I’m sorry for that. Please Stay.

Today, let me introduce… “The Gun-Nut”!!

Well, actually, it’s just a AirKnocker and I’m not that sure naming it “The Gun Nut” would help to sell the concept.

AirKnocker_WinThatWar_02

As the name suggests, the AirKnocker is used to attack (and destroy) the air units. Our bombers don’t appreciate that much when they spot them on the ground, right before they disappeared in a puff of smoke.

So, the AirKnocker is a quite light ground unit an it makes it a very mobile vehicle, at least much faster than those lumbering tanks. Hey, no, we’re not judging the tanks, we’re happy to have them in our troups when we need some units to act tough !

Not content with its brand new nuclear fission engine which makes it that swift, the “Gun-Nut” (oh I have to stop with this name…) didn’t choose between wheels or catepillar, it chose both. And did I tell you that it has a 5000miles + autonomy? For sure, it won’t let you down soon.

But let’s go to the part that really interest you. We know it, speed and stuffs, that’s cool, but what you do want is to finally get down with your neighbor’s bombers that invaded your territory! Don’t you? That’s not a problem, our AirKnocker is here for that very reason. Thanks to its full 360° fast rotative cupola, which also lean to aim at the sky right above, assembled on an ultra-fast electric motor, it can deploy all of its four cannons in any direction in less than a second. Pulsed laser, high frequency shots and extremly short reload time… I wonder what you’re waiting for to make it your fav units in WinThatWar!? (Well, the second favorite, I hope Michel will always have the first place).

All of this to tell you that Philemon offer you this Concept Art, and we can’t wait him to make the 3D asset and replace the place holder which is in the game for now.

We wish a merry Christmas to everyone who celebrates it, and happy holidays. Next blog post in 2016!

AirKncocker-preconcept-winthatwar

Utopiales and Art to Play: November fairs

Putting aside our recent penchant for recruitment and furnitures assembly, we are still (yes, we do!) collecting all your feedbacks to improve the game. And game fairs, show, conventions are the best for us. Really, it’s amazing to meet you all, watch your reactions while you’re playing WinThatWar! and talk about it with you. And, in November, we were kinda lucky since we were present at the Utopiales and Art to Play, both of these fairs taking place in Nantes.

Just like last year, the Utopiales public was really… young. Anyway, he also was very enthusiastic, and from the beginning of the afternoon, the kids were just there, staying at our stand, helping out and teaching the new comers how to play WinThatWar! That was really great for us to see the youngers able to understand the game and how to play it. Sometimes, at the expense of the elders! Hold on, don’t get mad, “elders”, we know most of you will become some really badass strategists as soon as the game will offer more features and options.

Utopiales Insane Unity

We neither regret the Art to Play weekend. At the contrary! You were so many to stop by our stand, 14yo young women to 60yo grown men, testing the game and tormenting us with your countless and unusual questions (Actually we love that, it makes us look deeper into the game mechanics, so please don’t stop!), and also encouraging us. Well, we won’t lie, this weekend was exhausting (like really, it killed us. 5 days later we’re sleeping on the tables at the studio. I barely exaggerate, promise) but still, it was really rewarding. We wrote a lot of your feedbacks and ideas on our notepads. Plus, that was a good opportunity to see if you’d like the tokens/strategy icons, as it was a brand new feature in the game. Unless I’m mistaken, i think you liked it, and the map general view have seduced many (mini-map “are so 2014” anyway.).

In short, if we should summarize those 2 weekends:

  • The younger are the players, the rougher they play. They just spend their time building turrets.
  • We can easily welcome 13 players at the same time on our stand, even if it’s only 2 computers.
  • Trying to give some explanations about our game when Matthieu Sommet (SLG – a french famous youtuber) or Ganglion (J-rock band) are standing on the stage, about 10 meters far from you, can be a quite difficult excercise. That’s why we just gave up our vocal cords there.

Art to Play Insane Unity

Again, thank you to every single player who came to these conventions.

Recruitment season is over!

Hi everyone!

Do you know we missed you, like, a lot?!

We know, we were not very present on this blog lately, because, well, we didn’t have much news for you. But now, we can announce it : Recruitment season is over! Finally.

We’ve “lost” some time regarding the previsional Roadmap, but we didn’t think (when we wrote it) we would have to hire six more people til the end of 2015. Anyway, we finally made our choice, and soon, we’ll be able to come back to a normal working rhythm. Everybody is back in front of their computer screen : back to code, back to design, back to blog… and that’s a relief. It was necessary for us to make the team grows, so we could make the best game we’re able to create, for ourselves, and most of all, for you.

Why we spent so much time on this recruitment season, is because we did our best to answer every single application. We read every single resume and cover letter, we visited and evaluated every websites and books that have been sent to us, so we could choose the right people for this first game, but also for the future of Insane Unity. It wasn’t easy at all, we’re doubling our number, after all! The good is that, in less than a month now, the team will be complete. Our sound designer even join us next week. We’ll try to make you a small recap about all of this by the end of the month, and, we’ll introduce our “newbies”, for sure.

Until then, it you haven’t seen it yet, we produce a video trailer about Michel’s life. That’s all made from in-game screenshots.

We’ll be back next week for a review of the two fairs we were present at last month.

Have a nice weekend.

Hi you, we’re hiring!

hiringweb

You’re a French speaker and you want to join Insane Unity ?

Please see our job ads here : Careers

Procedural generation & P2P

Network, network aaaand network… yeah, I’m working on multi over Internet mod for some months now. But here it is, today I decided to take a rest and write a post about the backstage, for you!


p2p

RTS & Lock-stepping

In a multiplayer game, we use the network to synchronize the world’s state on all the computers. Every player has then the same representation of the map than the others. Following the example of all known RTS,  WinThatWar! network layer is based on an algorithm called lock-stepping.

The classical approach (in FPS for instance), is to synchronize the internal representation of every items of the game by relaying, via the network, the changes bring to the other players. In a RTS, we can get to hundreds, even thousands of items to synchronize at the same time. So, you would probably understand that’s not possible to send, 5 time a second, the exact location of every unit of the map to every player in the game. However, even the most frenzied korean Starcrafter doesn’t exceed more than 5 commands by second, so that’s 300 APM (actions per minute)… Ok that’s not so bad.

To simplify, the lock-stepping will “cut” the game in 200ms turns. During that turn, we’ll record all the controls of the player: selection, moving orders, attack orders… At the end of the turn, theses controls will be send to all the other players while you’re waiting for their own. After a period of time, all the players finally get the list of  all the controls for this turn. This list is delivered to the game-logic (AI, Gfx, etc.) that will execute them (the controls). Then, the next turn begins. If the game-logic is determinist, which means it will always get to the same result for a given list of controls, the World state is exactly the same for every player. It’s called “Synchronous simulations”.

In facts, that’s a bit more complicated: we mask the network latency by simulating a n -1 turn, so we give time to the next turn controls to arrive before the end of the current turn simulation. Are you still following me? Anyway, in the case of games over Internet, we just make sure that these turns length of time vary depending on the players’ computers and network capacities.

This paper, wrote by Age of Empires creators, describe this principle very well.

At the end, the network part is quite simple. The true difficulty resides in the game-logic determinism. For a given list of controls, all the computers have to end in the exact same result.

Procedural generator & GPU

In the case of WTW, we chose to use procedural generation to produce our maps. We’ve actually got a tool that allows us to define varied maps styles, then our generator is able to create an infinity of variants of them. Well, we have to confess that’s still a bit experimental now, but we’re working on it!

For the sake of performance, the maps relief (heightmap) is generated by the graphics card with the help of Pixel Shader, at the very beginning of the match. That’s quick, and efficient.

Problem is there’s still some negligible differences between what results of two graphics cards made by a different constructor or so. Usually, it really is a tiny variation, in the range of 10e -5 or 10e -6 maybe (0,00.001 and 0,000.001 if you prefer). But here it is, that causes troubles in the synchronous simulations. For example, at Player 1’s, a tank could perfectly shoot the target, but at Player 2’s, the tank seems a bit upper on the map, and it can’t shoot. In short, that’s not synchronous anymore. And we do not like it this way.

P2P transfer & ECC

I the way to fix this problem, in LAN mode, the host was sending his own heightmap to all the player. This way, we ensured there was no display difference. But we can’t use this method  concerning the multiplayer over Internet mode. Our largest maps heightmaps is around 400Ko heavy. In the case of a 8 players game, the host would have to transfer 7x400Ko of data, knowing our Network technology is P2P based, and if, like me, you didn’t have choice and subscribed to an ADSL which don’t allow you to upload more than 100ko/s… it would take you 28 seconds just to transfer the map. And we all now, here, how these seconds can seem lengthy when you wait a game to be launch.

So, this is roughly how it works at Insane Unity: If 8 players join the game, the map is “cut” in 8 parts, and every player send his own eighth to the 7 others. So one player will upload only 350Ko (7x50Ko), which means 3.5s sending time.

Actually, the map is “cut” to be as efficient as possible for the processor cache, but in any case, it doesn’t change anything of the 8 parts things, since every player will send more or less the same volume of data.

Engine

The heightmap in Yellow, the cutting in Red.

But wait for it… that’s not the best!

I think that ECC (Error Correction Codes) are one of the most magical thing of informatics. The principle is to use an abstruse mathematical process: For one data bloc, a “parity” bloc is reckoned. The whole (data + parity) is relayed, then through a second abstruse process, we can firstly check that none of the data are damaged, and then fix the potential errors. Reed-Solomon codes (RS) might be the most used: CD, DVD, Blu-Ray… it even works when it’s scratched. And, if as mine, your ADSL is a 2,5km long interferences antenna, I think you might be happy that your residential gateway or router fix some of the errors.

reed_solomon_code_word

RS bloc coding, n = total weight, k = playload (useful data), and 2t = parity. Through a 2t parity, you can fix up to t errors.

Well, let’s get back to our map. The heightmaps are almost the same for all the players. So, I’m using the RS to calculate a parity bloc, and that’s what players are exchanging through the Network. Then everyone can apply the error correction, and that’s how all the players will finally can have a perfectly identical map. Oh yeah, I almost forgot, parity bloc is obviously smaller than data bloc but you probably noticed that already. In our case, it’s RS(223,255), being 32 octets parity and 223 octets of data. Let me do the calculation for you: Now, the players just have to upload  50Ko each thanks to this method, which means an half a second transfer.  And that’s what we like!

So, that’s my daily life at Insane Unity. Hope you enjoyed this post.

Doom

Roadmap little changes

Hi people!

It’s been a long time I haven’t wrote anything on this blog. That’s why I take advantage of this post-return of summer holidays break to bring you some general news.

From movie the mummy found on tumblr

So! Insane Unity is doing well. Doom is still working on his network stack (which has quite progressed), and Philemon get back to a concept arts phase (which are also in a good way). Also… our two trainees abandoned us last week (sob).

Anyway, we’re still looking for financing and that takes a lot of time, but we’re doing our best to stick to our roadmap at the same time. And as you’ll see below, that was not as effective as we expected. Let’s see what we forecast for September:

  • HUD (tactical information)
  • Tutorial
  • Multiplayer over the Internet
  • Gameplay-guided music

Hum. Well, the HUD is functional, as you may already know if you receive our newsletter, but we’re waiting for Philemon to find a moment to draw some pretty strategy icons miniatures before we let you test it.

About the tutorial, we’re waiting to finish fixing every single interface issues. But, here is the point: Since I had loads of administrative tasks to handle these months, I barely made progress on the interface. Maybe I should buy a tie (just kidding). Even though, I found some times to work on the AI, and that’s the good news. Be patient, I’ll wrote a  post about that later.

Multiplayer over the Internet mode is working! Here is another good news, right? At least, one of us is doing his job, here: Doom. The connecting time between two players is just melting like an icecube on the top of an uranium battery, and the stack is getting stronger and  more and more efficient. Maybe Doom will also write a post about this in a couple weeks.

Last but not least, about the gameplay-guided music, we just have to integrate in the engine the loops CiD produced on Wwise.

I think I’ve nothing else to add. I just wanted to be honest with you and confess my mea culpa before sneakily going to modify the roadmap on WinThatWar! website.

Bye everyone, and thanks again for all your support.

Etham

the decal system part 2

You missed the part 1? Keep calm and click here.

Long distance decals

The problem with the artillery in the game is that you don’t have a clear idea of its possibilities. For example, you’d like to park it behind a mountain and target the enemy base, forcing him to bypass the relief and loose a precious time. However, since it is impossible to have the base and your artillery in the same screen, you cannot know how your artillery would react to such an order. In fact, if not at range, it will move right into the enemy base and be destroyed. The point is, when you start thinking strategically and not just a-clicking the enemy, you need critical information, such as the range of a unit.

Now technically, how should we do it ? We could make a decal from a texture, as we did with the selection circle, but that would be a really large area, mostly empty, so it may not be the best option. What we can do, is using the GPU to render vector art on the screen. I’ll explain it later, but if you want to know more about it you can check this chapter from GPU Gems 3 : http://http.developer.nvidia.com/GPUGems3/gpugems3_ch25.html.

But, what is a vector art?

The most common way to consider an image on a computer is basically with a table of colours. When you create an image you have to define its size, which is the number of pixels it contains, and each one of these pixels will have a colour. So all you have to write in the file are the colours of the pixels in the right order, and the GPU will be able to print the image whenever you need it. However, this induces a small problem when it comes to scaling the image.

Picture yourself in a FPS, and in front of you is a brick wall. You are a few meters away from the wall, and can admire the beautiful brick texture the graphic designer created. However, as you get closer, this texture takes a bigger part of your screen, since it is larger, in pixels, than its original size. At this point the details of the texture are less accurate since the colour of a pixel is extended to 5 or 6 adjacent pixels. We could increase the size of the texture, but then the file would be two times bigger, and we want to avoid a heavy file that will take longer to load.


briques

The classic way to overcome this difficulty is vector art, used in the svg format that we need for large decals, such as ranges. The idea is to save a description of the image that doesn’t depend on its size in pixels. To do that we rather consider the curves that form the image, as “paths”. Each path is a command, a set of points, plus a colour and various options about fill, or stroke, or whatever you need, defined in the svg standard. But it will be easier with an example.

Please, draw me a triangle

Let’s make a simple triangle : all we have to do is draw three lines, with each end being the beginning of the next one. For instance,

M 0 0 L 0 100 L 100 0 Z.

This is what a path looks like, a set of letters that are commands to indicate a certain shape to draw. The numbers after it are the coordinates that describe this shape. M means “Move” the current point to this position. It represents the start of the shape, as if it was the position of a virtual mouse. Here we position this cursor in (0,0). L is the command for “Lineto”, that draws a line from the current point to the arguments. At this point we drew a line from (0,0) to (0,100) then from (0,100) to (100,0). Z is the command that closes the shape, by drawing a line to the start point. In this example the line joins (100,0) and (0,0).

triangle

We now have a triangle between the points (0,0), (0,100) and (100,0). We can add options like “fill: black” if we want to fill the shape in black, but basically that is how svg files work.

This way, we can always adapt the shape to how large our image appears on the screen, and then avoid the problem of resolution, but of course complex images can induce a lot of paths, so it is better to save it for something schematic, with only simple shapes.

Other commands (Q, C, A) are used to draw the Bezier curves that we will need for the large decals, and are a little more complex, as you will see in the next part. Yes, there will be a part 3! Wait for it.

Return top