Saturday, March 31, 2007

SpaceCute: Prototyping challenge


The weekend is here and it is time for a short prototyping challenge! Over and over again, I've heard the sad tale that there are talented programmers lacking sexy graphics. I, on the other hand, can't program a lick. So here's a thought: I'll provide some quality graphics and a seed of a design idea. All you need to provide is a working prototype of the core game mechanic. :-)

For each prototype I receive, I'll post it up on the website and the learned folks who lurk here can discuss its pros, cons and opportunities for improvement. It should be a good learning experience all around. As we go, I'll add more graphics and we'll see where it all leads. Continue reading to grab the graphics and read the seed idea.


Core mechanic
The core mechanic of SpaceCute is a single player casual turn based strategy game. It borrows the control mechanism from the familiar mini golf games that have been around since the early 90's. The goal is to add a low burnout skill-based mechanic to the shortest interaction cycle in the game. Is the act of just moving units fun?
  • To move a ship, you drag a line out from the ship.
  • The ship is launch in the direction of line.
  • The ship's velocity is dependent on the length of the line. The line has a max length.
Physics, baby!
Objects in the game are modeled as circles. They can bounce into one another like simple billiard balls. The goal is to add a bit of juiciness and nuance to the often mechanical act of attacking another unit. Does the act of attacking a unit feel satisfying?
  • The ship does damage to opponents when it smacks into them during the player's turn. The feedback to the player when two ships collide is a great area to invest some time in getting the 'feel' correct. If we make this interaction visceral through sound, explosions and flying bits, we can enthrall players from their earliest interactions.
  • Friction is relatively high compared to a billiards game so most pieces only travel a short distance when flung. This is still a strategy game and we don't want chaos to reign after a single turn.
  • Are there any interesting combination collisions that occur that we could accentuate with future layers of mechanics? I'd love to build a combo-hit system into the combat.
Turn structure
During each turn, the player can move one ship. The results of the various collisions are displayed. The turn ends immediately and the computer moves. This is very similar to the turn structure of chess or checkers. The goal is to create a fast paced game that eliminates the need for the typical 'end turn' button found in many turn-based strategy games.

Setup
The board is a single screen with 5 or 6 units from each team.
  • What distances between players result in immediately interesting combat?
  • Are there any initial configurations that cause the players to think deeply about their moves?
Tokens
As the game grows, we'll be adding lots of interesting ships with special abilities. For now, we just need some basic ones to experiment on.
  • Basic attack ship: This is the basic ship used by both the player and the enemy. Balancing max velocity, friction, hull radius, damage and health for this unit are all interesting areas for rapid iteration and play testing.
  • Planet: Heavy obstacle that is used to define space on the map.
Enemy AI
A randomly selected enemy units moves towards the closest player at full speed. This is a simple stub algorithm that will be replaced if more interesting behavior is required.
  • AI should execute rapidly (less than .5 second) This is a casual game and waiting for the AI doesn't add much to the experience.
Winning conditions
Let's add a simple stub winning condition that the player wins when all the enemies are destroyed. Pop up a little text screen to let the player know they've completed the game and give them the option to play again.

Prototyping basics
Unit stats and level design is handled with a single text file (perhaps XML). Changing various variable in the world physics, unit stats or initial token positions should be a simple matter of editing the text file and running the game again.

Important questions to consider
Here are some common questions that any one should ask of their initial prototype.
  • Is any portion of the play fun? There is roughly a 95% chance that your first stabs at this design won't be all that enjoyable. Finding the fun and magnifying it over several iteration of experimentation is critical.
  • What is the pacing of the game? Is the player receiving interesting feedback at steady intervals? Do they have interesting choices at the beginning, middle and end of the game?
  • What actions could use better feedback? Often an interaction fails not because it isn't interesting, but because we fail to properly help the player build mental models of what is happening.
  • How do other players react to the game? We, of course, can post the prototype here and get comments, but it is worth while watching someone in person play the game. Grab your roomie or sister. What does she think? Where does she stumble?
Conclusion
You'll notice that there are almost as many questions as there are specs to this challenge. Such is the way of prototyping. In these initial stages of development, expect rapid iteration and rapid learning.

There are naturally dozens of ideas stored away for various ships types and more complex interactions between objects. Ice zones with low friction, units that explode Every Extend-style when they reach their destination, factories, resources, powerups...SpaceCute, the massively single player SRPG! Woot. Any designer worth his salt can generate webs upon webs of dreamy meta-game mechanics. However, unless the core mechanic is solid and enjoyable, these really aren't worth wasting time on at the moment. More importantly, they will evolve substantially once we start figuring out the fun in the core mechanics.

So who is up for some quick prototyping fun?

take care
Danc.

Resources

Graphics:
Here are the source graphics for the prototype. Use and abuse as desired. Again, if you come up with something interesting, drop me a note at danc [at] lostgarden [dot] com. For this challenge I'm happy to post both wacky failures and successes. It is the learning that matters.
2D collision
If you are interested in simple 2D collision and don't have such code lying about already, here are some articles:
Terminology
  • Stub: A simple system that will typically become replaced by a more complex system in future versions. Most prototypes have a few stubs since your goal is not to build a complete game, but to test a theory.


26 comments:

  1. Interesting! Very interesting!

    ReplyDelete
  2. Random note: To ease early prototyping, you can use simple circles instead of perspective corrected ellipses. This makes the math a tiny bit easier.

    take care
    Danc.

    ReplyDelete
  3. Hi there,

    I like your idea. I've hacked together a ridicously simple prototype for you. You can download it from..

    http://riad.de/files/spacecute_0.1.zip

    You can use the mouse to drag ships, right-click to cancel a drag. Press 'r' to reset the level and the number keys '1' to '9' to load levels.

    There is also a game.xml file which includes the level configurations. The first level-tag represents the level that will be loaded when pressing '1', the second level-tag will be loaded when pressing '2' and so on.

    Okay, this version is really simple, but it's a start. It will at least help you to visualise your ideas better and to figure out the scale of the tokens.

    This is the first time that I'm using pygame, so I'm almost expecting that the game won't run. Tell me if it worked and what you think.

    Best regards,
    Riad Djemili
    http://riad.de

    ReplyDelete
  4. Btw.. you can also contact me via

    email -AT- riad -DOT- de

    ReplyDelete
  5. I'm not sure if I understand this correctly.

    I've just bumped into your blog impressed by the cute graphics and detailed game design... and being a huge fan of an old windows space/planet game called Stars! I find my self wanting to make this game.

    Am I able to use these graphics and game design to make this game?

    By the way, I also bumped into your talk about dice wars from sept 2006. There are a lot of good ideas in that post on ways to improve the game. I actually launched a new version of this game in Dec 06 with a couple improvements:

    - multiplayer
    - flagging to end a game early
    - chat etc.

    The game is called kdice, you can google it or google multiplayer dice wars.

    I think the framework I have for games would suit this space cute/crack game nicely (multiplayer, chat, browser based). I've also used this framework for Gpokr, (texas holdem poker).

    So... Can I use these graphics and game design to make this game?

    (you can find my email on my website http://www.rdews.com)

    ReplyDelete
  6. Wonderful!

    I've stopped by kdice and watched a game or two. Quite delightful and a nicely logical extension of the original dicewars concept.

    Using the graphics: I'll respond to this publicly since the question comes up semi-regularly. Yes, you can use the graphics for whatever game you desire. All I usually ask is that if you make something interesting, you drop me a note and link back to this site. I release these graphics to jump start new development projects.

    I suspect there would be a large number of people who would be ecstatic if they could play a modern version of Stars.

    Notes on the prototype: I'll gather up more of these next week since I know of one other prototype that is being started.
    - When the drag distance is shorter than the max launch distance, it gives the launch action more of a 'rubber band' feel that is quite pleasant and surprising. Kudos to Harold for finding this.
    - The higher frictions reduce the opportunity for interesting multiple-collision combos. I find I end up getting stuck in 'ramming contests' of attrition. I ended up with a friction of .02 as the one that felt 'good'
    - Walls on the arena would be useful. Though asteroids style wrap around would also be useful
    - Damage on your characters when you attack is a bit of a pain. Much of the time, you do as much damage to yourself as you do to the others. It would be interesting to see how the game plays with player ships being immune during their turn. Planets for example, could also be completely harmless.
    - The feedback for a good attack needs some loving. RPG style hit points that float away, a sound effect, a flash would make attacks more visceral and satisfying. Think of the clack of the dice when you are attacking in dicewars.

    Interesting opportunities: I've noticed occasionally, I can get a ship sandwiched between two of my ships or a planet. Then, with great skill, I whacked the enemy and it bounced a couple of times. This is a good combo-style behavior that we can reward.

    Great work for such a quick prototype!

    take care
    Danc.

    ReplyDelete
  7. hey Danc, Can the girls and I give you suggestions of "cuteness"? There are so many possibilities, of course...

    Of course there needs to be Kitty people.

    Perhaps a really cute frog ship...

    --Ray

    ReplyDelete
  8. Arrggghhhh,
    This sounds like such a fun challenge. If only I weren't in Beta! Please do another one again!

    ReplyDelete
  9. I'm still plugging away at this. I hope to have a package emailed to Danc by end of Sunday...

    ReplyDelete
  10. I'm working on a prototype as well. I'm not much of a programmer, so I'm using Gamemaker. But considering how much I'm coding (while struggling with learning it and its quirks), I probably should have looked into XNA or something. I could have come out with real development skills.

    I'm crossing my fingers for sometime this weekend.

    ReplyDelete
  11. Sigh... I'm in beta too :P

    Anyway, it just seems to me as though the graphics are a bit too cutesy for an explicitly combative game. I wonder if it's possible to do something more interesting with the core mechanic of bouncing ships... Perhaps a hybrid trade/combat game might work better.

    Trade:
    There are three types of planets - let's call them red, blue and green. There are also three types of treasure tokens, in those colours. When a ship crosses a planet when it has no treasure tokens, it picks up a token of that colour *at the end of the turn*. There may also be Grey Planets, which act as obstacles that the ship bounces off (and gets damaged by).
    When a ship crosses a planet when it is carrying treasure tokens, any tokens NOT of that planet's colour are converted into points. So if you cross a red planet carrying a blue token, you get a point.
    For each token you "sell" in a single move, you get an additional point. So if you sell 2 tokens, you get 3 points. 3 tokens - 6 points. This encourages attempts to "combo" by moving the ship through multiple planets to buy more than 1 treasure token in a turn. The tokens could be things like fruit, butterflies, or suchlike.

    The first player to reach a specific point value (say, 15) wins.

    Ships can still fight as per the stated rules, but no points are awarded. Perhaps you can steal the other player's tokens when you defeat them! Destroyed ships respawn after 1 turn at a random planet (picking up a token immediately, to introduce negative feedback).

    Example: Bob moves his ship through a Red planet and a Green one in turn 1. His ship gets 2 tokens, 1 red and 1 green. In turn 2, he bounces his ship off an enemy with a blue token, destroying the enemy and stealing the token. By turn 3, the enemy is now focused on blowing up Bob's ship to stop him from cashing those tokens in (and to steal them for himself)!

    This immediately suggests a different axis of interesting possibilities for expansion:

    - events that make planets change colour
    - three classes of ships: Defenders, Privateers, and Traders. Traders move a long way but are weak; Defenders are big and can block opponents from doing combos, while Privateers are supposed to attack Traders and steal their cargo. (Although it would probably be best to balance the game with just Traders first.)

    Apart from the concerns Danc articulated, the arrangement of the planets would be of great concern w.r.t. balancing the game. Enemy AI will also be a problem. Perhaps the single-player version will be a race against the clock (move count), with AI pirates instead of an opposing trader.

    Oh, and another note: Instead of dragging a line to launch the ship, how about pulling the ship back (as if firing a slingshot) and then releasing it to launch it? This would introduce a whole raft of different considerations, but I suspect it might be more intuitive to new players.

    ReplyDelete
  12. n.n,

    I like your concept, and I agree with you that a combat game using these graphics feels weird. :)

    One tweak I would suggest is that bouncing another ship does not steal tokens, but does shake them loose so that anyone could pick them up.

    I'm not sure I like the defender/privateer/trader nomenclature, though -- these seem like non-casual terms. ;)

    Anyway, maybe that's something we can explore in the next stage of the prototypes!

    ReplyDelete
  13. However, one thing I am putting into my prototype is the slingshot/pool cue mechanic.

    It's just more fun to propel something this way!

    Thanks for the idea!

    ReplyDelete
  14. I keep thinking about this design too. And well... weird is good imo, especially when it comes to combat, but it can't be combat... it has to be mario style combat, where no one really gets hurt... :)

    I've designed a few ships and aliens, for ya, Danc. And well... they're very cute... though I found myself constantly having to fight my "evil" side, from injecting things that would be "innappropriate".

    For example, I designed a cute camel ship, with a bedouin alien. My thoughts were each ship could have it's own special power. The bedouin could travel great distances without needing to refuel, and then my devious side said, "And then they could blow themselves up if threatened... like the Shofixti from Star Control..." :) Then I thought... no... no...

    I think this would make an interesting analysis sometime, the problems of adults designing games for kids, and even if something is funny or if a developer gets bored, how you can't just sneak it in... such things have a tendency to compromise projects... I think there's an age in which young adults are so completely oblivious to what is appropriate for young children that they would put almost anything in it... just because they think it's funny or "no big deal"...

    I think few game companies get this... or maybe they just don't want to--because it's not as exciting. But in some cases (like Humungous Entertainment or Nintendo) they are very very successful.

    Just some random thoughts from random thoughts sparked by your cute designs...

    I'm out all next week, but if I get a chance I'll try to scan in my little ship designs for you to look at. I'll put them on Deviant. I think you're gonna love the Turtle ship. :)

    --Ray

    ReplyDelete
  15. Hello to Danc and friends.

    If I close my eyes, I can almost hear the tippity tap tappy of keyboards all over the world trying to bend unsuspecting ones and zeros to the will of this design.

    The art is worthy. That much we know. But can we imbue it with life? Perhaps it's just my God complex, but I'd like to think that we can.

    Here's my best effort so far:
    http://danceliquid.com/docs/SpaceCute-0.3.zip

    It answers the question "Is simply moving fun?" with a resounding "Yes!"... but there isn't really much of a game there yet. Oh well. It still makes me giggle. I hope it has the same effect on you. (:

    -Harold

    p.s. Make sure you've got the sound turned on.

    ReplyDelete
  16. Hi Guys,

    I'm working on a prototype, too. My Idea: in every circle there are more than one spaceship. Lets say a number between 1 and 8. You shoot your "circle" of ships onto other circles and every circle, that is moved comes into a battle-round. In a first version something simple as in kdice, in later version something like the battle in FinalFantasy or in "Mario: Lost in Time"(a action-rpg on the nintendo ds).

    So a round could be like this:
    1.) Player1 shoots his space-circle against a own circle and 2 enemy circles, so the battleround starts with his 2 circle-ships together against the other 2 circle-ships and every ship has a dice and the one with the highest score wins...

    I try to code it in the next days, but don't know how much time I have...

    cheers
    questor

    ReplyDelete
  17. Hello again.

    I've thrown up a quick site for my SpaceCute prototypes.

    http://danceliquid.com/SpaceCute

    Go download the latest version and give it a whirl.

    Click and drag to defend cuteness!

    Enjoy,
    -Harold

    ReplyDelete
  18. Actually, cute and violence goes complement each other quite well. How else do you explain the awesome-ness of Stitch, the cute camo of Ultra-Peepi?

    Anyway, my house of cards I built using Gamemaker fell apart once I started adding more than one ship to each side. I've got to gut it and salvage what I can. If you want to bounce some [a] ship against another ship here it is.

    http://www.speedshare.org/fKwo1M5SGA

    Notes:

    You are the Beetleship. Left click and hold to get the selection circle and directional line. Each ship has 100 health, at max velocity a ship does 80 health to their opponent. The damage they do is proportional to their speed when they collide. As you drag the line out you'll notice the tip change colors, green means you'll do damage without taking damage yourself, orange you'll take some damage and red means (80% power or greater) means you'll take half damage. I had put code in so you could shift the other ships when you hit them at orange power or greater, but I think that was contributing to my problems. Hopefully with the recoding, combos will be available. I focus less on effects and sound.

    I let myself get distracted by the neat little things I could do rather than focusing on the prototyping. : / I would have run into the coding problems earlier had that not happened.

    Some quick observations, I implemented the ellipse graphic pretty closely and at the edges of the screen it was awkward, especially if you allow the map to wrap around. While making this I realized how much feedback games give, every little action is rewarded with audio or a small effect. When done well, it's sign of great craftsmanship. I was playing New SMB on the DS recently and when the spikey block characters with faces on it (names) came crashing down, not only did the screen shake and the blocks make a face, but individual block tiles rattled in their seems. It's a nice touch. A while ago I watched an interview with the American tools programmer for Loco Roco and he mentioned one, sometimes frustrating thing, was that Japanese developers tend to spend lots of time iterating those small little moments when other larger issues needed to be addressed. After my first foray into game making, I definitely understand that allure.

    I crashed and burned, but I learned a lot. Hopefully prototype #2 will have less problems. :)

    Mordrak

    ReplyDelete
  19. Mordrak,

    Your prototype is awesome. I love the effects of the jets and the explosion!

    It's called a "thwomp"... I think. :P

    -Harold

    ReplyDelete
  20. Harold, thanks for the feedback. Where'd you get the sound effects for your ships? They match your design well. Mine are too realistic, even though I hope they are just place holders. The collision noise amplifies feeling of elasticity nicely.

    While I like my ship explosion, it's too long and will quickly get annoying. The "chaos" of your prototype works well as a visual reward, the player doesn't need (or want to) pay attention to individual collisions, because it's the 2,3, or 4 other ships that are hit that make it fun. :) The impact sound effect is probably 70-85% of the feedback player needs for individual collisions. Don't wrangle it in too far while making it more of a game. This is a really impressive take on the seed idea.

    Creating meta-goals that destroying opponents is a means too will dilute the experience and frankly, it's less sexy. =P Space is ripe with other details that won't detract from the core game mechanic. Just a few are: suns could have proximity damage and instant death, black holes could constantly pull on ships, worm holes that are a one directional teleports, and planets with orbiting moons. As a two player game that's all it will likely need, though a single player experience will probably need something to diversify the game play mechanics.

    ReplyDelete
  21. The sound effects were synthesized in my secret underground laboratory. I appreciate the kind words.

    I think you're right about the impact sound being important. However, I really like the floating heart lossage animation in one of the other prototypes. I'm definitely going to jack that idea. I'd also like to introduce some cheesy particles at the contact point as well... Not sparks, but maybe some Mortal Kombat like blood? muahaha.

    ReplyDelete
  22. This is so great.
    You to take all this (prototype, material and comments) and generate a pdf and others documents and zip then all together.

    Would be great to starters ando so on..

    ReplyDelete
  23. Well I couldn't help myself and took a little time to whip up my own prototype. I did it specifically in JavaScript just because I wanted the challenge. Also, being an office/Cube sort of guy, we need browser games, not downloadable content.

    It is VERY rough around the edges (hey it's a real prototype). There are some things already implemented that will be worth testing out (gravity, flow, spawns attached to springs).

    There is no sound and really no game quite yet, not even loading from XML (though that would be next on my list). But I wanted to show what is possible in JS. Special thanks to various people who came before me in writing this code (web addresses left in code).

    If I get some more time I hope to continue the project at some point in the future.

    Hit it here:
    my spacecute

    ReplyDelete
  24. I know I'm coming to the party a little late, but the long weekend gave me the opportunity to finish putting this together so I thought I'd share. :)
    Anyway, enjoy!

    ReplyDelete
  25. Scooter -- That plays really nicely, but on my display (firefox, vista, 1440x900) I can only see part of the game play area; the right side and I think part of the bottom are cut off; this makes the game unplayable once I've lost most of my guys (happens quickly) and those who remain are off-screen so I can't control them. But I really like the little orbiting deal at the beginning and I like the visualization of the opponent's moves with the red arrows.

    One thing I noticed is that sometimes I could quickly move out of the way before the computer would have otherwise hit me, because the game lets me start my turn as soon as the computer lets go of the mouse button (I know, I know, it's probably using keyboard shortcuts rather than the mouse). :-) I wasn't sure if this almost-simultaneous play was intentional or not.

    ReplyDelete
  26. Ouch, that's really bad. I thought there might be html table issues on an swf that big (with my templates), but I fell victim to the "it works on my box' syndrome. I used to test on Firefox at work, but I just changed jobs and all I have is IE. Gotta get Firefox installed at home. Thanks for the heads up, for now here's the url of the swf. You can grab that if you like.

    http://www.twobitarcade.com/flash/spacecute.swf

    As for the almost-simultaneous input, yes it was intentional. There are two main reasons. First, I did not want to force the players to wait for the game board to come to a stable state. It seemed to take too long and I quickly got bored testing it. Second after setting it up I realized that the system lets you make some interesting gameplay decisions. If you choose to avoid an attack you give up your initiative for that round. You have to make a quick shot and there probably won't be time to aim. Then the computer gets another shot at you. Most of the time it's probably best to take the hit, but I found myself trying to avoid it anyway.

    ReplyDelete