Games

Home | Projects | Games | Contact
============= |
============= |--- Images


Super Dodge Ball - my homage to Super Dodge Ball on NES by Technos.
  • Linux x86 binary
  • Released October 6th 2010
  • Windows binary
  • README is included in the tar/zip package, with useful info such as controls.

  • Updated Feb 20 2011
    Removed system font dependency

    Development process

    I had the following objectives in mind before starting:
    1. Make a full game on my own, excluding music/sound composition.
    2. Work on a game that I would enjoy playing.
    3. Have arcade style gameplay.
    4. Program a game in 3D, as I don't see challenge in 2D programming.

    Since this is my first game, it seemed reasonable to aim for a modest result.
    It's too easy to aim high and fail when you see whats on the market.
    But I still wanted a good challenge for the AI part.
    I didn't have any original ideas so remaking a game I liked was a good choice.

    My recipe to make a game:
    - Make a generic menu sytem, as it will look like in release.
    - Create the database/save logic.
    - Work on gameplay and AI, using simple geometry( stickman, cubes ), all in wireframe.
    This way, gameplay logic won't depend on model animation.
    If you can't get the gameplay you aimed for, scrap the project. No time wasted on graphics.
    - Work on graphics, animation
    - Balance gameplay/ai
    - Work on sound and music
    - Balance gameplay/ai ad eternam


    //=============================================================================
    The Menu system

    A menu system should be simple and fast. Period.
    Trying to immerse the player through an artsy, and maybe obfuscated, frontend is
    a waste of time.
    Final Fantasy 1-9, Chrono Trigger, Castlevania SOTN, Super Dodge Ball, Super Spike V'Ball, etc.,
    all have a simple menu, and somehow manage to pull me in for hours. Go figure.

    One thing though that annoys me, even in those older games, is the lag, or screen fading, added
    on purpose or because of bad programming. Screen change should be instantaneous.

    //=============================================================================
    Gameplay

    I started working on the team gameplay first instead of bean ball mode because it seemed
    more challenging on the AI level.
    Also because I intended on having a world cup mode just like the original game.
    I explain later on why I dropped it.

    //=============================================================================
    Team mode

    First objective was to have the AI play against itself, this way it would be easier to integrate the
    user input later on. Doing it the other way around seemed like asking for trouble.

    When integrating user input, jumping was tricky to implement. I you played the NES version, you'll
    notice that jumping is triggered by pressing A then B or B then A.
    Having the jump on a 3rd button would have been easier.
    When you think of fighting games, each combo is usually assigned a fixed trigger sequence.
    But here, jumping has 2 ways of being triggered.

    What I fixed:
    -Special shots that hit the ground before getting close to the target.

    -Passes that fail. My passes always succeed unless intercepted.

    What I implemented but dropped later on:
    -Running by tapping left or right twice, and your player walked by default.

    -Ball control for normal shots.

    What I did not implement:
    -Pass interception by the AI. I thought the NES AI did not have it either,
    until one match against the USSR, where, to my surprise, one AI player intercepted.
    I haven't figured out the logic for this one yet.

    -Getting hit and dazed by a pass.

    -Rolling on the ground after getting hit.

    -Slow down effect on running like in the Kenya stage, I never liked that.


    //=============================================================================
    Bean Ball

    What I wanted:
    -more balls
    -more players

    Getting this mode up and running was quick. I used the team mode as a template and stripped it down.

    It became obvious as I tested that running by tapping twice the direction was frustrating, due mainly
    by the 3D implementation. And the AI was not limited to 8 directions.
    In the NES version, moving up and down is very limited, as it's mostly a side scroller.
    And I wanted to use the D-pad no matter what, so I made running the default.
    And did the same for team mode, while having to disallow moving outside your area.

    Same problem with controlling the shots. If I limit you to throwing left or right, then changing
    the ball direction is done with up and down, no problem.
    Now in 3D, you can still easily guess what the 2 perpendicular directions to press are.
    But since I'm limiting movement to 8 directions by using the D-pad, I have to enable auto-targeting.
    That's the issue, because auto-targeting changes the ball direction and the user can't quickly figure out
    the perpendicular direction that will modify the ball course.

    I had to disable it.
    I was disappointed because the control shot is key in the fun factor of the original game.
    Later I came up with the special 'manual' shot without auto-targeting,
    which you can also slow down by pressing the opposite direction.

    I haven't tried using the analog stick, but I still think auto-targeting is the way to go.
    In this mode, especially with many balls in play, the action can be too fast to give you time to aim.

    Bean ball mode is not present in the arcade version, or the PCEngine one. It's only in the Famicom/NES.
    Note that the pass button works but is still useless. Maybe the programmers used the team mode code
    because of memory constraints.
    In my version that button is used for dodging, which is very useful. But I thought of that later on.
    The first thing I tried was a standard shot with no auto-targeting. I came up with the dodge
    from the frustration of getting hit while holding the ball.

    //=============================================================================
    What makes the NES version enjoyable

    What makes me enjoy a game is a balanced combination of different elements.
    In order of importance these are:
    -User controls. Must be responsive.
    -Gameplay that's not frustrating
    -Music. Forgettable music can make me pass on games.
    -Graphics must not be too generic. They should give the feeling that some art direction is behind it.

    So what compels me to replay Super Dodge Ball on the NES?
    Cons:
    -The controls lack precision and can feel unresponsive.
    -There's heavy sprite flickering.
    All of this obviously because of the limited hardware.

    Pros:
    -The 8bit music and sound rendition is better than it's 16bit counterpart on the PCEngine.
    -Every player on a single team looks different, instead of one big captain with smaller generic players.
    -Special shots vary and are easier to catch. On the PCEngine, the specials are too fast and unoriginal.
    -facial expressions make it charming. Sending your opponent flying and crying with a special shot is funny.

    All the pros make up for the cons in my opinion.

    //=============================================================================
    Graphics

    At one point I had to start on the graphics.
    The controls were spot on. Both game modes worked.
    The AI was more random than clever.
    As I tested my game, I thought it was boring.
    Increasing shot and pass speed helped a bit.
    Having precise and responsive controls also made the game too easy.

    But you can always improve your work, you have to learn to move on.
    Procrastinating has always been a big part of me.
    When I face very challenging work, in this case the graphics, I tend to delay it
    as much as I can, fearing failure.

    Giving my game it's own personality was going to be a hard task.

    1. The player models
    I wanted my players to look short and stocky like the NES version, and using cubes
    was enough.
    Giving them eyes, if not full faces, was important.
    First I tried sheared cubes for the eyes. Made them look like robots even more.
    I was quite surprised how using cylinders instead improved it. In terms of polygon
    count, the faces come second behind the ball.

    In the NES version, each player has a unique name, look and special shot.
    Since I opted for generic looking players, I decided that the user would choose
    his special shot.

    2. health bar
    Since you can't tell them apart, displaying the health
    at the top of the screen was not an option. Placing it on top of it's head
    was a good call.

    3. the damage counter
    I remember when Final Fantasy 6 ( FF3 US ) came out and how I missed the
    bouncy numbers from FF4 ( FF2 US ). This was easy to implement, and I can easily
    change that animation to anything else.

    4 the warning lock-on
    Another special effect I'm proud of. I first saw that in Omega Boost, then in Rez.
    For a while, it would focus on your own player, telling you someone was
    targeting your player. But when I tested, it didn't help. Recently I changed it
    so it would focus on the enemy, and it made a world of difference.

    5. the title animation
    This is my homage to the Gamecube OS.

    6. the stage
    Nothing complex here.
    I'm still working on a ground texture to give it more depth.

    7. Droping world cup
    To have a world cup, you need different looking players
    or different stages if not both. It became obvious this was too much work
    for my first game, so I dropped it. I might add it later, after creating better
    tools.

    //=============================================================================
    Music and Sound

    I knew from the start that I would use the NES music and sound,
    no questions about it.
    I planned on having ogg vorbis files, and use lib-vorbis or FMOD for playback.
    When I found Blargg's Game Music Emu I was excited.
    It took me only 10 days to learn and implement sound using Alsa and integrate
    the music emulator.

    Because I chose to have the players run by default, I don't play the running
    sound, it would be annoying and overload the buffers.
    Same issue with the jumping sound in bean ball mode. When there's many players,
    that sound is annoying.

    //=============================================================================
    Balancing and final word

    The programming part is easy for me, I can figure out and implement systems in reasonable time.
    But balancing gameplay is tough, and I was constantly tuning it throughout the project.
    Making a game hard but not frustrating takes time.
    It's easy to whine about gameplay not being to your liking, but try doing it yourself.

    In the last 2 weeks I recoded the AI for both modes. It's more predictable, but
    better. Only recently did I start enjoying it. I still think team mode is too easy.
    Bean ball mode can be a real challenge if you go for all the kills.

    So what exactly makes you want to replay my game.
    Theres no campaign, no scoring system, no online mode.
    The word 'Gameover' does not appear.
    Reminds me of Ice Hockey on the NES.