My Global Game Jam 2017 Project
I just decided to document my global game jam 2017 experience. I do this to document my creative process in developing software and to improve my English writing skills. Therefore, I will update this post until the end of ggj on a regular basis. If the result at the ggj is satisfactory, I may even continue the project.
07.01.2017 – Goals and Preparations
I participate in GGJ since 2011 and used different technologies and platforms to develop games. For this year I will use a pre built libGDX based protype of entities, classes and assets and a Samsung Galaxy Pad 2 to test my game ux with some strangers. What the setup will finally include at the start will be posted at the beginning of the jam.
I also jammed in different group sizes, ranging from two to six persons per group. Both have their advantages and disadvantages when it comes to create and finnish a certain concept in time. I can just encourage to work in a group with at least one artist to realize a good and appealing game design.
Nevertheless, this year I will try to play the lone wolf and create a game just by my own. Not because of lacking capacity for teamwork but for speeding up things. Less talking, more coding. And hopefully, I will have this year a fully working game which also makes fun to play with. Which brings me to the last goal – less is more.
09.01.2017 – Setup libGDX and First Steps
I just created some generic menus screens. These also include screens to preview stages or characters before start, as known by many games. I created some draft models with Blender and wrote a small loader class to import the models as g3db files. The first problems already arises, there are tiny glitches in the imported model.
The above model is the original blender model, just before the export. It shows a fictional snippet of a racing track through a generic city. The model below is the imported one (don’t mind that there is no lightinig yet). The glitches of the blue race track boundaries may be caused by incorrect mesh grouping, which I will fugure out in the next days. I am already so happy that I make comprehensive preparations this year. I really don’t want to struggle with basic issues at the global game jam, as I did in the recent year.
14.01.2017 – Main Menu with Preview Screens
After a week of hard work I finally have time again for my ggj preparations. I did not fix the glitch issues yet but moved foward to create a final game menu structure. Every game needs an appealing menu. It is the entry point, the first impression. So my game menu should have the following features:
- Good background theme, to represent the overall game experience
- High quality background image, supporting the game/ggj theme
- Custom font styles, because default fonts are always boring
- A basic menu structure, including start screen, options screen and screens for (see next entry)
- 3d preview models of the maps/stages and characters/vehicles
The background music is already finished and will be included soon. I will also add the final background image at the very end. This is because I want this image to be perfect. It should finally reflect the whole game fun in one image. Therefore I will render it with Blender and it will display a scene with some of the main characters/vehicles and a certain action event. This of course requires all the models and the core mechanics to be definite first.
A custom font is already implemented. I use Xolonium as an open font, since its future fashioned but yet readable. I may replace the font if it fails to work on mobile devices.
The basic menu structure is also finished and the game can now load arbitrary g3db models and display them on a preview screen to give an impression about what the level/map will contain. This has already been done at the last post update but it was not clear then, where to place this model. So here are some screenshots of the current state:
Note, that all the content is still in “placeholder” state and I will definitely replace it, once the global gamejam has starts and the final theme. Stay tuned, in the next update there will be a video of the menu and the first game mechanics. There is one week left until the ggj starts and I am looking forward to finish my prototype in time.
20.01.2017 – Global Game Jam has Finally Started
After another week of hard work and project work until midnight, I finally started including the official GGJ 2017 theme. I personally like the 2017 theme (which is called waves, as you can read on their blog). It is clear to understand and easy to transform into a big bunch of ideas.
So my concept will basically consist of a linear racer (no curves) with an infinite track length. Obstacles and powerups will occur but may change in waves. Those waves will come in random intervals and change the environment. Depending on the coming wave the player will have to decide, wether the powerup is yet reachable or alrady be transformed to an obstacle. The goal is to get the highest score. The score will calculate from the duration and the speed. The longer and faster you drive, the higher the score.
A personal note: I have been way to excited und so I unintentionally released information about the theme too soon. There were still jams which have not released their theme. I have to admit that I didn’t thought about it enough. Too much action before thinking. At least this will not happen for the next years and I hope this has not affected any other jams out there. And again the theorem of programming applies: slower is faster (int the end). At the end of the day I also had already a logo for the game.
21.01.2017 – Concept Tweaks and Graphic Issues
I decided to change the graphical / design concept a bit. Messing around with model imports from blender, as well as importing and fixing textures, makes me go crazy. It is basically working but it takes too much time. From now on all my graphics will consist of plain colors. With the right tweaks this can even look beautiful.
Before going deeper into the color design, I need to create a waves engine. Since the whole track is a linear infinite road, it needs to procedurally generate the next elements of the road based on the player positon. Everything behind the player is removed. This requires a careful handling of the disposal of content.
I implemented this feature with a Queue of objects, which I call phases. Each phase consists of a ground, a wall left, a wall right, optional obstacles and non-collidable scenery objects behind the walls. There are always up to ten phases in the queue ahead of the player. Each phase has currently a size of 64 x 64 units in dimensions x and z. Once the player position reaches the ground of next current phase, the first object in the phase queue gets disposed and a new phase is created. This Phase class also keeps references to the instances, which makes it easy to also dispose their models and remove them from the collision engine (Dynamicsworld in Bullet).
It is late in the evening and I just completed the phase engine. For testing purposes I let my Wacer run an infinite road up to 1000 phases without error. At this point I am already satisfied with the outcome of the global game jam, because I conceptualized a structure for infinite procedural generation and disposal of a 3D scenery. Tomorrow will be the final day.
22.o1.2017 – Last Tweaks on the Last Day
It is the morning of the final day and it happended AGAIN – I run out of time. But it is okay. I participated ggj since some years and it is completely normal. Plans and expectations are always higher in the beginning – while outcome and gameplay often tend to be a trafeoff between temporal and human resources. So I completely remove the preview of the map and the vehicle and just focus on one map and one vehicle. If there is any time left (which I dooubt) then I may add more models there.
Now it is noon, I am hungry without lunch and there are few hours left. I have a big problem: libGDX uses a physics engine, which takes most times good care of the collisions. Unfortunately once my vehicle becomes too fast, the collisions with the obstacles is not dispatching to the contact listener. I could not find out wether this is an issue of my code or caused by libGDX or by Bullet.
Tomorrow I will summarize my experiences and my used tools.