chasing a purple enemy over terrain you made


Roll around a 3d lawn with your buddy balls, making hills, valleys, and color trails. Knock enemy balls off the lawn!

(Includes pyglet, and a pure-python physics engine -- no dependencies!)


Where's the Game award
Presented by myke

"Deliciously Pure Python" Award
Presented by pymike

Most orrery-like
Presented by Cosmologicon

Give this entry an award


Ratings (show detail)

Overall: 2.5
Fun: 2.2
Production: 2.5
Innovation: 2.8

Respondents: 23


File Uploader Date
post-compo bugfixes and minor new features (might require avbin)
oresmus 2009/05/17 06:19
shadows under balls (instead of vertical sticks)
oresmus 2009/05/17 06:06
day6-chasing a purple enemy.png
chasing a purple enemy over terrain you made
oresmus 2009/05/03 22:31
final, includes pyglet
oresmus 2009/05/03 00:08
final, except for not including pyglet
oresmus 2009/05/03 00:06
Picture 5.png
rolling around on terrain you made
oresmus 2009/05/02 05:16
work in progress
oresmus 2009/05/02 05:13
the "hills" act more like "tunnels" so far...
oresmus 2009/04/30 04:59

Diary Entries

Day 3

I couldn't start until Monday night, so that's when I'll call Day 1. It took me a long time to find any non-cliche inspiration from this theme, but eventually I realized how something I'd wanted to code for awhile (rolling a ball around hilly terrain -- like Rollie in Bugdom(tm) -- and modifying the terrain as you roll over it) would fit into it. So my plan was that you'd have to escape from a lawn, but would find this difficult, and could only do it by building hills on it to use as ramps to launch yourself off of.

All I had time to code Monday night was some ball-terrain collision (which it turns out doesn't work well enough to use).

On Day 2 and Day 3 I got the lawn generated and drawn, got the ball character rolling on a plane controllably (with a follower camera), and got the realtime hill-building working well enough to know it's doable. But rolling on the lawn's terrain (rather than on a plane) is still not there, and might be too hard. If that doesn't come together tomorrow, I'll need to come up with some other goal for the gameplay. Fortunately, rolling around and building "tunnels" (i.e. "hills", but the ball remains under them) was fun enough to keep my 6-year-old son intrigued for at least a few minutes....

Anyway, I'm not expecting to have time for any art or sound (no loss, since I have no skills in those either), or for more than one level, but I'm still hoping to come up with something fun to do on that level. (And it's certainly been fun to get it working to this point.)


Day 4 -- physics, jumping and rolling

I decided to scrap all my "almost exact collision" ideas and replace them with a smooth ball-terrain interaction potential approximated from the terrain, using verlet integration for the physics timestep. Besides being simpler, this should be more realistic, since grass is soft after all.

The verlet integration (time-corrected) was pretty simple and fast to code, but tweaking the ball rolling physics and controls (even just to behave well on my flat-plane test potential, though the code to behave properly on sloping ground is supposedly mostly there now) took almost the rest of the day (of the pyweek part of it anyway).

The only thing I had time for after that was making a very fake actual-lawn potential -- not even energy conserving, since it only pushes straight up -- but good enough that you can run the ball into a hill and jump it that way. (Whee!)

I did some thinking about gameplay ideas too, but the best one, a two-player mode (try to knock the other player off the lawn -- if he/she dodges, you might go off instead), I probably won't have time for until after the compo. (And a non-networked two-player mode might not be tried much during judging, anyway.)

So tomorrow will be: realistic terrain potential, then flat-out on the simplest gameplay idea I can come up with. (I have only 1.5 usable days remaining.)

Most important thing -- it's still fun, and educational. (Even though -- or maybe because? -- I'm "reinventing the wheel". Or should I say "reinventing the ball"...)

Add a comment

Day 5 -- at least the game engine works...

The good news -- I finally got the ball rolling on top of the lawn (on top of hills, into holes, up and down slopes), working well enough to use. (And tweaked enough other things to make it worth uploading a "work in progress" demo. (Which is marked Final in case of a disaster tomorrow.))

The bad news -- it took all day -- still no gameplay, so now I only have 0.5 days to do that in! (Contest ends Saturday 5pm for me.)

Essentially, I spent this PyWeek prototyping a "ball & lawn game engine" and would need another week to make a real game out of it. (And having an artist would help a lot too.)

(So it's occurred to me to release this as an open source pure-python game engine, and document it, so that I or anyone else can do that, next PyWeek. I hope I do -- not sure I can quite keep up the motivation between-PyWeeks though. Especially to document it. Anyway, worry about that later.)

I am happy though. For one thing, I still have hope to find a simple enough gameplay idea to code tomorrow. (I have a few half-developed ideas, of course...) And for another thing, even the current form was enough to keep my 6-year-old son entertained this time for maybe half an hour... it was he who made the terrain in the latest screenshot, btw. He likes climbing up the invisible walls (perhaps along with a "buddy ball"), then zooming down fast and leaving long tracks along the landscape; or making a "cave" (depression) and coloring it all brown....

So, now to get some rest, or perhaps unwisely to try to prototype some new feature before tomorrow. (Never wise when I'm tired, but sometimes irresistable.)


Finished! (Outlawn)

Hey, I actually made a game!!! (Whew!)

The gameplay is simple; the polish is zero; but both my kids have fun with it, so it's a success! (In fact, they want to make games of their own...)

Gameplay summary:

You can make enemy balls, and try to knock them off the lawn; or buddy balls, to help you. If you hold down 'C' all balls color the lawn under them as they move. H makes hills, D digs holes, and G restores greenness to the lawn, all under the good balls only. (All these keys have to be held down, not just pressed once.)

The kids like to "paint" the lawn by making enemies of a few different colors and knocking them around while holding 'C'. (I didn't have time for enemy AI or even nonpassive enemy motion, so this is easy.) Or make holes and call them "tents" or "caves"; or paint paths over the hills; etc... kind of like a 3d paint program.

I still only tested this on a Mac, and it has performance issues (which affect the physics) except on my newest one. After the judging I'll try to fix these, and maybe add more...

Add a comment

bugfix release (Outlawn)

Thanks to everyone who tried and commented on Outlawn -- the comments are very useful. I certainly agree that it lacks, and needs, a real game. I might try to add one for the pyggy competition -- not sure yet. (Maybe the current code will evolve into the level editor for that, as well as part of the engine.)

In the meantime, now that judging is over I can release a few minor bugfixes and new features that I added after judging started. So here is version 1.1 -- enjoy!

Notable additions and changes (see CHANGELOG and README for details):

  • maximum timestep, and other provisions to mitigate physics bugs on slower machines
  • shadows under balls (might require avbin to load a texture image, not sure)
  • hills can be made taller, holes deeper
  • 'C' and 'G' keys are now toggles -- no need to hold them down
  • terrain heights and colors (and enemy balls) can be saved/loaded
  • other minor bugfixes (e.g. in control of buddy balls), debug options, ui tweaks

Add a comment