Wednesday, July 3, 2013

[MMc] Victory

I'm declaring victory in the game jam, but fully intend to spend every free moment between now and Thursday midnight working on Castles & Catacombs. There's an entire game that captures the Monaco and Minecraft feel, plays with joysticks in a browser, and has a consistent retro pixel style of all original art.

It also has only about 1% of the features that we want to add, though. Tomorrow's a holiday and I'll finally have (half) of a day off to work on it properly!  Coding from 11pm to midnight every day wasn't really cutting it for making progress.






Congratulations to everyone! Our next jam will be in late August or September. I hope that Mike and I can both take off two days then to really host everyone properly in the lab. I was shocked to find the lab empty at 6am this morning! :)

[Nigel] Finished! Stairaway.

I'm quite happy with this game. Not because it is particularly interesting, but because I managed to create exactly what I wanted.  

 Play Stairaway here!

 

I came into this wanting to make a game about stairs. I also wanted to make the game in pure JS, and with online functionality. I somehow hit all of these goals.

There are two modes: (Controlled by the arrow keys)
   - Survival : Press the correct arrow keys to climb the tower. Avoid the lava for as long as possible.
   - Online VS: A head on head race. First person to die to lava loses.

Additionally, the game has networking enabled, allowing for the following:
   - Server stored high scores.
   - Working online matchmaking for the Versus mode.

Messing with node.js/socket.io to get networking working was quite the experience, and I feel I learned quite a bit through making this game.

Anyway, fun times. Can't wait to try everyone else's games.

[Michael] The end of the beginning.

I've fixed up the text bugs and finished up my level editor(!), which allows for straightforward creation of levels from pre-made parts, each consisting of a full physics description (using Box2D) and an arbitrary number of images. I've added in duplication and deletion in the last few minutes (I'm at the point where every few minutes makes the level editor or game significantly better. It's where I really like to be in a project). Note that since I was at home alone for the home stretch, I've put off the multiplayer aspects until after the jam.

I whipped up a non-trivial level and added an invisible goal that causes victory if you reach it.

Despite the things that cropped up getting in the way (I spent a large part of this afternoon helping out the repairman in getting my washer and dryer fixed, for example); I've technically "won" the jam. Far more importantly, I'm at the stage where everything I'm coding is fun; and the game improves constantly.

I intentionally bit off way more than I could chew for this jam: working in a completely new language, with a completely different debug cycle than I'm used to (gotta love those hours chasing down a trivial bug a typechecker would have found), integrating a full physics engine and creating a robust level editor. I used this jam as a concentrated period of time to get a large project I can be happy to work on off the ground.

I'm excited to work more on this game and I'll package up what I have so far and post it here later this week.

[CO'D] Down the Rabbit Hole...

So... Morgan... I'm really sorry. I hacked the CRAP out of Codeheart.js. It's so bad the file is called codeheart_lite. I couldn't even think of it as a shadow of what it was. But, it works with Ejecta. However, it will probably never be the same again. On the up side I could totally get rejected from the App Store again now:


Like a dog with a bone, I couldn't give up the idea that I ought to be able to combine the two. I think there must be some sort of perverse pleasure that one takes in taking well structured and thoughtful code and doing unspeakable things with it.

[Sam] "Victory" on-time

So, I entered with the goal of making a tower defense where all the state, both enemies and towers is nothing but dice...and I succeeded! Right now I think the game makes the jump from trivially easy to nearly impossibly hard a bit too quickly...but that can be ironed out later if I want to, and ironing it out would require some playtesting. However, the game now works with (I believe) no bugs or issues, is mildly fun, and has a beatable 'easy mode' (the only difference between easy mode and hard mode is that easy mode lets you know that you won when you reach level 25, whereas hard mode will just go until you lose...which, unless I am just really bad at my game or my recent changes fixed things substantially, will be soon after level 25. But anyway, the game is in a finished state, though I may add additional features, and the most recent version can be played here: https://dl.dropboxusercontent.com/u/34972177/dice/play.html.

And, the proof that the game is beatable:

Overall, this was a very successful jam - using codeheart certainly helped, as did having a solid enough idea for the game that most of my time was spent coding and not contemplating what should be coded.

final stretch

So i now have a working game. below is a video of me playing it. It may be confusing because there are two green squares. The top one is the player and the bottom one is an obstacle that i have been using to test my physics engine. The weird camera motion was also not part of the game. I did that to try and show the drops falling and hitting the block.

As you can see it still looks pretty bad and the playing interface is pretty boring and there are no instructions but it has a winning condition so that is good. 

I have been working on trying to add obstacles and getting my physics engine to work well with them. so far it is not the best but it has been getting better.



The real issue with this is that i wanted the whole thing to be solved by doing physics calculations. so if my collision is erratic and completely unpredictable then that sort of goes down the drain. I think i might be able to get it to the point where it might be predictable enough to include. even if it doesn't follow real physics. 

Pretty soon i will have to transfer from working on the physics stuff to actual focusing on the game play. So i will have to design levels, make the interface better, and make the whole thing more appealing to look at.

Tuesday, July 2, 2013

[Michael] Hectic Day

Several things popped up that kept me from jamming as much as I'd like (I'm reclaiming some of those hours tomorrow...); but I've made some major (if almost entirely invisible) progress. And not just relearning the hard and long way how to debug in a language with no static type enforcement and no compile-time errors...

I have a complete working level format: each level consists of 4 things: a name, a starting position, a goal position, and an array of level objects. Each level object consists of a physics body, consisting of as many Box2D collision shapes as needed, and an array of sprites, which are the visual components of the object. Each sprite can be static, or dynamic. If dynamic, it has a working animation system using sprite sheets.

I have a method for serializing and deserializing levels to and from JSON. Far from trivial, since Box2D makes heavy use of prototypes, which aren't preserved by a round trip through JSON.stringify and JSON.parse.

I've hooked in Morgan's file saving and loading code, so my program loads levels from disk and the level editor can save out.

I spent quite a lot of time hacking up the physics so that platforming feels smooth; still much to do to get it to feel alright.

I'm punting on art for the jam; I'm much more interested in finishing up my sophisticated level editor and tweaking the engine so that the controls feel right.

And finally, so this post isn't just text: my ugly as sin main menu (text rendering seems to be bugged, so I've put 0 effort it making it presentable), when you try to quit!


[MMc] Adventure Graph


Castles & Catacombs contains a world of individual adventures, each of which contains one or more scenes. The picture above is the world map, in which adventures are circles on the road. The reward cycles for Castles & Catacombs are:

  1. Character movement
  2. Reaching items in a scene
  3. Completing an adventure goal:
    1. Clear gold coins
    2. Clear silver coins
    3. Recruit new character
    4. Beat the par time
  4. Unlocking a new adventure
  5. Completing all goals for all adventures

I've been working on the data structure that tracks progress through the game and the code for the world map that shows what adventures are available.  The world stores a table mapping adventure tags to descriptions. An adventure description contains:

  • Position on the world map
  • Criteria to unlock this adventure (e.g., clear all gold on four other adventures, unlock the druid)
  • Tag of the opening scene of the adventure
The map rendering code compares the description of an adventure to the progression state for the local save game and then shows appropriate symbols for progression through the adventure, whether it is locked, and whether it is new (flashing green circle).

I only had 45 minutes today to work on the game, so I'm falling far behind.  I foresee my team spending much of the 4th of July completing our game after the deadline.  I mean "completing" in the "making fully playable" sense, not "reaching a state where we'll never work on it again."

Next steps:
  • Follow pointers between scenes after loading all scenes to give proper coin counts when inside the adventure
  • Reset the state of adventures on exiting them (the entire world is currently persistent, which can make some adventures unbeatable if left in a bad state)
  • Redraw the gold coins
  • Draw silver coins
There's 16 hours left in the jam. I hope that everyone else is at least taking a short break for sleep.  Good luck tomorrow, everyone!

[CO'D] End of Day 2...

I mentioned it in a comment on my earlier post, but I'm done with Ejecta for the time being. :( Just a bit too complicated to connect with Codeheart for the moment. However, I modified my Pong-like game to play more nicely on mobile devices. Here is a touchier version called Pong-like-touch:


I started on my Berzerk-like clone today. The first thing I discovered is that I'm fairly certain I can't just color my sprites with an overall canvas fill color, which I was hoping for. This is sad, because I was really hoping for some interesting variety in the colors with that approach...


Player controls are in. Enemies are in. Now I just need to decide how to handle level data and collision. Then I'll transition to getting enemies to fire back at the player and move toward the player. Finally will be keeping score. After that I'll go back and finish up the sprite-sheets and animation of characters... Not likely for tomorrow, but I can hope.

[Sam] 21-hour update

Things are progressing well, I suppose I technically have a 'game' done: there are towers, there are enemies, the towers shoot at enemies, the enemies can die and get stronger after rounds, you lose lives if the enemies get through, all sorts of stuff like that. Now I just need to implement some sort of system of resources and some interesting game play elements so that the game is actually fun / challenging in any way (at the moment, you can still just place towers infinitely)

Note: The pink background is unlikely to be a final design decision, I have just been too lazy to get rid of it.


So far, codeheart has been nice and useful for making my life just a little bit easier - also, having the last game jam behind me, there are two major differences with this game that are allowing me to get things done:
a) I actually have a vision for the game, which makes it easier to figure out what to do, and
b) I am actually trying to make good design decisions from the start, instead of hacking everything together using magical constants and guessing and stuff

On that note, by one measure of progress, lines of code, I am already about where I was at the end of the last game jam - so things are looking up, I think the game might actually be mildly fun by the end of the jam tomorrow afternoon, and good luck to everyone else, whose games look like they are similarly coming along well.

update

so at the beginning of day two i am pretty happy with my progress. I have worked out most of the structure of the game and am now adding in the game play itself. I have a basic bare bones physics engine and have the whole system down where droppers create drops at the right time and then if the drops hit the player cube they imbue some velocity to them. below is a basic video of that stuff working.


The whole thing looks awful and currently there is  no way to win and no way to set up the droppers besides going into the scene file. So that is what i am working on right now.

[CO'D] End of Day 1... Kinda

Alright. Clearly, it is Tuesday and not Monday. So this is more of an end of day one and start of day two kind of post. First of all, I've enjoyed using codeheart.js thus far. First of all, clone number one Pong-Like is complete:


Clearly, I've stolen a bit of code from the paddle sample, but also tried to update a few things (like using the vector class where it makes sense). Things I immediately discovered that were harder than I had anticipated:
  • Rotating text
  • Loading cool fonts
  • No matter what you do, loading a game from Safari on a mobile device is kinda, "ugh".
  • Wow, my generation one iPad is SLOW.
For those of you using CFXR or something similar to generate sounds, here is a nice little command line tool to convert those WAV files to MP3:

afconvert -f mp4f -d aac -b 128000 Score.wav Score.mp3

There are two issues that I didn't finish before the end of day one. The first is that the ball can get stuck in paddles. Easy fix, but not done yet. The second is that the two tap points for controls is not good on a small device. I want to have each paddle controlled by a single touch. Will probably make a second version of the game with those controls.

But, it was the "running in mobile Safari is 'meh'" issue that sent me to start playing with Ejecta, which I was really excited about. Basically I fell down the rabbit whole with the rest of my day and didn't get it working. :(

2013-07-02 09:39:57.555 Ejecta[799:c07] Creating ScreenCanvas (2D): size: 320x480, style: 320x480, retina: yes = 320x480, msaa: no

So, that is where I'm at now. Trying to decide if I continue with codeheart.js or if I convert my clone to "pure" Javascript and try it out with Ejecta.

[Nigel] End of Day 1

Alright. Today I finished the following:

   1. Concept art completed.
   2. All needed assets created.

Concept Art

3. Base engine completed. (Try it here! It's very rough and buggy, but it gets the concept across.)




Now for an explanation. As I stated before, I wanted to create a game involving stairs. So, I went with this:

   -Player is attempting to climb a tower of stairs
   -Lava is rising below the players feet
   -Player must climb by hitting the appropriate arrow key marked above their head
   -The game continues until they die, and the difficulty scales as time progresses

Additionally, I will attempt to add an online multiplayer element in which players attempt to race each-other.




Plans:
   -Finish adding assets
   -Enable multiplayer
   -Polish/Speed up game/Inject Fun

Monday, July 1, 2013

[Philippe] Setbacks and Learning Experiences

Well this past weekend was a roller coaster.

I've never had so many computer issues in a row before! Suffice to say that I basically had no computer for most of the weekend, so I have not made much progress in my game. On top of that, this week is abstract submission week at SMALL, which means late nights for the next day or two. I'll do my best to get everything compiled together, but this may not be a Game Jam I can win! :(

So far I have implemented the new puzzle environment where constellations are given to the player and then the player creates subgraphs by highlighting edges and vertices. This took a lot longer thanit should have, as at first I was trying to keep track of more information that I could handle, and run-times errors were haunting me. After taking a break and watching some Game of Thrones, I came up with a new idea that I implemented using only 1/4 of the code as my previous attempt. Although this wasn't a very productive venture, I did learn a lot about good programming.

I have also implemented the various algorithms needed for checking solutions for each of my puzzles. In the next stage, I plan to introduce the following topics through 5 new puzzles and 3 new challenges:
  • Spanning Trees
  • Hamiltonian Cycles
  • Perfect/Maximum Matchings
  • Network Flow 
 I think from here it won't be too hard to pull everything together, and I hope to at least get to the point where each puzzle is playable by the end of the jam. It won't be as complete as I had hoped, but who knows, the summer is still young..

Philippe Demontigny

[Michael] Joysticks + Platformer + Physics

I've been experimenting to get the right platformer-y feel inside the Box2D engine. Tomorrow morning will be for finishing the rough draft of controls (including wall-cling/jumping), and starting work on a level format/editor. Nothing impressive just yet.

[MMc] Coins

Gamepads now work for selecting characters and navigating the world map.  In game, there are coins that players can collect:


The coins play a satisfying Mario-like effect due to cfxr.  The command:

   grep ";" *.js | wc -l

reports 1566 source lines of code for Castles & Catacombs. The program clocks in at 8 MB of data and 47 MB of .PSD files that are not used at runtime.

We're debating whether the regeneration attribute should just heal the character who has it, or let that character heal others nearby.  Healing others makes the player feel more valuable to the team, but also could make the player feel like a walking med-kit (I'm sick of playing clerics and medics because of this).

Next:

  1. Refactor the scene-loading code to note pointers between scenes.
  2. Count coins on load and show the total for the scene (traversing the entire reachable graph)
  3. Show the total number of coins on the level
  4. Reset scenes (and all child scenes) on leaving them

[Michael] Pre-game Update

Due to some work that got in the way; I am now participating on the hardcore track on US Mountain Time.

I've acquired Photoshop, an OS X XBOX 360 controller driver, and some codeheart.js samples. Start time is in 3 minutes. Hope everyone who are on EST got a good head start.

[Donny] 1st Update

Glad to see all the people who are participating -- good luck everyone! (Thanks for the shoutout, Philippe) Here's my 1st update:

I've locked down many of the details for the Programming Game Engine I'm trying to make.

(1) For gamers who know how to program, the gamer will command his/her army by sending Strings along the lines of: (Unit4 use_second_ability_on (12, 3)), or (Unit2 move_to (4, 6)). The gamer will obtain information about the game world by accessing a GameWorld object that contains all the relevant information to that gamer, which is updated each turn.

AI challenge (http://aichallenge.org), and both versions of Darwin (http://www1.icsi.berkeley.edu/~barath/cs136/hw/hw9.pdfhttp://cs.williams.edu/~morgan/darwin/) use similar setups. I think this setup is easy for a programmer to use, and difficult to hack.

(2) Unfortunately, for gamers who don't have as much programming experience, something crazier is needed: I'm currently trying to create a very simple custom graphical programming language, and trying to write an interpreter for it.

What I would ultimately like gamers without much programming experience to be able to program in, would be something in between Lego Mindstorms' (http://mindstorms.lego.com/en-us/Software/Default.aspx) and Final Fantasy XII's programming interface. I will try to give more details about the specifics of the language as a move further along the implementation process.

Screenshot of the Lego Mindstorms programming interface (http://mindstorms.lego.com/en-us/Software/Default.aspx):


Screenshot of the Final Fantasy XII programming interface:


(3) I decided earlier on that I would use the Unity game engine to make this game (http://unity3d.com/). (Unity is easy to use, and in the long, long, long run, using Unity would hopefully make it easier for me to export this game to the internet, Xbox Live, the Playstation Network, etc.) But at the moment, I'm still trying to learn how to use Unity.

At the moment, I have figured out how to let a gamer make windows, move them around, combine them, and link them to build trees -- which naturally form abstract syntax trees, which will be important when I try to write the interpreter.

My current results: (This is still very basic, and I'm currently paying zero attention to looks):














Next step:
(1) Given that I already have abstract syntax trees, figure out how to write an interpreter. (I now wish I spent more time on CS434: Compilers)

Also, I want to note that I'm sadly making a last minute switch to the pro track. With my summer internship using up 10+ hours of my day, I won't be able to spend 20+, 30+ hours per day working on this game jam like a proper hardcore person would do. I'll still be working as much as possible, though.