Diary Entries

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

Finished! (Outlawn)

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...

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.)

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"...)

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.)