Create an account


Welcome, Guest
You have to register before you can post on our site.

Username
  

Password
  





Search Forums

(Advanced Search)

Forum Statistics
» Members: 19,735
» Latest member: 3028loyal
» Forum threads: 21,420
» Forum posts: 22,196

Full Statistics

Online Users
There are currently 1834 online users.
» 1 Member(s) | 1830 Guest(s)
Applebot, Bing, Google, SickProdigy

 
  News - Mobile developer Supersolid nets $4M to expand London team
Posted by: xSicKxBot - 10-14-2017, 04:36 AM - Forum: Lounge - No Replies

Mobile developer Supersolid nets $4M to expand London team

Mobile game developer Supersolid has netted $4 million in funding to ramp up production and expand its London team.

The studio has worked on a variety of titles including infinite runner, Super Penguin, and city-building RPG, Adventure Town

As reported by VentureBeat, the company’s growing roster has racked up over 50 million downloads to date. 

Supersolid CEO and co-founder Ed Chin believes the studio’s knack for creating engaging social and casual free-to-play titles is the secret to its success. 

“I think a big part of our success comes from the long experience we have in the team for developing engaging social and casual free-to-play games,” explained Chin. 

“Much of our senior team have worked together for many years prior to the founding of Supersolid, and together we created some of the most successful early free-to-play games, which happened to be on Facebook.

“The mobile games market has seen high saturation in particular game genres, but there remains a lot of opportunity in mastering new genres. We believe this to be especially the case for several under-served genres with a wider casual audience.”

Print this item

  News - Blog: Scaling dedicated game servers with Kubernetes – Part 3
Posted by: xSicKxBot - 10-14-2017, 04:36 AM - Forum: Lounge - No Replies

Blog: Scaling dedicated game servers with Kubernetes – Part 3

The following blog post, unless otherwise noted, was written by a member of Gamasutra’s community.
The thoughts and opinions expressed are those of the writer and not Gamasutra or its parent company.


Originally posted on compoundtheory.com.

This is part three of a five-part series on scaling game servers with Kubernetes.

In the previous two posts we looked at hosting dedicated game servers on Kubernetes and measuring and limiting their memory and CPU resources. In this instalment we look at how we can use the CPU information from the previous post to determine when we need to scale up our Kubernetes cluster because we’ve run out of room for more game servers as our player base increases.

Separating Apps and Game Servers


The first step we should make before starting to write code to increase the size of the Kubernetes cluster, is to separate our applications — such as match makers, the game server controllers, and the soon-to-be-written node scaler — onto different nodes in the cluster than where the game servers would be running. This has several benefits:

  1. The resource usage of our applications is now going to have no effect on the game servers, as they are on different machines. This means that if the matchmaker has a CPU spike for some reason, there is an extra barrier to ensure there is no way it could unduly affect a dedicated game server in play.
  2. It makes scaling up and down capacity for dedicated game servers easier – as we only need to look at game server usage across a specific set of nodes, rather than all potential containers across the entire cluster.
  3. We can use bigger machines with more CPU cores and memory for the game server nodes, and smaller machines with less cores and memory for the controller applications as they need less resources, in this instance. We essentially are able to pick the right size of machine for the job at hand. This is gives us great flexibility while still being cost effective.

Kubernetes makes setting up a heterogenous cluster relatively straightforward and gives us the tools to specify where Pods are scheduled within the cluster – via the power of Node Selectors on our Pods. It’s worth noting that that there is also a more sophisticated Node Affinity feature in beta, but we don’t need it for this example, so we’ll ignore its extra complexity for now. To get started, we need to assign labels (a set of key-value pairs) to the nodes in our cluster. This is exactly the same as you would have seen if you’ve ever created Pods with Deployments and exposed them with Services, but applied to nodes instead. I’m using Google Cloud Platform’s Container Engine, and it uses Node Pools to apply labels to nodes in the cluster as they are created and set up heterogenous clusters – but you can also do similar things on other cloud providers, as well as directly through the Kubernetes API or the command line client. In this example, I added the labels role:apps and role:game-server to the appropriate nodes in my cluster. We can then add a nodeSelector option to our Kubernetes configurations to control which nodes in the cluster Pods are scheduled onto.

For example, here is the configuration for the matchmaker application, where you can see the nodeSelector set to role:apps to ensure it has container instances created only on the application nodes (those tagged with the “apps” role).

apiVersion: extensions/v1beta1
kind: Deployment
metadata: name: matchmaker
spec: replicas: 5 template: metadata: labels: role: matchmaker-server spec: nodeSelector: role: apps # here is the node selector containers: - name: matchmaker image: gcr.io/soccer/matchmaker ports: - containerPort: 8080

By the same token, we can adjust the configuration from the previous article to make all the dedicated game server Pods schedule just on the machines we specifically designated for them, i.e. those tagged with role: game-server:

apiVersion: v1
kind: Pod
metadata: generateName: "game-"
spec: hostNetwork: true restartPolicy: Never nodeSelector: role: game-server # here is the node selector containers: - name: soccer-server image: gcr.io/soccer/soccer-server:0.1 env: - name: SESSION_NAME valueFrom: fieldRef: fieldPath: metadata.name resources: limits: cpu: "0.1"

Note that in my sample code, I use the Kubernetes API to provide a configuration identical to the one above, but the yaml version is easier to understand, and it is the format we’ve been using throughout this series.

A Strategy for Scaling Up


Kubernetes on cloud providers tends to come with automated scaling capabilities, such as the Google Cloud Platform Cluster Autoscaler, but since they are generally built for stateless applications, and our dedicated game servers store the game simulation in memory, they won’t work in this case. However, with the tools that Kubernetes gives us, it’s not particularly difficult to build our own custom Kubernetes cluster autoscaler! Scaling up and down the nodes in a Kubernetes cluster probably makes more sense for a cloud environment, since we only want to pay for the resources that we need/use. If we were running in our own premises, it may make less sense to change the size of our Kubernetes cluster, and we could just run a large cluster(s) across all the machines we own and leave them at a static size, since adding and removing physical machines is far more onerous than on the Cloud and wouldn’t necessarily save us money since we own/lease the machines for much longer periods. There are multiple potential strategies for determining when you want to scale up the number of nodes in your cluster, but for this example we’ll keep things relatively simple:

  • Define a minimum and maximum number of nodes for game servers, and make sure we are within that limit.
  • Use CPU resource capacity and usage as our metric to track how many dedicated game servers we can fit on a node in our cluster (in this example we’re going to assume we always have enough memory).
  • Define a buffer of CPU capacity for a set number of game servers at all times in the cluster. I.e. add more nodes if at any point you couldn’t add n number of servers to the cluster without running out of CPU resources in the cluster at any point in time.
  • Whenever a new dedicated game server is started, calculate if we need to add a new node in the cluster because the CPU capacity across the nodes is under the buffer amount.
  • As a fail-safe, every n seconds, also calculate if we need to add a new node to the cluster because the measured CPU capacity resources are under the buffer.

Creating a Node Scaler


The node scaler essentially runs an event loop to carry out the strategy outlined above. Using Go in combination with the native Kubernetes Go client library makes this relatively straightforward to implement, as you can see below in the Start() function of my node scaler. Note that I’ve removed most of the error handling and other boilerplate to make the event loop clearer, but the original code is here if you are interested.

// Start the HTTP server on the given port
func (s *Server) Start() error { // Access Kubernetes and return a client s.cs, _ = kube.ClientSet() // ... there be more code here ... // Use the K8s client's watcher channels to see game server events gw, _ := s.newGameWatcher() gw.start() // async loop around either the tick, or the event stream // and then scaleNodes() if either occur. go func() { log.Print("[Info][Start] Starting node scaling...") tick := time.Tick(s.tick) // ^^^ MAIN EVENT LOOP HERE ^^^ for { select { case <-gw.events: log.Print("[Info][Scaling] Received Event, Scaling...") s.scaleNodes() case <-tick: log.Printf("[Info][Scaling] Tick of %#v, Scaling...", tick) s.scaleNodes() } } }() // Start the HTTP server return errors.Wrap(s.srv.ListenAndServe(), "Error starting server")
}

For those of you who aren’t as familiar with Go, let’s break this down a little bit:

  1. kube.ClientSet() – we have a small piece of utility code, which returns to us a Kubernetes ClientSet that gives us access to the Kubernetes API of the cluster that we are running on.
  2. gw, _ := s.newGameWatcher – Kubernetes has APIs that allow you to watch for changes across the cluster. In this particular case, the code here returns a data structure containing a Go Channel (essentially a blocking-queue), specifically gw.events, that will return a value whenever a Pod for a game is added or deleted in the cluster.  Look here for the full source for the gameWatcher.
  3. tick := time.Tick(s.tick) – this creates another Go Channel that blocks until a given time, in this case 10 seconds, and then returns a value. If you would like to look at it, here is the reference for time.Tick.
  4. The main event loop is under the “// ^^^ MAIN EVENT LOOP HERE ^^^” comment. Within this code block is a select statement. This essentially declares that the system will block until either the gw.events channel or the tick channel (firing every 10s) returns a value, and then execute s.scaleNodes(). This means that a scaleNodes command will fire whenever a game server is added/removed or every 10 seconds.
  5. s.scaleNodes() – run the scale node strategy as outlined above.

Within s.scaleNodes() we query the CPU limits that we set on each Pod, as well as the total CPU available on each Kubernetes node within the cluster, through the Kubernetes API. We can see the configured CPU limits in the Pod specification via the Rest API and Go Client, which gives us the ability to track how much CPU each of our game servers is taking up, as well as any of the Kubernetes management Pods that may also exist on the node. Through the Node specification, the Go client can also track the amount of CPU capacity available in each node. From here it is a case of summing up the amount of CPU used by Pods, subtracting it from the capacity for each node, and then determining if one or more nodes need to be added to the cluster, such that we can maintain that buffer space for new game servers to be created in. If you dig into the code in this example, you’ll see that we are using the APIs on Google Cloud Platform to add new nodes to the cluster. The APIs that are provided for Google Compute Engine Managed Instance Groups allow us to add (and remove) instances from the Nodepool in the Kubernetes cluster. That being said, any cloud provider will have similar APIs to let you do the same thing, and here you can see the interface we’ve defined to abstract this implementation detail in such a way that it could be easily modified to work with another provider.

Deploying the Node Scaler


Below you can see the deployment YAML for the node scaler. As you can see, environment variables are used to set all the configuration options, including:

  • Which nodes in the cluster should be managed
  • How much CPU each dedicated game server needs
  • The minimum and maximum number of nodes
  • How much buffer should exist at all times
apiVersion: extensions/v1beta1
kind: Deployment
metadata: name: nodescaler
spec: replicas: 1 # only want one, to avoid race conditions template: metadata: labels: role: nodescaler-server spec: nodeSelector: role: apps strategy: type: Recreate containers: - name: nodescaler image: gcr.io/soccer/nodescaler env: - name: NODE_SELECTOR # the nodes to be managed value: "role=game-server" - name: CPU_REQUEST # how much CPU each server needs value: "0.1" - name: BUFFER_COUNT # how many servers do we need buffer for value: "30" - name: TICK # how often to tick over and recheck everything value: "10s" - name: MIN_NODE # minimum number of nodes for game servers value: "1" - name: MAX_NODE # maximum number of nodes for game servers value: "15"

You may have noticed that we set the deployment to have replicas: 1. We did this because  we always want to have only one instance of the node scaler active in our Kubernetes cluster at any given point in time. This ensures that we do not have more than one process attempting to scale up, and eventually scale down, our nodes within the cluster, which could definitely lead to race conditions and likely cause all kinds of weirdness. Similarly, to ensure that the node scaler is properly shut down before creating a new instance of it if we want to update the node scaler, we also configure strategy.type: Recreate so that Kubernetes will destroy the currently running node scaler Pod before recreating the newer version on updates, also avoiding any potential race conditions.

See it in Action


Once we have deployed our node scaler, let’s tail the logs and see it in action. In the video below, we see via the logs that when we have one node in the cluster assigned to game servers, we have capacity to potentially start forty dedicated game servers, and have configured a requirement of a buffer of 30 dedicated game servers. As we fill the available CPU capacity with running dedicated game servers via the matchmaker, pay attention to how the number of game servers that can be created in the remaining space drops and eventually, a new node is added to maintain the buffer!

[embedded content]

Next Steps


The fact that we can do this without having to build so much of the foundation is one of the things that gets me so excited about Kubernetes. While we touched on the Kubernetes client in the first post in this series, in this post we’ve really started to take advantage of it. This is what I feel the true power of Kubernetes really is – an integrated set of tools for running software over a large cluster, that you have a huge amount of control over. In this instance, we haven’t had to write code to spin up and spin down dedicated game servers in very specific ways – we could just leverage Pods. When we want to take control and react to events within the Kubernetes cluster itself, we have the Watch APIs that enable us to do just that! It’s quite amazing the core set of utility that Kubernetes gives you out of the box that many of us have been building ourselves for years and years. That all being said, scaling up nodes and game servers in our cluster is the comparatively easy part; scaling down is a trickier proposition. We’ll need to make sure nodes don’t have game servers on them before shutting them down, while also ensuring that game servers don’t end up widely fragmented across the cluster, but in the next post in this series we’ll look at how Kubernetes can also help in these areas as well! In the meantime, as with the previous posts – I welcome questions and comments here, or reach out to me via Twitter. You can see my presentation at GDC this year as well as check out the code in GitHub, which is still being actively worked on! All posts in this series:

  1. Containerising and Deploying
  2. Managing CPU and Memory
  3. Scaling Up Nodes
  4. Scaling Down Nodes (upcoming)
  5. Running Globally (upcoming)

Print this item

  Xbox Wire - Get Hands-on With Xbox One X at Microsoft Store
Posted by: xSicKxBot - 10-14-2017, 04:36 AM - Forum: Xbox Discussion - No Replies

Get Hands-on With Xbox One X at Microsoft Store

We’re less than a month away from the launch of the world’s most powerful console, Xbox One X. Between now and launch, Microsoft Store is giving fans a chance to check out the new console on 4K displays before it releases on November 7.

Join us at participating store locations, including flagship Microsoft Stores in New York and Sydney as well as Microsoft Store at Bellevue Square Mall and Microsoft Store at University Village, and be one of the first to get hands-on with Xbox One X. We’ll also be celebrating the leadup to launch with Forza Motorsport 7 gameplay, prizes, special appearances and more! More participating locations will be added in the coming weeks, and soon you’ll be able to play Xbox One X at all Microsoft Store locations prior to launch!

Xbox fans are also invited to join Microsoft Store locations in the U.S., Canada and Puerto Rico to celebrate the launch of Xbox One X, where there will be giveaways and more. Fans who preorder Xbox One X at their local Microsoft Store can pick up their console right at 9 p.m PT on Monday, November 6 / 12:00 a.m. ET on Tuesday, November 7, from the store where they preordered. Stay tuned for additional details to come on the Microsoft Store Facebook page.

For fans looking to get in on the gaming action before Xbox One X launches, check out Mixer.com/MicrosoftStore and the Microsoft Store Facebook page for the latest gaming events and streams, as well as how you can take part at your local Microsoft Store. Microsoft Store regularly hosts events to celebrate the latest in gaming, from livestreaming in our Mixer NYC Studio to local tournaments for games like Halo, FIFA, Minecraft and League of Legends.

Print this item

  News - Pokkén Tournament DX Will Allow Online Team Battles In New Update
Posted by: xSicKxBot - 10-14-2017, 04:36 AM - Forum: Nintendo Discussion - No Replies

Pokkén Tournament DX Will Allow Online Team Battles In New Update


A new update is on the way for Pokkén Tournament DX and, as well as the usual “improving gameplay”, it promises to add some very welcome online and training features.

Perhaps the most interesting thing coming to the game is the addition of Online Team Battles – these special contests see each player choose three Pokémon to take into battle with all three needing to be defeated in order to win. Currently, this type of battle can only be played locally so adding it to the online options seems like a great idea to us. Official Groups will start to appear online too, allowing players to take part in battles to receive new special titles.

Moving away from the online side of the game, another feature set to be included is the ability to record a Pokémon’s movements in the Free Training mode. This means that you will be able to take control of the opposing Pokémon, record any movements you make, and then play them back to improve your own skills. Nice!

No date has been set for this new update to kick in but we can’t imagine it’ll take too long for Nintendo to dish it out. In the meantime, get practicing those Team Battles!

Print this item

  News - Review: Sparkle 2 (Switch eShop)
Posted by: xSicKxBot - 10-14-2017, 04:36 AM - Forum: Nintendo Discussion - No Replies

Review: Sparkle 2 (Switch eShop)


If you’ve ever played an entry from PopCap’s ZUMA series, or the late ’90s Puzz Loop game by Mitchell Corporation, Sparkle 2 by 10tons falls under the same banner. For the uninformed, Sparkle 2 is a bit of a blast from the past, providing marble madness in the form of a puzzle match game. The fact this entry is a sequel is nothing to fear; Sparkle 2 welcomes newcomers as it’s both an independent and spiritual successor to the first instalment that – you may or may not be aware of – released in 2007.  

Sparkle 2 is best defined as a marble shooter; the title’s inability to seriously differentiate itself from past interpretations of this genre doesn’t necessarily detract from the enjoyment you can find here.


You’re immediately dropped into a fantasy world and informed by the game’s narrator that you must reunite five enchanted keys created long ago in order to unlock secrets of the land. The mystery surrounding your journey is enough to briefly spur you on, but it’s the addictive gameplay that is the real driving force.

Despite the lack of context as to why exactly the on-screen action plays out as it does, the fantasy setting in Sparkle 2 still manages to provide a serene backdrop for each level. If the marble shooting is intended to have symbolic meaning, it’s not easy to interpret – regardless of this, the game still manages to unfold in a relatively straightforward manner.

You start your journey on the world map and travel from place to place. Along the way you’ll unlock new game modes, play through more than 90 unique levels and collect up to 16 different enchantments. Each level’s setting is defined by its name, with appropriately themed locations such as Firefly Meadow and Whispering Woods – both of which look as you would probably envision.


To play Sparkle 2 you must shoot coloured orbs from a spinning “orb slinger” at long lines of mobile orbs, in order to make a colour match of three or more. The main goal is to clear a long line of coloured marbles before it falls into the abyss at the end of the spiral trail. As you progress you’ll need to do this at a faster pace, all while dealing with additional lines for prolonged periods, and even a larger variety of coloured orbs. The overall execution of the core gameplay is right on the money; the controls provide a great sense of precision, and if you briefly hold in the button before launching an orb a guide line will appear on the screen to enhance the accuracy of your shots. The title also includes touch-screen controls, which makes it more approachable to players of all ages.

Like past releases within this genre, Sparkle 2 provides players with temporary power-ups in the form of rune rewards as well as enhancements to supercharge your “orb slinger” device. There are wild orbs that match-up with any orb colour, power-ups that reverse the direction of a moving line of marbles and a lot of others that will help you clear lines faster using a range of destructive methods. Launcher enchantments make each session a tad more manageable with permanent enhancements that can be applied to your “orb slinger” in between levels- each one has a unique effect. The tranquillity enchantment is one of the more enjoyable ones, making levels easier but longer. Others include the likes of “Eternity Swap”, adding an additional coloured orb to the launch mechanism. There are more unlocked as you level up and progress through the main game. 


If this makes it sound like Sparkle 2 is too easy, for those of you seeking a challenge there are three different difficulties, including a nightmare setting. The additional game modes unlocked as you progress through the story include Survival, Challenge and Cataclysm. Collectively, these modes include more of the same in terms of content and provide a tougher challenge for more experienced players.

In contrast to the safe design of Sparkle 2, the soundtrack goes above and beyond all thanks to the award-winning composer Jonathan Geer. His previous work includes the likes of Cook, Serve, Delicious 2!! and Owlboy. All of the music in the game hits the right notes for a fantasy setting, ultimately finding the perfect harmony with the orb matching gameplay. It also manages to outshine the game’s artwork, which is pretty but too often uninspired.  

Conclusion


Besides the optional touch controls that make this title accessible to all ages, Sparkle 2 doesn’t attempt to take this classic genre to new heights; instead it provides an experience that is mostly on par with past efforts – including the original Sparkle game. Fortunately, these development choices can only be commended as it is a well designed game with satisfactory production values; it’ll likely have you glued to the screen until you’ve lost your marbles. 

Print this item

  Steam - Daily Deal – The Incredible Adventures of Van Helsing, 75% Off
Posted by: xSicKxBot - 10-14-2017, 04:36 AM - Forum: PC Discussion - No Replies

Daily Deal – The Incredible Adventures of Van Helsing, 75% Off

Space Pirate Trainer is Now Available on Steam and is 33% off!*

Space Pirate Trainer is the official trainer for wannabe space pirates on the HTC Vive. Pick up your blasters, put on your sneakers, and dance your way into the Space Pirate Trainer hall of fame.

*Offer ends October 19 at 10AM Pacific Time

Print this item

  PS4 - Mystik Belle
Posted by: xSicKxBot - 10-14-2017, 02:12 AM - Forum: New Game Releases - No Replies

Mystik Belle



Trouble is brewing at the Hagmore School of Witchcraft, and only freshman witch-in-training Belle MacFae can put things right.

Publisher: Last Dimension

Release Date: Oct 03, 2017

Print this item

  PS4 - Chaos;Child
Posted by: xSicKxBot - 10-14-2017, 02:12 AM - Forum: New Game Releases - No Replies

Chaos;Child



Discover A Darker Japan - Explore Shibuya in 2015, after an earthquake nearly levelled the city six years prior, and try to outsmart the puppet-master behind this New Generation Madness. Track Down A Serial Killer - Play as Takuru, an arrogant senior and the newspaper club president, and discover the pattern in a series of bizarre deaths around you that the police can't seem to crack.

Publisher: PQube

Release Date: Oct 24, 2017

Print this item

  XONE - Let Them Come
Posted by: xSicKxBot - 10-13-2017, 05:30 PM - Forum: New Game Releases - No Replies

Let Them Come



Assume the role of Rock Gunar, mercenary gun for hire with alien blood on his hands. Twitchy trigger fingers and focused battle tactics are the order of the day as you take on this ultimate survival mode challenge to wipe out every Alien on this ship! You will die - a lot - but sheer brute force plus cool ammo and weapon upgrades will help you take these vermin down, one wave at a time.[Microsoft]

Publisher: Versus Evil

Release Date: Oct 03, 2017

Print this item

  PSVita - Bad Apple Wars
Posted by: xSicKxBot - 10-13-2017, 05:30 PM - Forum: New Game Releases - No Replies

Bad Apple Wars



After a sudden car accident on her first day of school, the protagonist finds herself in the afterlife, standing before a strange school for lost souls. The confounded protagonist attends the school?s opening ceremony. Then, chaos strikes?

Publisher: Aksys Games

Release Date: Oct 13, 2017

Print this item

 
Latest Threads
(Free Game Key) 3 FREE St...
Last Post: xSicKxBot
4 hours ago
Black Ops (BO1, T5) DLC's...
Last Post: ElTee1999
9 hours ago
Black Ops 2 Map Packs Dow...
Last Post: TheIntern3679
10 hours ago
Black Ops (BO1, T5) DLC's...
Last Post: TheIntern3679
10 hours ago
(Free Game Key) Steam | J...
Last Post: xSicKxBot
Yesterday, 03:13 PM
Why five nights at freddy...
Last Post: Pitania24a
Yesterday, 05:26 AM
Think You Know the World?...
Last Post: GemmaSteinberg
05-13-2026, 10:59 PM
(Free Game Key) Steam | L...
Last Post: xSicKxBot
05-13-2026, 10:52 PM
(Free Game Key) Steam | O...
Last Post: xSicKxBot
05-13-2026, 06:30 AM
MMOexp COD BO7 a clear pa...
Last Post: JeansKeyzhu
05-13-2026, 03:29 AM

Forum software by © MyBB Theme © iAndrew 2016