Hey!
Now that I had a little go at 6502 asm with the DPCM hack for Megaman 3, I've been thinking of going out there and starting up some sort of a project from scratch! NROM-256, vertical mirroring, nothing fancy for now.
Overall, I understand everything I need, to make a game, at least I say that now. Reading up on the init process, I've come to a few interesting thoughts and questions. So here I go!
1. How do I load the 8k of data from CHR-ROM through $2007, if $8000-$FFF9 is all PRG-ROM, and there's no mapping capabilities of any kind? Is there something I'm not aware of, or is it automatically loading whatever's not in PRG-ROM?
2. Meta-sprite system. In my head, this sounds too easy to actually be the right answer, so I'd rather ask you people about it. Is it really as simple, as subtracting or adding 8 to the x or y coordinates in relation to the top right/left 8x8 sprite when calculating the overall sprite position, creating a "relative" sprite system? Maybe using a variable instead of 8 for more flexibility.
3. Is the 256-byte OAM data mapped to the CPU, or do games simply store the entire thing in a single RAM page, and copy it to $2004 during a PPU update?
4. Can I possibly use sprite 0 hit, to create a status bar, THEN move it somewhere else during rendering, so that it triggers again and I can set the scroll position once more to create parallax effects as well?
5. Various timing quirks: Whenever I do a little reading to study the hardware, I keep bumping into really intimidating facts about various cycle-based timing properties of each hardware component. Do I really have to keep in mind how the internal cycles of the PPU work for example if I want a standard game running?
6. Collision detection: I really have no clue how to get this done. I suppose for sprites, comparing their overall position is the way to go, but I have absolutely no idea how to make sprites interact with the background, to create "solid" and "non-solid" 16x16 blocks.
Now that I had a little go at 6502 asm with the DPCM hack for Megaman 3, I've been thinking of going out there and starting up some sort of a project from scratch! NROM-256, vertical mirroring, nothing fancy for now.
Overall, I understand everything I need, to make a game, at least I say that now. Reading up on the init process, I've come to a few interesting thoughts and questions. So here I go!
1. How do I load the 8k of data from CHR-ROM through $2007, if $8000-$FFF9 is all PRG-ROM, and there's no mapping capabilities of any kind? Is there something I'm not aware of, or is it automatically loading whatever's not in PRG-ROM?
2. Meta-sprite system. In my head, this sounds too easy to actually be the right answer, so I'd rather ask you people about it. Is it really as simple, as subtracting or adding 8 to the x or y coordinates in relation to the top right/left 8x8 sprite when calculating the overall sprite position, creating a "relative" sprite system? Maybe using a variable instead of 8 for more flexibility.
3. Is the 256-byte OAM data mapped to the CPU, or do games simply store the entire thing in a single RAM page, and copy it to $2004 during a PPU update?
4. Can I possibly use sprite 0 hit, to create a status bar, THEN move it somewhere else during rendering, so that it triggers again and I can set the scroll position once more to create parallax effects as well?
5. Various timing quirks: Whenever I do a little reading to study the hardware, I keep bumping into really intimidating facts about various cycle-based timing properties of each hardware component. Do I really have to keep in mind how the internal cycles of the PPU work for example if I want a standard game running?
6. Collision detection: I really have no clue how to get this done. I suppose for sprites, comparing their overall position is the way to go, but I have absolutely no idea how to make sprites interact with the background, to create "solid" and "non-solid" 16x16 blocks.