So, Jam it is
My first LD. What an experience so far. I uploaded my game 2:59:30 and hit save, but the time ran out for publishing it :(...... So now I have a gfew more hours to make it actually fun.
My first LD. What an experience so far. I uploaded my game 2:59:30 and hit save, but the time ran out for publishing it :(...... So now I have a gfew more hours to make it actually fun.
I always wanted to attend a game jam, be full-on creative and productive and in the end satisfied with me and what I have achieved. But, I am a big time procrastinator and can easily come up with hundreds of reason why not to do something.
I became fond of LD38 around start of Febuary, so two months prior of the event and back I told myself: Yes dude, this time you will participate.
So I got myself a bit familiar with Love2d. I wrote a parser for a Tiled Map, rendererd that map and let a small player walk around it. The animation consisted of 3 phases where on each step the next phase would be shown. Pretty cheap, but it looked okay. This took me like a few hours over the period of a few days, while beeing on vaccation with my girlfriend. Actually this was a nice experience, because the Wifi only worked inside the hotel lobby, so I actually could not sneak on stackoverflow. I actually needed to think about the problem myself and just come up with a solution by myself.
Anyway, when I came back I added the Ludum Dare date to my calendar and then mostly forgot about the little map project and thought: "This will be a good starting point for whatever will come up in Ludum Dare to start with." Man was I wrong.
LD38 day came, and it starts at 3 am, on a Saturday morning. I started at 3pm, 12 hours later, cause I slept at my girls house and was not sure if I will even participate. As a professional procrastinator it is easy to find whatever reason to let things slide. I told my girlfriend: "Hey there is this thing I always wanted to do, but I am a lazy ass...". She then alsmot kicked me out of the house and pushed me thru the door. Yeah guys, get someone who belives in your dreams and wishes more then you do!
So I jumped on my bike, rode to the other side of the town to my place, rushed into a nearby supermarket, bought a bag full of Volt cola, which is pretty delicious btw, some minced meat for spaghetti bolognese, fruit, yoghurt and some sweets. After unpacking the groceries at home I sat down to see what the theme is for LD is, so that I can develop some ideas.
-was the theme name.
"Okay, hmmm, what?, really?!, why not... well, that could be like anything!", I taught to myself. While cooking my pasta and sipping my cola, I tried to come up with a game idea for the next 2 days. The plan was to cook something bigger upfront, so that I just need to heat it up later on, and that food and cooking will not distract me too much. As a side note: A little distraction is absolutley needed even in those 2 days of limited time, to get way from the computer, clear your thoughts, etc...Also I did not want to rely myself on delivery services for Pizza etc., because if I get hungry at night, I would be doomed, cause in my hometown they deliver till midnight max and start at noon...
I had a few ideas, like: Paperboy! You ride your bike thru the neighbourhood which is only like a block wide or a street long with some obstacles, like fences, dogs or rival paper boys who would chase you to steal your route. The Ludum Dare rules are, if I remember correct, everything must be done by yourself! So the question to myself was: can I draw a guy on a bike in diffrent phases(meaning animation)? Nope... I googled a bit and found some pretty sweet graphics, but then I thought:No, man. You have to do everything on your own, from code to grahics and sound, so I abandoned it.
Most of the ideas I forgot. The one that sticked and become a thing was: "a fish in bowl". He would swim around and one day a bigger fish was added to his small world, making his life miserable, cuz this guy would try to eat him, and you would need to hide in an shipwreck or water plants... In my thougths this was a 3d game where you the player would look from above the fishs head and swim thru the fish tank. Yay, cool! I had an idea. But hold your horses. Have I masterd some 3d engine like Unity, Unreal or whatever to pull this one off. At a weekend? With 3d models and physics? Hell no! I had fired up Blender a few times to construct some models, but a complete 3d game with logic etc, was simply unrealistic.
At this point I almost gave it all up, cause all ideas I had were simply too complicated. I talked to my girlfriend and I said I was unsure about what is going to happen this weekend and with my plans for it. She said that everthing is fine. "Do not put too much pressure on yourself. If it works, it is great. If not ... guess what? The world will still be the same on Monday". True, true, but I really need this. I do not know for what: But a nerd's gotta do what a nerd's gotta do!
I liked the idea of the fish in the tank very much. Can I transform the idea to a simpler one. Maybe 2d! Swim left to right and hide somewhere? Hell yeah! Can I scribble some dumb fish and let it swim around and then there is a bigger fish and you have to run (actually swim) for your life. Sure, let's do this! Something clicked inside of me, and I just started with that. I fired up Zerobrane Studio, tuned in some focusing sound from noisli.com and off it goes!
I attached my graphics tablet to the computer, which I bought for 60 or 70 bucks 2 years ago, for exactly something like this event and which remained untouched ever since then. I fired up Gimp and started to skribble. "Oh god, this is going to be horrible". It just looked rediculous. Even graphics tablets are just a waste of money or I am to clumsy. I bet on the clumsiness. Same happened when I tried to do it with the mouse freehand. Pathetic! Graphic tablets exist for more then 10 years now, or even longer, it simply has to be me! I absolutley wasn't prepared neither for the graphics tablet nor Gimp, and both are a pain in the ass if you need to pull something off quickly with almost no knowledge. Time was ticking away. Valuable time, which will be missing at the end for... For what exactly? I only had a mediocre idea and this all was JUST FOR FUN! So put the pressure away and make this fun, for gods sake.
I took a sheet of paper and a pen and started drawing some fish. Not a beauty...But way better than with the graphics tablet or mouse. And now? I needed it digitally. I took my Android phone, took a picture, synced it with Google Fotos, copied and pasted it into to Gimp. Inside Gimp I used the path setting tool. You would place dots statring at some arbitrary point and you add a next point which is automagically connected to the previous point, and so on and so on. This I used to draw the outline of the fish. I filled it witch some greyish color, exported it to PNG and loaded it in to Love2d.
90% of the code I had copied from the tiled map project I did 2 months before I throwed away and just used the strcuture to start the main loop and draw the fish. I had defined a player object back then which had the position of the center of the screen and on the keypress of left, right, up or down the player position would change into that direction. My fish started to move around. It was a start...
I needed some animation, so that it looks cool. A fish does not move much, it has no legs, it wags it's tail and fins to swim forward. So I needed more images to create the illusion of a living fish.
When you, the player, would press a button, e.g. like right arrow then I would draw the 2nd image and then the 3rd and after that the first again and so on... Inside Gimp I created a new image with 3 times the width of the fish for the swimming to the right and beneath that the mirrored images for the swiming to the left. In Gimp it does not look like much when 3 static images lay next to each other until you let the animation play inside your game and I was happy to sea "Sushi", which was his name from then on, "alive".
I drawed a simple blueish background with walls, a table on which the fish tank would reside, some sand in it and let it swim around. Booyaka!
I was not much pleased of my graphics at the time, because I consider myself more a programmer than an artist and just needed something to work with. In my imagination I would create super duper code from now on and create a small but nifty 2d action game. Man was I wrong again....
I drawed some seagrass too, and with my stupid method of animating it, it was wiggling way too fast. But I wanted to fix this later...
The width of the fishtank was twice the width of the resoltions width, so I needed a camera moving around, which was a cool effect. The small world of my game had some boundaries like the sandfloor, the waster-surface and some left and right bounds. I needed to determine if I would hit the boundaries so that I can add reactions to those collisions. I could have simply checked that if the players boundaries would overlap with some other boundaries, but NO, Mister Smartass decided to uses Löve2d's physics engine, Box2d, to add objects which would interact with each other. Because here, the engine would tell me that I had hit something, by hooking myself into some callback. I never had done this before and it took me a lot of valubale hours to define all boundaries as static objects. The player, or Sushi is a dynamic object, which would interact with the environment and move around at some speed. If objects collide with each other, callbacks are triggered. So, in the beginning, the callback that Sushi hit something, for example the grass would be triggered always because I screwed up the boundaries, as Box2d uses the middle of the objects rectangle boundaries as it anchor point. At some point I realized that Love2d has a line drawing function which takes points as input. So I could draw the hit box of my object. This helped me lot to understand what was going wrong and how to fix it then.
It was somewhere around 4 o'clock in the morning when I had Sushi swimming around inside his world bouandaried, animated and seagrass wiggling. I liked what I have achived so far. Time to get some rest.
4 hours later I woke up, brew some coffee, and started again. I needed and wanted to make the game fun. Again, this was a very productive day, with no distractions besides a short walk in the park and lunch.
I recorded a short video sent it over to my girlfriend and she replied: hey sweat, now add a shark.
A SHARK?!?!?! This is a fishtank! How and why on earth would I add a shark?!?!? How could she know. It didn't look like a fishtank. It actually looked like the sea. So after a couple of minutes, the idea sank in. How awesome! A shark is big, and hungry and needs food.
Sooo, lets draw a shark then.... Again I drawed a fish, but bigger, with the same procedure and tools as before. Again it was painfull. Here and there I was really furious because Gimp wouldn't do as I wanted to. This isn't about Gimp. Gimp is awesome, an unbelievable good piece of software! You simply have to understand and be proficient with the tools you intend to use to survive this endeavour sanley.
I needed more physics for the game. The plan was now that Sushi must hide in the seagrass cause he stand no chance against a shark! The seagrass is a static object and does not move but you cannot fly/walk/run thru a static object in Box2d, so you need to filter that out. If the seagrass would be an dynamic object, then the shark and Sushi would move or accelearte it upon collision, which you do not want. The grass would fly around, which would simply be rediculous. So a few hours later I could swim inside my boundaries of Sushis small ocean world, which still had the boundaries of a fish tank -> DANG! The shark would swim left to right and back and upon a hit with Sushi, you would die by displaying a fishbone, which I needed to draw too. Both, you and the shark would have 100 energy, and each second you both loose one point. Sushi could stop that by hiding in the seagrass. Also Sushi was invincible inside the sea grass. So for now, you could starve hime to death.
Later on I added sound. I installed Audacity, Rosegarden and some Midi-Tracker but realized after a few minutes that this is not going to happen: I have no time to learn a new tool.
I found an online sequencer and imitated the piano sound from the movie "Jaws" when the great white attacks. The output from the online sequencer was a midi file and I needed to convert that to mp3, which is pretty simple when using Linux. Also I added a failig sound when the shark would get you.
I started to upload my product 2 minutes before deadline and went to bed after that. I wasn't that satisfied with the end product as I hoped for, but I tought and still think, that at some point you have to pull the plug and just call it a day. This was it: I had produced something from zero till the end.
What a blast! What a great productive weekend. An truly awesome experience. I learned a lot about myself that weekend and I am very thankful for getting and taking the time to participate in LD38.
I am still amazed that to my contrary thinking I made some nice graphics. Sushi looks kinda sweet and the Shark looks cool. I would have imagined that I could have used more from the little map demo 2 months prior, but I did not come up with an idea around that. I guess I should have brainstormed more....
I need to master my tools, like Gimp, my Wacom Pen & Touch graphics tablet, some music tool, even that Online Sequencer rocks! Lua and Love2d, but also, I need to be more structurized. At some points it felt a bit chaotic, maybe it was the pressure of geeting it done, and working 100% alone.
I liked that once I came up with an idea that I could rate it as realistic and go with it, or ditch it and postpone for next time or next life :-p.
I did not managed to make the game really fun, it was something like Flappy bird in the ocean, I realized. Two hours before deadline I started to work on the shark AI. This was definetly too late. The shark is dumb. He will turn around when Sushi is near and swim towards you. But it does not create a real tension. Sometimes he swims backwards, accelerates to infinity, and what not... This is the most buggy and underdeveloped part. I had wasted a lot of time on graphics and physics. If I had started 12 hours earlier this could have been done, theoratically. But would I have come up with an idea or the will to do anything 12 hours before? I guess not. I would have found some good reason to cancel it all. So everything is cool.
In those 2 days, from Saturday 3pm to Monday 3am I haven't browsed the internet besides online docs for Gimp and Love2d, read news or watched TV. I simply did my job. I slept for 4 hours the first night, which to my astounding was sufficient. Something else gives you the energy to go on.
I still have no clue where the motivation, inspiration and discipline came from in those 32 hours. For a hardcore procrastinator like me, this was a big thing, and I really hope that it wasn't unique.
Was it stressing ? Hell yeah! But good stress.
Was it fun? Mostly, but not everything to be honest, but that is my problem to figure out, get better at graphics e.g. and be better prepared with my tools like engines/api's etc....
Would I do it gain. Absolutley! Hopefully soon.
Thanks to Irene, my friend, my love, who always encourages and belives in me. xo xo xo