LD27 August 23–26, 2013

Running SQL in your browser

As a key part of my Ludum Dare entry The NSA’s Where’s Snowden? game I wanted you – the elite NSA Analyst – to be able to hack the game world.  Imagine you could put your agents onto flights, or fiddle with the flight manifests so that targets were refused boarding or even arrested… and how would you do this?  I decided I wanted you to have SQL access to the world’s flight plan database…

SELECT T.* FROM MANIFESTS AS M, MANIFESTS AS M2, TARGETS AS T WHERE T.PASS = M.PASS AND M.PASS = M2.PASS AND M.FLIGHT = 'AF-321' AND M2.FLIGHT = 'IB-794';

But I couldn’t find any working SQL engines for Javascript!  The only thing I could find was TrimQuery, but I couldn’t get it to work and its quite old and not actively developed.  There’s are also a few LINQ-likes but they are not really SQL.

Now SQL is the lingua franca of structured data querying so I was surprised at this sorry state of affairs.  Whilst LINQ is nice (because of the VS tooling!) I feel that a lot of the LINQ-likes are driven by hipster cargo-culting and that a solid SQL that can query conventional JS objects and arrays would be a powerful and useful thing.

So I set out to build an SQL engine in Javascript (sql.js).  It was perhaps more fun to develop than the other parts of the game and more fun to examine than the game is to play :)  This blog post describes how it works (and how it can be done better):

How to use sql.js

It consists of a single function SQL().  The parameters are:

  • the SQL statement,  e.g. “INSERT INTO …”
  • the definition of the tables, which is a Javascript object acting as a dictionary.  Each table is itself an object, detailing the column names and specifying any constraints on them (e.g. if they must be unique or can be null) and optionally a description.  E.g.
    {
    airports: {
      code:{description:"IATA code",unique:true,notNull:true,},
      name:{notNull:true,},
      country:{notNull:true,},
      category:{description:"level of CIA infiltration",},
      lat:{description:"latitude (decimal degrees)",},
      lng:{description:"longitude (decimal degrees)",},
    },
    airlines: {
      code:{unique:true,notNull:true},
      name:{},
      country:{},
    },...
  • table access; an object where each table name that the user can update has a boolean e.g.
    (
    airports: false,
    flights: true,...

    Any table name that is omitted is read-only.

  • The data; an object where each table is a key and each table is an array of objects e.g.
    {
    airports: [
      {code:"LHR",name:"London Heathrow",...
    ],
    manifests: [
      ...
  • params.  This object allows you to override things like setting the default row count LIMIT.

If the SQL cannot be parsed or if the table data does not have the expected fields then it throws an Error() exception.

Otherwise it returns an object with a columns key and a rows key.  The columns are an array of strings which are the column titles.  Rows are an array of arrays.

Parsing SQL

To parse a language you often use a parser generator like lex/flex yacc/bison.  There are parser generators for Javascript too – jison and peg and so on – but I haven’t used them and, to be honest, its quicker to just write our own parser from scratch.

To parse SQL we can eat the statement a token at a time.  A token might be a number, an identifier or a symbol like an opening brace.

Normally when I hand-roll a parser – its a bit of a recurring hobby of mine – I write the tokeniser to see what the next character is, and then based on whether that is a number, a quote mark or the beginning of an identifier or so on loop through until the token closes.  In sql.js however, I took a messy shortcut.

When asking for the next token, I pass into the tokeniser the list of terminating strings e.g. when consuming table names in a FROM clause I’d ask for the next token (which I expect to be a table name) which can be followed by a comma, the word AS or the word WHERE or a semi-colon.  If my engine supported it, I could just add those additional possible keywords that follow a table name in the FROM clause e.g. ORDER, LIMIT and HAVING and JOIN and so forth.

This meant that the next() function only had to do a Javascript string search – indexOf() – to find the nearest terminator.  However, this approach does have limitations e.g. it doesn’t properly parse strings (if the terminator occurs in the string the indexOf() will incorrectly find it) and words that contain keywords (the Airport table namehas OR in it, for example).  By the time you’ve added code to address this, you end up with a proper tokeniser anyway.  So in hindsight I should have doubled my line-count and just gone with a classic tokeniser in the first place.

Executing SQL

Once the query is parsed and the array of table names built and, its just to execute the query.  And this is surprisingly simple using the Cartesian Product.  If table A had two rowsand table B had two rows then the Cartesian Product would be:

SELECT A.V, B.V FROM A, B;
A.V | B.V
1   | 1
1   | 2
2   | 1
2   | 2

No surprises there.  But what if we add a WHERE clause?

SELECT A.V, B.V FROM A, B WHERE A.V = 2;
A.V | B.V
2   | 1
2   | 2

We can get that by first generating the Cartesian Product – simple by iteration and recursion – and then filtering the rows by evaluating the WHERE clause against each line!

This is thoroughly inefficient.  If there are 100 rows in one table and 100 rows in another then the Cartesian Product is (100+100)^2 = 40,000 rows!  It would be much more efficient to evaluate – and cull – candidate rows as soon as possible e.g. before recursing into every B row first check if A.V is 2.

In the NSA game it’s easy to be evaluating a Cartesian Product that is hundreds of thousands long, and this can take several seconds.

The engine supports SELECT, INSERT, UPDATE and DELETE.  It doesn’t support the JOIN keyword but it does let you join in the WHERE clause (as described above).  It doesn’t support IN.  It additionally has SHOW TABLES, DESCRIBE table and CHECK table which provide utility.  Because of the needs of the game there is also some rudimentary access control so the ‘hacker’ can’t really hack – and break – the game itself e.g. rescheduling or deleting flights and other havoc.

I made the whole thing case-insensitive but that could easily be removed for data values and comparisons themselves.

I added support for literals but the only literal I added was ‘NOW’.  I treated all dates as strings and this allowed simple Javascript string comparison of dates.  I didn’t support any functions, but this would be very easy to add too.

Improving performance

A proper SQL query planner (the code that decides the order that table rows are evaluated) has to understand the cost of retrieving rows (from disk and so on), but in Javascript RAM access speed is fairly equal and without indices you need full table spans so its just to filter tables by the parts of the WHERE clause that reference them as greedily as possible.

Each table is an array of objects.  It would be straightforward to support arrays of arrays, and objects of arrays and objects of objects.  Using objects as the collections themselves would effectively be a primary key – an index!  Knowledge of this could dramatically speed up joins.

The engine turns the incoming SQL into a chain of closures.  TrimQuery, by comparison, turns the SQL statement into a Javascript fragment that is then eval()ed.  I am not sure that is faster; doesn’t that cause the Javascript VM itself to abandon a lot of cached JITed code?  But it may be faster to instead compile the SQL down to a simple VM.

If you are running the same query again and again it would certainly help to ‘compile’ or ‘prepare’ the SQL statement once and have a way to run it again and again against data

sql.js is surprising short given what it can do, and surprisingly simple.  I found it easier to write SQL statements myself to work out what was happening in the model than to use array.filter() once joins were involved.  With a better tokeniser and an expanded grammar and a simple query planner it could be widely useful.

sql.js is doubtlessly more interesting than actually playing the game 😉

Fluffy Tigers in the internet

Hi there

we took Ludum Dare as a reason to finally get our website running.

http://fluffytigers.com/

Fluffy Tigers in the Sky is just a collective of Friends and people we met on the Internet, who are working on different projects, mainly on a game with the working title Spaaaaaaaaace.
I wanted to show you a few pictures of the first scetches for the artwork below.
Ludum Dare gave us a lot of new ideas and new motivation to keep on working on Spaaaaaaaaace.
I dont want to give to much away about our game, but you can follow us on Facebook:

https://www.facebook.com/fluffytigers

or our website and as soon as we figured out a twitter name that’s not taken or to long, you can find us there, too.

Hope you had/have a bit fun with our first Game “Granny Death” we made for Ludum Dare 27 :)

sebastian_raumschiffentwuerfe_grob_01 spaize_bsp Untitled-1

Ten Second Sprint Postmortem

Ten Second Sprint was made in 48 hours for Ludum Dare 27, in August 2013. As my second Ludum Dare entry, I knew how the competition was going to go down, but I still didn’t have much experience or expertise. Here’s what went right, and what went wrong.

What went Right

Preparation

Of all the Ludum Dare theme options, ‘Ten Seconds’ had the most votes by a long shot. With this knowledge, it seemed that ‘Ten Seconds’ would be the theme for Ludum Dare 27. So I started thinking of a game that fit the theme. I knew I wanted to do a platformer for Ludum Dare 27, so I though of a simple idea, not too complex, a platformer with a ten second time limit.

Sound Effects

I used sfxr to create the sound effects of Ten Second Sprint. Even though sfxr is really easy to use, I managed to get great sounds for Ten Second Sprint. I feel this made the platforming a little better, as having a pleasant noise when you jump is very rewarding.

In-Game Music

The clock alone didn’t add enough tension to the game, so I wrote a musical piece with that purpose in mind. The music gets continually higher pitched until the end, where it cuts out as you run out of time and lose. This adds the tension that was lacking before. This also lets players know when their time is running out, they’ll remember that when when the notes change pitch, they’re running out of time.

Precise Platforming

I’m no great programmer, so that restricts my game development quite a bit. It took time and lots of trial and error and I’m very pleased with the final collisions. I feel it all worked out well, it was very precise in my testing. Precise collisions were necessary for making Ten Second Sprint fair and fun to play.

Focus

I often get frustrated or bored during the less exciting development tasks, but the 48 hour limit of the Ludum Dare is a great motivator. It never gives you a break, so you don’t have a chance to postpone. Constant pressure is a great short-term motivator, but having it all the time could be damaging to your sanity.

What went Wrong

Switching Programs

Not too long into making Ten Second Sprint, I realised I would need more rooms than GameMaker: Studio Free Version’s 5. So I switched to GameMaker 8.1 Lite, where I had unlimited rooms, but a small watermark. I am able to use any other software or programming languages, so I’m stuck with GameMaker for now. I don’t have the paid version, so that restricts me from making the best game I could, as the restrictions limit my ability to implement my ideas.  Buying GameMaker Studio has been on my todo list for a long time now, and I hope to have it by the next Ludum Dare.

Unimplemented Ideas

I had many ideas I wanted try during the creation of Ten Second Sprint. Different types of color schemes and different blocks were some of them. Unfortunately due to my lack of skill, I couldn’t implement them in Ten Second Sprint. I still have interesting mechanics in my head that could make their way into future projects of mine.

Slow Physics

The physics of Ten Second Sprint are very basic. The player does not move fast or have any fancy sliding mechanics. This is acceptable, but I made the player fall unnaturally slow. I feel this breaks the pace of the game and feels wrong. Increasing players moving speed would have been a good idea too. Next time I’ll focus more on the feel of the player’s character.

Confusing Code

Ten Second Sprint was coded very poorly. My GameMaker Language code is all messed up. It doesn’t follow a strict format and it`s impossible to understand. Next time, I’m definitely trying to work on this and make it easier to read and edit.

Theme

The theme of Ludum Dare 27 was ‘Ten Seconds’, so I made a game with a ten second time limit. This wasn’t very creative on my part, I was hoping to think of something super creative. Maybe I should change my expectations next time.

Ludum Dare 27 went well for me. I’ll definitely participate next time, if I am able. I have learned a lot from this experience. I didn’t have to make a masterpiece to feel accomplished.

Ten Second Sprint can be played here: http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=21642

Tags: post-mortem, postmortem

The Chronicles of GitGirl – A Postmortem

gitgirl_postmortem(click me to play the game!)

 

Intro

GitGirl is the game I made for the 48-hour Ludum Dare. It’s a 2D platformer game where you, as GitGirl, must resolve the conflict that plagues the repositories scattered across the galaxy. It doesn’t really make sense, but let’s just go with that!  In order to resolve these conflicts, GitGirl must throw a 5 megaton bomb into the heart of the conflict.  These bombs are designated to explode in 10-seconds and you must escape before that.

About GitGirl

There really isn’t much story behind GitGirl, but there is a sort of history.  She was a character I designed for a game jam hosted by GitHub back in November 2012.  The theme of the jam is anything that relates to Git or GitHub.  The little metal face above her is suppose to mimic OctoCat(tm).  The intergalactic space hair represents pushing and pulling. 😛  Let’s just say the game is pretty loosely based!  This is a significant history for me as it got me to discover Ludum Dare when I was researching about game jams.

 gitgirl_bookmark(GitGirl concept art, November 2012)

GitGirl Ludum Dare Edition Postmortem

gitgirl(Early Work-In-Progress of the Post-Compo, stay tune!)

The Good Times
  • Unity 3D – At this point, I have very little problems with Unity3D, in fact, I had no snags working on this game.  I’ve been accumulating a framework I pretty much use for every game development I do with Unity.  This framework is called Mate.  Mate pretty much started since the first Ludum Dare, accumulating useful utilities that I pretty much use a foundation for games I start.  Here’s the repo. Mate has helped me get UI flows, scene management, save states, input done much much quicker than I would if I go with the bare-bones Unity.  I’m pretty happy with it thus far.
  • Production – Getting all the UIs, game-flow, and art assets working together was pretty fast during the compo, I pretty much blazed through those.  In fact, I had to…because putting them together was pretty much during the final hours! 😀
  • GitGirl – After getting all of the mechanics of the game out of the way (which took a long while), I was pretty much demotivated.  I decided to think about what sort of character this game will have.  I was looking around for inspiration and seeing old sketches of GitGirl, I knew she was going to star in this Ludum Dare!  (mostly because she’s fun to draw)
  • Art – Speed drawing was the most fun I had for this entry, even though I still need to work on my art skill 😛  I’m getting more comfortable drawing with a stylus and using Graphics Gale.  But for pixel art, I use mouse pretty much 90% of the time.
  • Music – I’m not a musician, so I heavily rely on cgMusic to compose! I was pretty lucky that it was able to produce some decent tunes after just a couple clicks.  All credits to music goes to the author of cgMusic, btw.  Also for those generating music with midi, look for a way to use custom sound fonts if possible, it makes a world of difference! Most noteably SGM v2.01. Solmire comes with this.
The Bad Times
  • Late Start – When the theme 10-seconds was announced (6pm PST), I had no idea what kind of game I would make.  I think I pretty much stared blank on the screen and doodled dumb things for an hour or two.  I had two thoughts: Make the obvious run before time runs out or something out of this world.  I pretty much decided on the former 😀
  • Complex Mechanic/Level Design – I really wanted to get gravity fields working for this game, it looked pretty awesome as I was testing it.  The problem is, making levels with it.  Also plenty of edge-cases I still need to iron out.  Another issue is trying to implement too many gameplay mechanics.  At some point, I wanted grappling hook for this game…grabbing and throwing enemies/objects…crazy moving platforms.  I ended up with just: jump around, gravity fields, throw/grab bomb.  It wasn’t that bad at all and might be better off just being like this.
  • Random Computer Reboot – it was right during level creating when the computer just randomly froze and just reboot.  Considering I had the power on for 2 straight days during a pretty hot weather.  This actually took a good chunk of time and motivation.  First, Windows getting stuck during the start screen…so I have to do a restore from last recovery point (luckily it was fairly recent).  After that, the project was pretty much corrupted.  Luckily I have the project backed up recently from GitHub (considering where this game is inspired from!).  How recent that was however…is no levels and all of the tweaking I made gone.  Could have been worse, so always backup your project in good intervals!
Fun Stuff

 

rejectsCharacters that didn’t make it into the game…for now!

level_designDesigning a level

tweak_galoreAll sorts of values for tweaking physics!

timeline_editorTimeline editor.  If you guys hate the animation editor in Unity (who doesn’t), this is a great alternative.  It’s a plugin I revived after the author abandoned it.  Here’s the link to its github repo: MateAnimator

old_newThe old and the new, they grow up so fast! Or shrink in this case!

Thank you for reading, and don’t forget to give this game a try!   Also stay tune for the post-compo edition of the game with loads of improvements!

 

10 Second Gooback Post-Mortem

I finally have time for this thing. Let’s do this!

I’ve been waiting for this LD for some time. A whole lot of time, actually. So you can imagine my disappointment and disbelief when I tried turning on my computer when the LD started and it wouldn’t boot. I was crushed. Add to that the fact that I was forced to start 13 hours late (as always, it would seem), and that the theme wasn’t inspiring at first, and I was seriously considering passing this time. I still wanted to make something, and I had my mom’s computer, so I drew some sketches, and came up with this-

Day one

Day one

 

Day two

Day two

I know how much you guys love these pics. I know I do :)

Anyway, I had a nice, simple concept for the game, which I was happy with. I decided that I won’t code anything before I sleep on it some more, and the next day I slept in. Great start.

I had to attend this meeting up at my school for a few hours, so I started coding the basics before that, and then I went to the meeting. It took a while, but it was interesting and refreshing, so I’m not complaining. Problem is, it was really hot outside, so on the walk back home, I got a serious headache. Like, a really bad one. I knew I was supposed to go to school for the whole day the next day, so the only time I had was that evening. I was in a really bad mood, and I went to bed early.

The next day, after the compo had already ended, I was feeling a bit better, but I decided not to go to school, and instead stayed home all day and wrote the game. I’m so happy I did this!

As opposed to last time, I had a lot less time this jam, but I still feel like this is a better entry than my first one. On to the actual post-mortem!

What went right:

  • I had my own game engine! I’m constantly improving it, and the LD was no exception, but this isn’t a bad thing. I was able to deliver on a better experience than my previous entry, and keep the positive stuff I learned along the way in a very ordered fashion.
  • I was able to achieve my full vision of the game, without cutting back on content. Granted, there isn’t much of it, but that was all I could think of, and I think it’s wonderful.
  • I have a lot of motivation to keep working on the game right now. In fact, I already made a few changes, polished a few corners here and there. I think I’ll take this game to the next level. I already have a lot of ideas to flesh out the concept, and I’m working on a post-compo version right now!
  • Graphics- are terrible. Even though I made an animation last time, and I worked a lot of time on the graphics, as opposed to this time, where I spent about 30 minutes on it, I still like it better. I feel like I’m progressing in a field which isn’t supposed to be my territory.
  • Level editor- from a programming perspective, it was a life-saver. I spent most of my coding time writing the level and level editor framework, and I’m proud of it. I didn’t realize it back when I posted the entry, but built-in level editors sale big time! I’ll try to keep this trend in my next entries.

What went wrong:

  • No time (I love that song, BTW) – as I said earlier, I had no time at all. For several reasons, which I will list below, I experienced the time-crunching madness of the last hours of an LD.
  • No content- I had no ideas for levels, save for a few simple puzzles. I had the time and the tools to build levels, but I didn’t have any ideas, so I was really stressed out to make the levels I had perfect in the little time I had left.
  • Turns out Java is a bitch. That’s right. Java is a fucking bitch. Why? Because I almost couldn’t enter my game because of its shenanigans- apparently, files can’t be read in the traditional  way when running the program in a jar. I made the mistake of not making a jar until a couple of hours before the end of the jam, so I didn’t know that my level storage system wouldn’t work. I tried opening the files containing the level data through some methods I found after frantic searching on the internet, but it didn’t work. Finally, I copied the data and put it in an array inside the program. Fucking disgusting. It got the job done, but I almost had a heart attack along the way. Being so close to the finish line, only to be dragged back by your own tool was almost too much to bear.

So here’s my game – http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=22590

Please rate it and enjoy! Happy rating, everyone!

De bomb Da bomb Players Response so far….

cap4cap1

http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=19384

In Summary:

It looks pretty good and sounds okay but needs more facing angles on the moving characters not just side on and some sound fx to go with the music.

It’s hard to workout to begin with but the actual game mechanics really click with people once they figure it out fully (HINT: THE OLD DOCTOR GUY CURES THE FLASHING RED PEOPLE!……)

The levels work well enough but needs to be more of them and the Collision detection needs some refining.

Overall:

For every success there was a catch but the success i wanted was to introduce a decent game mechanic that worked well and i feel i did that. thanks to all who played and review my little game, every one of you made valid and useful remarks and certainly food for thought if/when i decide to take the game further!

……bring on dare 28!!!!

p.s. GO PLAY DEADLY SUNRISE!!!!, it’s pretty damn awesome, best of the jam for me by far!

http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=17903

6 games you should try… if it’s not already done.

I played and rated exactly 100 games. Here’s are six games you should try. I played a lot of others great games but I would like to present you games who haven’t yet a lot of ratings.

Hyper Furball

 

It’s a really fun action game where you can increase caracteristics of the main character. All the arts, audio and scenario are awesome.

Way of the gun

You’re a sort of cow-boy who have to get revenge for his brother in killing enemies during duels. These ones are really full of tension. And the first part of the game before duels is really interesting too.

Too many bullets

This arcade game has really good mechanics and can become very addictive.

Stoppage Time

It’s a good reflection game even if you are not a football fan. I spend a lot of time on it. Too bad there’s only four scenarios.

The Lost Fleet

I love the gameplay here, where you have to delay some of the ships at precise moments to avoid bullets

Highway Hero

It’s a good strategy game but a bit difficult. It’s really interesting though.

 

It was my 6 favourite games. You can try my entry too if you wish : The Curse of Chronos.

Tags: LD27

Ulitmate Survival Lab Post Compo Version

Thanks to everybody for your feedback, I just uploaded the post compo version of ultimate survival lab.

It still is a bit buggy, especially with the menus, but i fixed most of the complaints.

Here’s what changed:

  • Redone the graphics.
  • Added the ability to use jetpack and slow motion
  • Fixed the jumping and the bug that gets you teleported out of the game(I think)
  • Tweaked the difficulty

You can play it here

And here’s a screenshot:
Immagine

40 Games Rated – My Favorites

Well, I’ve managed to rate 40 games so far. People seem to like “Best Of” lists, so here are my favorites of the ones I’ve played:

  • Make a game Game – This is definitely my absolute favorite I’ve played so far in LD27 – a clever little game about making a game. This is the kind of thing that anybody who participates in Ludum Dare can really appreciate.

  • Lost Pixel – Underneath this unassuming exterior is an addictive little puzzle game that will really get your heart racing. You are given a grid of random pixels and tasked with finding one particular pixel in 10 seconds. Each time you succeed you’re given a little more time and a larger grid. I got to level 30! Can you beat that?

  • Royal Decree – There wasn’t much to this game, but it charmed me all the same with its wit and packaging. All you have to do is watch the story, and then click twice waiting as close to 10 seconds between the clicks as possible. What really sold me on this game were all the crazy endings. I also did end up having a competition with my wife to see who could get the closest to 10 seconds.

  • Impact – A 10-second endless runner… does that make any sense? I don’t know, but I still love the style that just oozes from this game. Fantastic pixel art that sets a great mood for the end of the world.

  • Time Slime Arena – Nice little arena survival game w/ a surprising amount of depth and player choice. Lots of nice touches of polish in this one.

Tags: best, best of

Streaming Playing and Rating games

I’m streaming while playing and rating games :)

http://www.twitch.tv/danielsnd

Would you like to see me playing your game?
Submit your game link here: https://docs.google.com/forms/d/1I2SgP3-W1SAcVYw7ZSZECBxqMylPqqE2-lOMPz5VMkQ/viewform

- Edit -

Stopped streaming, here is a link to the Archived recording: http://www.twitch.tv/danielsnd/b/455412389

Here is a list of the games played:

Atomic Time Raiders - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=3984   Get well soon - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=16481   Step Out  - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=24347   The Ones You Love - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=14357   Magic BALLS - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=9874   Pressurized - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=25346   Umbra Machina - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=20812   Valdo - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=27113   Hungry Fishers Dream Team - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=18775   xhon - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=15315   Campfire - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=26449   The Vengeful Baby-Men - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=20322   Keg Quest - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=20961   Too Many Anomalies - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=26843   Time Flies Straight - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=9199   10 Second Indie Game Pitch - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=76   Lost in the Darkness - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=2587   Wing - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=19469   10 Seconds of Joy - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=22946   RainbowBlock - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=15131   Celly - http://www.ludumdare.com/compo/ludum-dare-27/?action=preview&uid=26384

Tokyo Station: Post-compo version live on kongregate

I’ve uploaded a post-compo version of my game, “Tokyo Station” to Kongregate.

The new version has:

  • Better music
  • Improved feedback on collisions
  • More varied gameplay

Tokyo Station

 

Play Now!

Comments

02. Sep 2013 · 15:46 UTC
awesome, but still hard to control sideways. and i actually would like to continue playing even if i hit something, maybe because i’m bad at it and like to keep the flow instead of restarting all the time.

Entry Video

I finally got round to uploading a little time lapse video of me drawing my player and enemy characters, it also has some game footage at the end. If you fancy playing and rating my game please do (link), I will play and rate the games of the people who leave a comment if I haven’t already played it :)

 

Notes on departure, postmortem

Play Notes on departure here

I had heard about Ludum Dare a couple of times, seemed like porpentine – who got me into making Twine games in the first place – had made quite a lot of her games for these kind of game jams, but I thought I’d not be able to make one for a jam myself, as me writing under time pressure doesn’t work very well.

Seems I was a little bit mistaken.

Ludum Dare 27 had been going on for about half a day when I by some chance stumbled upon it. The theme suited me perfectly; I wanted to do something minimalistic and the idea of having something that would only last for ten seconds made me thinking that this will actually work out.

notes-on-departure

Click on the picture to play Notes on departure

I wrote the script almost entirely in Swedish (my first language) to begin with, using OneNote and Word, I then began translating it with at least two different translating tools and one online dictionary, and I actually texted a friend of mine a couple of times too just to get his opinion on the translation.

When I code in Twine I always consult porpentine’s twine resources, and it’s thanks to her and Leon Arnott’s macros that the games turn out the way I want them to. Be sure to check out their games this LD too; they’re amazing.

I’m not sure how long it took me to create the game; I’m usually only creative in short bursts, the rest of the time I’m consciously thinking or doing something else.

Apart from writing it, what took me the most time by far was making it look the way I desired; I’m always having a problem with the colours and how the text lines up.

These things considered, turned out I had a couple of hours left until the deadline, but I didn’t want to change or expand on anything. I know everybody thinks my game is short, personally I don’t have such a long attention span – especially when it comes to reading on a computer – and I’m more interested in getting the player to think and contemplate on the experience, rather than for it to actually be lengthy one, so it has both to do with this, and the fact that I’m a slow writer.

I had an explicit idea of what I wanted to do with my game: I sought for it to remain open to interpretation so that the player could put in their expectations and wishes and let the experience kind of be what they wanted it to be, or perhaps the way that seemed most natural to them. The interactivity had to be meaningful, and had to be approachable and able to interpret in a lot of ways, and as I didn’t have the time to try and expand the game as that would have jeopardized my vision, I focused on making what I had as good as it could be.

By doing that I hope that instead of bringing a longer experience the tale would live on and expand in the imagination of the player, as it really is their experience and story, and I have no idea of what they choose and how they choose to interpret this, though I would love to know.

This has been a very inspiring and fun thing to be a part of, and I’m thankful for all the comments I’ve been getting and have really enjoyed playing your games. If you’re interested I have a tumblr where I publish my games (or interactive fiction if you prefer) just two of them so far but I’ve got some under development and some just waiting to get translated.

Thanks for reading! I appreciate all your feedback and comments!

Tags: interactive fiction, postmortem, Twine

KunoNoOni’s Magical Star Saga Post-Mortem

Title

Click image to play and rate my game!

What went right

>ART

Once I come up with an idea for the theme I like to spend the first few hours creating the graphics I will need for the game. This normally is not all of the art though as when I’m programming I’ll think of something really cool to add. Normally these are little effects to give the game more of a polished look. I was really happy with the way the art looked. Though looking back now I do see there were a couple of things I could have done differently. I don’t normally make a post compo version of my game but I may do one for this game and one of the changes I will make will be the level tiles. I should have made them match the area the player was in.

>PROGRAMMING

Having participated in #1GAM and in 4 Ludum Dare’s I like to feel I’m getting better with using the Flixel framework. This LD I was able to do a lot more than I have in previous LDs. Several weeks back I had brought my NES and Genesis over to my brothers and we did a little retro gaming for a few hours. One of the last games we played was Sonic the Hedgehog, I drew on that as inspiration for this game and I was really happy with how many new effects I was able to get in. Making a platformer with scrolling backgrounds was new to me. Hopefully I can expand on this in future LDs.

>OVERALL LOOK AND FEEL

Once I knew I was going to make a platformer everything just fell into place. I was really happy with the background art, with the way my player looked and animated and with the way the tiles came out. To be honest though, the jump mechanic was not intentional, I had forgotten to check if the player was touching a level tile before allowing the player to jump but it turned out to be a really cool feature :) so I left it in there and I really believe it gives the game the difficulty I was looking for. Not too much changed from my original vision of the game. Yes there were tweaks to aspects of the game, like the backgrounds were the same length as the level, but when I had them scroll and made them just a little slower than the level itself, I noticed you never got to see all of them when you reached the end of the level. So I did some math and reduced the size of them. I played around with the emitters for when the player dies and when the player gets a star to get them where I wanted them, and I’m really happy with how they turned out. All in all I’m overjoyed with how this game turned out, some of my best work to date. :)

 

What went wrong

>THEME

For the past 2 LDs I’ve written down all of the themes which made it to the finals, then I try to come up with at least 3 ideas for each theme. This LD was no different and I actually had 4 ideas for 10 seconds. Then the theme was announced and I went to my list, read it over and decided I hated every idea I had… *SIGH* so I spent the next 3 hours trying to come up with an idea I liked. The funny thing is, the original idea I had for the game came from twitter which I’ll get into in the next section. So I lost 3 hours right at the beginning of the LD to coming up with an idea, which is normally used for making art and graphics for the game.

>THEME IMPLEMENTATION

The original idea for my game was to have the level tiles disintegrate 10 seconds after the player touches them. But when it came time to implement this I ran into several problems. The first problem I ran into was Frames Per Second. When I changed all the level tiles into sprites my frames went from 30 to 3! Totally unacceptable :). So I redesigned the first level and the FPS jumped back up. Next problem I had was collision. With Flixel, collision with a tilemap and collision with a sprite are handled differently and I had forgotten this. So when the player collided with a level tile it pushed the tile which ended up going off screen.  I wasn’t able to find a solution to this problem, perhaps I don’t know the framework as well as I thought I did :/. In the end I decided I needed to switch how the theme worked in my game or risk losing all the time I had already invested in it. Which is where the weird story in the beginning of my game came from :) as I decided on using the theme to instill a need to rush.

>MUSIC

While I am no musician I can sometimes make music that is somewhat pleasant to listen to. Yes it will be repetitive, but it will for the most part fit the game I am making. This was not the case this LD. I really didn’t like the the music I came up with and I feel my game suffers because of it. All the music was made with drum circle, which I can normally produce interesting music with. I’m not really sure why this time was different. I have 4 months until the next LD so I  may look into other musical programs and see if I can find another one I like.

 

Conclusion

Every LD I like to push myself to do things I’ve not done before and this LD was no different. I had several problems in the beginning but I overcame them. I am really proud of the game I created for this Ludum Dare. I had a great time making and playtesting my game and I look forward to seeing what you all thought about it. :)

If you would like to play and rate my game you can click here!

 

Note: I have since the compo figured out how I could have implemented the level tiles disintegrating. Perhaps I’ll make that game for #1GAM instead. :)

A good game – What science says

Hello there,

 

I’d begun reading the book “Reality is Broken” by Jane McGonigal, a visionary Game Designer, who believes that games make us better and that they have the power to change the world. It’s a pretty intriguing read, but that’s not all; I was reading the first chapter, and the little developer part of my mind caught something: a small paragraph in which McGonigal, backed by research, explains the four defining traits that make up a good game:

  • The goal: The outcome the players want to achieve. It provides them with a sense of purpose.
  • The rules: They limit how the player can go about achieving their goal, meaning they must use their imagination to find a way round the obstacles. (eg, you have health, so you cant go rampaging through a corridor filled with spikes and monsters)
  • The feedback system: the way the player can track their progress, be it through the GUI with points, or it may be linked to the story’s progress, or even just the knowledge on how not to die.
  • Voluntary participation: The acceptance of the goal and rules. Also, the ability to do better than win. (eg. in a typical game, their are coins that increase score. I don’t have to collect these coins to win, but I have an urge to collect them, to increase my score, to see my name higher than the rest on the highscore table (link back to the feedback system!))

Anyway, I just thought this was interesting, and wanted to know what other people think. This list does leave out a surprisingly large amount of other aspects: graphics, storyline, audio etc. and I wonder if other people disagree with it?

Any thoughts or comments would be greatly appreciated.

Also, here is my game (totally relevant, I know), it’s actually lacking a few things from this list, I knew it sucked, lol.

Many thanks,

 

Taha

 

Comments

02. Sep 2013 · 16:07 UTC
I wouldn’t describe those as the defining traits of a “good” game, they’re simply what something needs to truly be a game. Graphics and audio are totally unnecessary – video games are just an extension of all games, which may necessarily lack those two aspects.
Gaspard_
02. Sep 2013 · 16:31 UTC
I think games are a way to learn (or to replace somethong missing, but that implies a bit to much for some to take), and I believe that not letting the player do anything to easely is a way to make us think…

a:”The rules: They limit how the player can.. …and monsters)”

Doesn’t this imply that we cannot keep ourselves from taking the easy way?
02. Sep 2013 · 17:05 UTC
Thanks both of you for your opinons, they are both thought-provoking, and its interesting to see the differences between them 😀

Jet Racing post-compo

Jet Racing post-compo

No download yet. I don’t want to screw up the judging or anything.

 

“Space Rift” post-compo updates

Though I’ve only played 55 from the minimum of 100 games I intent to play, I’ve already started to make some adjustments to my game.

I’ve rework some sprites to try and make them clearer and fixed the overlay (which was turning everything a little gray… I blame the lack of sleep at the time xD). Also, I’ve already took of the overheat feature… it was indeed a stupid feature (perhaps I can put it on again in a ship with two shoots… one that overheats and another normal).

But, what I’ve been focusing the most (for now) is the menus. For this, I’ll leave you with this image (notice that I’ll redo the main menu to match the options menu style (that means, no more FlxButton)):

gfm_ld27_gif5

It’s really *animated* now!

I’m afraid that I may be overdoing it… xD

Well…

I wanted to play with you again this LD, maybe with 48h, who knows? However, though I had some trouble in real life, it seemed like I completely forgot about this edition. As I see the theme was “10 seconds”, and I think I’d have just silly ideas, maybe that’s better for me? :)

 

Anyway, hope to see you next time.