Summer of Code 2011

This will be the 6th year PySoy has participated in Google's Summer of Code under the  Python Software Foundation. This year we also have a few networking ideas under the  XMPP Software Foundation.

If this is your first time considering working with PySoy as a student, start by reading our expectations which should cover many of your questions. Mentors are available on IRC (#PySoy on to answer any additional questions you have or to help you get started.

We are especially seeking applications from women in order to increase the diversity of our project. In addition to Summer of Code we will be establishing a paid internship program aimed at getting more women involved in our community through programming, documentation writing, testing, quality assurance, graphic design and developing educational games.

Our student selection process is focused on their demonstrated ability to learn and good social skills in working with other developers. A motivated candidate with a good attitude and moderate technical skill (ie, basic programming) is far more valuable to us than a highly experienced candidate with poor social skills and/or low attention span.

Below are a few ideas for student applications we've brainstormed. They are by no means a complete list of possible projects nor finished applications. If you're interested in applying jump on IRC for help getting started, by working on small pieces of code you'll become acquainted with our project and get a better idea of what you'd like to apply to work on.

Many questions can be answered by the  GSoC FAQ.

Game Ideas

Games are very easy project ideas intended for students with little to no programming experience.

Though PySoy has just gone through a major 2-year redesign, its reaching the point where games can be written with it again. The goal of these ideas is find the rough edges in the API while building some examples of what the engine is capable of.

These game ideas are intended to give a gist of what we're looking for, feel free to think up your own and talk with us about the relative difficulty of it would be. Almost any game you design is going to need some work on the engine itself. Games are written in pure Python code but the work on the engine will require working with  Genie,  Orc, and/or C to add new features. Copious help is available for adding new engine features.

Again, the below ideas are just examples. Use your imagination!

Marble Maze

Using PySoy's integrated physics, build a "marble madness" game using simple keyboard input and a course to navigate through. Most of the engine work for this would be polishing up collision callbacks.

Clock Cycle

This game is a race against time (literally) as the player, who's procrastinated her way out of sync with the rest of the world, must escape the past on a strange motorcycle before she "times out" entirely. The motorcycle is a mesh (which must be designed in Blender) with separate wheels connected with soy.joints, if a human being is visible she's frozen (not animated).

Beyond working with Blender, this would require some work on the engine for terrain transformations.

Space Gardener

Players control a tiny space craft using cursor keys to fly around a cartoon solar system saving its inhabitants from natural (and unnatural) disasters. Move water from one area that's flooding to another area that's dry, adjust planetary orbits to cool off a planet or warm it up, and defend against alien invaders!

This game would show off PySoy's field system with gravity fields surrounding planets and the sun.

Easy Ideas

These ideas are intended for applicants with little previous experience with programming.

Improved Materials and Lighting

Our Materials classes define how the surface of an object absorbs and refracts light. This currently requires some level of experimentation to get good looking surfaces when combined with ambient, diffuse, and specular light sources. We would like to make it easier to create great looking materials by improving our current Materials classes and Light class by calculating the parameters based on a base color, roughness, shininess, etc.

This task requires very little programming experience but some healthy knowledge in  color theory. Some knowledge in  vector math is helpful but can be learned easily.

Creature AI

One of our goals has been a basic AI system for animals to bring realistic emotions into gameplay. While many games treat animals as a monsters to defeat, and the depth of a monster's is "attack when player is in range", we would like to encourage more social games where players can befriend, frighten, anger, calm, and richly interact with creatures. The best way to encourage this sort of game design is to make it easy.

Such AI wouldn't be much more complex than a  tamagotchi, we're not looking for complex problem solving or other aspects generally associated with artificial intelligence.

A background in psychology, animal behavior, and/or academic study in AI would be useful for this task.

Mesh Editor

PySoy's data API is exposed, such that Python code can create, modify, and delete verticies and faces within a soy.models.Mesh object in realtime. However, managing this by hand (ie from interactive Python prompt) is far from simple. Here's an  example that creates 8 colored blocks with rounded edges from for loops.

We would like to have a GUI tool for editing a mesh interactively available for general use. This wouldn't be very difficult because the API for all these properties is already exposed, but will take several weeks of work to add necessary tools (vertex vs face selector, edit normals, change Material, etc).

This can be written in pure Python, but may involve some work in  Genie (which is Python-like) to add some functionality to the backend. No previous experience with Python or Genie should be needed for this task.

Chat Widgets

Add new widgets (soy.widgets.*) specifically designed for XMPP IM between players both in and out of game.

Support for buddy lists, chat windows, and  ad-hoc command execution would make implementing a network game much easier. These widgets should be implemented in a generic manner so they can be used for other purposes and modify/extend classes to be used with them.

Mesh Morphs

A morph target is the difference between an original mesh and a variant mesh with the same number of vertices, this difference can be applied between 0.0 and 1.0 to achieve a smooth transition between the two and/or apply multiple morphs to the same mesh at the same time. These are known as  shape keys in Blender, see this link for examples.

First add support for generating and combining morph targets to create new Mesh objects, then implement animation support for smooth blending between morph targets without creating a new mesh for each step.

This would require working primarily in  Genie and OpenGL VBOs (and possibly vertex shaders).

Moderate Ideas

These project ideas involve API design and building interfaces to existing libraries, but not extensive new functionality from scratch. Students working on ideas like this should only need to work with one area of the game engine.

Texture Manipulation

We plan to use GEGL (GIMP's backend) with a Pythonic frontend to allow for real-time texture manipulation. This should allow adding visible damage in response to collisions, allow players to edit skins and icons within games, and modifying bump maps.

This involves working with the  GEGL graphics library.

Interactive Widgets

Build a complete set of themeable interactive widgets for various types of menus, lists, trees, form boxes, chat windows, and selection tools that game designers can use with little additional code.

This involves the introduction of a theme system, which we haven't added yet, so a game developer can design a border/color scheme for a game's UI and have it work everywhere.

This would involve a good deal of OpenGL, Cairo, and Pango.

Gyro Controller Input

Write one or more new controller classes that take input from various gyro controllers, from Wii remotes to Android phones. Most of these devices require working with bluetooth.

The resulting API should allow a game developer to add basic 3d axis support for gyro controllers with only a few lines of code.

This would involve working with the Genie language and potentially Java for a small Android app to turn a phone into a game controller.

Pathfinder AI

An extremely common AI requirement, from a camera looking for a way to follow an avatar to a unit moving to a location that the player clicks to, is finding the shortest/easiest/fastest path to a specified location.

The AI must be extremely flexible due to the diverse number of ways it could be used. For speed much of the inner algorithm should be implemented in Orc, so a small amount of assembly programming will be needed, but much of the work would be in Genie and Python. Academic study in AI would be useful but not required for this task.

XMPP Client Plugin

Write a Soy plugin for a popular XMPP client, such as Empathy or Pidgin.

PySoy is designed such that the Python game code runs on a server and Soy clients, using the same libsoy backend, connect to the server such that games can be played without downloading them. One goal is to allow users to launch a game one of their friends is playing directly inside their XMPP client. As libsoy uses glib/gobject, writing a plugin for a GTK-based XMPP client may be easiest. There's already an early example plugin for web browsers as a starting point, but some additional integration will be needed.

Jingle Voice

Implement support for player-to-player voice chat using XMPP/Jingle.

Using libraries XMPP already depend on (loudmouth, libnice, libspeex, openal), add voice support support such that players can chat voice with other players and friends who aren't playing the same game but are also using an XMPP/Jingle client with speex support.

Advanced Ideas

These ideas include adding brand new functionality and extensive work with new systems students are unlikely to have worked with before, such as the  Orc SIMD assembly language or interpreted language parsing.

Enhanced Scenes

We're intentionally keeping our engine fairly generic as to the style of games it can be used to build, from overhead action games (ie Castle Crashers) to 3D RPG games (ie Dragon Age) to 2.5D side scrollers (ie Little Big Planet or New Super Mario Bros). Each of these game styles use the same basic backend (physics, audio, input, etc) but require one or more customized Scene classes.

Write a collection of enhanced scene types which allow for different play styles without excessive setup by game developers. Each of these new scenes would be a subclass of soy.scenes.Scene.

A good working knowledge of physics math and experience playing a wide variety of game styles is very useful for this task.

Volume and Surface

Extend our current collision shapes for calculating displacement and surface so that bodies can be made to float or tumble in the wind.

These calculations do not need to be physically accurate, or even realistic, only a rough simulation for game design purposes. Game designers will adjust liquid density, wind speed, the size and shape of objects, etc to get the effect they desire, none of these parameters are based on real world measurements.

Embedded Python Callbacks

PySoy's event model would be improved greatly by being able to store callback functions in .soy files for execution by non-Python clients directly. A subset of the Python language can be bound for safe execution in clients - without access to the filesystem, network, or other resources outside of what PySoy provides.

This is a lot more than just embedding an existing codebase like TinyPy in our backend; the facilities of PySoy need to be exposed and tokenized functions need to be embedded in .soy files.

This would involve working with Python, Genie, and C code. This is by far the most ambitious project idea listed here but a dedicated student could easily complete it in the Summer.

Remember, for student selection we do not choose based on the difficulty of the proposal or the experience of the student, but their demonstrated ability to learn and how well they work with our team. Pursue this project idea if you're looking for a challenge, not to impress us with your ambition.


Add yourself to the list below if you're putting together an application. This will help gauge interest in different ideas and give us a quick reference to who's who.

 Full Name <email@address> (IRC Nickname) ::
  I'm a student at Makeshift University (USA, -0400 UTC) studying warble science and parapsychology.
  Here's a handy link to my [ Ohloh page] and other useful stuff.
  I'm working on:
   * Project idea you're working on
   * Another project idea you're working on
Mayank Singh <mayanks43@…> (mayanks43@freenode)
I'm a 2nd year bachelor level CS student from BITS-Pilani, Goa Campus (India, +0530 UTC), Here's a handy link to my  Ohloh page. I'm working on:
Juhani Å. <juhanipm@…> (fzzbt@freenode)
I'm a 4th year master level CS student (Sofware systems) at Helsinki university (Finland, +0300 UTC), I'm working on:
  • Custom Scene classes and physics for 2.5D scrollers, platformers, shmups, ..? Possibly example game or two.
  • 2.5D Enchanced scenes?
Abhishek Jha <abhiit2k7@…> (jhabba@freenode)
I'm a student at IIT Kharagpur (India, +530 UTC) studying Mathematics and Computing. Here's a handy link to my  Ohloh page. I'm working on:
Manuel Rotter <rotter.manuel@…> (naeg)
I'm currently going to a technical high-school, doing my diploma in Dornbirn (Austria, +0200 UTC). I hope to study intelligent and interactive systems at the university of Innsbruck the next few years. My Ohloh page can be found  here. I'm working on:
Jon Neal <reportingsjr@…> (reportingsjr)
I am a student at the University of Cincinnati (USA, -0500 UTC); I am studying Electrical Engineering. My ohloh page is at and I have small blog at I'm working on:
  • Creating a plugin version of libsoy, called websoy, for most major browsers .
Amaury Medeiros <amaurymedeiros@…> (amaurymedeiros)
I'm a student at Federal University of Campina Grande - UFCG (Brazil, -0300 UTC) studying computer science. Here's a handy link to my  Ohloh page. I'm going to write a proposal for both XSF and PSF. I'm working on:
Bryan Ling <bryan.ling@…> (ling_bryan98)
I am a second-year student at the University of Toronto (CDN, -0400 UTC) studying computer science specialist in human computer interaction. Here's my ohloh link and a small programming blog I'm working on:
  • XMPP Client Plugin and Chat Widgets
  • Pathfinder AI
Gillian Mowers <gmowers@…> (gamowers52)
I'm a student at Wells College (USA, -0400 UTC) studying computer science. I'm working on:
  • Volume and Surface
Sara Foster <sarufostu@…> (sarufostu)  Ohloh
I'm a second year student at Northern Michigan University (USA, -0400 UTC) studying computer science, my primary interests being AI and game programming, although I haven't had a chance to learn much about these topics. I'm working on:

Aly Mann <amann@…> (amann) ::

I'm a student at Wells College (USA, -0400 UTC) studying computer science. I'm working on:

  • Physics engine

Matt Hastings <…> (brewster@freenode) ::

I'm a student at Cisco College (USA, -0600 UTC) studying computer science. Here's a handy link to my Ohloh page I'm working on:

  • Interactive Widgets

Anthus Williams <anthuswilliams@…> (anthuswilliams on irc)  Ohloh
I'm a first year math major at Dixie State College (USA, -600 UTC). I've learned a lot about web programming since lying about my resume in early 2009 in order to get a job doing ColdFusion and PHP. But I know next to nothing about either 3D graphics or game/systems programming. So naturally, that's what I want to work on :) I'm working on:

John LaCourse <lacoursejohn@…> (LaCourse)
I'm a student at the University of Maryland, Baltimore County (USA, -0400 UTC)
 My Ohloh page (I've never used Ohloh before, so there isn't much there)
I'm working on:
  • pathfinding AI
  • a simple game demonstrating some aspects of the pathfinding AI
Samah Majadla <samahmajadla@…> (Samah)
I'm a sophomore at Mount Holyoke College (USA, -0400 UTC), and I am a Studio Art and Computer Science double major. Here's my Ohloh page (nothing much there, first time using it)  Ohloh page. I'm really interested in 3D graphics (doing a lot of animation in college), and want to become more comfortable using Python, so with that being said - I'm working on: