Sunday, December 5, 2010

How to Share an Email Address in Gmail

My wife and I each have our own email addresses. Common, though she is irked by a few friends who don't. They can only be emailed by sending to the joint "family" email, often actually just the husband's name. Trust issues? Anyway...

Having a joint account is handy now and then. I want one. They're good for things like that real estate agent who just can't figure out "reply all", or that web site that only allows one email address to be entered you both want to track.

Bad news, I didn't find a perfect answer. Good news, I found one good enough... only you and your significant other can mess it up, and only slightly:

Set up a new gmail account, have it forward to each of you. Set up your gmail account to be able to send as the joint account when you choose.

Walk through:
  • Create a new gmail account by going to gmail when you're not logged in. (or use an incognito window in chrome)
    • In Settings/Forwarding, add forwarding addresses for your existing accounts, and
    • In Settings/Filters, add a filter to match everything. This is a tad tricky, you can't just use From: *. So, create a filter that Doesn't have: some_long_random_string_sldkfjslkdjfsdfkjsdf and then select one account to forward to. Repeat, creating a new filter, for the second account.
  • Configure your personal account (, repeat for to be able to send and reply from the joint account.
    • in Settings/Accounts in the "Send mail as:" section, add
    • On the same page, select "Reply from the same address the message was sent to"
It works: 
    • Easily give the shared email address to anyone and you'll both receive the emails in your personal accounts without needing to ever log into again.
    • Replying to an email sent to the joint account will "just work" and appear to come from the joint account. (But, don't forget to CC your significant other if you want them to see your reply)
    • Writing a new email as if it came from the joint account is easy too:
      • Compose a new message, above the To: is the From: address, and you can change it to the joint account.
      • (But, don't forget to CC your significant other if you want them to see your reply)
    What's tedious is that you must remember to CC your other every time. Now, we're all high and mighty about external people who can't remember to reply-all, so we should be able to remember to CC everyone each time, right? Still... tedious. If you forget, at least the reply from the external people will go back to both of you.

    Here are the other things I tried:
    • Create an outgoing filter to automatically forward to your significant other's account?
      • Nope, you can filter outgoing email (adding labels, say), but you can't forward them.
    • Create an outgoing filter to label and remind you that you forgot to CC?
      • Nope, you can add a label, but not send it to the inbox also or mark it unread, so no way to get attention.
    • Create a group on
      • Nope, you can send and reply as the shared email, but you must manually CC your significant other's account each time. The group account doesn't appear in a reply all because you're sending as that account. If you're not sending as that account it works, yay, but then you're sending as just you, and replies will not go to the joint account.
    Have a better solution? Lemme have it in the comments!

    Thursday, November 11, 2010

    Gamebryo / Emergent IP and Assets at Auction

    Gamebryo is dead*! Long live Gamebryo!
    * - Well gamebryo may not be dead. The development team is disbanded, and it's highly uncertain if another company will try to reanimate the corpus of code.
    Emergent's assets and IP are being auctioned, closing Dec 10th. The announcement contains some interesting content, which is nice to be able to share publicly.

    The financial profile of the company since 2005 is contained, here it is in handy chart format: 
    Note that revenue was significantly less when I joined in 2004. We saw big growth in 2005, and that continued solidly through 2007. The peak of 12.2 Million in 2009 notes a significant success for a product that started with a small core Gamebryo team of ~15 engineers that I joined in 2004. The excellent growth financially reflects the engineering investment of the previous year or two, plus the more recent sales efforts. 2004 to 2009 were very good years.

    There are also updated numbers for the number of titles that used gamebryo:
    ...selected by studios around the globe to bring over 350 titles across more than 15 game genres to market. At any given time, Emergent is supporting over 100 projects in development and has sold over 490 licenses in the past five years.
    And the top titles list has some fresh new items, including Epic Mickey:
    Titles using Emergent’s technology  include Game of the Year award-winning titles like Fallout 3, The Elder Scrolls IV: Oblivion,as well as critically acclaimed titles like Warhammer Online: Age of Reckoning, Civilization Revolution, QQ Speed, Divinity II – Ego Draconis, Dance on Broadway, LEGO Universe, Epic Mickey, Bully and more.
    The amount of investment into Emergent was also listed, "To date, Emergent has secured over $40 million in equity financing and raised over $4 million in venture debt financing". (I don't believe that includes the history of NDL, which was founded in 82 and started development of Gamebryo in the late 90s.)

    The diversity of Gamebryo is also mentioned. 14% of revenue came from non video game sources, and no one client represented over 10%. Some of the notable customers were:

    • Video games: Electronic Arts, Activision, THQ, Ubisoft, Sony, Bethesda, 2K, Atari, Disney
    • Online games: Tencent, Shanda, TheNine, NineYou, NC Soft, Kingsisle, EA Mythic, Trion
    • Military simulation: USC ITC, Total Immersion, IP Keys, Lockheed
    • Education: USC, University of Pennsylvania, UNC, Nanyang Polytechnic
    • Other: Rio Tinto, Tacx, WMS, GTech
    Among the assets, a data base of over 6,200 profiled developers and 14,775 contacts is listed.

    It also incorrectly lists that "The Company holds on patent for Floodgate." I was one of the inventors that filed the provisional patent, which was left to expire and not filed for full patent status.

    And so it is, the labor of many passionate engineers, sales staff, and support staff is up on the auction block. I have mixed feelings. One one hand, it was a great run, Gamebryo has had a significant impact on the industry, and that's success locked into history. It's also nice to have a change of pace, and the downturn for Gamebryo has seen us move on to interesting new challenges. But it's also sad, because I feel that Gamebryo could have had a different future, one that continued the success we saw from 2004-2009. It's difficult to speculate on how things could have been done differently, and we'll never have an answer about how else it could have played out. We were aggressive and shot for big growth and new products, not just settling for "getting by" or sitting on our mild success. Investors were interested in big returns. And, if world events and industry winds had blown in another direction, we may have been greatly successful. 

    One thing is clear to me, however. When the investors/board decided to cut half of the engineering staff in 2009 they either 1) made an explicit decision to kill the future growth possibilities and attempt to liquidate the investment they had made, or 2) had no comprehension of what a software product such as a game engine is and how much value code without engineers to support it is.

    Saturday, November 6, 2010

    IGDA Leadership Forum: Tools Round Table

    I hosted the Tools Round Table at the IGDA Leadership Forum this year. The group focused primarily on project management and communication. Attendees were producers, tech leads, a software consultant, an agile coach, a Hansoft employee, two localization professionals, and students.

    Below I've included my notes from the discussions. Contents are purely in order that they were mentioned.

    But before the notes, some quick thoughts on the conference. It was pretty small just a hundred or two people. I missed a lot of people who cut out half way through the second day (I showed up only for the end). There was a dinner with John Romaro interviewing Will Wright, with a goal of capturing designer's thoughts for posterity (romeroarchives). This is a great idea, though the level of detail covered in the interview only scratched the surface. It was interesting, but was primarily just getting the rough timeline of Wright's early career.

    On with the Tools Round table notes:

    Project Management
    • iteamwork
      • online - project management - slightly dated feel - free
    • jira with greenhopper front end
      • good for short term sprint plans, limiting for long term projects
      • some web-app style hiccups
    • (in follow up for long term:)
      • MS project
      • pen-paper
      • spreadsheets
        • hard for a wider team to use, OK for the single producer working with it
    • pivotal tracker
      • good for scrum
      • nice 'index card' like view
      • not a database
    • devtrack
      • often pushed by publishers
      • database backend
      • not great out of box, lots of work needed to setup for a team's process 
    • base camp
      • good for small teams
      • day to day level workers annoyed at it, though higher levels liked it
      • didn't scale up as well
    • scrum works
      • smaller teams, medium teams, good for burndown charts
      • free and paid versions
    • smart q
    • 5 pm web
    Transitioning between long term planning and fine grained issue tracking remains the largest problem.

    • yammer
      • like an internal twitter
      • threaded views
      • third party tools good
    • google wave
      • threading issues
      • recommended using RSS updates of a wave to track it
    • google docs
    • gotomeeting
      • great screen sharing, not so great web cam
    • mikogo
      • similar to gotomeeting - free
    • webex
      • too heavyweight
    • skype
      • great webcam sharing, so-so screen sharing
    • meetingplace
    • active desktop
      • HTML on desktop with team specific information, e.g. bug counts
    • design docs placed in source control shadowed to a web server for ease of access
    • wiki

    Monday, October 18, 2010

    LootGrab: HTML5 Game from Triangle Game Jam 2010

    Spoilers in the Video! Consider Playing LootGrab first. (As of Sept 2010, Chrome was definitely the best option since Firefox and IE struggled, you can give your smart phone a try too).

    2010 Triangle Game Jam game: LootGrab Video on youtube, or LootGrab Video on vimeo.

    This year brought changes from the Game Jams of past:
    First, I moved from the Research Triangle and now work at Google, and Adrienne came too (we've worked together on 5 of the game jam projects now). So, we got some fresh blood at Google to join us and ran a game jam in parallel with the 2010 Triangle Game Jam.

    Second, instead of using C# we used HTML5 this year:

    Third, you can Play LootGrab with a click of a button - ridiculously easy compared to all previous Jams where I didn't even bother giving you the gazillion prerequisites required.

    Theme and Game Ideas
    The theme this year was, "Placing Blocks". Here is my game concept, which didn't make the cut::

    (someone pointed out it would be great from the side too, with ballistic arcs.)

    We voted up ideas, and Adrienne's one out: LootGrab is about placing down blocks in a dungeon to influence the hero, instead of controlling the hero directly. The greedy guy runs for the closest loot, food, or exit ... without care for monsters or traps.

    We figured we'd need a map editor, the runtime, and perhaps a level sharing system online via AppEngine. I was particularly attached to an idea of allowing user contributed game object definitions. Allow a user to upload an image and a snippit of javascript that defines it's behavior. How cool would a mod-able game jam game be? :) That was stretching a bit far though.


    HTML5 is a grab bag of new functionality in browsers. Some of it is pretty cool (peer to peer networking, local storage, video and audio tags). We focused on two simple components, canvas 2d to draw and audio for sound effects.

    In my day job I'm working to accelerate canvas with GPUs, as are others at Microsoft, Mozilla, and Apple. It's fairly fast even in software, and LootGrab runs fine without GPU acceleration. In fact, it runs on phones pretty well, such as my Nexus One Android phone. That's pretty cool, all we did to support mobile was to make sure we handled low frame rates without changing gameplay. To do that we used fixed time step gameplay logic (tick based), and just run as many ticks as needed to cover the amount of time elapsed.

    Our use of canvas is basically clearing it, drawing a pile of sprites (via sub-rectangles of larger images), and also a line to show where the player is moving. Actually, we have a few layers of canvas stacked on top of each other. Theoretically we could have saved performance by not redrawing non animating tiles - just compositing them underneath.

    Adrienne took on audio for sound effects, and did run into a bit of trouble. The sound effects were very short, and had to be padded out to longer audio lengths to trigger properly. Also, multiple instances needed to be created in case the sound was played more than once.


    Several of us hadn't done anything substantial in Javascript before. Certainly not an object oriented game entity system that can factory from user created levels. Some complicated flurry of activity by Glen, Ian, Nat, and Gregg made that happen. The result could be cleaner, but worked well. We have JSON data blobs, e.g. for the tile definitions.

    Things I loved:
    Need to add extra data to your level components of game object definitons? Perhaps only to particular items? No problem! Just start typing. At runtime it is trivial to just check if the data is there and use it if so.

    Writing some code and wish you could hang more data off an object? Just set that value! Check to see if it's === "undefined" later and you can pick up  your special data easily. Object definitions don't have to worry about implementation details of other systems, and those other systems don't need extra book keeping kept in parallel. e.g.:

      try {
        ctx.drawImage(this.img, ...);
      } catch(e) {
        if(this.error_printed === undefined) {
          tdl.log("problem with image " + this.entDefID);
          this.error_printed = true;

    Development tools: Logging. Resource load timeline. Immediate mode editor: Hit a breakpoint, and just execute some code at the Javascript console.

    Fast iteration time, though C# was great for that too.

    Instant continuous "build"! Glen installed an Auto Reload Chrome extension and put the game up on a projector. Check in some code and see the game running it in 20 seconds. ;) Helps to have a game that can play its self.

    Libraires such as TDL, and JQuery: some helper code for Javascript. It's not so important what you use, but you definitely want to not worry about the minutia.

    Not so great?
    I didn't use an IDE that had code analysis, and that's a very convenient feature of MSVC. Though, Ian had good things to say about WebStorm.

    Also "classes" in javascript are syntactically very sad, and inheritance to my novice eyes looks messy. And variable "scoping" is dicey.

    Debugging is functional and GUI, which is better than what most programmers use around my on linux. But it falls short of a modern debugger such as MSVC with C++ or C#.

    Also, deciphering a web page via HTML, script, HTML embedded in script, CSS files, and dynamic changes to styles? ... yikes.

    Things for Next Time

    Would be nice to have some basics already written:
    - Factory that will created entities from JSON data packs
    - Cleaner audio solution
    - Sprite system for canvas

    Smaller teams. We had six on this project, and that's a bit much for a game jam game. Several were first time jammers, and several Javascript newbies, so it did really help to share know-how. But we wasted a lot of time getting started, coming to consensus on implementation choices, and stepping on each other's code.

    The End

    And now I leave you with some screen shots:

    And a thanks to whoever oryx is, who created the sprites we used:

    Monday, October 4, 2010

    Scriptcode: misc batch files and visual studio macros

    Here are the random macros I use in Visual Studio and windows batch files. Nothing monumental, but I find them useful often enough.
    • scheib.vb
      • The general purpose Visual Studio macros I use, particularly useful to me are:
    • addpath.bat
      • Eases adding more directories to your path environment variable.
    • cmd_here.bat
      • Right click any directory or file in windows explorer or a file save/open dialog and get a command prompt at that location.
      • Assists automation to copy certain files from one directory to another, e.g. just the .html files but not the images.
    • remove_empty_directories.bat
      • Cleans up a directory tree to not have empty directories.
    The following are useful to have when writing a batch file:
    • isadirectory.bat
    • isafile.bat
    • isemptydirectory.bat
    Files can be downloaded here: - visual studio macros - batch files

    Wednesday, September 15, 2010

    Leadership by Influence

    Leadership is an interesting skill; here are a few thoughts I've had recently at Google.

    Skills are honed by practice, but leadership is a daunting skill to try before you have your confidence. Some skills you build up little by little, and often you can learn about them before you try them. But leading is one of those skills that you need to learn by doing and then thinking. It can be intimidating to try, like public speaking. But that's the pattern to follow: try leading a little bit at a time, and growing.

    Finding opportunities to improve leadership is also different than many skills. Learning how to program? Start writing some code. Learning how to lead? You need some people to (possibly) follow, and an appropriate time and place. That's a good segue into some of my experiences.

    At Emergent I spent the last few years as a software architect. My role was varied, but essentially was influencing the direction of our product and business. I did that by understanding technical issues, building compelling explanations, and influencing the decisions of others. Those others ranged from software engineers on our product, managers and executives, and external game teams considering tech. The key point is that I had no authority or decision power myself, even over our own engineers.

    My situation was different than some of my peers. A few of us rose into senior positions at the same time. Some of my friends ended up as technical leads over groups of engineers. While they didn't have "personnel management" responsibilities, they did have direct technical management. Teams collaborated on the work that they did, but generally speaking these technical leads defined tasks onto their team members. If they needed to they could specifically direct a given engineer. I contrasted this against my role, with no reports and only the ability to influence engineers.

    Gathering information from groups was novel as well. The technical leads' smaller groups met regularly and shared information. Spanning the engineering department I couldn't gather information directly from all engineers. I relied on meeting notes, speaking with team leads, and most importantly individuals coming to me for relevant topics. Some engineers did this voluntarily , "Vince, I've got an idea to bounce off you." Other's work I wouldn't have heard about unless I stopped by and asked them about it.

    Moving back in time, I recall developing a game during my undergraduate degree. We had some initial meetings with dozens of interested students. A smaller group moved forward to create a game. But, being entirely volunteer work there was no certainty that anything would get done. In the end, only a couple of us made much progress, and we were left with many good intentions of others, but no work done.

    And that brings me back to Google, where the internal engineering structure is decidedly bottom up. Engineers self organize, recognize issues, and address them. Leadership at Google is more similar to my experience as a software architect at Emergent than the tech leads there. Engineers aren't assigned tasks, they generate them or adopt them. The top down influence comes in two parts: influential direction, and team allocations. The technical influence is something anyone at Google can, and is expected, to do. And that's what motivated me to write out these thoughts.

    This is also my first time contributing to open source projects. And I can see they follow similar patterns. There is decentralized control, and often no specific hierarchy of technical authority. Rather, the community relies on those individuals who've proven the kind of influential leadership I've described here.

    So, what's your takeaway, dear reader? How about a few answers to questions I asked myself in the past:

    How does one gather more influence?
    By recognizing when something needs doing, making compelling explanations for why and how, and showing others how it can be done by doing it. By doing so you build respect as someone who will make things better and solve problems.

    How do you get an opportunity to try leading?
    Everything you do is an opportunity, and you have to grow by taking small steps. It is rare that you'll be given the responsibility without first having demonstrated that you can lead. Don't wait for someone to decide that you can try leading. Just offer your contributions and thoughts, lead by doing, and be sensitive to what the group needs.

    And, a final thought. At Emergent, we frequently used the phrase, "Managing engineers is like herding cats." The statement has a changed meaning for me now. If you manage engineers by herding them, you'll be as frustrated as if you were herding cats. But, all the cats will run to tasty food. Perhaps that's why Google invests so much in it's cafes ;)

    Tuesday, August 3, 2010

    QR Code hacks: modifying and altering for artistic fun

    QR Codes are a quick way to get information with a camera. (Think modern evolution of a UPC Bar Code). Smart phones will scan them for you to quickly get information into your phone, such as a URL to browse, a business card, etc.

    I was inspired by the BBC QR Code that intentionally distorts the image to insert the letters "BBC" in the middle. QR Codes have redundant information to offer error correction, and I am amused at the different ways you can abuse this.

    First, this is what a QR Code for "" looks like unmodified:
    "Pure" QR Code:
    Now, the experiments:

    Simple pixelated distortion in the center (similar to BBC code):
    Any image could have just been overlaid, just like plopping a sticker in the middle, but doing it in the pixel grid feels nice.

    The idea I like most is using a collage of images that form the QR Code. Where the collage gets the pattern right, there's no need for error correction. But there's slack for the collage to be off a bit. It's very tedious to do, so I only have this partial version, but I'm certain with patience a fully collaged version could be made:

    The collage might be automated too. Do an image search and then paste in images "fit" to the QR Code target.

    There are several ways to play with color, as the scanners will just care about the luminance.

    Pixel grid colorization:


    High resolution image colorization:

    There are several ways to play with the QR Code as conceptually just "dots".


    Dots merging:

    Dots as images:

    And on we go, a few more ideas: 
    Rounded corners:

    I wasn't able to change the perspective to something as extreme as I thought, this was about as far as I could get it.

    I also didn't have the patience to create several "natural media" QR Codes. But I thought sand art, pebbles, leaves, etc, done with real world materials would be great. Here's a synthetic Go board (the gaps maintain a valid game state, ;):

    Go Board:

    And I should show failures too. I had high hopes for a pen sketch, but it doesn't scan. :( I'm convinced it could work, though I think a more even contrast would need to be used.

    Ink Sketch:

    Except for the last, all of these scanned correctly for me using the ZXing Barcode Scanner 3.3 on my Android phone. Collage clip art included elements from flicker users greekadman, bombardier. 

    [Edit:] A Link from the comments that shows a good 'natural media' example:

    Monday, June 14, 2010

    Games for Infants

    Games for infants. A noble cause. But they're tricky customers. And in the end, so easy to please.

    Once upon a time I thought, "I shall make a game for infants, it shall be easy and quick." So, I thought to myself, what do infants like to do? Whap their grasping tentacles at things. Yes, such as keyboards. And they like it when things do things, but they're not very sophisticated.. so simple reactions should be just fine.

    So, I sat down and made a simple program to change the color on the screen when keys were pressed.


    First, infants seem to like all buttons, especially the windows key, Alt key, etc. All sorts of ways to make an application loose focus. Second, they like to mash buttons. To grind them down. As if pinning the machine and asserting, "I AM YOUR MASTER!"

    So, let's see.. easy things first. Holding buttons down can change the color of the screen too. How about a key press causes a flash in green that fades away quickly, and the intensity of blue ramps up the longer you hold keys. Ok, working well, let's try it out. Ah, it works, but again, infant seems rather determined to exit the app, launch new applications, all sorts of not intended things.

    Most of a Saturday later, I've learned about windows hooks. How thoughtful of Microsoft to give me a way to catch and handle the key presses before Windows interprets them. I'd like to do this from C# and XNA, so that was a bit of searching and tinkering, but Bnoerj.Winshoked seems to work. Yeah, that works fairly well, gimme your kid again, lemme try.


    Yup, infants are dutiful testers, seems to reliably mess things up. How much time do I really want to spend on this? Let's try searching the Internet again... nope, nothing really good out there. Hmm, except...


    Windows log-in screen should do nicely. If anything in windows can stand up to button mashing it'll be the log-in screen. Whap keys, see dots show up, hear beeping noises as the length limit is hit, that should entertain the kiddo. Give that a shot.

    Blue screen.

    Really? Had to have been a fluke. Try again. See, it works, happy kid. Blue screen.


    Well, I've learned something. Why build a game when an infant can be entertained with just the log-in screen. And, how disconcerting is it that sustained mashing of keyboard keys can cause a blue screen?

    Sunday, May 23, 2010

    HTML Canvas Lines Toy

    Karl Hillesland and I toyed around with the Canvas HTML/Javascript API this weekend. We remade an old program I noodled around with in highschool. The heart of it is just drawing lines between curves made with trig functions (the "offset" constants are continuously changing every frame via their own sin waves):

     var x1 = Math.sin(2*Math.PI*(t+offsetInner1)*periods1x+offsetOuter1);
     var y1 = Math.cos(2*Math.PI*(t+offsetInner2)*periods1y+offsetOuter2);
     var x2 = Math.sin(2*Math.PI*(t+offsetInner3)*periods2x+offsetOuter3);
     var y2 = Math.cos(2*Math.PI*(t+offsetInner4)*periods2y+offsetOuter4);
     // line from (x1,y1) to (x2,y2)
    If you're using a browser that supports Canvas, you'll see it above. Internet Explorer doesn't support it as I'm writing this - so use Chrome or Firefox or ... wait for Microsoft to catch up.

    It's not exactly "done", but who knows if we'll clean it up. ;) If you'd like to experiment with it, here's a version with debug mode sliders you can drag around:


    • Changing the periods (last 4 options) results in very different effects.
    • Use Chrome for slider input support - sliders are nice. Firefox just displays input boxes ;(.
    • Resize your browser's width for the desired aspect ratio -- that page auto-letterboxes.
    For sad people with no capable browser, here's a still image:

    Tuesday, March 16, 2010

    GDC 2010: Conference Report

    Game Developers Conference 2010
    Real-world UV Texture Mapping of a Car. Found on the side of a building just outside GDC.

    • Social Games
      • High growth area, many publishers and developers looking to take advantage of social games. Investors looking to... invest. Designers considering how to make their games more social.
        Note: Social had a spectrum of meaning to people, from viral marketing games with little multiplayer, to games played with friends, or random strangers. 
    • Indie Games
      • Indie games have established a significant movement now. They are becoming more influential, with significant number of sessions devoted to them, and references to them from non-indie.
    • Digital Distribution
      • Major impact to publisher/developer relationships; enabling indie movement; changing design and productization strategies. Also requiring different marketing strategies. Also tied to social games and viral games.
    • Design, Psychology, Achievements
      • Achievements discussed often (disliked). Common theme that designers need to understand psychology well to build successful games.
    • Mobile / Android
      • Google distributed phones with 12 month service - Lots of buzz about this.
      • Unity announced Android support.
      • iPhone discussed in many sessions, but Apple wasn't courting developers.
      • Little to no mention of Microsoft.
    • Cloud based Games
      • OnLive, Gaikai, and OToy are products announced to enter cloud serving of games (and apps) via compressed video to clients. They were news in 2009, in 2010 we will see some of these services ship (OnLive has a June 17 date).
    • Uncharted 2 drake's fortune (ps3 game)
      • Several sessions from Naughty Dog, well attended, represented the quality bar developers are after.
    • Gamification
      • Companies are seeking to add “gameplay” to their products to succeed with the increasing adoption of games in culture. E.g. adding game aspects to taxes, health-care, or training.

    Handing out hundreds of phones got Google attention. Developers felt that Android needs better games, that they’re a “killer-app”, and that iPhone’s successf is tightly linked with the app market and games.

    iPhone sessions were well attended. Unity is a middleware engine offering iPhone support and is apparently quite successful by counting licenses sold. Unreal has been ported to iPhone.

    Microsoft win 7 phones will run XNA games and silverlight, popular technologies among “small” game developers.

    Social & Facebook
    Facebook and Zynga received much attention.

    Facebook exposes the social graph to app developers for fun and profit -- to great commercial success for some of those developers. Much of this success is tied to the spamming / viral marketing done by these games. And most seemed to have you play with strangers, not friends. Facebook has changed the permissions for apps, which will reduce the previous spam methods, interesting to see how this affects games.

    Asian markets have years of experience in monetizing virtual goods and building social games. These methods are of high interest now in western games. 2009 Asian market had $7 Billion in virtual goods, compared to ~ $500 Million of social games in western markets just starting to move towards virtual goods or social monitization.

    Notes From the Expo Floor
    • Human Hamster Ball demoed, allowing Virtual Reality with walking in any direction. Single user enters large plastic ball through access hatch. Ball is on wheels, and tracks movement. User wears VR headset. Targeting instalation at entertainment venues, malls, etc.
    • Mono will ship full compatibility with C# 4.0 when Microsoft does
    • Sony’s WiiMote competitor, “Move”. A combination of accelerometers, gyroscopes, and optical tracking makes this “WiiMote with a light bulb on the end” very accurate for location tracking. It’s still very poor for pointing at the screen (worse than WiiMote?), and rather laggy, maybe .1 second of lag or more. The need to be in the EyeToy web-camera view frustum will also limit the use of this device.
    • There was a great eye tracker that worked from 6 feet away, just sit in a chair and it finds you.

    • Indies and Publishers: Fixing a System That Never Worked
      • Ron Carmel (2D Boy) discussed 2 main points: The classic model of publishers doesn't seem relevant with digital distribution, and the remaining need is just funding. Cue introducing theIndie Fund. There weren’t any new details on that. There were some tidbits of World of Goo costing $120,000 and Braid $180,000.
    • Case Studies: AI in Recent Games
      • My takeaway was that the future of AI is in handling specialized cases without requiring explicit coding to set them up. That calls for generative AI instead of just expert systems. With online games pouring in huge amounts of human game play data, there's good opportunity for training AI.
    • The State of Social Gaming: Industry Overview and Update
      • More (mostly for a fee) info at
      • Asia had $7 Billion in virtual goods business in 2009. In the West social games are growing fast, but still only $.5 Billion last year.
      • Zynga is over 700 employees now, and is overtaking Facebook in headcount! (Oh, and $200 Million for them last year)
      • Facebook will be introducing their own currency "Facebook Credits", but with a 30% tax.
    • Bringing UE3 to Apple's iPhone Platform
      • They moved as much of the build to Windows as possible, running commands on the mac over PuTTY.
      • Executables still in “teens” of megabytes.
      • Materials are rendered offline and only a small set of shaders used at runtime. This is due to required compiling of shaders at runtime, and memory constraints making multi-texture materials too costly.
    • Advanced Visual Effects ... [Full day session]
      • Order Independent Transparency (AMD)
        • The framebuffer is simply a list of linked-list targets per pixel, and another buffer is used to store many samples. There is a demo released 2009 that shows this. Multisampling of course is an issue, and it’s clearly an expensive effect and requires guessing how many transparent fragments you’ll need to store.
      • [Indirect lighting with blockers]
        • Linked lists used again, sourcing from a 3D grid of the entire scene to look up blockers of indirect light used with reflective shadow mapping.
    • V-Con 2010: David Perry Keynote
      • Dave convinced me that the critical feature from cloud streaming services such as Gaikai, OnLive, and O-Toy will be frictionless entry. How many clicks does it take to get someone a demo of your game? Gaikai will do it in 1. Just 1 click and you're in the demo.
      • Gaikai is targeting 300 data centers, he claims OnLive 5, and OToy 2
      • WOW takes 30+ clicks to enter into gameplay. ;) Multiple EULAs.
    • Designing for Performance, Scalability & Reliability: StarCraft II's Approach
      • Starcraft scalability and perf discussed how they felt custom built profiling tools were necessary. They did have nice features:
        • Historical frame perf data
        • Single button press to sent data to engineers from QA
        • Butterfly view for CPU time & Memory too
        • Post game results with worst frames sorted out and worst “moments” spanning multiple frames.
    • Data is a Four Letter Word [Brutal Legend]
      • They built directed graphs for data dependencies offline. These were processed into indices that could easily locate the needed assets. They were also used to build disk layout information to reduce seek times.
    • Physics Meets Animation : Character Stunts in Just Cause 2
      • They have highly coupled physics, character movement from animation and gameplay code, and IK. The results looked good, but also very delicate to work with. Some tidbits:
        • Start with gameplay code driven movement of character
        • Use physical simulation data to drive blending of animation tracks (e.g. rotational acceleration of car influences “hang on leaning left” blend weight)
        • Use ragdolls to add physicality to animations
        • Use IK to correct everything that went wrong. ;)
    • GDC Microtalks 2010
      • Many speakers, mostly touching on design elements. A good view on GDCVault if you’d like a bit of inspiration.
      • Random data: TV Ads have gone from 13% to 36% of programming time over the last 60 years.
    • Nuevo Sessions
      • Several indie developers discussing their games
      • Hazard - Artsie First Person (non)shooter. Heavily abstract and metaphor puzzle based
      • Interesting to see on GDCVault if you’re interested in indie games.
    • The Implementation of Rewind in Braid
      • Encoding similar to video:
        • initial state
        • key frames
        • delta frames
    • Animation and Player Control in Uncharted: ...
      • Strong use of blending and layering to achieve desired effects, but primarily to reduce memory.
      • 3000 to 4000 animations for main character in a given level.
        • 20%-40% level data is animation, 15-30MB
      • 10Hz sampled animation data (except where artist overridden). Engine runs at 30FPS.
      • Additive animation layers, partial animation sets, pose based root animations.
        • E.g. one idle animation that is additively blended onto simple standing poses, those poses can easily be changed to have new idle effects.
        • Variation animation 10 times as long as most run cycles adds variation to different runs etc and can be reused to give lots of variation.
      • Mixture of gameplay code driven movement and animation data movement, IK.
    • Metaphysics of Game Design - Will Wright
      • (unannounced presentation by Will Wright)
      • Will packed a dense and sprawling presentation into the hour. It’s not really summizable into a few points.
      • You’re best to seek video on GDCVault - it’s a treat.

      Monday, March 8, 2010

      GDC 2010 - What to attend?

      Time for Game Developers Conference! I'm attending sessions, which I haven't done for years when working the show. If you have any session suggestions, please comment! Here are the GDC sessions that look interesting to me so far.

      I'll probably post notes from GDC to Scattered Pixels, we'll see if I have time for a post conference report here... ;)

      Wednesday, February 17, 2010

      Working on Chrome OS at Google

      Many have been curious what I'll be working on at Google, including myself for a while. Google is interesting in that you are not allocated to a team until just before your first day. You accept the job because you're a good fit for Google in general, not just one team.

      I'm going to work on Chrome OS. There's a lot to do for the initial launch, but long term my goal is to help make it a great platform for rich graphical apps and games too.

      Whoa, you say, I thought you worked on high performance games? Yes, high performance 3D games will be running inside browsers, with security and performance delivered via Native Client.