Making games is easy. Belonging is hard. #1ReasonToBe

The past few weeks I have been honored to be producer and ‘professional extrovert’ to my good friend, Deirdra “Squinky” Kiai’s IGF nominated work “Dominique Pamplemousse“.

There’s a lot I have to process in the experience which I will share later. But now I need to point the microphone to Squinky on a very important speech. The following link is the transcript to their talk at the #1ReasonToBe panel. Sitting in the audience, I cried as my dear friend had the courage to publicly share such a raw experience. I am extremely proud of them and honored to work alongside them.

Making games is easy. Belonging is hard. #1ReasonToBe

Steam WebAPI Proposal

Making an API: The Steam WebAPI Proposal

Steam WebAPI Proposal by Seg

Developing my updated portfolio, I realized I had a lot of API development experience that was internal and can’t be disclosed in the public. While I’m accomplished in interactive narratives, I needed to supplement my portfolio with my technical design aspect background.

I decided to make a proposal to extend the Steam WebAPI with information missing from the current offerings. I’ve worked with WebAPI and Steamworks with Telltale Games; Particularly the global statistical displays for Jurassic Park and Puzzle Agent 2. Recently I started contributing to Steam Condenser and discovered the Groups info was still in an XML format announced as deprecated by Valve. Yet there was no WebAPI method to fill the gap. I decided to dust off my API design skills and get to work!

I’ll go though some of the more detailed background of certain decisions, but do take a look at the docs!

Rules to Propose By

Setting some guidelines for myself helps my focus. The proposal is building upon an existing API in production, so the additions needed to make sense in the existing environment. At large, these guidelines were:

  • Use same variable names for exactly similar types.
  • Use existing Interfaces & Methods when logical.
  • Outputs should be similar to existing WebAPI returns in JSON, XML, & VDF.
  • Don’t be afraid to create new interfaces, methods, and variable types when justifiable.

ISteamHub

Creating a way to obtain information from the communities around Steam. Until recently, these were called Groups in the Steam Community system. As this proposal is looking forward to the future of the platform, I decided using the new moniker of “Hubs” was more appropriate.

Official Game Hubs vs. Community Hubs

Steam Community Hubs fall into two board categories. Hubs created officially for specific products, and all other hubs anyone can create. I wanted to treat each type equally while allowing the unique attributes to be searched for and exposed.

Searching for a Hub

When searching for a hub, there are a few use cases I planned for:

  • ISteamHub::ResolveVanityURL
    • Specific Group request via .
  • ISteamHub::ResolveAppID
    • Any group related to a specific AppID.
    • The official game group of a specific AppID.

The method ISteamHub::ResolveVanityURL is a direct carbon copy of the existing method, ISteamUser::ResolveVanityURL.

For searching based on AppID, I found ResolveVanityURL too confusing to roll in. I could use the same method but a different input parameter for an AppID and official flag, but that’s overcrowding the function’s purpose. The method ISteamUser::ResolveAppID allows searching based on AppID. An optional official flag filters if the request wants to include unofficial hubs.

Hub Information

ISteamHub::GetSummaries is the workhorse of ISteamHub. The method contains all other information I didn’t push out to other methods. Most information is straight forward, but some decisions are made for ease of use for WebAPI users.

The inputs will take either a full Hub ID number — known as guid — or an AppID number. Adding the AppID number allows for instant pull of the official hub without adding the extra ::ResolveAppID call.

Regardless of input, the output is the same information as applicable. Some fields like `avatar` include entries that are for both Game hubs and community. Since the expectation of image sizes are different, the same field didn’t make sense. It’s a different image size, thus a different expectation of behavior. A “NULL” is much easier to work with than an image sized incorrectly than expected.

Hub Announcements

ISteamHub::GetAnnouncements is patterned directly after ISteamNews::GetNewsForApp as both offer similar returns of data. The unique aspect with Announcements is the privacy settings for groups. I made an assumption that one can make a WebAPI Key show or hide announcements based on the settings made.

Hub Events

I feel the event system needs a bit of tweaking in general and used the proposal to outline issues around event types. The existing ones feel irrelevant or even condescending.

As part of the spec, I included a rewrite of the type’s description text and added a new “OnlineEvent” title. “OnlineEvent” allows for events that refer to a URL for video streaming or other type of online event. For example, The International event for DOTA2 can be included as an event with a direct link to the online stream. This type also opens the ‘eventurl’ field for the event creator to include a URL.

Hub Member Status ISteamHub::GetStatus

The old Community XML stats included the number of members who were online, playing a game, and total membership. The refresh rate for this information is a lot more in flux than ISteamHub::GetSummaries information, so a new method made sense.

I also included playeroftheweek. While not as frequently changed as the other bits of info, Player of the Week is more frequently updated than summary info.

ISteamApps

The next phase was developing out information from the Steam store. There isn’t a way for applications to procedurally work with applications available on the platform. I would love to see various widgets and other fun things with this information!

Same Interface, New Methods

The ISteamApps interface already exists, so adding a few new methods to it seemed appropriate. I also didn’t have a previous method to base my designs on, so I went and made something new. I also threw every bit of information possible with a Steam App having filled out most of this information before for many Telltale Games titles.

Separating Media

I pulled media related to a call out from the omnibus that is ISteamApps::GetAppData, besides image URLs. Calling for screenshots and trailers of a project is a lot more request heavy, so pulling it out to a different method made sense.

Movies were a bit of a mystery as far as what data is available to share, so the given information is a bit basic but would function.

Pricing not included.

I’m not knowledgeable enough of the Steam platform to make a decent specification for pricing. While I could have made something, I like making a specification that closely pairs the existing implementation of pricing. I don’t have visibility on how Steam runs pricing so it’s a method I had to skip… FOR NOW.

Seg's Resume Website

New Resume & Portfolio

I created a new website featuring myself!

Seg's Resume Website

http://theseg.github.io/

I needed a home to showcase myself professionally, so I started working on this site. While this blog fits to my occasional musing of writing, this is a more professional site highlighting my career of the past few years.

It gave me a chance to play around with Twitter Bootstrap and Font Awesome, which are now my new BFFs. Not only do they make development easier, it also scales very well for smaller screen devices like mobile phones. It’s also hosted on GitHub Pages. I wanted to stick to basic HTML this time around since it’s been such a long time. I also used LESS for CSS. While I’ve used SASS before for Umloud.org, Bootstrap uses LESS which made the workflow smoother. Finally, I used CodeKit to compile LESS and minify JavaScripts. Such a wonderful tool that I even paid money for it!

This isn’t the only website I released over the weekend, but it’s certainly the most important! A special thanks goes out to the number of people who’ve gave a lot of feedback during my process. Thank you all so much!

Steam WebAPI Proposal

Steam WebAPI Proposal

A few weeks ago I stumbled upon the Steam Condenser project. It’s library to make sense of the Steam Community, Source, GoldSrc and Steam master servers information for PHP, Java, and Ruby. They’re still using the deprecated XML data which Valve replaced with the Steam WebAPI. I’m starting to work on converting the PHP library to WebAPI, when I discovered the community data was stuck in XML and no replacement.
Steam WebAPI Proposal

So I made a public proposal to the Steam WebAPI.

I wanted a public demonstration of my API development work. I’ve done a lot of this stuff before, but it’s all private and can’t be shared. While this is just a proposal and lacks the consulting with Valve employees, it does demonstrate my skill under the limited circumstances. Course, I wouldn’t mind working with Valve on this. Or working at Valve on this. :D

I also found there’s no good way to get game information — including pricing and other data. There’s gameplay stats and the news feed, but there’s no way of getting the kind of data you’d get at a store page. That’s my next step!

LucasArts

LucasArts Closes

Disney announced the closure of LucasArts as a game development studio and publisher. It will now be operating as a licensing house of Lucas properties for video games.

LucasArts

First a quotable quote from me in case anyone wants the soundbite:

LucasArts in the 80′s and 90′s helped shape me into the interactive media artist I am today. My time at Telltale Games was as close to working in that environment, and I hope shaped positively the careers of future men and women of interactive media. – John “Seg” Seggerson

I am the product of the adventure gaming genre of the 90′s and squarely in the SCUMM engine camp. Besides Myst, Sam & Max and Monkey Island titles are the most influential titles in my life. They shaped how I created my career and thus my life itself. The news of the closure wasn’t unexpected, so I have already made peace with the fate that occurred. But this is a time to reflect on the importance LucasArts has made in my life.

Continue reading

The Rooms

Global Game Jam 2013: The Rooms

Over the weekend I participated in the Global Game Jam 2012 in San Francisco. The results was “The Rooms”, a text adventure of sorts:

The Rooms

It’s all done in Javascript and HTML. Did it all in about 10 hours, though there were a few iterations in the process. Could spend a bit more time for a better ending, but whatevers.

You can get the whole thing on GitHub if you’d like, showing how I code when I have 10 hours of working time along with writing time. There’s also the Global Game Jam page for the project as well. Later this week I’ll dive a bit more into the development.

Space Between Studios

Non-Fiction Games Manifesto

With the advent of starting my own game studio and using the term “non-fiction games,” I figure I should explain my reasoning behind the term.

My Background

Space Between StudiosMy work as an artist is narrative based interactive fiction. I grew up on SCUMM era games like Sam & Max and of Live-Action Video (LAV) titles like Tex Murphy. I explored the ages of Myst and the saved the time-space continuum in Buried in Time. Art to me is exploring the space between the audience member and the work of art itself. Good art allows the audience to fill in that space by giving enough information to make the experience owned by the audience. I’m constantly perfecting my skills in this craft to explore this space.

The Current Serious Space

While and establishing myself in fiction works, I started to think about the other areas of thought this art form can tackle. I’ve mused about this before with topics like “The Corporation for Public Gaming” for the Serious Games space. Loosely described as games that have a real-world purpose. While there are great works, I find the space lacking. There’s a series of toys created to find the quickest way to illustrate a narrowed concept. They’re not rewarding experiences for the most part and at best a sense of guilt that you *must* play this game rather than wanting to.

Bow Street RunnerA browser based LAV game called “Bow Street Runner” has stuck out with me in what I want from non-fiction works. Done by Littleloud as a commission for a Channel 4 show called “City of Vice,” the game is arguably more rememberable than the show. The player is a Bow Street Runner, the pre-cursor to our modern police system. While the game is historical fiction, it is still taking history and only filling in gaps to make it approachable in our history. Different from the attempts that Assassin’s Creed takes where a completely alternative universe is created with our existing understanding of history.

Non-Fiction Gaming

For the better part of my career, I’ve worked on making games that fit within the universe of an existing IP. While some were more restrictive than others, the titles I help to realize had a certain degree of rules mandated by the franchise. The question I ask: How is this different from a non-fiction topics? How difficult is it to follow the rules of the universe of a fictional franchise to the universe we exist in?

Non-Fiction Gaming is my approach to close this gap. Non-fiction gaming is taking the same approach of fictional game development to non-fiction topics. Instead of deep-diving into a fictional world, I choose to dive into our own world. Gaming needs it’s Maus and Persepolis. It needs it’s NPR: Planet Money and This American Life. It needs it’s Cosmos: A Personal Journey. I choose to take the same love and care I approach an existing fictional universe to the world of science, history, art, and anything else I care to talk about though my art.

In the end, what I care about is the space between the work of art I create and the player themselves. That part where both sides come together and only the player can create. A space that isn’t restricted to works of fiction. This is why I started my studio.

Edits: Added headers and corrected grammar. (1/15/2013)

Ümloud! 2012: Done

Another Ümloud! is in the bag! While there’s still paperwork and other bits of things to do, the show is over and we have lots of money to give to the hospitals. Have to wait for the numbers to settle before giving a final count, but needless to say, it’s a much larger number than the year prior. :-D

This year we had a new host for the event: Tim Schafer. Growing up with the SCUMM era of games, never would I thought I’d be introducing him onto the stage of a show I’m putting on. Certainly a highlight of my life.

This year I’m getting a lot fewer complaints about how the show went. Sure, there are still improvements that need to be made, but we’re starting to actually know how to do this show now. Moving forward, I hope we can expand the team even more and thus become a better production.

I’m still processing all of the things that went on with the show, hence this rambling of a blog post. One thing is clear for me. After all the bad things that happened to me this year, the show shined a very bright light into a darkness. There are many people to thank for that, which will be the subject of another blog post.

My next steps: Employment via employer or myself!