pygame is
Simple DirectMedia Layer is
Site Swing
Marble Madness

Marble Madness - 7.3

Ian Mallett (geometrian)



Let's face it. You're a marble. How did you get like this? For reasons unknown, you have been transformed to this state by the good King Gargrenought, who has recently decided to be evil. Fortunately, the spell the King used backfired after hitting you, so he is now a marble as well -- just bigger. Your present goal is to seek revenge for this nefarious deed, though reverting to your previous state is obviously good as well. To do either, however, you must battle your way through the King's palace for the final showdown...


OK, the next version is finally ready. I've updated the levels, sounds, game complexity, added support for a "level editor" (see below), added fantastic explosions following the laws of gravity with particle effects, coloured floor tiles, upped level size, fixed collision detection and menu bugs, etc. Source included!

The screenshot is a composite .jpg for the small file size, but it makes it a bit blurrier than the actual game. At top left, the menu, at top right, level 9 and some exploding enemy, at bottom left, level 1, and bottom right, the showdown with King Gargrenought. BTW, this is the hardest level. Try to kill him by making him run into the laser walls. (Really, it does work; but he's got 500x your health).

"Level Editor" thing is something that becomes available after level 10 (the last level). To use it, go to Data/Levels and make a new .txt file named "lvl11.txt", "lvl12.txt", etc. and then play it, after you complete level 10, and the game quits.

Controls are arrow keys.

Requires a decent computer, PyOpenGL, pygame, etc.


Home Page:


click to view original size


Marble Madness - 7.5 - Sep 2, 2007
Marble Madness - 7.3 - Aug 29, 2007
Marble Madness - 6.0.0 - Aug 10, 2007 account Comments

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

September 17, 2007 10:18pm - Ian Mallett - nickname: (geometrian)
Sorry, just took a *long* time to load...
Anyway, it looks cool, and works well too. I think the collisions should be less elastic (not as pronounced). It seems simple to add a line like:
"self_speed *= .5", or something. I haven't tried it. Anyway, it's a good idea, and yes, I do like it.
September 17, 2007 12:57am - Ian Mallett - nickname: (geometrian)
I haven't been able to try it until now, but the link doesn't seem to work anymore...
September 8, 2007 7:28am - Claudio Canepa - nickname: (claxo)
Here a modified "Marble" that implements a crude bounce with walls ( replace the original file with this). Like it ?
September 2, 2007 10:12pm - Ian Mallett - nickname: (geometrian)
v.7.5 released!
September 2, 2007 4:02pm - Ian Mallett - nickname: (geometrian)
You've revolutionized the way I do subprocesses. Thanks a lot!
September 2, 2007 12:25pm - Ian Mallett - nickname: (geometrian)
Umm, that's don't bounce after they've stopped.
I changed everything to use, but now LoadLevel.pyw can't open the levels. That's really weird. Any ideas?
September 2, 2007 11:51am - Ian Mallett - nickname: (geometrian)
Ah, yes. I'm glad you did that. Writing to a file seems such a crude way to do interprocess communication. (I'm assuming that's what that does).
I've fixed the explosions, so the little particles don't bounce, and fixed the collision detection so you can slide against the wall.
September 2, 2007 3:03am - Claudio Canepa - nickname: (claxo)
1. Oh, BTW, the dirs where Read Only after unziping -strange things while edit-test.
September 2, 2007 2:55am - Claudio Canepa - nickname: (claxo)
5. yes, maybe python version. Anyway, I tinkered a litle with your code and now the transitions are fast (and the code is simpler !!).
I commented out all the open/r-w/close to intercom files and used in the caller module and sys.exit( returncode ) in the called module, by example for get_level()
level = ["pythonw", "MainMenu.pyw"] ) #in marble
sys.exit(level) # in
September 1, 2007 1:05pm - Ian Mallett - nickname: (geometrian)
1. Yes, it was hidden, and it still worked. Oh, well. The next version won't hide it.
3. OK, my computer is slightly faster (1.7GHz) and geforce go 7600, so that shouldn't be the issue. The thing about the way the collision detection is, it takes the ball's last position and resets to there if it hits a wall. Yes, this does make the ball stop, but it should still be rotating (with a hedge) or, as you say, stop (with a metal wall).
5. The way this works is there are actually two windows over each other. One is the game window, and the other is the menu window. I have to do it this way because otherwise pygame to OpenGL surfaces and vice-versa does not work. It take a little while, but never that long. It's usually only a few seconds for me... Maybe your Python version? If I make a .exe version, maybe it won't be a problem?
August 30, 2007 1:38pm - Claudio Canepa - nickname: (claxo)
0. xp + sp2 + some other MS security patches. 'wrong permisions' was not a literal citation. The literal err msg:
IOError: [Errno 13] Permission denied: 'Saved Data/MaxLevel.txt'.
Like I said, unhiding the file fixes the crash.

1. Your file was _actually_ hiden at the moment you test? Better cheats than crashes. :). If you want to botter with anticheats, you can use a normal file but encoding decoding the int [1,2,...]<->['wotz','hjgj',..]

3. Not too fast computer, AMD sempron 1.6GHz, geforce 6600. Yes, when in movement you dont need extra visual cues. In a second look, I casn be more precise about the problem. Look at this: if you are stoped but not touching walls, the ball moves and you get feedback (and not instantly stops), thats ok. BUT, if the ball touchs a wall, then:
i. the ball instantly stops. perhaps a bounce will feel better.
ii. when the ball is touching a wall, if heading points at any angle into the wall the ball doenst move at all. That is the problem, and I guess that if you bounce , the problem will desapear.

5. As a comment, something strange seems to happen in transitions to the menu: At program entry it takes 20 seconds from the moment the console appear to the moment the menu is visible. Transition from menu screen to level screen is instantaneous, but the inverse takes 50 seconds.
From the main menu, activating the 'history, controls, etc' takes 50 sec to show the pop up window.

August 29, 2007 11:16pm - Ian Mallett - nickname: (geometrian)
Thanks for the feedback and interest.

"wrong permissions" is the universal Vista error message. (Do you have Vista?)

1. I made the file hidden so people wouldn't cheat... I didn't have any problems...

2. You really should update that. I had 2.4 until a few days ago. When I updated, I was so happy. Everything is faster. Actually, I have no idea about your question.

3. Now that is weird. Look in the code under move(); I added a friction thing. (The line "if self_speed > 0.0: self_speed -= 0.0005 #friction"). It works for me, even when I had 2.4, so maybe it's your keyboard? Maybe you have a really fast computer and the slowing down becomes a stop? -- but then you wouldn't be able to play the game at all, which you obviously did. Anyway, you are right about the direction thing -- there isn't one. I should add that, though in my opinion it's only really a problem when you're stopped. Maybe an arrow pointing in the direction facing that becomes more transparent the faster you go?

Other changes that come in the next release (if there is one):
-Make the spiffy Options menu selection DO something.
-Make a better level editor.
-More realistic explosions; (think fireballs, smoke, collateral damage, particle collision detect, etc.)
-More levels
-rewrite the code again because it's messy again :-)
August 29, 2007 2:03pm - Claudio Canepa - nickname: (claxo)
Looks good!!! - very nice the rotating menu.

1. problem: the first save to maxlevel.txt crashed the game with 'wrong permisions...'. This file has the atribute 'hiden' set ( this is how you put in
the .zip). Reseting this flag cures the problem.

2. I was on python 2.4 , and changed two lines in Marble to be able to run ( two class declaration changed from the form class class_name(): to
class class_name: ). Not having 2.5 I dont know if there will be any undesired side effects. You think there will be problems ?

3. Playing into a level, the ball loses all velocity when K_UP is released; the arrows keys rotate the ball but there are not feedback displayed as to what the heading is. I'm viewing all that is supposed to be displayed ? Perhaps if K_UP
increases vel (but dont reset vel when is released ) and a new key to decrease vel (K_DOWN ? ) will be better ?

4. good work !
August 29, 2007 12:39am - Ian Mallett - nickname: (geometrian)
Done. I've checked it well this time; but let me know if there are any problems... (check the requirements first, though).
August 23, 2007 11:02pm - Ian Mallett - nickname: (geometrian)
I'm rebuilding the code from scratch to make it faster, more clear for me, and bug-free. Should be done soon...
August 14, 2007 1:49pm - Ian Mallett - nickname: (geometrian)
Opps. Try again.
August 13, 2007 2:26am - Paul Davey - nickname: (technomancer)
where exactly is the game on your site???
i don't see it anywhere!
August 10, 2007 2:29pm - Ian Mallett - nickname: (geometrian)
Use the arrow keys to browse through the menu and select the blue book to get started.

This requires Numpy, Python, Pygame. I'll be honest: this is a beta-ish release -- I included OpenGL, but it hasn't been tested off my computer, and the collision detection is a little buggy, as is the menu.

our projects welcomes all python game, art, music, sound, video and multimedia projects. If they use pygame or not.
recent releases
Nov 17, 2015

Nov 12, 2015

Nov 11, 2015

Nov 8, 2015

Oct 16, 2015

Oct 9, 2015

Sep 11, 2015

Sep 6, 2015

Aug 26, 2015

Aug 25, 2015

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