Flap Happy and Fancy Free NES ROM Update

It’s been a while but I got a couple of good days with Flap Happy and Fancy Free recently. The updates are shown in the video below but I’ll go over them here also.

Bonuses yeah!!!
Now players are rewarded more for quickly beating levels with more points as well as for landing on platforms without dying, adding 5 points to each successful platform landed up to 50 points per platform and a decreasing level bonus based on time completed.

Actual Lives.
Simple thing to do now but important to get in there. I’ll possibly add some 1-ups for every 5,000  / 10,000 points.

Death Frames
Just some quick playing with the PPU currently but it works.

Indicators for Combos
In probably the wrong colour currently but easily changed.

What’s next?

Invinicbility, NOT IFrames
Indicating the player is invincible when landed.

Fading levels in and out
Again, with some well timed palette swaps.

Music and SFX
Really needed to make this feel more complete.

Because fireballs!

The code is weighing in at a tiny 6.5kb, with lots of room to spare still (25.5kb) for music, etc. I’m looking at possibly using the gradual games sound engine as it supports NESASM3 which is really handy.

My old gameboy code might be okay to convert for smaller (albeit limited) sound effects also.

NES ASM Tips – Box Collision

One of the most important parts in any game, code wise, is to have some form of collision detection between sprites. This is Assembly Code snippet ( using NESASM3) should help you out when it comes to box to box collision and uses little space, so should be quite fast. We’re only using the A register AND 9 bits of RAM for simplicity.

Here we go, first with the variables being declared in Zero Page:

Next Up, The Function Itself, with an explanation of what we’re doing:

So, to use this effectively, simply set your sprite bits up appropriately, then Jump to the function (well, subroutine) by calling:

If there is a collision between the two points, spriteCollision Result should contain a value of 1, otherwise it’s just a 0

Hopefully, this has helped someone out there get past one of the stumbling blocks with NES ASM development.

Happy coding everyone!

Another week, a bit more NES Game Development Completed!

So, this week I managed to  add a bit more to Flap Happy. Some of it obvious, some…not so much.

Firstly, there’s now some semblance of a background, just some simple dungeon walls in a loop but it was more the journey to getting them working that proved the interesting / challenging part. Y’see, It’s all down to how I have the levels generated….

  1. Firstly we fill the room with spikes.
  2. Put some verticals up on either side
  3. Then generate paths from left to right with varying heights.
  4. Then, and only then, do I actually draw the blue dungeon blocks, where the plain black spaces were.

Which is kinda backwards really when I think about it but hey. It works, I’ll take that.

The next issue was that of filesize.. The ROM image is 8kb too large for an NROM256 cartridge which should comprise of the following:
a 16 byte header
2 x 16kb PRG-ROM banks (Where the games code appears)
1 x 8kb CHR-ROM bank (Our Background and sprite tiles)

That should total up to just over 40kb…But that ROM says it’s 49kb. That can’t be right!

After a bit of puzzling with the NESASM3 compiler and messing around with my code banks to no avail I decided to just load the ROM into a text editor to see what was going on and, sure enough, 8192 blank characters at the end of the ROM file, doing sod all.

A quick deletion of those and (fingers crossed)… The game still loads and runs just fine, 40kb (well plus 16 bytes of header)!

The next issue is that regarding the generation of platforms in-game. Sure, they’re all positioned nicely now but, they shouldn’t all be active at the start of the game.

Thankfully, I have a fair chunk of zeropage RAM available to me so I’m storing the screen positions in memory… in memory. Yeah, I know. So, this weekend I’ll hopefully have that side of things sorted and some more obstacles can be placed for next week!

In the mean while, here’s some initial box art I’m playing around with, it’ll change a lot through time I’m sure.

Right, back to the code!