Page 2 of 4

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 3:17 am
by lidnariq
rainwarrior wrote:A clean palette change during normal background rendering is elite tier.
Since I already went to the effort of marking it up, I'm providing an annotated version of the Indiana Jones title screen here (made because I feel like it got glossed over earlier)
Indiana Jones and the Last Crusade-title-screen-with-cpu-ppu-activity-marked.png
Indiana Jones and the Last Crusade-title-screen-with-cpu-ppu-activity-marked.png (6.15 KiB) Viewed 12731 times
As stated, advanced technique. Very difficult to use with anything going on at the same time. (The entire top two-thirds of the screen is carefully timed loops for almost-pixel-exact writes to the PPU).

What's interesting, and a tangent, is that it hadn't occured to me that we could write the first half to $2006 before we disable video.
Sik wrote:Wait, how do the emphasis bits work? Because that looks a tad more washed out than I expected.
It looks washed out because the greyscale bit is set at the same time, which turns all colors $XY (for 0≤Y≤$D) into $X0.Colors $xE and $xF are preserved so that black can stay black, even when the greyscale bit is set.

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 3:40 am
by hawken
rainwarrior wrote:There are all sorts of permutations of weird technical possibilities that you could pull off on the NES, but a lot of them really aren't typical. Like, if you're trying to faithfully "fake" the look of an NES game, you probably don't want to be trying special tricks that aren't really part of the NES experience.

For instance, MMC5 8x8 pixel attributes were only used in 1 game, to my knowledge (Just Breed), and it was a Japan-only RPG. It's a thing you could technically pull off on an NES, but it's not characteristic of NES games at all. Part of the reason it wasn't used is that having 8x8 pixel granularity in the world can quadruple the complexity of your map (ROM size constraints, RAM constraints, extra collision tests required, etc.) so even if you had the special MMC5 hardware for 8x8 attributes, it's a significant burden on the NES to make a world that puts it to use!

A palette change for a status bar is an advanced and atypical technique. A clean palette change during normal background rendering is elite tier. Something like this usually comes with weird design constraints, and these are things you don't really consider when you're just looking at one technical issue; you only find them when you try to build a whole game. Suddenly you find this one technical feature you implemented is dictating how you have to design your maps, etc. A lot of these techniques aren't seen much for good reason (though sometimes it's just that we have better knowledge and tools now than back then).

An emphasis change like Noah's ark is fairly easy to implement. It's not typical, but it's very doable. Your water line has to be straight, this way, though.

Anyhow, I don't really understand the point of trying to push the NES graphical capabilites to the limit without actually using an NES. It doesn't matter what was technically possible or not. Just make a nice game, and if you like the NES look, imitate the parts of it that feel good to you, and ignore the rest. If it's important to you that it be NES-faithful, for some reason, you should probably stick to normal techniques that look and feel like real NES games, not technical obscurities... but... never mind my opinion. I don't know what motivates you. If you can make a good game out of it, do whatever suits you.
Thanks for the honest feedback. :beer: Sounds like you have had to go through this on a programming level and why one might avoid it.

The motivation for myself as designer is to get a feel for the limits (believe it or not having limits makes pixel art easier) so I can make a base. I'm quite interested in how far the NES was pushed in it's sunset years, and what the true limits are. Hopefully this will then be a defining factor in the look of the game.

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 7:49 am
by thefox
lidnariq wrote:Colors $xE and $xF are preserved so that black can stay black, even when the greyscale bit is set.
Is this true? If so, the wiki is wrong:
wiki wrote:When grayscale is turned on, the PPU ignores the lower nibble of each palette entry. This causes a bitwise AND with $30 on any value read from PPU $3F00-$3FFF, both on the display and through PPUDATA ($2007).
I've always thought black turns into $00 (gray) as well when gr[a|e]yscale mode is turned on.

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 8:01 am
by Bregalad
No, the wiki is right and lidnariq is wrong.

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 8:08 am
by tokumaru
Sik wrote:Wait, how do the emphasis bits work? Because that looks a tad more washed out than I expected.
Yeah, that's because in grayscale mode all colors get to look like the grays in the first column of the palette, which actually has 2 whites and 2 grays. Not the best selection to represent a grayscale image (only 3 colors: white, gray, darker gray).
lidnariq wrote:Colors $xE and $xF are preserved so that black can stay black, even when the greyscale bit is set.
Never heard of this. Did you test this behavior anywhere?

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 12:37 pm
by OneCrudeDude
I understand some people's concerns, namely Rainwarrior's where he says that emulating obscure NES tricks would be pointless if this were not to be made on the NES. Moreso since these tricks often impact game design in some cases. Though what if someone (or a team) wanted to make a prototype for an NES game using any possible technique to greatly enhance the experience in a higher, quicker to develop language? Of course, you can accomplish certain things much easier with the modern engine, without even using NES tricks.

And as for the MMC5 single tile attribute, one other game uses this also, though I'm not sure if you should really count it since it was not a proper commercial release. ROM City Rampage.

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 6:18 pm
by Dwedit
The Game Boy Color, on the other hand, allowed you to rewrite the palette whenever you wanted without needing to disable rendering or anything like that. They used it for static screens like title screens, or other games like Wacky Races pushed it to the limit for use during gameplay.

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 7:36 pm
by Drew Sebastino
Not really important to the conversation, but can the Game Boy color have a different palette every 8x8 block, or every 16x16 like the NES? also, how many palettes does it have?

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 8:10 pm
by tepples
Game Boy Color has 8x8 pixel (per-tile) palette selection, like the MMC5, Super NES, or GBA. It has eight 4-color background palettes (with distinct color 0 in each) and eight 3-color sprite palettes. The palettes are RGB with 32 levels per channel, but the gamma is kind of screwy.

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 8:52 pm
by Drew Sebastino
The Game Boy Color uses 15bit RGB (same as SNES, GBA, and might as well include Neo Geo, even if it did have a seemingly unused 16th bit) but has all tiles being 2bpp and 49 colors on screen without changing palettes mid scan line? (Talk about mixed priorities. :roll: )

Re: would screen splitting give extra 13 colours for tiles?

Posted: Mon Jan 26, 2015 11:39 pm
by Sik
Probably on the screen type, really. The Game Gear has 4 bits per component for instance (despite still only showing 31 colors), when the Mega Drive, an otherwise superior system, only had 3. Make what you want out of that. And yeah, the gamma in the GBC screen is crap, to the point that the suggestion is to ditch away half of the entire range (effectively making it 4 bits per component in practice).

Also pretty sure the Neo Geo used the 16th bit for something, although whether it was useful or not is a different issue.

Re: would screen splitting give extra 13 colours for tiles?

Posted: Tue Jan 27, 2015 11:48 am
by Drew Sebastino
The Neo Geo had the 16th bit decreased the color by a "half bit", meaning that you can have a color like R:12 G:20 B:4, (24bit color) but not something like R:12 G:24 B:4, if that makes sense. I've just looked at a bunch of colors from the graphics from Metal Slug, and none that I've noticed are not perfectly divisible by 8. The half brightness bit could be really useful for a black and white screen, but with having 4bpp 16x16 tiles, you cant really use all the colors that easily, unless you have something like a gradient going down the length of the screen. 8bpp graphics is one reason I think that the SNES can look about as good as the Neo Geo, but it leaves quite a dent in vram... (Which, obviously, isn't a problem on the Neo Geo.)

Re: would screen splitting give extra 13 colours for tiles?

Posted: Tue Jan 27, 2015 7:00 pm
by TmEE
The 16th bit decreases the output to around half of all the color channels, and it is done in analog domain. I don't remember the exact circuit though, there's probably some non-linearity involved...

Re: would screen splitting give extra 13 colours for tiles?

Posted: Tue Jan 27, 2015 7:16 pm
by Drew Sebastino
TmEE wrote:The 16th bit decreases the output to around half of all the color channels,
So I was right.
TmEE wrote: and it is done in analog domain. I don't remember the exact circuit though, there's probably some non-linearity involved...
Meaning that the 16th bit is calculated after all the other bits in a different process? I guess that is why the SNES, GBC, and GBA don't have a sixteenth color bit, despite having the space to do so. Seems like quite a bit (no pun intended :wink: ) of work for one measly bit...

Re: would screen splitting give extra 13 colours for tiles?

Posted: Tue Jan 27, 2015 7:50 pm
by lidnariq
No, it's a quite simple circuit in analog ... Assuming the attenuation is linear, it's not even particularly redundant: of the 33k new colors, only 1/8 of them are redundant with the original 33k. I'm just not certain whether it's particularly useful.