[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[pygame] GSoC Proposal Feedback



Hi guys,

I would like to receive some feedback about my proposal "Improved Sprite and Scene System for Pygame".

Draft at: http://socghop.appspot.com/student_proposal/show/google/gsoc2009/erisvaldojunior/t123873664199?subscription=on

Also attached.

Please provide me some tips because deadline is very close. I'll appreciate.

Regards,

Erisvaldo.

Improved Sprite and Scene System for Pygame

Pygame's Sprite system does not fit the requirements for many games. This
proposal focus on writing a new Sprite engine that would support layers,
easy animation, moving and transforming functions. To maintain backwards
compatibility, Sprite would become a more abstract type that supports either
the actual Sprite system (which would receive some improvements) and the
growing up engine. Also, a basic scene system will be developed, supporting
screen flow, event triggers and scene elements.

About Me
1a) Erisvaldo Gadelha Saraiva Júnior
1b) Contact information:
E-mail: erisvaldojunior@xxxxxxxxx / contato@xxxxxxxxxxxxxxxxxxx
Gtalk: erisvaldojunior@xxxxxxxxx
MSN and Hotmail: jun1nho_jp@xxxxxxxxxxx
Skype: erisvaldojunior
Website: http://www.erisvaldojunior.com
1c) Time zone: GMT -3:00 (Brazil). Languages: English / Portuguese
1d) Time commitment: I would devote 40h / week for GSoC project. It will be
my only job over the three month period. Full-time is necessary because the
project is really big.
1e) Programming experience:
~ 2 years Python programming (Panda Engine / Pygame / AI scripts);
~ 4 years Java programming (focused on JavaME. Developed some mobile games);
~ 6 years C/C++ programming (good OpenGL/SDL experience and also used game
engines like HGE (2D) and 3D ones like Ogre, Irrlicht and Crystal Space).
1f) Pygame experience:
Some small games like Pong and Sokoban clones. Studied the engine structure
and thought about improvements that could be made.
1g) Other skills and experience:
Good analysis and project skills;
Use of Design patterns;
Commented and Indented code;
Nice communication through forums, messengers, mailing lists and irc;
Knowledge of both Linux and Windows operating systems;
Experience with project management, version control, home development;
Overwork to achieve the desired result, if necessary.

Some of my projects, including two mobile educational games and two C/C++
games (Allegro/OpenGL/SDL) are available at
http://erisvaldojunior.com/projetos (Portuguese language).



About My Project
2a) Please explain in 2 to 3 paragraphs the project you intend to complete.

My proposed project is to write a new Sprite engine and a Scene system. The
first one intends to give a more powerful Sprite engine to the developer so
he doesn't have to write his own one. The new Sprite class will extend an
abstract one called Layer and as every Layer, Sprite's location can be
changed and and it can also be made visible or invisible. When you
instantiate a new Sprite, you can specify a image, a frame width and a frame
height to provide animation. You can get the next Sprite frame only using
the method nextFrame of Sprite class. The frame sequence can be changed by
the developer. The new Sprite also has methods for getting some
transformations like rotation and mirroring and also has a powerful
collision method for checking collision with any kind of Layer (remembering
that Sprite is a kind of Layer in this new engine). As a bonus, Sprites
could have state flags for effects like lighting and bumpmapping.
To maintain backwards compability, "Sprite" would become a more abstract
type that supports either the current Sprite system (Sprite and Group
classes with some improvements) and the new Sprite engine. About the current
one, improvements would be made to collision system. Rects would support
both int and float types, work with vectors and support other shapes
(including a polygonal generic shape).

The Scene System would be composed by some classes like Scene, Layer and
SceneManager. A Scene, on the other hand, would be composed by a set of
Layers. Sprite and TiledLayer are examples of Layers. A TiledLayer could be
used to make a tile-based level and would be able to load a image, separate
the tiles and prepare the matrix for that level. A Scene, for example, could
have a background layer, a opaque layer (which collides with Sprites) and a
couple of Sprites. The SceneManager would be responsible for setting the
Scene flow (scene 1 -> scene 3 -> ...) and also manage the event triggers
for the scenes.

2b) What existing or future need does your proposed project fulfill?

Many developers claim that current Sprite stuff in Pygame is not enough to
produce more complex games, so they have to write their own Sprite engine.
Also, the lack of a scene system is very frustrating for developers who want
to make great games but don't have enough experience (or time) to make their
own scene system. Improving Sprite stuff and adding a basic scene system
would definetely attract more young programmers to the community, and also
increase the productivity of experienced Pygame developers.

2c) Provide a rough timeline for how you intend to complete your project,
test it and document it within the allotted time period.

Week 1: Examine current Sprite system implementation to determine how it can
be abstracted to support both current system and the new system that will be
developed;
Week 2: Improve current system by making it more abstract, implementing
better collision system (work with vectors, float support and other
collision shapes);
Week 3: Finish improvements and make several tests to verify that new
resources are working according to the specified;
Week 4: Analysis and Project of the new Sprite engine, including Layer and
Scene System structure. Scene, Layer, Sprite, TiledLayer and SceneManager
are classes that should be prototyped;
Week 5: Develop new Sprite class with all features mentioned above;
Week 6: Develop TiledLayer, Scene and SceneManager classes;
Week 7: Develop acceptance, unit and performance tests for all these
features;
Week 8: Test all developed features and fix bugs. Launch Alpha release;
Week 9: Evaluate with feedback from community and mentor;
Week 10: Add new features and fix more bugs according to the feedback;
Week 11: Prepare packages and clean up documentation;
Week 12: Final week of testing. Launch Beta release.

2d) Describe how you have brought your project proposal to the Pygame
   community, their reactions to your proposal, and revisions you have
   made based on those reactions. (hint:  this is something you really
   want to do before submitting your application)

I've received some nice feedbacks about my proposal on the pygame mailing
list. In general, people agreed that Sprite system of Pygame should be
improved (or even removed/rewrited). Removing it was considered a bad
solution since it would break a lot of legacy code. So, like others, I
thought the best idea was to make Sprite class more abstract so it would be
able to support both current system and both a new system that is described
in this proposal (some ideas, like layers and transforming support are also
based on community feedback). For improvements, the collision system
supporting vectors, float and other shapes were ideas from the community.
About the scene system, some desirable features were suggested by community,
like screen chains, event triggers for the screens and, of course, scene
elements.

The main target is to keep all parts as generic as possible and to work
closely to the community and mentor, allowing the addition of new features
and getting feedback of all features being developed.