Indie game storeFree gamesFun gamesHorror games
Game developmentAssetsComics
SalesBundles
Jobs
Tags
(1 edit)

I'm glad you submitted this! While the gameplay here is somewhat basic, I think it's clever that you have both friends and foes and two different kinds of shots. It adds some good spice, making an otherwise-simple game more unique and interesting. While I think it's cute that you have the score track corner bounces, it's a bit hard to understand and I think scoring the actual gameplay instead (or in addition!) would've been more fun because it'd give more feedback and an additional objective to play toward.

Here are some technical notes if you do an update, or for future games:
• You have problems with uninitialized memory; you don't set the attributes tables or PPU palette RAM, so you're dependent on either what ran before the game (eg Everdrive menu) or the semi-random power-on values on hardware or emulator, which vary significantly [Edit: See reply below!]. I recommend testing with randomized RAM in Mesen to more easily catch this kind of issue (Settings -> Emulation -> NES -> Default power on state for RAM -> Random Values).

• On CRT TVs and some emulators, the edges of the screen are cropped somewhat, which means that content such as text near the edges (particularly the top and bottom) can be hidden. In this game, it's a problem for your game title, creator credit, score, and food counter. We generally assume users can't see as much as 16 pixels on the top, 12 on the bottom, and 8 on each side.

• You should try to avoid having lots of DVD logos spawning at the same height because of sprites-per-scanline limitations. I managed to get 4 on the same row, so there's constant flickering, and since the logos all move at the same speed, it never stops.

• It seems there are conditions where bluray logos stop spawning, so then you can't get any more food and are forced to lose. I don't understand why this happens, but it feels a lot like a bug.

This is a great first project and I'm excited to see what you do in the future!

I dug into this a little more and the uninitialized RAM issue isn't quite what I thought. For attributes, you set some of the attributes, but not all of them, so parts of the title screen and especially the playfield can be wrong depending on power-on RAM state. You can make the attributes a lot easier to write by copying 64 bytes in a loop, rather than copying hardcoded bytes one by one, which is a lot harder to maintain.

For palettes, you actually do set them, just too early. The PPU ignores most writes for the first 30,000 cycles or so after powering on, and your palette writes happen during that PPU initialization window. You can test this in Mesen with the "Clear PPU $2000/1/5/6/7 throughout first frame after reset/power-on" feature. Most emulators don't emulate PPU init at all.