Jam and the various iterations of Jam

Jam

Jam is a not-for-production game engine I like to hammer on in my free time. Jam incited my interest in the web as a programmer, and how the web is making it easier to share digital experiences.

Way back in 2012 when canvas was still new, novel, and buggy, my friend Morgan wrote a game engine called JsGame as a very quick and dirty weekend project. We used it in a game jam together to make CuddlePit (which, regrettably, can be found here). Both during the making of CuddlePit and in the months following, I worked with my friend on the engine (which was renamed Jam) both to fix bugs and to extend the engine's functionality. After some time, Morgan moved on from the project, but I kept messing it and it has since become an expression of whatever wikipedia hole I have fallen down that weekend. Currently there are three notable branches in jam, jam-original, jam-ec, and jam-ecs.

Jam-original has, at it's core, the structure that Morgan originally wrote which is heavily inspired by Flixel and similar engines. We really didn't know any JavaScript best practices, so I have since rewritten it to take advantage of things like prototypes and moved it from using a hand written module loader to using require.js. I also made the engine modules more uniform, as before there was no set way to write modules even though modularity was a goal of the project early on. Though I have not touched this branch in a while, it is still something I'd like to revisit in the future as I think it's great for getting small-to-moderate-sized-things done fast.

Jam-ec uses an entity component pattern akin to Unity's. it is also in this branch that I started trying to write dynamic module loading, which prompted me to move to webpack for the next iteration. Though I did do my best to streamline modules in jam-original, this branch has a much more solid module format, that is easier to read and write for.

Jam-ecs uses an entity component system pattern, an ideology which I'm still trying to wrap my head around. In this iteration I also moved to webpack and moved from AABB collisions to a SAT based collision system. This is the freshest branch and is much less usable compared to the other two.

Since Jam is not for production on any scale, the documentation is lacking but the source code for each branch can be seen at these links: jam-original, jam-ec, and jam-ecs.

Additionally two small demos can be found here and here, written with jam-ecs and jam-ec respectively.