About jcmoyer

Entries

 
Ludum Dare 32
 
Ludum Dare 31
 
Ludum Dare 27
 
Ludum Dare 26

jcmoyer's Trophies

jcmoyer's Archive

Rocket Rabbit: The Post Mortem

Posted by
Wednesday, April 22nd, 2015 2:57 pm

Going into Ludum Dare, I knew I wanted to make a shmup. I needed to come up with an unconventional weapon, though. I decided on carrots, and what better protagonist to have than a rabbit that shoots carrots? Initially with the theme I thought I’d make a light-hearted game with bright colors and a ridiculous setting a la Parodius, but…

Rocket Rabbit

I worked on the game a bit and got bullets and enemies in. After that, I composed a lighthearted track for the first stage then started working on boss music. The boss music came out super tense and action-y. It conflicted with the stage 1 track, and I liked it a lot more. This was Saturday evening mind you; I didn’t really have time to produce any more music, so I said screw it, the game is going to be more serious. I scrapped the first track and started building the game around the boss music.

Then came the assets to replace my placeholder art. I turned on the boss music and just did this stream of consciousness sort of thing, drawing whatever came to mind. “This is tense; let’s add some blades,” and everything went downhill from there. Suddenly everything was made of metal and it was going to be hardcore.

 

blade4x2

The Blade, a whirling, fast enemy that charges straight at the player while firing barrages of bullets. I really hated this guy during playtesting.

 

I’m a programmer, not an artist. It takes a long time for me to make one asset. This was my first time manually rotating a fairly complicated sprite. This guy took at least an hour to finish, which is a ridiculously massive timesink in the grand scheme of things. Looking back, some of the shading is messed up, mainly around the center disc.

 

player4x

That rabbit is wearing goggles and a scarf. You know he means business.

 

I had an awful time just getting the player sprite to look passable, as you can see in the timelapse around ~4:00. Getting the illusion of depth was hard and lots of dithering conflicted with the style of the rest of the game. Eventually I opted to just layer sheets of hard-edged metal on top of each other and it seemed to work OK.

 

The Bad

 

The thing that hits me *every* LD is that I haven’t allocated my time as best as I could. 48 hours is a REALLY strict time limit. You really need to know which corners you can cut and which ones you can’t. Polish is extremely important, and you need to leave time for it!

The number one complaint I got is that there is no visible feedback for hitting enemies with >1 HP. This would have been a nice addition, but I was so caught up implementing core functionality that I didn’t even have time think of it.

Among other things I thought of that I wish I could have implemented:

  • A longer stage 1
  • A second stage (!! getting ambitious there)
  • HP bar for bosses. I actually thought of this towards the end, but there was an hour left and I needed to leave time to implement a quick menu screen and game over screen and to package up the game. I didn’t know there was a submission hour, so maybe I could have done this.
  • More detailed border during gameplay. Given how long it takes me to do things art-related, this was out of the question.
  • Disappearing carrots from the player’s ship

 

The Good

 

  • Art skill leveled up! It was my first time doing somewhat detailed animations for LD. It was also the first time that I worked with higher resolution art (typically I stick to 8×8, 16×16, or 32×32).
  • Music skill leveled up! It was my first time producing music for LD.
  • Got a shmup under my belt, a genre which I’ve appreciated for a long time but never seriously attempted to make.

I’m actually really happy with how my entry turned out this time given the time restraints. Some of the code is a bit spaghettified because I needed to add things NOW instead of properly, but it’s nothing that can’t be fixed up. The main thing to remember is that the end user doesn’t care what your code looks like!

Amazingly enough, there were no massive bugs in the Ludum Dare version and everyone I’ve talked to has been able to play the game just fine. There’s only one thing I’ve noticed that is totally off, but you wouldn’t ever know unless you looked carefully: during gameplay, the starfield background is supposed to be purplish, not black. I thought I had made it purple but I never really checked… It was a really subtle problem with the code too:

love.graphics.rectangle('fill', 0, 0, unpack(self.bounds))
 -- which essentially evaluates to love.graphics.rectangle('fill', 0, 0, 0, 0, 600, 700)
 -- the last two arguments are discarded since this function expects mode, x, y, w, h
 -- should have been
 love.graphics.rectangle('fill', unpack(self.bounds))

 

Addendum: Funny Programmer Stuff

 

So alongside my Ludum Dare games I’ve been working on this library meant to complement love2d aptly name hug. There was one thing I was missing from it in my previous LDs that I dreaded reimplementing: animation. I knew I’d need animation for a shmup. During the week prior to LD, I drafted an animation API and put it in a separate branch on github. There are a few key concepts for the API, but the important two are frames and animations (a sequence of frames). A frame has a rectangle that specifies what part of an image it uses, a duration, and a list of attachment points. Imagine being able to say “here’s the point for the left hand on this knight guy, put a sword in his hand.” With attachments, this would be easy. You just get the attachment named “left-hand” and render the sword there.

As it turns out I didn’t need attachments for Rocket Rabbit (although, if I had more time I probably would have designed enemies that shot from points other than their center – attachments would work great there). What I DID need was a way to store arbitrary data per frame: specifically, the radius of a bullet, enemy, or player. “I don’t have time to add this to hug right now, it will take too much planning” I said, so in my moment of brilliance I ended up storing collision radius in the X component of an attachment named “radius.” Yuck. Problem solved, though.

 

Links

 

I’d appreciate it if you’d try out my game and throw me a comment. Anything that helps me improve the quality of my games!

Entry page
Timelapse

And done.

Posted by
Saturday, December 6th, 2014 9:12 pm

I’ve finished my LD31 entry in 19 hours. Complete with terrible programmer art. Go check it out!

I’m in again

Posted by
Friday, December 13th, 2013 5:27 pm

Tools:

  • IDE: ZeroBrane Studio
  • Framework: LÖVE
  • Art: Gimp
  • Sound: bfxr / Audacity
  • Music: ???

Additionally, I will be using hug, which is a collection of code from my two previous LD entries. Stay tuned!

Timelapse for Ten Magic Seconds

Posted by
Monday, August 26th, 2013 6:10 pm

I’ve processed and uploaded the development timelapse from my LD27 entry Ten Magic Seconds.

lds_s4

You can play the game here.

The Face of Progress

Posted by
Sunday, August 25th, 2013 2:45 am

From ugly to semi-passable programmer art. The enemies still need to be touched up.

ld27preview

animations

backgroundlayer

backgrounds

graphicsupdate2

Preparing for LD27

Posted by
Sunday, August 18th, 2013 11:36 pm

Things I will be using:

  • IDE – ZeroBraneStudio
  • Language(s) – Lua, possibly C# for content tooling as needed
  • Library – LÖVE
  • Sound – Probably bfxr because I’m cheap like that; Audacity for post processing
  • Screenshot recorder – DevCap

Also, some portions of my LD27 entry may be based on code from my LD26 entry. which is the real reason I’m writing this post

Time lapse will be available following the compo assuming I finish my entry.

Timelapse for Linewalker

Posted by
Monday, April 29th, 2013 10:26 am

The timelapse for Linewalker has been uploaded. Enjoy.

Linewalker: My First LD Entry

Posted by
Sunday, April 28th, 2013 1:45 pm

Yay! For once I can say that I finished a game. Although it’s not much, the base is there and I can add as much content as I want. It’s a pretty satisfying feeling.

Linewalker is a 1D adventure/puzzle sidescroller. The game is rendered in 2D, of course, but you’re constrained to moving only left or right. Multiple dimensions are faked using portals which take you from one lineworld to another. Designing puzzles with these constraints is extremely difficult and as such I would hardly consider the puzzles I put in the game to be very puzzle-like. Some time after LD26 is over and judging is done I’ll get around to adding puzzleworld2 where the current game ends. Hopefully it will be a bit harder. I had hoped to have three puzzleworlds for LD, but by the time I finished the first one I realized that goal was far too ambitious.

Best of luck to those who are still working on their games. Never give up.

My LD26 Entry

Posted by
Saturday, April 27th, 2013 6:10 am

Last time I failed to get something reasonably playable in a short amount of time. This time, however, I think that I can finish!

This time around my toolset consists of:

  • Love2D (Lua) – game
  • Bfxr – sound
  • .NET (C#) – map editor
  • vim – text editor for the game
  • Visual Studio 2012 – IDE for map editor

 

I would describe my game as an adventure puzzle game with movement constrained to one dimension (although the graphics are obviously in two). You can only slide left and right along the world line, solving puzzles and receiving messages from someone mysterious as you continue. Here are some screenshots:

editoriw3puzzles

Since the theme is minimalism I’ll cut the whole art bit (I’m no good at it anyways). As LD26 nears its close I’ll put the source code on github, and eventually I’ll upload a timelapse of the development process.

Happy LDing, folks.

Baddie Quest

Posted by
Sunday, December 16th, 2012 4:56 am

Renamed my game to Baddie Quest. Progress:

  • Terrible programmer art menu (could this be any worse?)

theworsttitlescreen

  • Player stats
  • Monsters
  • Hero pathing
  • Monster summoning screen. Here you will choose your team that will attempt to take out the hero. You have energy points that you can spend to summon various monsters. Each monster has its own affinity, although I haven’t thought about how I will work that into the summoning system yet.

Summoning Screen

My last two goals are the battle screen and win/loss conditions. After the competition is over, I will upload a timelapse video of all my work.

Hero Quest Day 1

Posted by
Saturday, December 15th, 2012 5:08 am

Hey all. This is my first time participating in an LD. The game I’m working on is a NES-style RPG where you control the monsters in random encounters in an attempt to stop the hero before he gets to your lair! In the vein of Dragon Quest, I have tentatively dubbed it Hero Quest.

I have already made a few mistakes:

  • Spent too much time thinking of a game for the theme.
  • Spent too much time on the placeholder art.
  • Was sort of familiar with the API I decided to use (Love2D), but I had to get up to speed before I started doing anything useful.

In any case, I think I have the boilerplate code down now so I can start working on the gameplay logic tomorrow. For now, I leave you with a screenshot showcasing my terrible programmer art.

day1

Until next time…

[cache: storing page]