The Blog

Posts from November 2012

Nov 30

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

leaderboard

leaderboard allows you to build leaderboards using Redis. In the 3.0.0.rc2 release, we are no longer casting scores to a floating point automatically, which was not appropriate for members not ranked in the leaderboard. Work was also started on the 3.0.0.rc3 release which will add the rankmemberif and rankmemberif_in methods to allow you to rank a member in the leaderboard based on execution of a lambda.

Contributor(s): David Czarnecki (GitHub, Twitter)

leaderboard-python

leaderboard-python is our leaderboard project, originally written in Ruby, ported to Python. The 2.1 release of leaderboard-python fixes a bug when requesting a list with an unknown member from the rankedinlist method as well as no longer casting scores to a floating point automatically, which was not appropriate for members not ranked in the leaderboard.

Contributor(s): David Czarnecki (GitHub, Twitter)

stache

stache is our Rails 3.x compatible Mustache/Handlebars Template Handler, with support for partials and a couple extra niceties to make sharing the raw templates with client-side javascript a little easier. We’ve released version 1.0. This includes:

  • Overhauled Mustache template engine. If you wish to have Mustache drive your entire template stack, you can invert control to it.

  • Fixed a bunch of problems with Handlebars access to the view namespace for helpers, etc.

  • New configuration option: you can now specify a wrapper namespace that Stache will look for your view classes in.

Backwards compatibility should be fine; any regressions are bugs and should be reported. Huge thanks to all contributors!

Contributor(s): Matthew Wilson (GitHub, Twitter) and Kate Gengler (GitHub)

Nov 23

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

Happy Thanksgiving to those of you celebrating!

Nov 16

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

CHAP Links Library

CHAP links library is a web based visualization library for displaying graphs, networks, and timelines. A pull request was submitted and integrated to fix a bug where timeline events shift position when updated.

Contributor(s): Jack Letourneau (GitHub, Twitter)

leaderboard-python

leaderboard-python is our leaderboard project, originally written in Ruby, ported to Python. The 2.0.0 release of leaderboard-python brings the Python library up to feature party with the Ruby library. Internal code documentation and code samples in the README were also added.

Contributor(s): David Czarnecki (GitHub, Twitter)

spinel

Spinel is a new free and open source game engine under development that utilizes mruby as its integral scripting layer. Under the hood is C/C++, however wherever possible the engine uses Ruby. It is in EARLY DEVELOPMENT. What you see is the result of initial research taken place during an Agora Games Hackathon in 24 hours.

Contributor(s): Andrew Nordman (GitHub, Twitter)

sure

sure is a utility belt for automated testing in python (inspired by should.js). A pull request was submitted and integrated to add {X}.should.be.greaterthanorequalto(Y) and {Y}.should.be.lowerthanorequalto(X) methods.

Contributor(s): David Czarnecki (GitHub, Twitter)

timecop

timecop is a gem providing “time travel” and “time freezing” capabilities, making it dead simple to test time-dependent code. A pull request was submitted and integrated to update the homepage and rubyforge_project values in the gemspec. Just tidying up a bit.

Contributor(s): David Czarnecki (GitHub, Twitter)

Nov 15

Hack-a-thon 10! The coolest of the cool.

By Steven Flenory

Here at  Agora Games, we try to do semi-regular Hack-a-thons in the office. Over the last year, we’ve started trying to do them about once every 2-3 months. This seems to keep them fresh and fun, but still something that doesn’t interfere with day to day work needs.

Hackathons have been around since the late 90s, so they’ve been around for awhile  in the tech field. The idea of a hackathon, as it pertains to Agora, is to give our employees 24 hours to work on anything they want as long as it relates to our business in some way.

Our most recent hackathon took place this past week Thursday 8th - Friday 9th. It started at 4pm on Thursday with a nice kick-off meeting where everyone announced their projects or joined a team as a free agent (if they didn’t have their own project).  Everything ended on Friday at 4pm with the demo session. There were a lot of cool projects, but I wanted to point out some of the way cool ones that were showcased.

Gamebattles Match History -  Kirk Becker

A portion of Agora developers make up the tech arm of Major League Gaming, and a couple of people worked on MLG specific projects. One of these projects focused on adding in a page that displays a user’s individual Match History.

This is something that the users of MLG have been asking for, and since we like to please, Kirk is just about ready to release this to the world. In 24 hours, Kirk was able to get a working version of this up on our staging environment. Since this is such a cool product, work will be completed on this in the next couple days, and the users will love it.

 

Podium - David Czarnecki

David wanted to take this hackathon to explore the use of ProMotion and Formation iOS libraries for application development. Working with these two libraries, He wanted to move to a higher level from hand-writing the interactions in iOS development.

The work done by David is available for review in the following links below. Please note that the iOS coponent requires RubyMotion

Podium API -  https://github.com/czarneckid/podium-api Podium iOS -  https://github.com/czarneckid/podium-ios

https://github.com/clayallsopp/formotion https://github.com/clearsightstudio/ProMotion

 

Seraph - Brennan Frydl

Brennan made a mini web framework in the spirit of Rails, but running on em-synchrony. This uses tilt for templates, rack-mounts parser for routing, and doesn’t make any assumptions about the data/ORM layer! Much like node.js, it handles situations where requests need significant amounts of time. Rather than using CPU, it’ll make calls to external web services.

Basic configuration was complete within the 24 hour timeframe, and a nice demo was given which showed the performance improvements when compared to Rails. After looking at the product for another day, it appears as though this is going to be re-written and possibly used in the future here at Agora! Nice!

Check it out here

Notification Bar - Jack Letourneau

Jack created a basic UI for defining time-based notifications using a zoomable/scrollable timeline widget and a WYSIWYG content editor. There was also the creation of a jQuery based widget for popping up notifications onto the top edge of the browser window.

This is something that we’ve been thinking about doing for our Hydra mobile product, so it was awesome that this was something that got worked on during a hackathon. Development for this item has also continued since the hackathon, which is a beautiful thing.

In all, this was a really successful hackathon for Agora Games. A couple of the projects that were worked on by our engineers are actually going to be utilized in future products across both Major League Gaming and Agora Games. I call that a success!

Nov 9

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

kairos

kairos provides time-series storage using a Redis backend. The 0.1.0 release integrates the beta-refactor branch. All types of timeseries are created with the Timeseries constructor. The arguments to the constructor have been changed to simplify and clarify their usage. In particular, a single timeseries implements only a single type (e.g. Histogram), read and write functions are shared by all intervals in a timeseries, and the count_only support is now the timeseries type count. Added exceptions. Only exception currently implemented is UnknownInterval.

Contributor(s): Aaron Westendorf (GitHub, Twitter)

leaderboard

leaderboard allows you to build leaderboards using Redis. This week, we released 3.0.0.rc1, which integrates a number of proposals. This release removes :usezeroindexforrankoption as valid option for requesting data from the leaderboard, optional member data is stored in a single hash, it adds :sortby as valid option for requesting data from the leaderboard and removes :withscores and :withranks as valid options for requesting data from the leaderboard.

Contributor(s): David Czarnecki (GitHub, Twitter)

stache

stache is our Rails 3.x compatible Mustache/Handlebars Template Handler, with support for partials and a couple extra niceties to make sharing the raw templates with client-side javascript a little easier. The 1.0.0.rc candidate integrates a pull request for enhanced mustache functionality with support for class based layouts, loading .rb files, and rails helpers.

Contributor(s): Matthew Wilson (GitHub, Twitter) and zombor (GitHub)

 

 

Nov 8

Hydra Services Series: Profiles

By Mike Jodon

Have you ever thought to yourself “Self, I wish there was a way for me to read about each service that Agora Games was working on so, I could get a better idea of cool ways to integrate Hydra into MY game”. Well wish no more. Over the next couple of weeks, I’ll be putting up posts which outline each individual service that is offered under our Hydra product.

“But Mike Jodon, I’m a mobile developer, what can I have to read?” Fear not. All of the services that I cover in this series will be, or currently are, being developed for release in our mobile SDKs! So iOS, Android, Unity mobile, you will all eventually have these great tools too! Check out hydra.agoragames.com if you want more information about Hydra mobile, or to sign up for the beta program!

Let’s get started!

Profile Service:

The profile service is the most key feature that a game can have for its users. Users love to see their stats for a game that they are playing. They love seeing how they match up against other players, and they love being able to have other players in that game see how good they are doing. A lot of what makes gaming fun (whether it’s casual or hardcore), is the element of competition. Whether you’re playing Mortal Kombat, Call of Duty, or Farmville, you want your stats to be better than everyone else playing that game.

So what is a profile? How have other clients used the service before, and what else can you do with the service? All of these are answered in this post.

The profile service stores lifetime stats for each user who is online while playing your game. This is where all player specific data will be stored. If your game tracks a stat and stores it within the Hydra profile service, then Hydra can empower you to make other awesome features happen (based on that important profile data). The Profile service helps power a lot of other awesome features, which will also be described below.

So what’s usually stored in the Profile for a user? Well that depends what your game is sending, but typically there are some things that we see from almost all titles using Hydra:

  • Basic player identifiers, such as their XBL, PSN, Steam name, GFWL name or whatever platform you’re using. You’ll also find the player name and platform account id if the platform supports that
  • Lifetime profile stats, like kills, time played, XP, level/rank, or literally ANY OTHER stat you have in your game
  • Load out information, which is something that is specified by the game. Some games have special load outs like “commando” or “ace pilot” or if you’re making a racing game, it could save that car load out the player is using.

 

Again, if it’s in your game and it’s being sent to hydra, it’ll be in that specific player’s profile for use by your team. Everything depends on what you game is sending. There’s almost limitless possibilities to what the Profile service can do.

 


 

“Hey Mike, this is all good stuff. What other services can the profile service help power?” Great question! Let’s take a look below.

Data from the profile service can be user to power, or help power, the following services, depending on your game structure and data setups: - Feed Service - Challenge Service - Leaderboards - Statistics Service - Notifications Service - Clan Services - Tournament Service - User Generated Content - Global Feed Service - Inventory Service

Each one of these services will get a write up similar to this one, which will explain exactly what they are and how they’ve been used in the past. Stay tuned for that!

“Can you give some awesome examples of how the profile service was used in previous titles?” Great question! I’m going to show you a bunch of examples now! Again, EVERYTHING I’m about to show you was built using the Hydra Profile service.

 


Saints Row: The Third - Released for XBOX360, PS3 and PC Saints Row’s sandbox style gameplay made it a perfect fit for Hydra integration. Having a game where you could literally play forever and rack up stats, made the profile service a great feature for the community. While playing, you’re always getting money, always racking up kills, and always doing something insane. The Profile service here was used to track both single player and multi-player stats. 

Saints Row really blew out their profiles on the community website. If there was a stat that a user wanted to see, it was more than likely on their profile. Users were even able to compare their stats to anyone else that was linked to the website, which is a feature that most users want today.

Saints Row also made it so you knew where you stacked up against the rest of the community. They let you know the community average, and which percentile you are in for each stat in the Game Performance center.

Mortal Kombat - Released for XBOX360 and PS3 You can’t call yourself a gamer if you haven’t played Mortal Kombat. Everyone remembers the first arcade machines showing up in their local arcades and video rental stores. In 2011, the latest version of this timeless franchise  was released to the masses with much acclaim. With so many fighters in game, and more released on DLC, it was an honor to have this title’s stats being powered by Hydra. 

Mortal Kombat used the profile service to achieve a really granular type of profile for its users. There where stats based on a player’s over-all career in the game, as well as stats to show a user’s “best” at some key stats.

One of the more granular uses of the stats was to show wins by each character that you as a player have used. They then took that and broke it out by 1 on 1, 2 on 2, and co-op matches. I don’t think I’ve seen this done with any other fighting game’s stats, so it was nice to see something so new and detailed.

As you can see, the Profile Service has powered some of the largest titles and franchises in gaming history. If you want to check out some of the other titles we’ve worked with, check it our portfolio here.  If we can help these games be successes, just imagine what we can do for you! If you’re interested in using Hydra, go here and leave us your email and we’ll contact you!

Nov 6

Hack-a-thon 10!

By Steven Flenory

We’ve reached a small milestone with our hack-a-thons here at Agora Games! We are fast approaching our 10th hack-a-thon, so I wanted to take a look back at some of the coolest projects that have come out of our hack-a-thons and share them with the world.

August 31st 2012 - David Czarnecki created an XBLA title in 24 hours! His use of Microsoft’s XNA toolkit and APIs was pretty awesome for such a short development time. He actually deployed the game, and we got to demo it in the hack-a-thon wrap-up meeting that afternoon!

August 31st 2012 - Brad LaFountain worked on word game  that was to be used for internel Hydra tool development! The finished project was fun to play in the wrap-up meeting. This game helped lead to some Hydra Android SDK updates in the match service! Check out this screen shot from the game Screenshot 1 and Screenshot 2 . It’s nice to note that Brad is continuing his work on this game still, and might even do more during this coming hack-a-thon.

June 22nd 2012 - Aaron Westendorf worked on a Python library for storing time series data in redis. He worked on simplifying the API so it’s easier to integrate, which, as a producer, sounds pretty awesome.

February 25th 2011 - Team Demo: As Hydra grew as a project, we wanted to see just how easy it was for someone to integrate it into their community website. We found a couple in house engineers who were all front end folks, and whom have never integrated with Hydra before, and told them “You have 24 hrs to do it, let’s see what you can do”. ** Mike Jodon** and ** Steven Flenory** provided some PSDs that we made in about 3 days, and the web engineers were given developer level access to hydra, that’s it, then we told them to get going. In 24 hours, these 2 engineers managed to get up a page with functioning registration, leaderboards, profiles, and a community game powered by our statistics service.

So, what kind of project would you work on if you had 24hrs to work on anything you wanted? What kind of technology would you use?

Check out the other open source projects that Agora Games has worked on, and maybe use them as inspiration :)  http://github.com/agoragames

Let us know what you would work on in the comments!

 

Nov 6

Saints Row: The Third launches GOTY Edition - Where Agora fits in

By Mike Jodon

Agora Games is proud to have had our Hydra product be a part of Saint Row: The Third. With the launch of the Game of The Year edition today in North America (the rest of the world gets it on Nov. 16th), I wanted to run down some of the real cool things that Hydra was used for to help make this title a huge success! Keep in mind that there are a lot more services being used by SR3, but I thought these were a few of the coolest!

Profiles

Utilizing our profile service, the web team was able to put together an awesome user experience for the fans.  We made it possible for a user to create an account in game, then go right to the community website and login with those credentials.  On the SR3 community website users were able to check out their stats and see how they stacked up against the rest of the world. Profiles are used to track a player’s lifetime stats and many other essential player data points (game progress, achievements unlocked, etc). So anytime you’re signed in online, and play SR3, your profile is being tracked by Agora Games!

Check out these screen shots of the SR3 user profile page! Profile Pic 1 Profile Pic 2

As you can see, there is a ton of data being tracked on a per player basis. Everything from total kills, money earned, missions complete and hundreds other. Almost every stat has a “Community Average” where it shows how you stack up against the community as a whole. In Profile Pic 2, you can even see that you can compare your stats to anyone in the community!

Leaderboards

Leaderboards are one of the most utilized Hydra services. While first party integration does have SOME leaderboards, they are limited to 1st party restrictions. Agora gives you the chance to really blow out your game’s leaderboards. Any stat you have in game, we can make it into a leaderboard. Want to combine stats to make multi-value leaderboards? We’ll do that too. We can even make a leaderboard that shows how many kills players got on a Tuesday with a handgun while in a car, and then tell you which was their favorite car while doing it! If it’s in your game data, we’ll provide the magic.

Here is an example of what Saints Row did with their leaderboards. As you can see, this leaderboard is tracking how much cash a user earned, per hour of game play. So we’re combining multiple stats to get 1 stat for a totally unique leaderboard. That’s some mighty fine calculations there!

User Generated Content

One of the big things that we did with the SR3 title was User Generated Content (or UGC). If you’ve played the game, and millions of you have (we track that too!), you know that you get to create and customize your own characters to play with in game. But what made this feature truly awesome is, you could create a character in-game. That character would then get uploaded to the website, where other users could download it to their console and play with it in their game!

We even helped the Volition team power their Initiation Station pre-launch demo, which allowed users to create in-game characters prior to the actual game launch. Users could then download those characters into the full-title when they picked it up on launch day.

Global Feed Service

One of the other really cool features we did was called the Global Feed Service. We were able to send the website near-realtime data which would populate a map of the the SR3 world (Steelport) with a live feed of what was happening in game. As something interesting happened in game, it popped up on the map on the website as an event. Hit someone in the privates? Put it on the big board!

This was taken a step further when screenshots were added to the map. In the middle of an awesome battle with the cops, or midair in a jump over an airplane? Take a screenshot. The coordinates of where you are in game, as well as the image, are sent right to your map on the website!

Impressed by what you see? Then do 2 things: 1. Go pick up SR3’s GOTY edition. You get all the DLC and everything ever released for it, so it’s a steal. And 2. hit us up at hydra.agoragames.com if you interested in getting any of these awesome features in your game!

Nov 2

Game Face

By David Czarnecki

“Game Face” will be our weekly round-up of our internal and external open source work here at Agora Games. Internal open source refers to our public projects that you can find over at our Agora Games GitHub account. External open source work refers to projects that we contribute to in off-hours and may or may not have anything to do with video games because we’re swell folks like that. Pretty simple right? Here goes…

gevent

gevent is a coroutine-based Python networking library. In the 1.0rc1 release this week, a patch originally contributed by one of our engineers, Aaron Westendorf, was integrated into the pywysgi component.

Contributor(s): Aaron Westendorf (GitHub, Twitter)

homebrew

homebrew is the missing package manager for OS X. This week, a small patch was contributed to bump the Redis version to 2.6.2.

Contributor(s): David Czarnecki (GitHub, Twitter)

snake_skin

SnakeSkin is a Python package skeleton tool designed to bootstrap new Python libraries. If you come from the Ruby world, this is built after the bundle gem command in Bundler.

Contributor(s): Andrew Nordman (GitHub, Twitter)