Poll: How would you prefer a first-person shooter on the NES to look like?

A place for your artistic side. Discuss techniques and tools for pixel art on the NES, GBC, or similar platforms.

Moderator: Moderators

What kind of resolution would you prefer in an NES first-person shooter?

Lower resolution, occupying more screen space
7
28%
Higher resolution, occupying less screen space, only if the frame rate doesn't drop
12
48%
Higher resolution, occupying less screen space, even if the frame rate drops a bit
5
20%
Higher resolution, occupying less screen space, even if the frame rate drops a lot
1
4%
 
Total votes: 25

User avatar
tokumaru
Posts: 11702
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Poll: How would you prefer a first-person shooter on the NES to look like?

Post by tokumaru » Sat May 02, 2020 4:34 pm

I've been working on my raycaster these days, and I started thinking about all the compromises that need to be done in order to get something like this working on the NES: you have to balance the size of the viewport, the number of rays being cast, the amount of colors, the frame rate, and so on. Just out of curiosity, I thought I'd ask for your opinion on one particular trade-off: resolution (and screen size) vs. performance.

Up until now, I've been trying to make this engine work with a constant pattern table, generating images exclusively via name table updates, which are quicker. The downside is that pixels end up looking really chunky, because there are only so many color combinations you can fit in a relatively small number of tiles (even with raster effects and the like). Here's an approximation of what this approach looks like (not an image from my actual engine):

large.png
large.png (6.03 KiB) Viewed 1872 times

Most programmers working with dynamic graphics, however, prefer to generate new patterns on the fly, since this gives them full control over resolution and color combinations. The main drawbacks are that you end up with a smaller viewport, and that updating lots of patterns every frame takes a lot of time, which affects performance. Here's a simulated shot of what the graphics could look like if rendered this way (there are a few tiles left that can be used to draw a border, so the screen doesn't feel so empty):

small.png
small.png (10.83 KiB) Viewed 1872 times

Please note that these graphics are not from my actual engine, they're based on an image I grabbed from a Google search. The reason for this is that my engine only works in low resolution mode for now, so I wouldn't be able to capture the same scene at a higher resolution, and I wanted the comparison shots to be of the same scene. I also didn't bother respecting the color limitations of the NES, since this is all about resolution, not colors.

Also note that I'm not promising anything. I can't commit to anything until I test all the possibilities and decide what's viable and what's not. I can't even promise that there will be a game/engine release at all.

calima
Posts: 1126
Joined: Tue Oct 06, 2015 10:16 am

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by calima » Sun May 03, 2020 12:19 am

As someone who did something like the fast fps-smaller screen option, beware how many people will dislike your borders :P

User avatar
Bregalad
Posts: 7881
Joined: Fri Nov 12, 2004 2:49 pm
Location: Chexbres, VD, Switzerland

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by Bregalad » Sun May 03, 2020 6:16 am

The last 2 vote options seems to be the same; also it seems the last option are no tradeoff to the 2nd option; normally I belive we'd have to pick 2 among 3 things of (resolution ; wholescreen ; high frame rate).

I don't play FPS so I can't answer the poll anyway, but large meta-pixel never looks good IMO; it's better to have smaller screen space.

User avatar
tokumaru
Posts: 11702
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by tokumaru » Sun May 03, 2020 6:45 am

Bregalad wrote:
Sun May 03, 2020 6:16 am
The last 2 vote options seems to be the same;
One says if the frame rate drops a BIT, the other says if the frame rate drops a LOT.

This is basically checking how much performance people are willing to sacrifice in order to get a prettier image. So far people appear to favor performance over resolution, even if they don't exactly like the chunky pixels.
I don't play FPS so I can't answer the poll anyway, but large meta-pixel never looks good IMO; it's better to have smaller screen space.
When you look at static images like this, sure, but playing a pretty game at a frame rate that feels like a slideshow is a painful experience. I personally prefer performance over resolution.
calima wrote:
Sun May 03, 2020 12:19 am
As someone who did something like the fast fps-smaller screen option, beware how many people will dislike your borders :P
There will always be something to criticize... If not the border, the chunky pixels for sure!

User avatar
Bregalad
Posts: 7881
Joined: Fri Nov 12, 2004 2:49 pm
Location: Chexbres, VD, Switzerland

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by Bregalad » Sun May 03, 2020 6:49 am

When you look at static images like this, sure, but playing a pretty game at a frame rate that feels like a slideshow is a painful experience. I personally prefer performance over resolution.
Which pops the idea : Why not have a system with large ugly metapixels when animated, and when the image stand still, use that unused processing time to improve the resolution of the still image ?

Sounds dumb ? Maybe, but only people with dumb ideas will have good ideas too :)

User avatar
tokumaru
Posts: 11702
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by tokumaru » Sun May 03, 2020 7:06 am

Bregalad wrote:
Sun May 03, 2020 6:49 am
Which pops the idea : Why not have a system with large ugly metapixels when animated, and when the image stand still, use that unused processing time to improve the resolution of the still image ?
I supposed it would be possible to detect when the viewing angle/position didn't change from the last frame, and instead of rendering the same low-res image again you could do an "improvement pass" on the previous frame. There were games that worked like this in the 90's (I personally remember playing SimCopter this way), but something looks really off when the quality of the image shifts constantly like that. I assume that your brain tries to interpret pixel changes as animation/movement, but since nothing actually moved it feels a bit disorienting. I really don't like it.

User avatar
rainwarrior
Posts: 7818
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by rainwarrior » Sun May 03, 2020 8:35 am

I used to play Wolfenstein 3D with the shrunk viewport just to get it to run smoother on my 286.

The thought of a border actually seems more appealing to me. Part of that is probably nostalgia from games I played on Atari ST and other computers in the 80s, but also it just seems like a good place for some sort of HUD/UI. The minimalist experience of no HUD and full viewport works very well for some games, but it is in no way universally better to me. Also with the border in the mockup it looks less off-centre, which I think helps.

User avatar
Bregalad
Posts: 7881
Joined: Fri Nov 12, 2004 2:49 pm
Location: Chexbres, VD, Switzerland

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by Bregalad » Sun May 03, 2020 8:41 am

Also my $2 but if you use the border as part of the HD, or have anything useful (or even purely decorative) in there instead of just a constant color, it'll look better.
There were games that worked like this in the 90's (I personally remember playing SimCopter this way), but something looks really off when the quality of the image shifts constantly like that. I assume that your brain tries to interpret pixel changes as animation/movement, but since nothing actually moved it feels a bit disorienting. I really don't like it.
TBH without trying it it's impossible to guess whether that can look good or not.

User avatar
tokumaru
Posts: 11702
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by tokumaru » Sun May 03, 2020 9:13 am

rainwarrior wrote:
Sun May 03, 2020 8:35 am
I used to play Wolfenstein 3D with the shrunk viewport just to get it to run smoother on my 286.
I did the same with Doom on my 386.
The thought of a border actually seems more appealing to me. Part of that is probably nostalgia from games I played on Atari ST and other computers in the 80s, but also it just seems like a good place for some sort of HUD/UI.
Due to the amount of tiles required for the 3D scene itself, the border would have to look very simple. With less than 16 or so tiles I think it'd be impossible to do any sort of UI there. It'd have to be decorative only.
The minimalist experience of no HUD and full viewport works very well for some games, but it is in no way universally better to me.
There will always be the Doom/Wolfenstein style HUD at the bottom (marked in light gray here). If more information or controls are necessary, I may implement an auxiliary screen that you can access while the game is paused in the background.
Also with the border in the mockup it looks less off-centre, which I think helps.
The increased resolution also means that more blanking time is needed for VRAM transfers, so that ends up affecting the screen layout too.
Bregalad wrote:
Sun May 03, 2020 8:41 am
Also my $2 but if you use the border as part of the HD, or have anything useful (or even purely decorative) in there instead of just a constant color, it'll look better.
It definitely wouldn't be just a solid color. I'm using solid colors here just to mark where things go.
TBH without trying it it's impossible to guess whether that can look good or not.
I tried but couldn't find any videos of SimCopter with this option enabled... Not surprising, considering that modern computers where these YouTube videos were made really don't need such a hack.

User avatar
Marscaleb
Posts: 208
Joined: Fri Sep 11, 2015 10:39 am
Contact:

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by Marscaleb » Mon May 04, 2020 10:18 pm

Honestly I think it is going to have to depend on the game mechanics.
For being a shooter, probably the best thing to value would be speed and framerate.
But as the game shifts more toward factors like exploration, looking for keys, or even solving puzzles, then it becomes more important to have distinguishing areas, even if it costs some framerate.

When I look at all the compromises that would have to be made to put a raycast first-person view on the NES, I keep thinking that there's no way you could deliver a fast-paced shooter that's actually fun. You might make a neat tech-demo, but not a fun game. With that in mind, I think that if I had a FPS engine running on the NES, I would probably want to adapt it to be used for something like an RPG, maybe a game like Shadowcaster, (Which uses an advanced Wolfenstein 3D engine,) or a game with similar mechanics. Or maybe an RPG dungeon crawler that uses the first-person mode for exploring areas but the battles are done through a turn-based system. And in cases like those, I would favor a system that pushes for more detail in the world, even at the expense of framerate. I would probably want more screenspace for viewing the world so that I can see all the detail the world has to offer. Assuming its worth looking at, I suppose.

But hey, you're welcome to prove me wrong and make a fun fast-paced shooter. Or maybe you'll find a fun balance between the two. Either way, the more important quick reflexes are going to be to the game itself, the more I'm going to favor high framerate, and the more important exploration is, the more I favor graphical detail.
So I can't really answer the poll, because my answer would change depending on the game.

User avatar
tokumaru
Posts: 11702
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by tokumaru » Tue May 05, 2020 6:59 am

I see your point. I plan on creating an experience that's at least as smooth as the 3D shooters that were commercially released for 16-bit consoles, otherwise even I wouldn't be able to play my own game.

I personally couldn't ever make an RPG/dungeon crawler because I have zero experience with those kinds of games. I never liked them.

I'm not really afraid of the 3D rendering itself: my old demo from over ten years ago was smooth enough even without all the optimizations I've done to the engine since then (basically a ton of extra lookup tables replacing stuff that was done in real time back then, such as multiplications, texturing and binary searches). The whole process is solid, and very efficient.

One of the most inefficient parts is, unsurprisingly, getting the PPU to display the graphics. In order to display more colorful scenes, some juggling has to be made with the patterns and the scroll, which means IRQs every few scanlines doing raster effects and eating up precious CPU cycles.

The other big problem is rendering objects. Scaling and blitting object pixels on top of the background pixels would be extremely slow, not only because of the bitting itself but also because it would prevent otherwise finished graphics to be sent to VRAM until all objects have been superimposed. The only way to not have objects delaying the background updates is to draw them with sprites, but even then the slowness of scaling them remains. One option would be to pre-scale each object to 16 or so (non-linear) sizes, at the cost of lots of PRG-ROM, but some processing would still be necessary for masking objects against the background. The final challenge of using sprites is the extremely small screen area that they can cover, severely limiting the number of objects that can be in the scene. I believe that the game can still be fun even if a room packed with demons is impossible.

User avatar
nesrocks
Posts: 459
Joined: Thu Aug 13, 2015 4:40 pm
Location: Rio de Janeiro - Brazil
Contact:

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by nesrocks » Tue May 05, 2020 8:29 am

Lower resolution, but use the borders for HUD or to display artwork.
https://twitter.com/bitinkstudios <- Follow me on twitter! Thanks!

User avatar
tokumaru
Posts: 11702
Joined: Sat Feb 12, 2005 9:43 pm
Location: Rio de Janeiro - Brazil

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by tokumaru » Tue May 05, 2020 9:09 am

nesrocks wrote:
Tue May 05, 2020 8:29 am
Lower resolution, but use the borders for HUD or to display artwork.
The low resolution version is the one that occupies the most screen space (due to the chunky pixels), leaving no room for borders. The high(ish) resolution version is the one with the smaller viewport and lots of empty space around it.

OK, here's another possibility, which's kinda between the two I posted before (and also a preview of what the HUD might look like):

medium.png
medium.png (14.54 KiB) Viewed 1599 times

This is the best I can do while still drawing the background exclusively via name table updates (1680 bytes). This is 56x60 soft-pixels (which are 4x2 hardware pixels), occupying a 224x120-pixel area on the screen, as opposed to the 60x40 soft-pixels (occupying a 240x160-pixel area) of the blockiest version. The increased vertical resolution really helps with judging distances, which's important in a game like this.

The way this works is that the pattern table is filled with all 256 combinations of 2 of 16 pseudo-colors (made from dithered patterns of 4 the colors of a single NES background palette), one on the left and one on the right. Since each tile contains only 1 soft-pixel vertically, the entire height of 2 name tables (60 tiles) is used for each column of the 3D scene, and raster effects are used to squeeze the 2 name tables into a 120-pixel tall area. A 4-screen name table layout is used so there's room for double buffering and for the HUD. No extra PRG_RAM is used, since the name tables can be updated progressively.

I'm keeping the poll as is though, since the point is to know if people are willing to sacrifice performance in favor of detail, to not to have them choose an specific resolution.

EDIT: Fixed the aspect ratio of the image.

User avatar
nesrocks
Posts: 459
Joined: Thu Aug 13, 2015 4:40 pm
Location: Rio de Janeiro - Brazil
Contact:

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by nesrocks » Tue May 05, 2020 10:51 am

Yeah, by lower resolution I meant the option that uses the least amount of screen space.
https://twitter.com/bitinkstudios <- Follow me on twitter! Thanks!

Bananmos
Posts: 516
Joined: Wed Mar 09, 2005 9:08 am
Contact:

Re: Poll: How would you prefer a first-person shooter on the NES to look like?

Post by Bananmos » Tue May 05, 2020 11:21 am

Great to hear you're working on the raycaster again! I think it was such a cool project and would love to back a Kickstarter for the first fun'n'playable NES FPS. :)

I think in cases like these, faking stuff is always better than brute-forcing it.

Two tricks I can think of:
1) The Gamehut guy posted a video a while back about the Mickey Mania parody that later turned into the 3d section for Toy Story on the Mega Drive:
https://www.youtube.com/watch?v=CJXIDEapaLc
https://www.youtube.com/watch?v=IhMMK3QLxSM

The key thing is cheating by using vertical symmtry to only render half the screen. Of course, vertical flipping of the background isn't totally free on a system like the NES which lacks BG tile flipping, and the feasibility heavily depends on whether you'll use an IRQ-capable cart or not.

The symmetry also enforces some design limitations that may not be to everyone's liking. But I think the potential for frame boost is too good to overlook this option... but you might be doing this already? :)

2) Untested, but as I've mentioned before, I think using the scroll registers to fake horizontal (and even partial vertical) movement has some great potential to create a smoother experience. A week or so ago, I was watching "FPS granddad" John Carmack speak about the problems of achieving low latency in low end hardware VR, and the trickery and faking they've accepted just to get a smooth experience and avoid motion sickness:
https://www.youtube.com/watch?v=lHLpKzUxjGk

And the thought came to me again that what works in VR could potentially work on the NES. You can't do timewarp math of course... but using scrolling to offset the screen to look more like the next predicted actual rendered frame may make the difference between a too choppy and smooth-enough experience. When you move forwards in an FPS the low resolution / FPS is usually not too distracting in my experience. It's when you try to turn / strafe that the chunkiness and low framerate become glaringly obvious.

Finally, as for sprite objects and clipping, just this week I have been playing around with making a sprite scaler based on Tepples lookup table concept, but using unrolled loops for the vertical scaling in place of the DDA algorithm Tepples used. I've also chosen to overlap sprites vertically as well as horizontally, which greatly simplifies the loop unrolling problem - albeit at the expense of sprite assignment and OAM cycling being a lot more difficult, in order to make sure that blank "zombie pixels" in sprites that not supposed to be visible any more never get assigned to horizontally higher priority sprites than those that have "live pixels" on the same scanline.

This also made me think that only a subset of the columns / rows actually need updating each frame, and that temporal coherence could be taken advantage of in order to update only a subset of the scaled sprites data each frame. Perhaps even cheating a bit and delaying a row or column expansion for just a frame, if you're aleady out of your cycle / vblank budget for the particular frame.

It's still a work-in-progress, but I think fairly large scaling sprites at 60 FPS is achievable... I've already been thinking it would be nice to see this method paired up with a raycaster engine. As long as you don't mind a *lot* of wasted PRG, you can actually get the clipping against 3d walls "for free" by combining the lookup table for the horizontal scaling with the table for horizontal clipping, and just point it at another 256 page. The lookup table and your scrambled tile data should still fit in a 16kB bank, which is all you really care about if it's a visual demo more than a size coding competition.

I'll try to find some time to clean up the code and do some more experiments in the next week or so.

Post Reply