Summer of Code 2011
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.
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!
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.
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.
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.
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.
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.
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.
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 soy.net classes to be used with them.
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).
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.
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.
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.
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.
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.
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.
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 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 [http://www.ohloh.net/account/MyName 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), https://www.ohloh.net/accounts/fzzbt.
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 http://www.ohloh.net/accounts/reportingsjr and I have small blog at http://jonneal.tumblr.com/.
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 https://www.ohloh.net/accounts/ling_bryan98 and a small programming blog http://csstudentsinsociety.blogspot.com/.
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.mh@…> (brewster@freenode) ::
I'm a student at Cisco College (USA, -0600 UTC) studying computer science. Here's a handy link to my Ohloh page https://www.ohloh.net/accounts/brewster. 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:
- Clock Cycle
- Mesh Editor