Tuesday, February 5, 2008

Play With Your Peas: A game prototyping challenge


Oh la la! It is time for another game prototyping challenge. As has become the tradition around here, you provide the brilliant code and I provide you with a complete set of free graphics that help make you look spiffy.

This game design stems from a peculiar fetish of mine. I don't normally talk about this in public, but...how to say this. I have a thing for casual building games filled with adorable little creatures. Late at night, when the rest of the world is busy sleeping, you'll find me fantasizing about the lurid offspring of Lemmings and SimGolf. For a moment, close your eyes and savor the sweet thought of DMA's DNA all mixed up with Will and Sid's unappreciated love child. Oh yes.

The game idea inspired by these questionable thoughts is called Play With Your Peas. Here are the basics:
  • Peas: You have a bunch of fun loving sentient peas that like to climb tall objects and jump off of them. They think they are ninjas. You know they are suicidal.
  • Happy points: If the peas land safely, they generate happy points. The more things that they bounce off of on the way down, the more points you get. Think of a successful pea landing like scoring a combo in Tony Hawk.
  • What you do: Here's the trick. You can't manipulate the peas. You can only add blocks to the landscape. Add a soft landing spot and your falling peas won't splat. Add a spring in the right spot and they'll fly up into the air. Can you build a brilliant playground that delights your peas?
  • Score: Your score is the time it takes you to reach 20 million points. If you want to simply play with your peas, go for it. If you want to beat the high scores, you must be Elite and build your landscape with great efficiency so that you maximize your pea combos.
Many thanks to Axcho for dredging up this ancient design from the dusty storage shed of my past.


Game Tokens
There are only a few types of elements on the screen
  • Peas: Little AI characters that run around the environment. You can't interact with them directly.
  • Plate: All action takes place in a box that bounds the sides and bottoms of the screen. No objects can exist outside of the screen.
  • Blocks: The user can place blocks on the screen. There are multiple types of blocks such as platforms, springs, jello and more.
  • Flags: These mark the spots where peas have lept from in the past.
  • Tools: A sidebar of tools that lets you choose the type of block to place.
  • Happy Score: A counter that tells you how many happy points you've collected so far.
  • Time: A counter that tells you how much time has elapsed since the beginning of the level.
Basic Pea AI
Peas have three main modes:
  • Navigating the environment: In its primary mode, the pea navigates the environment in an attempt to reach a jumping spot.
  • Falling: When a pea is falling, it is treated like a simple bouncy ball interacting with the world.
  • Being scored: Once a falling pea comes to a rest, it is scored.
Navigating the environment
The peas traverse the environment in search of ledges to jump off. This is the hard part of building this particular game design. I'll describe the high level behavior, but I leave the implementation as an exercise for the mad programmers of the world.
  • Look for a ledge: After a pea is scored, it immediately looks for a nearby ledge to jump from.
  • Wander: If there is no ledge nearby, the peas wanders in a particular direction, slowly climbing over obstacles and working its way up as high as possible.
  • Calculate path to ledge: When it finds the ledge, it calculates a rapid path to the ledge.
Moving smoothly across a complex environment can be broken down into a series of movement segments.


  • Walk on a flat surface:
  • Climb a block wall: Some blocks can be climbed, others cannot.
  • Climb up a ramp: Some ramps can be climbed.
  • Jump a gap: If there is a 1 square gap, a pea can jump over it. Remember they think they are ninjas.
  • Wall jump: Peas can also jump onto a wall that is 1 square above their head to the left or the right. Think of this like moving how a knight in chess moves.
Jumping spots.
A block surrounded by space has two default jumping spots, one on the left side and one on the right side. Once a pea reaches a jumping spot, he will jump. A couple things happen at this point.
  • A flag is automatically planted at the jumping spot.
  • The pea jumps and his AI switches from navigating the landscape to being a simple bouncing ball.
The flag tracks several things
  • How many peas have jumped from the jumping spot. As the number gets closer to 100%, the flag slowly rises to the top of the pole.
  • If a peas spots multiple jumping spots, they will always head towards the jumping spot that has the highest completion percentage. This ensures that the user is focusing on one or two jumping spots, not a half dozen.
  • When the flag reaches 100%, the jumping spot becomes inactive and no other peas can jump from this location. The user gets a large bonus for having a completed jumping point.
  • Peas remember which jumping spots they've jumped from and will not jump from that point again.
The flag also serves an important balancing role. Once a flag is planted, several building limitations come into play.
  • The user cannot place another block on the square occupied by the flag.
  • The user cannot remove the block under the flag.
These rules prevent the user from recycling jumping locations and they also slowly eat up the space on the board so that the user needs to work around the detritus of their previous efforts.

Bouncing
When your pea falls, it bounces off of blocks that get in its way. Some blocks, such as gelatin, slow you down. Others, like springs, give you an additional boost. However, your pea is not indestructible.
  • If you land on a standard block after falling a distance more than two blocks, you pea will die. A dead pea means less opportunity to score.
The skill of the game is building environments that yield the maximum number of bounces while still managing to land your peas safely in the end.

It is possible for the player to create cul-de-sacs where the pea will bounce indefinitely. One potential balancing feature is to add in a counter that keeps track of how many times specific blocks have been hit. If the hit count on single block gets too high, the pea yells out 'It's a trap!' Even if a trapped pea is released, you get no points.

Scoring
When a peas finally comes to a stop and it survives it's journey, it gets a happy score.
  • Happy score = Total bounces * (Spring Bounces * Spring Value + Normal Bounces * Normal value + Gel bounces * Gel Value + Successful Landing)
The pea's happy score is added to the player's total score. This is a moment of grand celebration. If you have a particle system, this is a great time to use it. I've provided graphics so that a happy pea can yell out "Ninja!", his career aspirations finally complete. Once the peas is scored, he moves on and starts looking for a new jumping spot to leap from.

Building blocks
Okay! Now we have some cute little characters that jump about the screen in some logical manner. Finally, it is time to talk about building your world.

Along the left side of the screen is a toolbox that contains the blocks you can use in the level. To select a block, click on it and it will highlight.

To place the block, click on an empty square. The blocks aren't added immediately since they have a build sequence they must follow.
  • Initial delay: We want to prevent users from micromanaging the flow of their peas by quickly placing blocks. In order to do this, blocks stay ghosted for a short period of time before they fade into solidity.
  • Check for peas in the square: While the block is ghosted, any peas that are in the space can move out of the square without colliding with the new block. This helps us avoid accidentally squishing peas.
  • Block peas moving into the square: New peas that try to move into the square are collided with using the collision rules associated with that block type.
  • You can place other blocks while a block is in the process of being built.
Deleting blocks
You can remove blocks as well.
  • First click on the delete tool.
  • Your cursor will turn into the red delete cursor. Feel the power!
  • Click on the block you wish to delete. As you mouse over the block
  • The block will become ghosted. There is a short delay before the block is removed.
  • After the delay is over, the block finally fades away. During the exit animation, peas will pass through the block as if it isn't there.
  • You can delete other blocks while a block is in the process of being deleted.
Remember, you can't delete a block that has a flag attached.

Standard Blocks
  • Climbing: Peas can climb the sides of the block.
  • Walking: Peas move across the surface of the block at full speed.
  • Collision with top: Falling peas stop when they land on the top of the block. If the fall is greater than 2 blocks in height, the pea dies.
  • Collision with side: Falling peas bounce off the side
Spring Blocks
  • Climbing: Peas can't climb the sides of the block.
  • Walking: Peas move across the surface of the block at full speed.
  • Collision with top: Falling peas are launched upward with greater velocity if they fall on the top of the block. Angle of incidence equals angle of reflection.
  • Collision with side: Falling peas bounce off the side
Gelatin Blocks
  • Climbing: Peas can't climb the sides of the block.
  • Walking: Peas move across the surface of gelatin at 1/2 speed.
  • Collision with top: Falling peas stop when they land on the top of the block. Gelatin provides a safe landing spot for high jumpers.
  • Collision with side: Falling peas bounce off the side
Ramp Blocks
  • Climbing: Peas can climb the backside of the ramp.
  • Walking: Peas climb up or down the ramp at full speed.
  • Collision with top: Falling peas bounce off the sides of the ramp at an angle and lose a little velocity. If they hit the ramp from a height larger than 3 blocks, they die.
  • Collision with side: Falling peas bounce off the side
Winning
In order to win a Play With Your Peas session, you need to complete certain goals on a level, much like Tony Hawk. The simplest is "Reach X number of points". Your final score is the time that it takes you to reach the goal. A new player might take 10 minutes to reach 10,000,000 points. An expert player, skilled in crazy combos, might take 2 minutes.

My hope is that casual players will have fun figuring out the system, setting up interesting combos. They'll generally ignore the clock. Eventually, they'll reach the goal and feel good about 'beating the game'. Their score is then compared against a number of other times in a high score list.

More driven players will feel a natural urge to compete by replaying the level for a better time. To facilitate this, we should have "Try Again" button on the high score screen.

Areas to prototype
Even though this design has a relatively small number of moving parts, the emergent behavior should be complex. There are three distinct areas that well are worth prototyping. I've listed them in order of priority.
  1. Pea falling physics: In order to do the pea falling correctly, you need a simple physics engine that deals with balls and planes.
  2. Block and scoring balancing: Balancing the size, properties and scoring of each block is a classic balancing problem. This is an area that will likely take hours to get right.
  3. Pea navigation: If you can get peas traversing a series of blocks in a smooth and believable fashion, you are halfway through the design. This involves some tricky path finding. If you want to stub this behavior out, spawn peas at a jumping flag and remove them once they are scored.
Some design notes
One problem that is common to AI-driven systems is that most of the behaviors go on underneath the cover, away from the player's eyes. It is very easy to fall into the trap of creating an intricate AI that 'plays itself' but is completely incomprehensible to the player.

Instead of asking how you might make the most realistic AI system, I prefer to steal a page from Nintendo's playbook. Instead ask "What is the simplest system that drives forward the player experience?"

Peas climb. Peas fall. Peas get scored. All of these activities are very apparent to the user. Instead of complex internal logic, the design focuses on explicit external behaviors. Any internal logic such as the path finding system exists only to the minimum degree necessary to support the external behavior. We won't build SkyNet using these sort of AI techniques, but we can make more enjoyable games.

Conclusion
If you create something inspired by this prototyping challenge, send it this way! I'll post it on the website for everyone to check out and comment on. Take shortcuts, mangle the design, find the fun.

Enjoy!
Danc.

Assets
I've provide the graphics for PlayWithYourPeas in two versions. First, all the graphics have been saved out as PNGs. I also included the Expression Design source file so you can make modifications to the original vectors.
References
Updated 2-11-2008: I added in the Block-Place-Normal.png to the zip that was previously missing. I also fixed some of the file names.

Updated 2-14-2008: I renamed the Ramp tools so that they follow the same naming convention as the blocks. The pea shadow is now seperated out. The single pixel alignment errors on the tools and the normal block are now fixed.


52 comments:

  1. Just a thought: For the spring block, angle of incidence = angle of reflection isn't physically accurate. It's much more natural to work with velocities and have the spring just impart an instantaneous force in addition to the elastic collision (which doesn't quite live up to AOI=AOR either).

    ReplyDelete
  2. The 'Place' version of the Standard block seems to be missing from the .zip file.

    ReplyDelete
  3. Nice catch. I updated the .zip file with the Place version of the Standard block. I had also forgotten to name a couple of the images when slicing it up, so those are fixed as well.

    take care
    Danc.

    ReplyDelete
  4. this sounds like a good extension of an ant-style path finding engine.

    today's captcha word is "sytatn", arch-demon of syntax.

    ReplyDelete
  5. Another interesting design of yours!
    I missed the previous "contests", such as SpaceCute, but this time I'll try to develop something.
    Thanks for your great graphics.

    ReplyDelete
  6. What is to stop a player from just lining the floor with Gelatin? Does that not prevent all deaths?

    May some possibly existent greater being grant me the time to try and implement this game. It sounds like a hoot.

    ReplyDelete
  7. complex idea:

    Have peas fall through gelatin blocks, while passing through their velocity is reduced (perhaps never to zero to prevent them getting stuck)

    so gelatin on the ground would need to be on top of a block and then it's no promise of safety.

    Also consider having peas require 'air' so if you make a really deep gelatin mat, if the peas can't get out of it quick enough they drown.

    ReplyDelete
  8. Heh, can't wait to have a go at this! :)

    I wrote a game with a very similar concept a year or so ago for a mario themed contest, check it out:

    Shrooms!

    (Java Required)

    Nice one as always Danc!

    ReplyDelete
  9. How do the peas determine the presence of a 'ledge'? A two-block or higher drop?

    My worry with this is that the AI could be really frustrating. Take the block configuration in the 'Wall Jump' movement example. Would the pea then consider the spot it's just climbed up a 'ledge' and try to jump it? Because if so, the instant you put two blocks into the world they are going to mark the top of that stack with a flag and start jumping, and that stack is used up straight away with no way to delete it or build it higher. Meaning you have to build the whole system before placing it within pea-distance, which seems slightly counter-intuitive to me. Guess I'll have to implement it and find out. :P

    The flags thing is basically an ant foraging algorithm - the ants (peas) find food (a jump) and mark it with pheromone (flag) with later ants (peas) being attracted to that spot and placing more pheromone (incrementing the flag) until it's all consumed. Was this deliberate?

    As an extension idea, perhaps each pea could gain a 'belt' whenever it completes a unique jump successfully, slowly graduating through a series of colours until they reach a black belt and become a fully-fledged pea-ninja, which might confer a bonus? Perhaps a multiplier of some description added to the score, or maybe they could withstand more bounces or longer falls as they level up? Should be reasonably easy to do.

    ReplyDelete
  10. Hi Danc,

    I've been reading your site for a while (though this is my first post) - you have some great ideas!

    I'm actually working on a game very similar to this with a few friends. We started it at a recent "game jam" for the XO Laptop (link - 4th game down).

    Our game also focuses on building a level - using almost the exact shapes and types ;) - but it has players shooting a projectile to collect stars. I really like the Lemmings/AI spin you put on it, though! It gives me a number of ideas for merging our designs together...

    Thanks for posting these ideas and art assets. We're working on our game in our spare time (so slowly at this point). I'll let you know how things turn out!

    Cheers,
    Richard

    ReplyDelete
  11. I’m also a little uncertain of how exactly the AI would work here and if it would feel natural. Well as natural as peas walking around a block world can feel.

    I’ve only skimmed the design document so far, but I find it likely that levels building will quickly get your peas stuck or they will play follow the leader to certain death. What happens when all your peas die anyway?

    I’m wondering if it might work better if the peas are constantly spawned from a pea generator (pod) and traverse the level via physics rather than AI. Maybe this is changing the game completely, but I think the physics would be more predictable and rule based than the pathfinding method. Maybe it’s just Lemmings then.

    Another initial concern is the size of the grid you have to build your world in. It doesn’t take very long to place 35-40 blocks in a world, even if carefully designing your level. Maybe this isn’t enough scope or playtime to keep the game interesting.

    I’m also thinking that the world could be a plate and tiles could be sauce and bread and you place tiles with a fork, so it’s something you can try at home.

    Maybe I should read the document properly before posting... only then should I play with me pee.

    ReplyDelete
  12. You might refer to me as "axcho" rather than "Alex S." - I think that would be a little more specific. I'd prefer it. :)

    It's great to hear all these people working on similar ideas to this one - I'm eager to see what sort of prototypes might arise. I liked that Shrooms! game, too - though it was maybe too puzzle-y for my tastes. I don't need challenge, I just need a playground. :p

    I think Simon's belt idea would be a fun feature to add. Hopefully someone will try implementing it. :)

    To respond to andre's comment, I would imagine that the AI-based behavior would be essential to the game, though purely physics-based behavior would be easier to design well. The feeling that these peas are somehow beings with their own selfhood, however minimal, is a key feature for me, which I think would require a bit more self-directed behavior than simple bouncy balls have. So I'd like to see someone try this implementing this AI design before resorting to pure physics, even though it is the hardest part to get right.

    ReplyDelete
  13. Some comments on the comments. :-)

    - You could layer the floor with gel: The downside is that your peas move across gel at a much slower rate, so this could be some hindrance in getting high scores.

    - AI being annoying by setting up flags in places you don't want them to. It is certainly an area to balance. 1) Perhaps there is a delay before they jump so you can take action and continue your building. 2) Perhaps you can delete misplaced flags, but it costs you lots of points. 3) Perhaps you can place flags manually. The UI gets more complex, so it is a trade off you must balance.

    - If you lose all your peas 1) You lose. 2) You can buy more peas, but it costs you. 3) Peas auto-regen after a timer runs out. "30 seconds to Pea Re-insertion!"

    - Pea belts: Love it. I'd love to see people grow attached to their peas and want to keep them alive. Better peas can survive higher falls and score bigger combos.

    - Size of the level: I suspect that the mock up is a bit small. Level size is something that you always need to adjust when making a spacial game. It's an easy variable to tweak. (Plus I can regenerate these graphics at any size that is desired, so things are flexible)

    - Physics vs. Pathfinding AI: Part of the complete challenge for the player is creating a complete 'loop' where peas cycle from jumping to climbing to a new challenge. You end up managing the flow of peas through the map and to do so, you need to understand both the falling and the climbings. Andre brings up a good point. If you want to focus on the falling part first, you can stub out the climbing portion of the game by just putting an emitter (peapod...nice) at a flag. This is a perfectly valid prototyping strategy. I mentioned something briefly along these lines in the Areas to Prototype section.

    Of course, it would be interesting to do both system and see what interesting interactions that you get. :-)

    take care
    Danc.

    ReplyDelete
  14. You had me at "ninja!" Now I have a positive outlet/cause for my bouts of insomnia.

    Danc, Thank you for this!

    ReplyDelete
  15. I started implementing this challenge in Python/pygame yesterday and wrote a small blogpost about my progress. There's still a lot to be done (only level building works), and I'm not sure if I'll ever get to implement the rest but I had fun. :) As a newbie to game programming I'm quite happy with the result.

    ReplyDelete
  16. Awesome idea!

    Is there any chance the shadows could be removed from the peas though? It looks kind of odd when a shadow is in the air/on a wall when it's not supposed to be there.

    ReplyDelete
  17. Some random thoughts on the flag problem:
    - If you can place flags manually the AI could be mostly reduced to pathfinding (great for prototyping).
    - If you can destroy flags you should (at least) lose the points earned by this flag.

    ReplyDelete
  18. I finally started to develop the game. The main screens and the editor are almost done, but the most important thing is still missing: the peas! However that is my next step :)

    If you want to try the look & feel, here is the current version:
    Play With Your Peas (Leo version)
    (Size: 1.6 Mb)

    P.S. The Normal-Block seems a little different from the others (no low border?) but I still have to put in the shadows.

    Thank you again Danc for this interesting design!

    ReplyDelete
  19. For some reason my last two comments didn't show up.

    @Leonardo: I've found that there are a few of the blocks and other images that have 1px borders to one side where they shouldn't and so on. Just a case of needing to drop them into an image editor and crop where necessary. The 'normal' block is indeed missing 1px from the bottom and the left side, easy enough to repair though.

    Incidentally I've been trying my hand at implementing it as well... and I'm at pretty much exactly the same point as yourself in terms of gameplay, but no menu system or sounds/music yet. I did the placement slightly differently, with a fade-in delay, and I've got peas running around left and right - not interacting with anything yet, but that's a job for tomorrow or maybe this evening:

    My effort so far. Feel free to yoink the repaired 'normal' block tile if you want.

    ReplyDelete
  20. > I've found that there re a few of the blocks and other images that have 1px...
    > Feel free to yoink the paired 'normal' block tile if you want.

    Thank you!

    > I did the placement slightly differently, with a fade-in delay, and I've got peas...

    It should be very similar, but the shadows, the delay and the peas make your editor better than mine.
    I hope to put in some "smart" pea soon.
    Thank you again for the blocks.

    ReplyDelete
  21. A little slow, but I updated the graphics .zip in the blog post is updated with the tweaks you suggested.
    - Normal block is fixed so pixels aren't missing.
    - Shadow is separated from the peas
    - In one place I had RampLeft and in another I had LeftRamp. These names are all the same now.

    I'm starting to see some good stuff coming in! What little path finding I've seen is very interesting.

    Let me know if there are any more tweaks needed for the graphics to make them more usable.

    take care
    Danc.

    ReplyDelete
  22. Sorry for the noise: I'm trying to open the .design file and keep getting a "cannot read the file completely" error. Your other .design files seem to work well (PlanetCute, SpaceCute), so I'm wondering if the file is damaged.

    ReplyDelete
  23. I really like this idea, it looks like the games will be very fun to play!

    I've so far got the editor finished, most of the gameplay framework in, and some (very) basic pea AI stubbed out. Lots and lots still yet to do on the pathfinding, gameplay, and AI front however. It looks like a game at least, but the 80-20 rule definitely applies here, and I'm at best at the 80% to go mark.

    A few more bits that could do with cleaning up in the graphics:
    - The hurt pea still has a shadow in the texture
    - The gel and spring blocks are 1 pixel shorter than the regular block (at least the "top-front" edge is, but the total height is the same). It's far more noticeable on the gel block than the spring however.
    - The background has a white border at the top

    ReplyDelete
  24. I've never worked with graphics of this quality before, and I must say, that even the most insignificant thing becomes really interesting with high-quality images :)

    Great work Danc!

    ReplyDelete
  25. oh, and another one I just remembered - there's a space at the end of the filename (before the extension) of Tool-RightRamp(space).png.

    I have my peas bouncing around and navigating the world in a rough state now, but no wall climbing or intelligent pathfinding yet. It's mesmerizing just watching the little guys bounce around the world.

    ReplyDelete
  26. Working on an implementation in pygame along with 3 friends. The project is up at http://code.google.com/p/cutepeas

    So far we've only got the selecting, placing and deleting of blocks, with plans for the path finding and the physics, but not much in the way of implementations there at the moment.

    Next coding session is in about a fortnight, so hopefully mid to late march for a playable release

    ReplyDelete
  27. That's some great graphics and a cute idea. Or cute graphics and a great idea, not sure :)

    I'm playing around with it, although very casually (on and off on evenings). I've got level construction (http://aras-p.info/img/peaninjas/080216a.jpg) working, and some physics for the peas. Physics is very distracting, I must say, I often just end up playing around with pea stacks (http://aras-p.info/img/peaninjas/081216b.jpg and http://aras-p.info/img/peaninjas/081216c.jpg)... Focus I must.

    ReplyDelete
  28. AP what is that tool kit you are using? Looks pretty crazy

    ReplyDelete
  29. travis: Unity (unity3d.com). Naturally :)

    ReplyDelete
  30. I have started implementing my interpretation of the design yesterday and noticed a couple of glitches with the graphics, some of which I could correct others not.

    fixed: shadow has wrong size (one pixel to narrow)
    fixed: names are inconsistent (Tool-RightRamp has space before dot, Tool-GelBlock vs Block-Gel, ...)
    fixed: background has transparent/antialiased border
    open: some blocks have wrong sizes, for example the ramps are two pixels too small in height (or normal block to tall)
    open: jello looks one pixel to small in height (i.e. the bright blue surface line is one pixel to low)

    For the last two see the the following screenshot:
    http://img137.imageshack.us/img137/7104/blockcombinationszz7.png

    Sorry if this sounds nitpicky - it's details you only notice once you start putting the pieces together.

    Anyways, thank you very much for the great quality art and free design DanC, I'm having a great time playing around with it ;-)

    regards,

    BuschnicK

    ReplyDelete
  31. I have a prototype running where the peas bounce off of each other. Is that actually the intended design or should the peas only interact with the static environment? The current version makes for some interesting, very chaotic behaviour - this may be a disadvantage for scoring points and accurately guiding the ninjas around though.

    Thoughts?

    best regards,

    BuschnicK

    ReplyDelete
  32. @BuschnicK: I was assuming that peas would pass through one another. However, it is part of the design that is open to interpretation.

    Sounds like you are coming right along!

    take care
    Danc.

    ReplyDelete
  33. I've finally been able to upload a screenshot of my implementation's status (silly FTP app wasn't cooperating for a while): PlayWithYourPeas-RS-02.jpg.

    I've been spending quite a lot of time getting the physics feeling 'right' and making sure they add to, not subtract from, the gameplay (the hardest of which has been tuning the springs). As such, I haven't put in the flags, points, and other gameplay features yet. Next on my list is to add climbing walls, then real pathfinding to the highest point attainable. I'll start on the real gameplay mechanics once those are done.

    As you can see in the screenshot, I've implemented the ramps in such a way that if a pea falls/lands on a ramp, it will slide down it, however if it walks up to a ramp it can climb it. This allowed for some fun things like the almost-corkscrew on the right hand side of the image.

    Feedback is more than welcome. :)

    ReplyDelete
  34. Looks nice Richard!

    Here's a screeny of my current status:
    http://img223.imageshack.us/img223/8228/screenshotul9.png

    You can see the physic engine in action with the peas piling up and falling/sliding around. I also have the blocks starting out as ghosts and then solidifying after a while (although the one you can see in the screenshot is the current mouse cursor position and not yet a set block).

    I currently have the ninjas falling from the sky at random positions, dunno if I'll leave it like that though.

    I have taken some liberties with the UI. Chosing a block to place is done via mouse wheel cycling and erasing a block is via right clicking it.

    The physics engine I'm using (Newton Game Dynamics) allows for very advanced simulations, so I'm currently toying around with different surface material properties and spring mechanics. Lots of fun all by itself. We should design some kind of "the incredible machine" clone next ;-)

    An interesting consequence with peas colliding with each other is that they cannot pass one another anymore. If you have a tunnel only one block high there is not enough room for two peas to stack. This rules out my original plan of having peas pass by jumping over each other (ninja style of course!). I haven't yet decided what to do. I think having them collide in physics mode really looks cooler than not, but for AI pathfinding it's kinda annoying.

    Ah well. Back to serious work over the week. I fear I can only continue with this next weekend - so pathfinding will have to wait some more ;-(

    regards,

    Sören

    ReplyDelete
  35. Hi, my name is Richard, and I'm a Pea Addict. I just can't stop playing with my peas.

    :)

    Seriously, this is addicting. In order to at least give my implementation some purpose, so I'm not just watching peas bounce around, I added the scoring and time limit. My addiction has increased already. I'm scared of adding levelling (aka belts).


    As far as the actual implementations progess goes, I've got a few physics issues to deal with (peas getting stuck or going through blocks occasionally - the fun of rolling your own solution), and I will probably add some trap logic next as it's too easy to score huge numbers of points with little effort. One thing I've been thinking of adding is a score multiplier for the total number of unique game cells/blocks travelled while bouncing, as that will render the exploit useless since the number of points possible through traps would be greatly reduced.

    I'm starting to feel a little cautious about adding the true pathfinding and flags however, since I'm finding the current Lemmings-like behaviour very fun to play with. Perhaps I'll implement them as separare game modes for the best of both worlds.

    I also spent some time creating "top-left" and "top-right" ramp graphics, as I often found them necessary to direct my peas bouncing more precisely. I've made the corresponding placement, shadow, toolbox button, and toolbox background additions/changes also, along with a few minor cleanups in other assets like the gel blocks 1px top offset issue. If there's demand for these, I'll see about uploading them for everyone.

    ReplyDelete
  36. Sounds like some great progress is being made! I've been able to play with a couple of early prototypes, but haven't seen one yet with scoring. Could you post up a link?

    Also, if you send me the revised graphics, I can update the main archive so that the 'content bugs' are fixed.

    take care
    Danc.
    danc [at] lostgarden [dot] com

    ReplyDelete
  37. Sure! :) http://www.devras.com/PlayWithYourPeas/Install/

    In that directory you'll find several files:

    directx_nov2007_redist.zip - Bare minimum DirectX redistributable (highly recommended... this was required to run the game on my second machine).

    dotnetfx.exe - .NET 2.0 redistributable. You will very likely already have this installed, so will not need this. But it's here just in case.

    xnafx20_redist.msi - XNA 2.0 redistributable.

    PlayWithYourPeas_Installer_28-02-08.zip - Finally, my implementation!


    Basic stuff:
    - Right-click will spawn a pea.
    - There's a 10 minute timer. Go! Go! Go!
    - The more game cells your pea covers while bouncing, the more points you'll get.
    - Blocks spawn instantly, and delete instantly right now... easier for development. ;)
    - Watch out for the physics bugs... if a pea gets stuck in a block, you can delete the block to free the pea - or just leave it. :)


    I'm very interested to hear everyone's thoughts on it! Balance, tuning, scoring, and so on ideas would be great.

    ReplyDelete
  38. Oops, I forgot to mention - the updated assets are also in that directory. Updated_Assets_28-02-08.zip

    ReplyDelete
  39. Richard, very enjoyable. I like the change you've made so that you only get points the first time you hit a block.

    Here are some balance ideas:
    - Limit the number of peas allowed on the screen.
    - Make the elapsed time the thing that players are measured on, not the points. Instead make the points a goal. So the point of the game is "how long does it take you to reach 1,000,000 points"
    - End the level at the goal and display the player's time on a high score list. You'll likely increase the addictiveness of the game by a massive amount.

    You'll still run into difficulties as the optimal strategy will be to run all your peas over and over again through a single very complex loop. If you set up one good loop, you can get a good score. Still there is some fun to be had coming up with the ultimate loop.

    The addition of the ramp blocks was much needed.

    This prototyping goes a long way in demonstrating that the 'fun' in the design is the falling, bouncing peas and the scoring system. The path finding, flags, etc are just additional tweaks to make the core activity more sustainable.

    take care
    Danc.

    ReplyDelete
  40. would be nice if you had svg's of us poor GNU/Linux users :)

    ReplyDelete
  41. I just wanted to say thank you for this challenge, though I was 2 weeks late of noticing it. I havn't implemented the "fun", but only the editor and the movement of peas. I find it hard to figure out apps to program so I can get better, so these prototyping challenges are great (for me anyway).

    ReplyDelete
  42. very nice article.
    http://www.ankara-nakliyat.name.tr

    ReplyDelete
  43. I love the prototyping sets! It's a wonderful asset for the community. :)

    I am working with your peas game set at the moment and I need a few more primitives.

    Since anything I draw is more of a crime than sad I am looking for a pointer to someone who might be able to create me a circle, triangle and rectangle with the same style and ratios as the square you have created. I would also like a a small rectangle as well (could be used as a rung in a later using the rectangles).

    No idea where to look or what this would cost but thought you may so I decided to ask.

    Thanks so much,

    Christopher

    ReplyDelete
  44. @Christopher.

    What are you trying to do with these new bits of art? I recommend you hack something in with programmer art just to get it working and then show it off. If the result is fun, it'll be much easier to get art. (and your needs will be well defined it you need to outsource it.)

    take care
    Danc.

    ReplyDelete
  45. Hi Danc,

    Probably a good idea, I am pretty far along and have been using the pea set pretty thoroughly which is why I was after the extra primitives.

    I will mock something up for my testing purposes as you suggest I guess.

    I am building a game that expands on the ideas you presented in the prototyping challenge.

    Cheers,

    Christopher

    ReplyDelete
  46. 'sup Ninjas?

    I've got my prototype working up at http://projects.neuron-fire.org/pwyp.

    It's my third version of this game. And for me, the challenge was in correctly slicing vertically. I did it wrong on my previous attempts and ended up with a horizontal and diagonal slice. This one was still sort of diagonal. But at least I got it all together.

    I'm using Box2D for flash AS3 for the physics, and A* for searching.

    Vincent

    ReplyDelete
  47. I finally got around to making some sounds for the game and wrapping up the whole package.

    Blog post at:
    http://www.buschnick.net/Personal/2008/09/ninja-peas.shtml

    Download at:
    http://www.buschnick.net/Ninja%20Peas.zip

    You may also need Microsofts Visual Studio runtime:
    http://www.microsoft.com/downloads/details.aspx?familyid=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=en

    cheers,

    BuschnicK

    ReplyDelete
  48. Hey Dan,
    I've made a Pea prototype. Tell me what you think. Here's the blog of what I learned.

    ReplyDelete
  49. My version of Play With Your Peas made it as a finalist in the Server Quest contest.It's still buggy, and I had to remove shared high scores and some other features due to pathing bugs.

    ReplyDelete
  50. Hey Danc,

    Any chance of posting the vectors in a different format (for us Mac users)? I think you can export to AI from Expression right?

    Cheers,
    Ian.

    ReplyDelete
  51. very nice post and collection.The diagram and chat explain is very interesting and easist tips.Thanks your valuable information for sharing...

    ReplyDelete
  52. Danc,

    Thanks for the Play With Your Peas artwork. I started working on the game you envisioned but when I started to implement the actual gameplay I veered way off into left field and ended up with a physics-based puzzle game:

    http://www.youtube.com/watch?v=RpWUNqpfFXw

    If you take a look at the video you'll see the Peas are still there, and even the blocks -- although I had an artist friend "tweak" them to make them more organic to fit the theme.

    Roly-Polies HD is for the iPad and you (and your site) are in the credits -- thank you for the gift of artwork you provide to the game dev community.

    Jay

    ReplyDelete