Skip to content

Tue, Sep 4, 2018

Ryan Shee edited this page Sep 5, 2018 · 4 revisions

I spent the Aug 31-Sep 2 weekend on the GMTK game jam. The theme was ridiculously difficult, and our team struggled to find what we wanted to do.

"Manual Tetris": Tetris without Gravity

Our original idea was a Tetris without gravity, where Tetrominoes are unloaded by a delivery truck at the top of the board, and the player must push the pieces from the delivery area to the to the bottom of the board, where they try to fit pieces in past a certain limit, denoted with a line. Here's a crappy ASCII version of the board.

__________
|        |
|        | < Delivery zone
|________|
|        |
|        |
|        | < Work space
|        |
|________|
|        |
|        | < Flush area
|________|

To remove the tetrominoes, the player had to flush the pieces manually with a button, and the game would calculate the difference between the area of the flushing space and the total area of the tetrominoes the player managed to fit in that space. Their score would be the percentage of space covered per flush.

However, we couldn't figure out how the player would rotate and push the blocks, because it could potentially be difficult for the player to move the block in a certain manner. This turned out to be a huge mistake, because in retrospect, who cares? It was supposed to be a fun little jam, where the #1 goal is pushing out a working, semi-fun game--balance be damned. It was a fun idea, and I may revisit it in the future.

"No U": Shooter without Shooting

A quick idea was a shooter without shooting. While it was easy to think up of, it turns out many other people had similar ideas. Our idea was shooter where players could catch/freeze enemy bullets from midair and redirect them elsewhere. However, we felt that the idea wasn't original enough for the jam. I'll probably revisit this idea really soon as well.

"Spooky Boye": Action-Stealth without Direct Manipulation

The idea we ran with was an action-stealth game where the player wouldn't be able to directly interact with the living guards of a museum. The original idea was the player, as the ghost of a dead security officer, had to indirectly influence his inept, living comrades into finding the cat burglar running around the museum.

However, we knew we didn't have time to figure out an AI for the guards and an AI for the thief, so we slightly altered the idea. Now we were a ghost after material wealth, escorting a slow-moving robot following a predetermined path through the museum. Once the patrolling guards see the robot, it was game over. To prevent this, the player must go around flicking light switches, turning on and off sound players, and knocking over vases to distract the guards. Once the robot made it to the end of the museum, the player wins.

The biggest problem was figuring out, well, everything. I had the most recent experience with Unity, having used it...9 months ago. We had to figure out:

  • Programming in A* path-finding, which also meant figuring out how to have a tile-based navigation mesh
  • State machine for AI guards, where they must appropriately react to stimuli
  • Moving and animating the player correctly
  • Drawing and animating objects

Guard

Needless to say, it was definitely not an exercise suited for us for the game jam. In the end, we barely managed to push something the user can run, although it was not what we wanted. The game level was poorly lit, the guards only reacted to finding the robot (with a simple "you lose" modal and literally nothing else) and turning off the music when it was turned on. To make things worse, a win condition did not even exist. Our game also didn't build on MacOS, thanks to a 2D lighting library. It did for Linux oddly, so we pushed that in a minute before the jam closed its doors.

After submissions closed, we discussed how our idea was over-ambitious, but overall a fun experience, and next year we'd definitely do something easier. We spent the next little while playing and remarking how polished and simple other games were, even if they weren't that original. The theme was a million times harder than last year's jam, so it was understandable. A couple games did stand out though, so I'm rooting for those.

Juicy Shmup

Anyway, back to semi-regular scheduled content! I've basically finished most of what I wanted for Box2DLights and I think I've correctly implemented Box2D, including destroying the entity's body properly. I've also basically finished my game speed controls, so now I can manipulate time whenever I want. Right now, game speed can be controlled with the keyboard, and destroying enemies also slows the game down for a bit. The game's update() method will normalize the time, but right now it's linearly normalizing:

private void normalizeGameSpeed(float deltaTime) {
    if (timeMultiplier > 1) timeMultiplier -= deltaTime * 3;
    else if (timeMultiplier < 1) timeMultiplier += deltaTime * 3;

    /* Resets to 1 when close enough */
    if (Math.abs(timeMultiplier - 1) < 0.1f) timeMultiplier = 1;
}

I want some sort of quadratic function for normalization, but I haven't figured what it's going to look like yet. It's on the back burner for now, and I'm going to move on to scoring and writing an enemy director to spawn enemies with a function using score delta and delta time.

I also need to figure out not as exciting things like game menus, because right now everything is just ugly buttons everywhere. I'll have to write things like a pause button, design proper layouts for everything, and maybe include animations if I can, since that'd be a nice touch. It's all been listed on Trello, but hopefully I can get through most of my tickets before the Mission Bit fall semester class starts.

juicy_demo_0

Click here to see a higher quality version on Gfycat.