Summer of Code 2012

This will be the 7th year PySoy has participated in Google's Summer of Code under the  Python 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 irc.freenode.net) 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.


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.

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.

Android Client

Research and implement an Android client for soy games.

Probably using the Native Android Development Kit, make the framework and tools necessary to run soy based games on android devices. This project mostly likely requires a real Android device with some OpenGL ES capability.


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.

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.