pygame is
Simple DirectMedia Layer is
Site Swing

Gummworld2 - 0.0.11

Gummbum (gummbum)



::: News :::

Hosting has changed to Bitbucket. The old files are still up on Google Code.

Now works with Python 3. Still works with Python 2.7, and 2.6.

Smarter, faster BasicMapRenderer. See examples/

::: About :::

Gummworld2 is a light pygame framework for a scrolling game, where the map is larger than the display. It emphasizes simplicity, freedom, and performance.

Tiled helpers are included. However, Tiled is not required.

Source and documentation bundle is available, as well as SVN, via the project home page. Plenty of uncomplicated examples.

Yes, that screenshot shows a legitimate 332 FPS in a scrolling 800x600 window. It's a 2048x2048-pixel map of nearly 500 visible sprites, collapsed down to 36 images by Gummworld2 for batch efficiency.

::: More :::

Also available in downloads:

  • gw2_skeleton (a la skellington), get this for fast skeleton setup.
  • The Mana World resources used by some Gummworld2 examples (sorry, TMW must be kept separate because it is GPL v2).
  • The fixed-step game clock, a good general-use clock used in Gummworld2.
  • Mutable world demos (aka Gummcraft) v1.1 and v1.2.
  • The original "bunny roundup game" demo.
  • Pyweek 17 entry Harvest Moon.

::: Google Discussion Group :::

There is a Google group to discuss Gummworld2 and related projects. All are welcome. Please stop by and start a discussion.


This is a pretty bodacious release.

  • Very significant fixes to QuadTree, GameClock, and the toolkit Tiled Map loader.
  • Some enhancements and corrections to toolkit.collapse_map_layer().
  • The addition of toolkit.reduce_map_layers(), which reduces multiple map layers to one layer, and a demo to showcase the benefit.
  • A lot of work on the world editor, its tilesheet palette and geometry classes.

Very soon I will be putting much thought into editor actions that feed the user_data field for world entities, because I can't imagine hand editing hundreds of user_data entries for a game level. Thus, I aim to reduce the labor of annotating shapes with data. It'd be great to have some ideas on how to make it accessible.

Also soon, I will make another demo mini-game using the Tiled and Gummworld2 editors, from which I hope to glean usability improvements for the world editor. I mean, would it not be cool to churn out a respectable level in just a couple hours? =)

In the meantime, I cordially invite you to the Gummworld2 discussion group. Because demos are mere morsels. The time is nigh to sink teeth into a meaty, juicy game. (And no. No, da Gumm's next game will *still* not be called PYABLO. :) It'll be... um, not sure yet.)


Home Page:


click to view original size


Gummworld2 - 0.5.0 - Apr 16, 2014
Gummworld2 - 0.4.5 - Mar 26, 2014
Gummworld2 - 0.4.4 - Aug 23, 2013
Gummworld2 - 0.4.3 - Aug 20, 2013
Gummworld2 - 0.4.2 - Aug 6, 2013
Gummworld2 - 0.4.1 - Mar 28, 2013
Gummworld2 - 0.4.0 - Apr 6, 2012
Gummworld2 - 0.3.0 - Nov 28, 2011
Gummworld2 - 0.2.0 - May 21, 2011
Gummworld2 - 0.1.1 - Mar 25, 2011
Gummworld2 - 0.1.0 - Feb 27, 2011
Gummworld2 - 0.0.12 - Feb 20, 2011
Gummworld2 - 0.0.11 - Feb 8, 2011
Gummworld2 - 0.0.10 - Jan 29, 2011
Gummworld2 - 0.0.9 - Jan 22, 2011
Gummworld2 - 0.0.5 - Jan 10, 2011
Gummworld2 - 0.0.4 - Jan 7, 2011
Gummworld2 - 0.0.2 - Jan 3, 2011
Gummworld2 - 0.0.0 - Dec 31, 2010 account Comments

If you wish to leave a comment with your account, please sign in first.

August 20, 2013 3:41pm - Gummbum - nickname: (gummbum)
After a couple years (since I left the last comment), a few trial-by-fire projects in Pyweek and Pyggy, and more than a few improvements and additions, the engine is looking fairly mature. Will it ever reach 1.0!? Great question. I would like to add DR0ID's quite nice transitions. And there are a couple rough points I'd like to file down: 1) at high scrolling speeds the new renderer causes a noticeable hiccup when a new tread is drawn; not noticeable when scrolling slowly; 2) the supermap hiccups when a new map is loaded; this is because the TMX loader does a lot of work all in one chunk; I would like to somehow spread this work out over multiple game ticks.
I expect the new renderer to support unusual use cases, like hex maps, much better. TMX loader doesn't support hex maps, and by extension neither does the world editor, but these are not required to get the intended benefit of this library: fast scrolling.
So that's about it. It is mostly finished. Cheers.
February 27, 2011 3:03pm - Gummbum - nickname: (gummbum)
Lots of new stuff. I *think* the only thing remaining before I call it 1.0 are the pymunk entity classes, and maybe some helpers (for example, pymunk collision detection and handling).

Even with the all-Python QuadTree and geometry code, the library seems to be quite usable on new-ish hardware. Dual-core systems that I've tried perform well. Single core systems chug and snort.

In v0.1.0 smaller tiles became a lot faster as a result of the MapLayer change from dict to list. Even collapsed maps are a quite bit faster. The screenshot depicted above could now be updated to show 360 FPS. Just visualize it. :)
January 7, 2011 1:37am - Gummbum - nickname: (gummbum)
Oh, and I forgot. Thank you, I will certainly contact you about the Tiled map loader if needed. So far it is working GREAT. :)
January 7, 2011 1:35am - Gummbum - nickname: (gummbum)
Very right, DR0ID. Combining tiles (via the Gummworld2 toolkit) only works for static tiles in a map object, where all the tiles scroll in unison. I'm not sure you'd want to use the same trick for independent sprites, as they typically do not want to move in unison. But if you could do it there would be gains (e.g. a big dragon or siege engine that is loaded from disk as six tiles combined into a single tile).

One drawback of combining tiles is you can no longer use a tile as a collision object--like the trees in the bunny demo. This is what the map editor is supposed to solve. Thus, if I have a combined tile, there will be geometry in the model representing its original parts. Of course, this means I will have a necessary separation between the graphics and the game model--which is not a bad thing, I think, but many pygamers seem to like the sprite-is-view-and-model school of thought. I like both ways, so Gummworld2 will try to support both with as little fuss as possible.
January 6, 2011 3:39pm - DR0ID - nickname: (dr0id)
If you have any improvements, comments, request or bugfixes about the Tiled map loader just contact me.

I found your trick to batch the tiles together to bigger ones to make the scrolling fascinating. But this only works for static background unless you know yet another trick for that.
January 4, 2011 1:12am - Gummbum - nickname: (gummbum)
<b>Friendly note<b><br>
Make sure you get the right Gummworld2 version to go with the bunny demo game: v0.0.2. The game will not work with v0.0.1.
January 1, 2011 2:05pm - Gummbum - nickname: (gummbum)
Too late! I'm already using tiledtmxloader (and loving it). :)

Very nice optimization of the gradient trick.

Thanks for the tips, DR0ID, and especially for your work on the Tiled map loader.
January 1, 2011 2:44am - DR0ID - nickname: (dr0id)
for the fill_gradient function there is a trick:

just create a new surface which is 1 line thick, fill it with the gradient, then scale it to the size you want (instead of iterating over all pixels or lines)

I used this trick here:
January 1, 2011 2:36am - DR0ID - nickname: (dr0id)
Maybe this could be useful to you.

our projects welcomes all python game, art, music, sound, video and multimedia projects. If they use pygame or not.
recent releases
Apr 16, 2014

Apr 13, 2014

Apr 9, 2014

Mar 18, 2014

Mar 15, 2014

Mar 14, 2014

Mar 13, 2014

Mar 11, 2014

Mar 9, 2014

... more!
for pygame related questions, comments, and suggestions, please see help (lists, irc)