♪ [MUSIC] ♪ So, hello and welcome! I’m Zadr. I’m the Lead Programmerat MADFINGER Games. I would like to talk togetherwith Brandi today about how we usethe Unity technology to make our multiplayer games. But first, please allow meto introduce our company. MADFINGER Games was founded in 2010 by four of my good friends. In these nine years,we reached 100 employees and released eight games, with 250 plus million downloads. For every single game, we received many rewardsand awards, including the “Most Beautiful Game” on Google Storefor Shadowgun Legends this year. How many of you have playedShadowgun Legends here in audience? – Oh, a lot!- (BRANDI LAUGHS) So, I don’t wanna talkabout it, okay? I wanna talk about this. (VIDEO) (NARRATOR) Do you rememberthe last time you woke up and said to yourself, “Today is gonna be a good day!”? I do. It was this morning. Why am I so optimistic? you ask. Ah, well, it’s kinda hard not to be when you’re part of War Games, the biggest spectaclein the universe! And there’s you! And all you gotta dois just steal a flag and bring it back. Some people are so-o-o-o negative! “Damn! I should’vedone that differently!” or “I wish I can turn back time!”blah, blah, blah, blah, blah! I never got that. After all, timeis what you make it. You give it value. You have all the time in the world! The only question is, how are you gonna use it? [REWIND PLAYBACK] ♪ [MUSIC] ♪ [BREAKS NECKLACE] [GRENADE PIN REMOVAL] [GUNFIRE BLASTS] [ROARING] You’re like… – Yeah. – [LAUGHTER] Hey! ♪ [MUSIC] ♪ (ZADR) Wow! Shadowgun War Games. [APPLAUSE] Thank you very much. Shadowgun War Gamesis our next upcoming, highly competitivemultiplayer shooter.
highly competitivemultiplayer shooter. It’s locatedin the Shadowgun universe, beside the original Shadowgun, Shadowgun DeadZone,and Shadowgun Legends. We started this project year agoas a spin-off of Shadowgun Legends. But during the development, we saw the potential of the game, and we decided to go biggerand make it better. So, we think about itand we said, “Okay, we are a mobile company. We go mobile first. No discussion.” We really would like to makea highly competitive game, and we would like makethis game accessible to the masses. For this, you need some goals. And we are MADFINGER, so, we are really goodin making beautiful games. We got awards for it. So we would like to takethe same quality and stick on it. The same is for gameplay. We are pretty goodat making multiplayer games. So we need to take this and make the best gameplay ever. Because we need playersto be able to start and learn how to play, to become from the zeroto the hero. And of course,to make multiplayer game, you need the gamers,you need the players, and you needto connect them together, so they can share the knowledge,they can play together, and they’re gonna enjoy the match. But everything has a catch. And in this case,we need matchmaking. Matchmaking is not easy. Matchmaking needs to be fast.Matchmaking needs to be fair. Because if it’s not fast,the mobile players, they’ll just killthe app, uninstall it, and never return. If it’s not fair,they will not play it either. Because nobody, even me,would want to play on rank one with someone of 27 or so, you know,you don’t want to. We really don’t wantto allow players to experience thingslike low latency, cheaters, and this kind of stuff. And we need to putall this together as developers, and we don’t spend much time on it. Because, before, years ago,we were spending, and I was there, we were spendingyears making the games. And it’s not fun.Really, it’s not, it’s boring. So we would like to makethe very smart, fast development sequels. For this, the core of the multiplayeris the networking. Without networking,there is no multiplayer. And it really isn’teasy piece of cake. It’s a complicated thing.There is a lot of services around. And you needto take care about latency, you need to take care aboutthe synchronization of the players, and a lot, a lot of other things.
and a lot, a lot of other things. And if you can focuson making games, and we can make games,not backends, and you want to do it fast, you need someoneto help you with it. And this is where Unitycame on the stage, and we start to collaborateon networking stuff. So, for us, you know, it’s… for both of us,like Unity and MADFINGER, it’s a win-win strategy because they help usto focus on making games. We give them the feedback so they can dothe better product for everyone, not just for us. So right now, we should gomore technical. So I would like you to welcomemy dear friend, Brandi, on the stage. [APPLAUSE] (BRANDI) Who-hoo! Thank you so much, Zadr. I really can’t say how much we lovegetting to work with MADFINGER and developers like themwho adopt our stuff really early. They’re fantastic guinea pigsand veterans in the space, and it means we all getto learn so much and make our tech and our servicesas awesome as possible by the time we bring it outto a lot more developers. So we’re going to heada little more technical and start breaking downsome of the technologies that we’ve been working on together to get War Games out the door. Now, there’s lots of different waysto ship multiplayer games. But this is kindof a typical topology and a typical flow that you’ll see. As soon as the playerlaunches the game, either implicitly or explicitly,they have to log in, authenticate that you knowwho that user is, and authorize what servicesand other elements of the game they have access to. The next step is thatthey will sometimes want to join their friends. So, depending on how socialyour game is, you may have a friends, party,lobby type service where people can join up before they’re readyto go play with other people. The next step is their matchmaking, where either the party leader will directly submit their requestto a matchmaker saying, “I wanna go playCapture the Flag. Here’s some information about us.” Or the party service will do it if it needs to go in query datathat is server authoritative, and submit their requeston behalf of the party. Next, you’ll geta dedicated game server that matches the kind of game that your playersare trying to play, and connect you to other people. And in the casewhere you run out of players or you need to submita backfill request, that server will goand look for more players.
multiplayer games first time downloading game that server will goand look for more players.
that server will goand look for more players. And finally, if you want to connectvoice communication channels, this is the point where youtypically start to see more and more channels open up and your playersare given permission to access each other. So pretty simplistic breakdown, but we’re gonna go intomore detail on each of these, starting with the PlayerIdentities System. Unity’s been working ona three-part player identity system: authentication, authorization,and admin tools. So the authentication piece is intended to bea white label-able solution where you can create loginswith either federated providers or your own login,so it looks like your game name. But we help with all the fast,reliable authentication and storage of those users. The authorization componentcould be used independently, and we’ll talka little bit more about that. But it’s there to allow youto authorize your users to access certain services. So for example,if you’re using our matchmaker, you could use your ownauthentication layer, or ours, but it would need to go throughthe authorization step to get a token that would allow itto access that matchmaker later. This helps with hackersand cheating and all kindsof other security issues. And finally,the admin controls are there to allow you to decide how you want to scopeyour different user data stores. If you’re like MADFINGER,you may have players that have been playingyour games for a decade, and you want to continueto merge all of those pools, so when people show up, they already havetheir friends list. Or you may wantto segregate it per game, depending on how you want to designyour different types of services. So the admin controlsare there to give you the ability to scopeyour player identities. In the case of MADFINGER, they actually already havetheir own player identity system. They have peoplethat have already known them and signed up for their servicesand for their games. So in this case, we just needto do a token exchange. So they’re usingour authorization service for when players log in. They authenticateand authorize with MADFINGER, they token exchange with us, and then they sendall of that information back to the game clientso that they get both tokens and can accessother services downstream. It’s pretty simple, so we’re goingto move on from there to friends, party, lobbymatchmaking type services. How do you get your playersinto groups together so that they can go play? Unity’s new matchmaking system, some of you may have seenthe talk earlier today, so I’ll be pretty briefabout what it does. But there’s alsoa whole new other talk
But there’s alsoa whole new other talk if you wanna go watchthe video after Unite that goes into a lot more detailabout what’s here. It starts with the game clientand the SDK that you integrate. And right immediately, you can start communicatingwith those identity services and QoS servers. So QoS is your Quality of Service. It’s your latency and packet loss. So pretty much as soonas your players log in, you want to start pingingall of your available data centers with little tiny packets of data,called “pinging.” And you measure your packet lossand your typical latency to a lot of different data centers and hang onto that dataon your game client so that then you can passthe information on later to the matchmaker and try to get your playersinto low latency matches. Represented in orangeis kind of the gap that a lot of game developerswant to fill for themselves because they havetheir own social systems, and that, eventually, in time, Unity will also provideservices for. But today, if you wantto party up your friends, like Zadr would do, you bring your own lobbyor party system and people can connect to that to party up with their friends or even access serverauthoritative data, like skill or ranking, that you don’t want the clientsto be the authority of. This next bitlooks rather complicated, and I won’t cover all of it. But the gist of what’s in here is a very independently scalablemicroservice architecture that handles the orchestration of a few matched functionsrunning in parallel if you have just a few playerstrying to come in your front door. Or if you have millions, it will independently scale and run massively parallel numbersof match functions to get your people throughthe queue as quickly as possible. You’ll notice these two boxes called “Custom Func A”and “Custom Func B.” That just means thatyou can provide and will provide your own custom match functions. So for example, if you havea really casual game mode and you just wannaget people in super fast, that can becompletely different logic from your other match function, which could be all aboutreally tight skill matching and hyper-competitiveness. It’s all up to youto define exactly how you want those different game modes to work. On the backend,we have the director, which is what communicateswith Multiplay to tell it, “Spin up a server, I have a groupof people ready to go or allocate and provide mea server of this type.” And then backfill, where the game serverscan come back and say, “Hey, I actually needten more players. This is the kind of profilesI’m looking for.” And it will runmore match functions to bring them back through. And the other great thing that the matchmakingand QoS service enable is that Multiplay has somethinglike 25 data centers that you could potentiallybring on board so that hopefully your playersget grouped into really tight, fast matches. So if latency is importantfor your game, you can enable as manydata centers as you need to and use matchmaking to bring themto the best possible data center that gives a reasonableexperience for all of them. Now, in MADFINGER’s case,the first thing it starts to do, as soon as you launch the game, is start pinging QoS servers. Then they go to their partyand lobby system to party up, and their party leaderwill submit the request to say I wanna matchmakeinto this game mode. At this point,this will query their skill data or their ranking data,however we want to do it, to make sure thatthat remains the authority of what is the rankingof these people, ’cause that’s a really common thing to get hackedwith highly competitive games. Next, the lobby servicecommunicates to the matchmaker, and inside of here is MADFINGER’scustom match function, which is pretty focusedon that competitive play today. And then it will spin up a server. And then as the server needs, it will reply backto the matchmaker to get backfill requestsfilled as it’s needed. I’m going to hand over to Zadr, who’s gonna walk you througha little bit of the reference code for how they’ve been implementingtheir QoS and match functions. (ZADR) Alright, thank you. Can you hear me? The first thingyou see on the screen is a snippet of code which we useto find the best region, the best service for the regionwe would like to play. As you can see,it’s a quite short piece of code. You need to create an instanceof QoS discovery client ask for a list of the servers because we don’t have the liston the server on the beginning. Then you will receive,to the callbacks, you will receive, if you succeed,the list of the servers, or to the error callback,you will receive the error of what’s going on there. Once we’re done,we can create the QoS job with the filter listof these QoS servers, and we can ask for informationsabout the servers. So we will run this job, and when it’s done,you can use the results to filter them as you like to find the bestserver possible for you. The next… – (BRANDI) Oh yeah.- (ZADR) Sorry. (ZADR) The next snippet is aboutmaking the match request. As you can see again,it’s very simple code. First, you need to getthe authentication token. This functionalityis not yet fully implemented, so we use dummy tokens for now. We use this tokento create a ticket. You fill the data,you wanna it for the ticket because the matchfunction gets this data, and you can filter the match function these tickets. Then you create the major request. You normally createa request on the lobby because you really don’t wantto trust the client to do so. And you start the request, then wait until the matchmakingservice finish the matching, and you’re done. You’ve got the match,and you can start the game. As you can see, it’s very simple, a few lines of code. (BRANDI) Great. We’ll head on to the gameserver hosting and orchestration and getting allof your players connected. So Multiplay joined us about a little over a year,a year and a half ago or so. And one of the thingsthat they’re really great at is scaling your servers on demand. The best possible experiencefor your gamers is to just have infinite numbersof servers up and ready to go, but it would also beinfinitely expensive. And so what Multiplayhas managed to do over the years is to get really smartabout how they scale up and down, based on the demandof your players. There have been other talks here, so I’m not going to gointo a ton of detail. You can go watchsome of the videos. But the gist of it is that you may have some combinationof bare metal machines, ones that are sittingaround just waiting, and also you wantto burst into the cloud whenever you hit those peaksin your days and your weeks. And so they’ll figure out,as an intelligent way as they can, how to make the mostof the machines that are just sitting there, and then also how to makethe most of your cloud machines. So when your matchmakersends an allocate request and says, “Allocate a serverin this data center,” those little green dotsare representing ones that are already allocated, and the gray onesare representing ones that are warm and ready to go. So once your gamehas been up for a while, you hit the downside of the peak, then you start getting thesede-allocate requests coming in, and they start spinning down some of the cloudcomputer instances that you no longer need, manage defragmentation, so you’re only puttingnew server spin-ups into the same cloud machines that already have a bunch in there and try to startdecommissioning them as quickly as you can. So in MADFINGER’s implementation, we have the matchmaker that we just talked abouta minute ago. It’s spun up a Multiplayserver environment, which is now sentto the IP and port back, which is now being sent backto the game clients. In parallel, we havea monitoring store. So in the Multiplayserver environment, that’s sending data like memory consumed,CPU consumed, and trying to look forany of the information that might indicatethat this server has something that went horribly awry. So when you’re sharingcompute instances, sometimes 4, 10, 20of these on a single machine, if one of them ends upbeing a bad actor and starts consumingall of the resources of the device, you actually prefer to bea little bit proactive and shut it down as needed. So that monitoring store is there to allow the environmentto try to make reasonable decisions about when it’s the right time to go aheadand shut something down. If it’s been stagnant for a while, like on the headless server runtimethat MADFINGER creates, they incorporate somethingcalled Server Query Protocol which provides informationback to the environment too around how many players are here. Has it been sittinginactive for a while? Is the runtimeeven responsive at all? And if it starts to findthat maybe it’s crashed or something’s gone awry, then it can helpwith the diagnostics. So with this headless runtime and with the playershaving their IP and port, they connect,and they’re able to play. And once the match is over, then it de-allocates that server, and the players go back to be able to matchmake once again. At this point, we’re gonna tryto swap devices again… (ZADR) I guess so, …so you can showtheir super cool demo that you guys have been working on. – (ZADR) Now it works. Great!- (BRANDI) Yay! (ZADR) Can you hear me? – (BRANDI) Great!- (ZADR) Okay. (ZADR) So the development ofmultiplayer game is difficult in the way of meaning that to debug it, you need serverand server clients. The usual wayis to open many Editors or build the headless server, build the clients,run the clients, run the server, then in Editor and something, connect debugger. It’s… I don’t wantto say what it is. [BRANDI LAUGHS] (ZADR) So we made our internal toolsto speed up this process, to speed up the cycles. Our guys spentjust a few weeks to make it. It’s awesome. You will love it. I do. We call it “Multi-Sim Play Mode”. And actually what it does is that you can run entire gameseveral instances with the server inside one Editor, and I will show you how it works. So first, I will useour super great “Cheat Manager,” the switch that is “Multi Game,” set I would liketwo clients for now, and I would liketo play local on my PC not connect it tomultiplay or whatever. Then I will duplicatethis Game view, set it as “Display 2” so because I would like to havetwo clients and a server, server on the bottom, 1st client, 2nd client. And then when I press Play button, then do the [magic behind]… [BRANDI LAUGHS] …and the [part of] the game. (BRANDI) Yeah,and something to note here is that Zadr and teamhave had to go through an awful lot of work to try to get the right kindof iteration and tooling. I mean, what’s amazing about this is that you can see exactlywhat the server “sees,” what it’s trying to interpolateas it’s getting all of this data in from the players in real-time as you’re looking atmultiple players interacting in your Scene, which for a local,super fast debugging is absolutely critical. So in parallel,while they’ve been working on having to build outa lot of their own toolset, we’ve been working onsome built-in solutions that hopefully will come outwith some of the new NetCode stacks that we’ve been talking about in some of our othertalks this week. (ZADR) So what you see right now,on the left side, this is the Client 1,which I control. I can switchto Client 2 very easily. So I controlthe second one right now. I can shoot,I can do any… even die. I can do anything I like. And on the bottom, you’ll see this is whatthe server sees. On the left side here,in the Hierarchy view, you can see thatthere was one Scene before. When I pressed the Play button,there was just one Scene. We got a very richpost-process system, which then can do a lot of things. We really do a lot of thingson the background when you buildor press the Play button with the Scenesand with everything. And this post-process system,actually if I ask him, can duplicate the Scene and start for each Scenethe game in the sandbox. Because we gotour own game framework, there is no static things like single tonesor this crazy stuff. So we can really simulateeverything in one Editor. You can connect the debugger, and in one debuggeryou can debug the server, two clientsor as many clients as you like if you have enoughpowerful hardware for it. So, I hope you like itthe same way I like it [BRANDI LAUGHS] (ZADR) …because it’s awesome. [BRANDI LAUGHS] (ZADR) You can kill yourself! [LAUGHTER] [APPLAUSE] (BRANDI) Alright, back fromthe dark humor. [LAUGHS] Let’s talk a little bit moreabout the NetCode. I’m not gonna gointo a ton of detail about Unity’s system here, but I do want to talk a bit about how MADFINGERhas been building on top of the Unity Transport. Back when we firststarted working with them, we didn’t have the FPS NetCodethat you’ll see in preview coming out of the other talksfrom this event, so they really had to doa lot of legwork. They were able to usethe Unity Transport Layer for both reliableand unreliable sequence data, and they were able to usethe simulator pipeline to emulate networktraffic congestion, latency, adding a bunchof noise to the signal. Because especiallyon mobile devices, it’s a hell of a time to make, a heck of a timeto make sure that… [BOTH LAUGH] (BRANDI) …that your playersare still getting a reasonable experience, even when the networkis always going to have problems. And on their side,they had to do a lot of work to build the higher level NetCode. So how you getyour RPCs synchronized, how do you build toolsthat are reasonable for designers to iterate quickly, a lot of that was on themto do the legwork for this game. So I’m going to hand offagain to Zadr who’s gonna walk throughsome of the code they’ve built to create RPCs. (ZADR) Okay, I’m alive again. So the RPCs, you always dealwith some kind of communication between clients and clientand server and server and clients and so on. The normal solution is use RPCs. Before, we used RPCsbased on .Net Reflection, which is heavy. CPU-heavy for CPU,for garbage collector. It’s not good. Everybody knows it. So we tried to go a different way, and we go generation. So we generate the code for RPCs. And, actually, it’s super cool. It’s fast, there’s noreflection at all. And garbage collector is happy,so everyone is happy. So what we need on the beginning is we need to identifysome how the NetObject, which we will sendthe RPCs between. We need some “RPCHandlers,” and it’s very common to usesome “RPCAttribute” to mark the method. So this is the very basic, the very backbonefor our RPC system. So every method usesthe RPCAttribute, and every type needsto implement RPCHandler and “NetObject.” The “RPCHandler” is implementedby the generator, but I will show you later. This is our implementationof the skill. As you can see, we gotthe “Activate() public method.” It’s public because it’s calledby our testing things, so this is why it’s public. It doesn’t need to be public. And the “RPCAttribute”actually tells that it’s a reliable call. In this method, you can seethat it’s quite short, it does almost nothing. But you can see that there isserver and client code marked by MFG_STRIP_SERVER_CODE, blah, blah, blah, blah. This is super cool because you avoidthis copy/paste things that you have two methods and then you have to synchronizethe implementation of the methods. It’s even better becauseyou can use this in the Editor and our Multi-sim Play mode. And you can debug it at once. Once you build the final version, it’s stripped, so it’s not there, it’s optimized. This method is transformedby, again, our post-process in generated code. This as you can see,the skill itself, the class needs to be partial so we can implementthe partial implementation which implements the IRPCHandler. With ProcessRPC() method, because every RPC is implemented as we call it network message, is our implementation which do just a very simple switch, cast it and call the method. Super fast, super simple. If there is any fieldin the message, we just pass the messageto the method. There is no boxing, [code] boxing,this kind of stuff. And now here, you can see the method you useto call the RPCs. Okay so, in this call,you don’t call the Activate(), but RCP_Activate() method. This method askedfor an instance of the message, our “factory/pool.” We send this messagethrough the network, and they turn back to the pool. So we reuse it again, and garbage collectoris super happy. [COUGHS] Every message, every sent messageon the receiver side will end up in the processmessage method, in the “NetSceneBase.” [COUGHS] From this message, we will take the network ID. Network ID is the unique identifierof every single object registered in the Scene, and it doesn’t needto be MonoBehaviour, it can be any type. Once we found it, we call the “ProcessRPC method”I showed before. And this is howthe message looks like. Again, it’s generated code. It’s very simple. The “ActivateMessage” does nothing.There is no information at all. The informationis the message itself. But I can show youa more heavy thing. Here we get the”AgentActionAddedMessage” with a field. As you can see, we usesynchronization methods which transfer the datainto byte streams, send it through network, and sync it back. The last thingI would like to show you is the base “NetworkMessage.” The message as itself,it’s again, very simple. We got “SenderID”and “TargetNetID.” That’s all. So as you can see the implementation itselfis very simple. The post-process behindthe generator is heavy. I don’t want to show you, but you can deal with itand write you own very easily. [BRANDI LAUGHS] Thank you very much. (BRANDI) Thanks, Zadr. Let’s go with that button. (ZADR) Yes or no. Yes. – (BRANDI) Aha! There we go. Great!- (ZADR) You’re alive! (BRANDI) Alright,we’re almost done. The last bit is about voice chat. So Vivox is another companythat joined Unity recently, I think just even a few months ago. And they’ve been powering voice for some of the biggest gamesout there for years. And the way that it’s typicallyset up to use Vivox is that either your game server, so if you spun upa dedicated game server or a game service,like a lobby or party service we’ll usethe server-to-server APIs, to set up a voice channel. It has controls where it can say “Mute everybody,”or “Unmute everybody,” “Kick users,””Update token secrets,” so that it can getthe channel ready to go. And then once you havea Vivox channel ready, then it sends that informationback to the game clients, makes sure thosegame clients that it knows need to be in that session are given the rightpermissions to connect. And using eitherthe Vivox wrapper or the SDK, they connect directlyto the Vivox servers. And it’s pretty muchjust that simple, so we’re not goinginto a lot more detail on it today. So yeah, so MADFINGER’s server,the current plan today is that they’ll havetheir dedicated game server spin up the chat channel, send the informationback to the players, and they’re able to chat. So to wrap up, there’s a whole arrayof technologies we talked about today, and they’ll all in varying statesof ready or available. So the player authorizationthat we talked about, just that token exchange pieceis in Beta today. The authentication piece,the white-labeled component will be sometime later this year,coming out in Alpha, and the admin controlsare sometime later next year. And Multiplay matchmaking is going to be outin Beta next month for our server hosting customers. The Unity Transport Packageis in preview. But Multiplayserver hosting and Vivox have been generally availablefor quite a while now. And I also just want to saythank you so much to Zadr. It’s been so much fun. (ZADR) [Now I’m out.] Thank you. (BRANDI) [LAUGHS] So, thank youall too for coming to see us, and come check outthe Connected Games booth and chat with us, or come to play ShadowgunWar Games on the floor. And I believe there are microphones on each sideif you all have questions. – (ZADR) Be kind!- [BRANDI LAUGHS] [APPLAUSE] (ZADR) So, questionsor no questions? (BRANDI) It is late.I bet you’re hungry! (ZADR) So, there is a question. (MAN 1) I want to knowhow you deal with cheaters, since this is a competitive game. In what part of your architectureyou manage with it? (ZADR) I don’t get a word. (BRANDI) Ah, he was asking,how do you deal with cheaters? (ZADR) It’s tough. This is why we choosededicated servers. Because before we run peer-to-peer, it’s really hard to deal with them. On the dedicated servers, you can actually runthe simulation on the server, so you can avoid a lot,a lot of cheaters by this. If this is not enough, we have other thingsI really can’t talk about… [BOTH LAUGH] (ZADR) …because it’s internaltechnology to this, and I don’t want the cheaters,give a hint how we do it. But the dedicated server itselfavoid a lot of these things. (MAN 1) Okay, thanks. (BRANDI) Yeah, it’s very much aroundhow do you prevent cheating. If they have erroneous data, the servers, the authority,it can just stomp it. It will say, “No, no, you didn’tactually kill that thing. You were wrong. That thing’s still alive,and you’re dead… Oops!” (ZADR) It’s… another one? (MAN 2) So what’syour take on latency where you were usingthe multiplayer level? (BRANDI) So the typical latency, whenever he was working on the local client serverdemo versus.. (MAN 2) Or maybe deployedand real-time and testing with fiveor six devices. (ZADR) It depends, it’s a mobile, so it really highly depends onthe Wi-Fi you play on. So from 50 to 200 milliseconds. (MAN 2) So you were testingwith some fixed bandwidth or… (ZADR) We tried to choosethe best connectivity, and even the matchmakingtried to put together players with the proper ping. So there is, because eventhe best ping versus the worst ping can look as a cheatingfor some people, because you shoot someone,but he runs behind the corner, and you don’t kill him,even if you see you kill him. because of the ping. So it’s very difficult on mobiles And you need to do operations. And even here,the dedicated server can help because if you’re undersimulation of the server, everyone should seealmost the same. (MAN 2) So the latency problemwas solved by you for this game? (ZADR) Yeah, we used the QoSand this kind of stuff to choose the best servers and best connectivitybetween people and with servers. (MAN 2) So error connection codeswere written by MADFINGER? (BRANDI) Yes, so any sortof forward prediction, lag compensation,to try and make it feel smooth, even when you have high ping, is somethingthat they’re working on for their stack. Unity will have offerings for it. In fact, there’s some examplesin the FPS sample that we’ve been talkingabout in other talks. But for now, they had to do all of that kind of smoothingand interpolation and all that sortof stuff themselves. (MAN 2) Okay, yeah, thank you. – (ZADR) Yeah, you’re welcome.- (BRANDI) Thanks. (BRANDI) Alright, I don’t seeany other questions. (ZADR) So,if there’s no questions… – (ZADR) One more!- (BRANDI) One more! – (ZADR) Sorry!- [BRANDI LAUGHS] (MAN 3) I’m interested in how iterationwith Open Match was, your matchmaking functions, so I guess that you’re usingOpen Match implementation in Unity. (BRANDI) Let memake sure I understand. So Open Matchis the open-source framework that our matchmaker is based on, but the Beta matchmakercoming next month is a fully managed service, so it will be hostedand scaled for you, and you usea command-line interface to submit new match functions as you iterate on your system. So I think your question is, what was it like to workwith that system? (MAN 3) Yeah. (ZADR) Actually it’s quite simple. It’s just the command-line, so you create this piece of code, and you just publish it… done, and it was like, simple. (BRANDI) I didn’t pay himto say that. [LAUGHTER] (BRANDI) Okay. [LAUGHS] Thanks, you guys,I’m getting a little too punchy. We should get going. (ZADR) Okay,so please sign up for Beta. We open the portals,so go there now. And we are hiring! [BRANDI LAUGHS] – (BRANDI) Thank you all so much.- (ZADR) Thank you very much. ♪ [MUSIC] ♪