I always loved the idea of improving the society's quality by improving on people's decision making process and their thoughts. I always loved the idea of making it possible for people to have opportunities to live a good life and take correct decisions. I'm a game developer and am a fan of making games which are deep in game play and meaning and with their mechanics, stories and characters provide entertainment alongside other values to the consumer. I was super excited when I was reading the art of game design book by Jesse Schell. In this year's GGJ I found the opportunity of exploring this a bit more.
Far from daily work which thankfully is super exciting and awesome for us, my friends and I had the opportunity to explore the whole process of making a game without being worried about time, money and many other things. This post is the description of the process and its results and tries to open the gates for feedback (if we are lucky enough and privileged enough) and also teach a thing or two or at least be a fun read.
You can take a look at our game, it's description and video here
Background of the team
We were 4 developers Amin Mousavi, Amin Moazzen, Hamid R Taammoli and I and also one 3d artist, Masoud Zangi. We (the developers) were friends for two years and worked together for more than half of a year and Amin Mousavi and I still work together. Others left us due to university. Masoud (the artist) or as we call him, the substance guy (because of his skill in making substance textures) is a friend of mine from years ago which he was looking for some developers to help him in a game project for Tehran's Mayer’s city improvement programs. We decided to do jamming together about two weeks before the jam and told Masoud to join two days before the jam and he accepted to come the second day. The other developers and I worked together on a complete small game in 6 weeks and some other projects as well and could work with each other fairly well in terms of morale and dev process.
Our GGJ experience
I love GGJ and created the first GGJ site in Iran 3 years ago. It was my third GGJ and all others had their first experience. This was the first year that our country had big sites and a good amount of games have been made. I'm actually super happy that I requested the Iran's game development institute to host this and they accepted.
What is the game about?
Our game is called bias and is about the affect of our actions on our world view and the way that our small decisions make our habits. A wise samurai once said that life is a large string of seconds after each other.
In our game, you control the main character. There is a bar with 3 colors (red, green and blue) which represents influence of each kind of action. Shapes for each color come from the world and you can get those you want and avoid others. When you get a shape of a certain color, its amount increases in the bar compared to the other two and also causes two things. First of all the probability of that shape coming from the world increases and secondly when probability of something goes above 50%, it will turn on its ability on you and when probability goes below 50%, it again turns off.
We have 3 abilities, one of them makes you small to ease avoiding shapes, one of the makes you fast and the other makes you able to see the actual shape and color of objects from a further distance.
What's the bias's meaning?
I briefly touched on it but we somehow thought that this game is a simulation of a part of the world. You choose what to do (what to get from the set of actions), It gives you abilities but at the same times affect your thoughts and you see the world from its point of view. 3 symbols can be money, power and spiritual enlightenment. They can be any other 3 things; you might want to replace them by greed, sex and selflessness or whatever. We choose to make shapes abstract to have this open for interpretation.
How the idea formed?
Our site started the jam in Friday morning and ended it in Saturday night because Thursdays and Fridays are the weekend in Iran and not Saturdays and Sundays. When we started at 8AM we saw the keynote and the presented with the theme by organizers. Then we said nice idea but a hard one. Richard lemarchand's words were really inspiring and awesome for us. 3 of us were there and for no reason decided to decide on an idea until 10:30 and then start coding.
I had the experience of this taking too long so I know we should have some control on top of it but on the other hand we always talked and brainstormed well with each other without much heated discussions so I wasn't worried at all. It was all about fun and we started to have a lot of laughs from the early minutes. I might not remember everything correctly due to my damn weak memory but I try to tell as much as I remember. Hamid asked us to say what we've read on the theme or anything which can be good. By the way the theme was "You don't see things as what they are, you see things as what you are". We interpreted this to people's views based on their ethics and biases and value systems and ... 4 of us are somehow philosophical more or less but Amin Moazzen and I are kind of more in to it. We all talked and joked a lot but we thought we need to walk to think well so left the site and walked the street for more than an hour. A cold but sunny weather was helping us to have more fun. We went to grocery store and bought ourselves some stuff to eat and talked and talked and talked. We were deciding on something which wasn't that good and suddenly before entering the door of the institute I stopped the guys. "I have another idea which might be good".
I said let's make a game about something which is moving in the world and colored balls come toward it and as he gets the balls, he views the world with the gotten ball's color. We can use a unity post process effect like color correction for that I guess. Here things become funny. Thankfully Amin Moazzen misunderstood me and interpreted the idea as, as you good balls from a certain color, more balls of that color will come compared to others. When upstairs on our computers we found out about the awesome misunderstanding and combined the ideas. We talked a little more and decided to start prototyping and let thoughts come in casually. In a beautiful way and to my excitement, it was 10:20 or something around that. The plan wasn't serious but we were on it anyways :)
Prototyping and dev process in the first day
We created our SVN repo on the server that my fellows rented for their other stuff and divided tasks between ourselves. We know we want a creator to instantiate balls and a character to move and some logic for collision. Also we needed to test the camera effect of the visual impact which I thought about. We needed the probability system for random ball instantiation as Amin Moazzen wanted as well so we started coding them.
We talked on using physics or not and decided to go for it. It's not much controllable in a good way but it makes it beautiful so we went for it. We coded our stuff and after a short amount of time we could test stuff. Now Amin Mousavi which overslept joined Amin Moazzen, Hamid and I. We had bugs naturally and until end of the day we fixed them and made the stuff polished. Also we decided that we want to have big effects cause of the actions as well but did not have agreement on what to add. Actually no one did not have a really good idea. It was all laughs and fun without bad kinds of arguments. We implemented a jumping system as well. You could jump by pressing space. We had ideas like these. Letting character to become semi transparent to avoid collisions even when it collides, we wanted to have it as a bonus or pickup or whatever but we did not wanted to add another button so we did not make it.
At first we did not think much about game ending but later on we decided if a bar becomes 100% then the game is over. It had two draw backs; one could effectively make one of the 3 items 0percent and play with the other two. We did not want this and thought it's more fun to finish it if one of them becomes 0% instead of 100%. So we changed that. We did not have much to do because we were four programmers and it's not a lot of code.
For scores Amin Moazzen had a good recommendation which was nice and easy to implement so he (or someone else maybe) did that. When you get a ball with a color you'll get 1 score but when you get balls of the same color in a chain without any other color in between your reward increases linearly. If you get 3 green balls in a chain you'll get 1+2+3 = 6 instead of 3 which you get if you get one ball of each color.
We polished and bug fixed these and went home pretty early about 7PM (For game jams 11PM is damn common). We did not want to add bad code of tired people to it to make it hard to continue the second day. We wanted systems good enough for easy reading and expansion at least by the guy who made them in the first place.
Dev process and art creation in the second day
Next morning the guys started around 9 and I arrived at 9:30. The artist arrived about 11 as well. We did not look at diversifiers of GGJ at first so we looked the second day. The organizers forgot them or did not see them or ... At the second day we wanted to add more depth to it. We wanted to add some other actions for the player to do and make it more like a game instead of a stupid interactive visual program of a philosophical idea. We decided that we want to have one ability per color. We thought we should enable and disable the abilities or actions of each color by one mean or another. Someone thought we can enable when something goes above 50 and turn of when it comes below 50 and it was a nice idea so we did it.
The artist asked us what we want. We described him the game and said we thought about symbols of $ and power and other stuff but later on decided that more abstract and vague stuff are open to interpretation and better for a game jam (More on this in a later section). We thought of simple shapes like pyramids, spheres and hexagons and ... Masoud decided to sculpt us some stuff in ZBrush with the tablet to see what we think. Shapes were good and were being approved by Amin Moazzen generally after few small iterations and changes.
While he was doing that, we thought it's good to make stuff more beautiful, at first when an object was created, it was gray and smoothly its color would change to its original color. This could no longer work for limiting the vision of the player because each color now had a different shape. We decided to put each shape in a marble which is fully gray at first and becomes glassy and transparent. We choose to use unity asset store's hard surface shaders for that and it worked beautifully.
Also we needed to draw our color bar for the user. We had no feedback other than destroying the shapes which were colliding with the main character. I decided to write a unity surface shader which takes 3 colors for bar's colors (red, green, blue) and another fourth color value which in its r,g,b components holds the percentage of each color. Then using the current UV and the values of the fourth color property I could choose the color of the pixel. I've learned to code shaders recently but this was very easy so I’ve done it fast as well.
We needed to also have an environment around the coming abstract shapes and the player character which was an abstract thing as well. It was around 4PM and we had about 6 hours until 10 which was the deadline. Masoud bounced some ideas and one of them got accepted. We choose to put big versions of the abstract action shapes at the other end of the level as well. Also we implemented a small feature that was causing the big shape which its ability was enabled (i.e. its value was larger than 50%) to move up and down to show its activeness. We had time so we were just doing these to make it more beautiful.While doing these we've coded a simple menu and credits page and an ending screen. I put a simple joke in the final message of the game which the guys liked as well. These are not things which you can easily do while working on a real game.
We ended our work around 8:40 and started uploading which did not work due to our slow internet in the institute and I finished those stuff and building the web player and YouTube video the next day with Amin Mousavi in office.
Team morale, discussions and how it went in terms of having fun and debates and...
As I stated previously we had a lot of fun, no one never raised his voice or felt the need to do so. Our previous experiences were like this as well. We canceled each other's thoughts with valid reasons and generally came well along each other. There was no leader by no means. In fact when institute requested for group leaders and we introduced Hamid as leader. We joked about it because the only thing special about him was that he had the task of bringing our chosen food menu to the institute guys to buy our food for us. I yelled there, “Leader!!! Food please" :)
I wrote the name of some people less than others maybe but my memory is damn weak and anyone was super effective really. We tried to have a lot of fun. Out of university and out of work so why not have it. We had good experience and good reasons and also saw a good keynote so naturally should be able to at least achieve this if nothing else.
Generally I think after the amount of fights that we've experienced in life previously and for the kind of personal that we are, we could work as a team really well on anything we choose too and I realize that it's an awesome thing and something to know the value of. What we do as daily business is nothing but super awesome and we have a lot of fun doing it with a great office environment but still, it was different.
Professional software engineering development practices and their effects on our project
Regarding this, I am one of the big proponents of good practices and improvement of the development by having well enough processes and motivated teams. I generally believe that professional software development book of Steve McConnell has a lot of truth in it and if you can combine motivation and processes together then you make software with a high quality in a fraction of the time and with less money compared to others. You should learn the essence however and change the processes as needed.
Surely formal and even informal reviews are not reasonable for a 2 days task but we used many other things which helped us a lot.At first we set up an SVN repo and used it for the whole jam. We could use git or anything else equally well but the whole team was familiar with SVN and it's an important thing. Before coding stuff we carefully divided tasks and tried to have separated stuff for anyone and it's not always easy to do for 4 guys in such a small project but we took the time to do it (many people don't do).
We did a lot of commits and updated and integrated each other’s work as fast as we could and basically as soon as someone declared something working. Then if a bug was found by someone in it. One or more of us first would check that were the bug really is and then the guy on top of that part would try to solve it. I noticed this now that never and never, no one did not tell anyone else that my code is correct and something else is wrong. In fact most of the times anyone said maybe it's my code, let me check it and many people stop their current stuff and would do a quick manual test for the bug. As a result of this we did not continue with bugs remaining there too much. More complex systems took more time but generally the game did not have any technical complexities so it wasn't hard by nature.
When someone would finish his task or just there was not enough stuff for 4 guys to do in parallel we would do pair programming and sometimes the guy just could relax a little to continue with energy or start doing something which is easy but should be done and requires not much decision, like menus.
Before doing something fully, we always first tested it in a small scale (i.e. prototyped it) and if it worked we would do it completely and add it to the game. For example we first played with post processes alone and choose to not go with any of them. We first tried hard surface shaders alone and also the physics based stuff was tried alone as well. Others were things which we had to have.
To manage the complexity and see results fast, we first implemented anything as simple as possible and then made it more complex when it worked. For example we even did not use lerp on color changes of anything (yes ball color changes included!) and later on changed it. Even we used SendMessage for some stuff which their scripts were not available at first and later on changed them. The change was not because of performance, we changed them to be able to track anything from IDE to be able to solve bugs and do late time changes easier.
Believe it or not we refactored some code parts several times during the jam. We could do it because our code was not huge and we did not have a huge amount of work to do but if we ignored it then it could take us much more to fix some of our bugs and it was enough to make our 1.5 hour sooner ready game a late submission.We somehow even did reviews because sometimes when things were not working we would describe it to someone else to help solving it. When something more complex should be written we at least design the way to do it in a high level manner. We were more ok with my fellow doing it right or help me to do it right and did not want to do it in a selfish manner.
How we can improve the game
The game can be improved in several ways. We could change the color of the shapes which are alive at the moment when percentage of something goes up, other than changing probabilities (Thank you Amir Mobini for the nice idea). We can add multiple game modes. The current one is survival somehow but we can have level based modes. Make blue 65% in less than two minutes, remain alive for 3 minutes with no bar less than 30% and ... Levels like this which can become harder and harder. These even can simulate life situations which push you toward some stuff, sometimes for good reasons and sometimes not.A local multiplayer can be added as well. We can share the bar and share half of the world between the players and also give each of them a quarter of the world for their own. Each has his/her own bar but the shared bar is the average of the two which is the one causes wins and losses. The shared part uses probabilities of the shared bar but personal quarters use the personal bars. The idea of this local multiplayer just came out while writing this.
Potential for becoming a product
If we add the game modes, take some good feedback, I think it can be a valid PC game on windows store and Ubuntu store or even steam maybe (who knows) but it requires a lot of work.
The abstractions and their appropriateness in a GGJ game and a real one
We choose to make the game abstract to be more artistic and because we did not have the time to think much about its art and make them as well. I think for the GGJ its ok. For specific games it's ok as well. When it was ok for The Marriage, why not for something else. However I think it's possible to remove some of the abstractions in the game and make it more understandable and direct and let people play with it and use it as a medium to understand the world in a better way.
Educational aspects of the game
We did not teach anything directly in the game but theoretically this game (especially if we remove some abstractions in a good way) can have a good educational value. Nothing is not added to the game to make it educational but the main game play can show people the effects of their actions on their thoughts, can show goodness of moderate thoughts and actions when it's required and thinking outside the box when you want to achieve something which cannot be achieved by following footsteps exactly.
I hope this can at least create images in the minds of people playing it and when they read/think about these concepts, the game helps as a mental image and small simulation of that but I’m not sure if it really can do that or not. My dream is that we can get feedback on this aspect from someone like Ian Bogost or Raph Koaster. Fortunately thanks to gamasutra it's not that impossible. Anyone from the industry, if you are reading this, please comment (I cannot name you all :) )
It is one of the two main reasons which I’m writing this blog for. I'm writing this to get your feedback on it and see how much good/bad attraction we can have, and also I’m writing this to tell others about what we experienced and get the stream of knowledge going. I fully understand that we are not big rock stars of the industry and might not be members even but at least we are making software from game technology to games for a few years and might be able to teach some less experienced people a thing or two hopefully.
Next year's GGJ
As the result of the fun we had and what we made, all of us stated (without existence of the question at all) that we'll do the jam next year as well.
Details which might not matter
I was listening to Metallica's awesome "Don't tread on me" while writing this.
We are generally tools and multiplayer game developers but we could change directions on the jam because we love games and we love these kinds of games. Papers, please and Cart Life are awesome btw
I should thank all of my friends for making it happen and thank Amin Mousavi additionally for proof reading the post.