Postmortem of RacePlant, CIGA Game Jam 2017

Made within 48 hours of CIGA Game Jam 2017. A game of planting tree, and collecting its fruits for score.

Posted by Wasin Thonkaew on September 21, 2017

CIGA Game Jam 2017 during 17-18 June 2017 is the first major game jam I participated in China.

CIGA logo main

That is being said to create a game within 48 hours. The theme announced at the event taking place at Huaqiaodong Dream Space, a cafe shop with space for hosting a small or medium size event.

Organizers posted the theme for participants to think about via image.

Theme
Image courtesy of people.com

So in this post, I will go through my development process. How I organized and split the chunk of time to do each task, and be able to come up with a game that has essential features I aimed for from start.

But before we go through all of those detail, the following is what the game looks like.

raceplant screenshot
Click on image for full resolution

Watch til the match ends, you will know the reason of all actions in the game.

Schedule the Time


I knew myself I will face a hard time trying to implement certain feature if it requires some effort, or spend time too much on certain thing without bound, thus I need to mark the silo of time from beginning.

schedule time

From above, I categorize only main tasks into

Task Alloted Time (hours) Schedule Percentage
Ideation 2.3 17 June, 18:00 - 20:00 5%
Development 36.8 17 June, 20:00 - 18 June, 10:00 80%
Polish (Sfx, Music, Bugs fix) 4.6 18 June, 10:00 - 13:30 10%
Misc 2.3 18 June, 13:30 - 16:00 5%
Total 46.0 17 June, 18:00 - 18 June, 16:00 100%

Notice that it's not entirely 48 hours, as that 2 hours was spent as presentation.

During the entire time, I try to stick to the plan as best as I can to minimize the risk of not enough time that usually happens at the end of overall development cycle; yup, to not miss any particular stuff i.e. sfx, important bug fix of the game.

Coming up with Idea


Look at the theme image, I ever tried to rotate the image to see it from different angle. What it came up to me is the "root".

So the idea develops into "planting", "maintenance", and "collecting". So why not creating a game that allows two players to compete each other. That involves planting tree, taking care of them by watering, and collecting their benefits (fruit, and seeds). With these, we can repeat the whole process until match's timeout. Who gets more fruits wins!

Actually both players win as we help to plant tree for the better.

initial design
Initial rough sketch that shows the idea about tree's planting, and maintenance. Further with divided areas for each player to compete in taking (latter is discarded in iteration).

initial design
Initial rough sketch that shows available areas for taking for advantages.

The big picture of idea is there, but during having done with iteration of each feature implementation, I found out that few features are rather difficult and has enough time to develop, or too much involved with graphical assets. So I cut a few ideas out.

Ideas I removed out during iteration of development

  • Attacking opponent with a bow

    This requires a cursor locking system to be implemented. Use another analog stick to aim, and player's animation needs to be in synced. This idea or see below I saved as reference inspired me to implement this feature.

    Anyway I found this might be too much for the game, thus it's better to remove it. Then while play-testing latter version of the game, by chance I found that attacking can be interchanged with stealing mechanics. As player can pick up bucket, seed, and fruit, and also can place them down on the ground if they want. Thus player can throw it to another player to suddenly make opponent carry that stuff (if such player has empty hand). This is to annoy, and introduce time delay to focus on collecting fruits which are the main score of the game.

    Anyway, from public play-testing by other developers in the event, some suggested that it'd be good to be able to attack another player in some ways. They want to do it in the game.

  • Large area of water tiles

    Water tileset is one of variety in tileset I initially aimed for to have from the beginning of design. During mid phase of development, I found out that it would take more time to have a realistic look of water tileset after play-testing it. So I changed this to have only a single tile to represent water allowing player to fill water into a bucket.

    This idea or you can see below, and also shallow water you see above inspired me and thus I saved them as reference to pursue this vision although cut them out and changed to single tile at the end.

  • Factory to Generate Seeds & Fruits

    Z is old DOS game that comes to my mind. That game has entire map divided into areas. Each area might have a factory to produce something useful for player to use it as advantage to compete with oppononent.

    Z screenshot factory

    Latter in the development cycle, it requires careful judement on balancing, and art creation. Thus I cut it out, and let the tree which players grow to produce such seeds and fruits for endless score until match's time is up.

Development


The tools I use are as follows

As you can see, I prefer to use only open source tools.

Requirement to Run the Game

  • Java Runtime at least version 1.6+
  • Xbox360 controllers for two players (due to the game doesn't offer button mapping as configuration so if you use different brand of controller, button might be changed. But all in all, you can use other controller but keep in mind it's not tested).
  • *Keyboard to control player is not support yet.

The following is a working desk I've occupied to work on the game. It's nearly perfect suitable for standing desk.

working table
Near perfect suitable for standing desk. First ~24 hours, I've standed and worked on the game.

Right after ideation, I quickly started the development process in which I knew deep down in my mind that I'm not a fast coder who can implement something very quickly compared to others as I have noticed this from past experience.

So I stick to the plan, and start coding early. I noticed that I've started coding way earlier than most other participants. While I'm coding, other teams still discussing about the idea; even the next day in the morning, discussion was still going strong but that time I went through already down in development.

I'm not saying working as a team is wrong. But just my taste and this particular of time that I prefer working alone.

Don't get me wrong, I work with others as a team before, many times. Either student, game jam, or commercial projects.

Thing is working in a team, time will be spent in politics which is cost in communication of discussion. You cannot go fast in short term. But if things settle down, things will be faster in long term. Compare that to single or solo developer, you can go in any direction you want, I mean right away. No discussion or approvement, short term is very good, but long term beware of burning out due to you need time to sleep. That gap of time "a team" can still operate.

This game jam is a challenge for me to produce art resource by myself. I'm not artist by nature, thus artistic vision is not yet there. So in order to fasten the process, I did much of the research and tried to find lots of artistic reference out there before deciding especially which color palletes and style to go before drawing.

drawing player
Initial player sprite

Mostly for animation for certain action, I aim for 3-4 frames no more than that.

tileset
Stockpile tileset

coding
Player 1 is carrying fruit while Player 2 is idle. Trees are grew into final state.

bucket sheet
Bucket sheet

bucket sheet
Player sheet

I counted my hours spent and below is what I found

  • 38 hours of development
  • 6 hours of sleep
  • 2 hours of relaxing i.e. watching random Youtube videos, chill, etc

The first ~24 hours is non-stop working. I've stayed overnight at the cafe then get back home in the evening of next day to sleep and relax before continue the work at home overnight until coming back at the venue for presentation.

There's no strict rule that you need to be at the venue all the time.

What Went Right & Wrong


Things Went Right

  1. Cut out Time-consuming Features During Iteration

    See ideas that were removed during iteration.

  2. Focus on Pixel Art Style

    Yes, I'm not an arist by nature thus by focusing on pixel art style which is the possible way that I can achieve with my ability.

  3. Start Actual Coding as Early as Possible (according to scheduled time)

    So with this I have more time to breathe and fix important bugs especially z-order sorting, tile's line bleeding, and camera bounding.

Things Went Wrong

  1. Not Immediately Start with Actual Game Session in 5 Minutes Presentation

    That said, 5 minutes is too short. I instead started with introduction talking in which that time should be well spent else where. The game is more suitable to be presented right away with live demo. Also for solo developer that has worked long hour, speak less to minize risk of doing something wrong and just show the end product is better. So my presentation is not good. This is an important lesson learned.

Gifs in Action


  • Giving Thing to Opponent

    Player can give a stuff which can be bucket, seed, or fruit to other player.

    gif - give thing to opponent
    Giving thing to opponent

  • Growth of Tree

    Tree has 3 step to grow. Only the final step in which it can generate seed and fruit.

    gif - tree grow to step 2

    gif - tree grow to step 3

    Left: Tree grows into step 2
    Right: Tree grows into step 3

  • Generation of Fruit and Seed

    Fruit will be treated as a score whenever player takes it back to stockpile tiles. Seed can be used to further grow another tree as well.

    gif - generation of fruit and seed
    Fruit and seed generated from a tree

  • Collect the Fruit for Score!

    Fruit is a main target for player to collect for score.

    gif - collect fruit for score
    Collect a fruit back to stockpile for a score

  • Fill Water in a Bucket

    Bucket can be either empty or full. In order to water the tree, player needs to fill a bucket first. Find a nearby water tile to fill it.

    gif - fill water in a bucket
    Fill a bucket with water from a nearby water tile

  • Watering the Plant

    Take bucket with water filled to water the tree to accelerate its growth.

    gif - watering the plant
    Water a tree to accelerate its grow

  • Z-Order Sorting

    This is one of major thing I'm fortunate enough to have time to fix it. It can go horribly wrong if this thing didn't get fixed before showing the game to public.

    As not every object has the same size as tile dimension, take for example a tree which has very long height compared to player's dimension. If not sort in drawing order properly, then player might be drew in front of the tree at the situation that player should be drew behind. It's good that the game fixed this.

    It turns out that the fix is easy. Use the height of object, then subtract it with desire size of object i.e. player. Use y position as z position in 2D game, then sort all object according to that value, draw object with bigger value of y first. Do this every frame.

    gif - z-order sorting
    Z-order sorting

Aftermaths


I feel satisfied with producitivity and result I can produce at the end. All essential features I aim for from beginning get implemented, and it's a good feeling that when you play the game with another player, it's fun.

The game got covered as seen in Chinese media here.

Although the game didn't manage to be in top 3 popular vote, but that's totally fine as it's not my objective. Other fellow developers seem to be very interested and had fun when they play the game. That's a mission accomplished.

Great thing is to see people smile and laugh while playing your game.

public play
Thanks to Kim from 手游龙虎豹 gaming media in China for photo

audience
Didn't remember the source, please contact me if you took it

presenting
Thanks to KoooN from DJI for taking this photo

At last, I open sourced the project too if you're interested to know more (note the license of the project).
Head to raceplant.

=> Download the game here, or support us at itch.io.

All in all, feel free to let me know what you think about the game below in comment section.

Happy making game folks!

... ...

Many Thanks


  • Phoebe - for organizing and facilitate presentation as I need to play the game at the same time of presenting
  • Kim - help translate rules and announcement from stage from the start, also misc stuff
  • KoooN - introduce me to Phobe and this event, and also professional photo. Without you, I might not have a chance to create this game.
  • Fellow developers - for very friendly, warm welcome, and support throughout the time of event even after. You guys make game development scene here very warm welcoming! Also not to mention about all advice, and suggestion. Thanks for communicate with me!
  • Xiuyi - thanks for coming by hn, take photo, do social sharing to spread the word, help me communicate in Chinese and demo the game in front of other developers. I'm a single handed thus this helps a lot.

This writing piece is a cross-post from Wasin.io blog.