Read Me or Die

In his game You get to pilot a futuristic spaceship in an asteroid filed between the Moon and Earth. If you’re asking why is there a asteroid field between the Moon and Earth… well, it’s complicated and it’s the future after all – a lot of things could happen.


Your goal is to make it across the asteroid field as fast as you can without running out of fuel. A set of ‘gates’ and some ‘green flying things’ will mark the way.

Move your mouse to rotate the camera and the mouse-wheel to zoom in and out.

The left mouse button is there to fire up the engines and the right mouse button for reverse thrust.

Use W-S-A-D keys to rotate your spaceship, but keep in mind that the direction you actually movie will only change when the engines are on!

In the top left corner of the screen you will see a timer, the faster you can get to the other side of the field the better (try to beat 3 minutes!)

In the lower left corner there’s the fuel gauge (a set of lines), when all the lines are faded you will run out of fuel and most likely crash. Next to it you will find a display showing your current speed.


Refer to the config.txt file for all the configuration options.


You will probably need a ‘modern’ computer to run this, I didn’t make all the needed optimalisations duo to lack of time and a change of concept around day #3.


To run the sourcecode you will need the Panda3D SDK:


When running the binary for the first time you may (or may not) need a internet connection, to download some engine components.


When running from the multiplatform p3d file you will need the Panda3D runtime installed:


The music is by Mathew Pablo:

The voice is based on the Google Voice:


(log in to comment)


Why not just say it's "space junk" (AKA satellite debris, which is a growing problem and could be possibly appear like an asteroid field in the future)?

But still, sounds cool !
Install complete.
:PackageInfo: Package panda3d uses 148 MB
:PackageInfo: Package audio uses 0 MB
:PackageInfo: Package openal uses 1 MB
:AppRunner: Total Panda3D disk space used: 149 MB
:AppRunner: Configured max usage is: 2048 MB
DirectStart: Starting the game.
:display: loading display module:
Known pipe types:
(1 aux display modules not yet loaded.)
:ShowBase: Default graphics pipe is glxGraphicsPipe (OpenGL).
:display:glxdisplay(warning): No suitable FBConfig contexts available; using XVisual only.
depth_bits=24 color_bits=24 alpha_bits=8 stencil_bits=8 back_buffers=1 force_hardware=1 
:display: Created output of type glxGraphicsWindow
:display(warning): FrameBufferProperties available less than requested.
:display: Unable to set window properties: !undecorated fixed_size 
:ShowBase: Successfully opened window of type glxGraphicsWindow (OpenGL)

A window opens, just black and nothing happens. Linux 32-bit :(
On what hardware are you running?
I could be that your gpu doesn't support some advanced stuff I put into the game. First thing try in the config.txt setting 'bloom 0'  and 'lens-flare 0' then I'd try 'antialias 0' and 'use-shaders 0' if all else fails.

If that's still no good... would you be willing to run it from sourcecode (Panda sdk needed for that, link above)? The message seems to complain about not being able to set some windows properties - you could try to comment-out that part - it's line 43 in just change wp.setFixedSize(True) to #wp.setFixedSize(True)

I don't have a Linux machine at this time, so it's kind of hard for me to tell what's wrong.
This is an I3 with an Intel Ironlake Mobile. Nothing fancy but I never had problems to run 3D stuff :(

I disabled "all" but nothing. Basically it hangs (in fact I have to kill the process). I was a little bit WAT after downloading 145 something MBs of runtime!

So your dev platform is Windows?
I mean I disabled everything from the config file :(
That's sad news. If you have the sdk anyway could you try to run some samples that came with the sdk? If they run -then it's my fault, if they don't - it's a bug in the Panda3D framework or some driver/system/hardware problem. If it's my fault - sorry, I'll try to fix it even out of the challange. In the other case - there's not much I can do, but if You are willing to post a bug raport on the Panda3D forum or bugtracker then maybe the p3d devs can make a fix for it, so my game at the next pyweek will run smooth. And as crazy as it sounds, I do develop on Windows. ...hmm? Sounds? Didn't think of that. Some people had some problems with audio. Add to the config.txt in a new line: [b]audio-library-name null[/b] it's a long shot, but it could be it.
Ubuntu Linux (13.04) 64-bit:

:AppRunner: Total Panda3D disk space used: 174 MB
:AppRunner: Configured max usage is: 2048 MB
DirectStart: Starting the game.
:display: loading display module:
Known pipe types:
(1 aux display modules not yet loaded.)
:ShowBase: Default graphics pipe is glxGraphicsPipe (OpenGL).
:display: Created output of type glxGraphicsWindow
:display: Unable to set window properties: !undecorated fixed_size 
:ShowBase: Successfully opened window of type glxGraphicsWindow (OpenGL)
Just opens a window that immediately closes. Tried both the Linux binary and the p3d.
Oh, and demos from run fine.
There should be a log file somewhere in ~/.panda3d probably named 2dmoon.log can't say what went wrong without it.
It doesn't look like I'm going to score high if the game fail to run :(
If we rate it as it didn't work it won't affect your final score, so don't worry too much about that. I'd like to play the game, of course... but sometimes this kind of thing happen.

This is just my 4th PyWeek but it looks like the entries using plain PyGame or pyglet tend to be more portable. Panda3D will get there too, obviously :)
Here's my 2dmoon.log:

(I've hidden my username and home directory, but that's it.)
I was expecting some errors there, but there's nothing. It just doesn't want to work and I don't know what to do.
Adding audio-library-name null to the config.txt was my last idea.

I'd rather have a low but honest and constructive grade then 'did-not-run', but well, not much I can do, I'll ask around the Panda3D forum.
I mentioned this in my rating comments, but it's probably worth mentioning here as well.

You can make ship (and camera) control much friendlier by rotating relative to the local frame of reference instead of the absolute frame. Instead of setting an absolute angle like this:
    self.ship.setH(self.ship.getH() + 140 * time)
set an angle relative to the object itself, like this:
    self.ship.setH(self.ship, 140 * time)
Panda3d will take care of the rest.
True, I could do that. A clean solution and it would be one less function call for sure, but why would in make the controls much friendlier? Wouldn't the rotation be exactly the same either way? 

Whoops, I didn't see your response to my comment. It's tricky to explain without diagrams, but I'll give it a go.

By setting heading/pitch/roll relative to the object itself you're using axes based on the current orientation of the ship. This means that a change in heading always has the same apparent effect no matter where the ship is facing.

If you use the absolute axes, all your rotation is relative to the starting orientation of the ship instead of the current orientation. This means that a change in heading has different apparent effects depending on which direction you're facing, because the ship's axes don't match the absolute axes.

The most obvious effect of this is that if you do a 180 degree pitch change (which you can do from the starting position by holding up or down until you're facing the sun instead of the asteroids) and the make heading changes, left and right appear to be reversed because the ship's axes are upside down relative to the absolute axes. If you only make a 90 degree pitch change the axis difference means that the absolute heading axis is aligned with the ship's roll axis and the heading controls spin the ship instead of turning it. (The pitch axis always behaves as expected because without rotating around the roll axis you're never breaking its alignment between the two sets of axes.)