[HN Gopher] How Duke Nukem II's parallax scrolling worked
       ___________________________________________________________________
        
       How Duke Nukem II's parallax scrolling worked
        
       Author : bpierre
       Score  : 200 points
       Date   : 2022-07-15 14:23 UTC (8 hours ago)
        
 (HTM) web link (lethalguitar.wordpress.com)
 (TXT) w3m dump (lethalguitar.wordpress.com)
        
       | Dwedit wrote:
       | I never would have guessed that this game was using an EGA mode.
       | Using a non-default palette completely fooled me.
        
       | StillBored wrote:
       | Hmm, maybe my memory is failing me, but VLB went from 0 to 100%
       | on 486 motherboards pretty much overnight. The ISA bus limits
       | (and hence EISA) were well known, and most of the SVGA cards
       | being sold in the early 1990's (like those cirrus logic's) were
       | "accelerated" to compensate for the lack of ISA bandwidth. AKA,
       | they had blit engines, hw cursors, line drawing, etc, and windows
       | drivers to utilize that functionality. I'm fairly certain,
       | although to lazy to dig up the tech manual for them that the blit
       | functionality included alpha channels. Given that 486's
       | themselves were considered high end, I frankly never remember
       | seeing one with an 8 bit EGA card, even 386's usually in the late
       | 80's early 1990's were shipping with 16-bit (S)VGA cards because
       | the 3rd party cards were fairly inexpensive. While EGA lived on
       | in lots of games because it had some convenient modes, actual EGA
       | cards were also fairly short lived in that little window before
       | VGA was released so by the late 1980's weren't being sold with
       | new machines. It was also fairly common to overclock the 8-MHz
       | ISA bus to 10MHz on boards that didn't have VLB. Anyway, my point
       | is that in 1992, low end machines were coming with Hercules
       | graphics and monochrome monitors. Anyone who could afford a color
       | RGB monitor wasn't getting it with VGA/EGA because the monitor
       | was 80% of the price (few hundred dollars) and a 512K SVGA card
       | was well under a hundred.
       | 
       | Anyway, I guess the benchmarks in there were to show how slow
       | plain VGA was, but really by the time frame of duke nukem,
       | 486SX's and VLB were radically changing the PC's performance
       | characteristics, even on fairly low end machines.
       | 
       | PS: I still have the cirrus technical manuals because back in the
       | 1990's you could call up these companies, tell them you were a
       | software developer and they would send you a 400+ page technical
       | manual that details registers and operational/functional
       | characteristics of the boards.
        
         | danachow wrote:
         | > included alpha channels
         | 
         | I would be very surprised by this. Raster ops, yes. Alpha
         | channel image compositing operations, no way - that's an
         | entirely whole nother level of complexity.
        
         | tomxor wrote:
         | > VLB went from 0 to 100% on 486 motherboards pretty much
         | overnight. [...] actual EGA cards were also fairly short lived
         | in that little window before VGA was released so by the late
         | 1980's weren't being sold with new machines
         | 
         | I know the market moved fast back then, but "sales" !=
         | "ownership". Sales may have switched to VGA overnight, but if a
         | game wants to maximise it's audience it needs to target what
         | people already own. So unless people buy computers like they
         | buy milk, that would have included EGA cards.
        
           | bombcar wrote:
           | Also upgrades were very very common back then - and you'd
           | often sell back your current card to the store when buying
           | the upgrade. So people would be upgrading to EGA cards as
           | those came back in.
        
           | syntheweave wrote:
           | Also taking place in this time frame was the move towards
           | "multimedia PC" standards. At its onset, MPC Level 1 helped
           | consolidate the standards around VGA spec and Soundblaster
           | audio, when before that, the expectations for PC games were
           | that it was primarily an office computer and didn't "do"
           | graphics or sound, so you just had to try to support
           | everything, especially if you were doing shareware and wanted
           | high install rates. So around 1991, when that spec was
           | released, you start to see VGA as a requirement, but
           | shareware did stay behind the curve to support "granny PCs".
           | 
           | Doom really changed this. Lots of people ran out and got new
           | systems for the sake of Doom, when before there was an
           | association between high end machines and complicated
           | simulator games. And while there were still casual games that
           | remained focused on the "granny PC" well into the 2000's, the
           | market really redefined itself in a big way around this new
           | wave of enthusiasts playing shooter games.
        
       | luckyorlame wrote:
       | Doesn't it still work that way?
        
       | tambourine_man wrote:
       | IIRC, Karateka did parallax scrolling in Apple II and C64 days.
       | 
       | I've read the technical explanation but it was beyond me at time.
        
         | vidarh wrote:
         | Karateka is a poor example of Parallax on C64, as it apparently
         | does (slow) bitmap scrolling in front of a static background.
         | Parallax on the C64 tends to rely on the ability to redefine
         | the character set and effectively use it as a tile set. You can
         | smooth scroll characters using the graphics chip, so you only
         | need to move them every 8 pixels.
         | 
         | Combine that with multiple character sets and you get a
         | variation of the Duke Nukem II approach for "free" - you scroll
         | the characters for the background with the foreground, but you
         | flip to a partially scrolled definition of the tiles.
         | 
         | Another approach often used when the background is limited in
         | complexity, is sprites.
         | 
         | A third option is banding. E.g. if the background you want to
         | parallax scroll is above the normal play area, you can use the
         | raster interrupt to control the scrolling independently for
         | each band.
         | 
         | A fourth option is a bitmap scroll of the tile data. This is
         | "easy" if your parallax bands are limited patterns. E.g. you
         | might fill one band of the background with 0123012301230123
         | over and over, and then just scroll that as a 32 bit pattern in
         | the character definition.
         | 
         | In any case, the key to all of these is that few c64 games use
         | the bitmap mode (a _few_ do), and so you get to offset the slow
         | CPU with moving far less data around. Tack on the hardware
         | sprites and raster interrupt and you can do a lot of
         | interesting stuff.
         | 
         | Here's a great page on Parallax in C64 games with some video:
         | 
         | https://www.c64-wiki.com/wiki/Parallax_Scrolling
        
         | LocalH wrote:
         | Karateka didn't use any of the C64's advanced features
         | (hardware scrolling, sprites) as far as I know, being a game
         | that originated on the Apple II. It was still very impressive.
         | I wonder which C64 game was the first to have smooth parallax
         | scrolling (at 50/60Hz).
         | 
         | The technique of pre-shifting was used very widely, even on
         | consoles with some form of hardware assistance (Sonic 3 uses
         | pre-shifted images to gain an extra parallax layer in some
         | places, like the Launch Base Zone background, in addition to
         | the two hardware tile layers and single sprite layer, which
         | could be combined in interesting ways via priority bits). Many
         | Amiga games would also dedicate two sprites to generating a
         | parallax layer (as the Agnus chip's "copper" could rewrite
         | sprite registers mid-scanline, two sprites would be sufficient
         | to cover the whole width of the screen via updating the image
         | pointers on the fly, which was really the endgame of the idea
         | of "racing the beam", dedicating a piece of compute logic
         | towards updating registers at extremely high speed)
        
       | aj7 wrote:
       | If the graphic example shows parallax scrolling, I don't see it.
       | It looks utterly flat to me.
        
         | scatters wrote:
         | The background texture moves relative to the foreground (pipes
         | and walkways). That's all!
        
         | chrisseaton wrote:
         | Different planes moving at different speeds to simulate them
         | being further away - thee we at what they mean and the example
         | does show it.
        
       | antiverse wrote:
       | Semi-related; a fun bit of juicy drama is always par for HN:
       | "Duke Nukem Stole Graphics from Turrican" -
       | http://www.nemmelheim.de/turrican/news/duke/
        
         | gRoberts84 wrote:
         | Fair usage applies :D
        
         | daenz wrote:
         | After watching some gameplay of Turrican[0], which came out in
         | 1990, I'm convinced it is heavily inspired by the NES Contra
         | (1987).
         | 
         | 0. https://www.youtube.com/watch?v=P7jP0qQgL-c
        
         | alisonatwork wrote:
         | That's pretty funny. Although, to be honest, I think a lot of
         | the shareware platform games from that era were seen as low
         | budget knock-offs of more famous games on the consoles and
         | 8/16-bit home computers.
        
         | bm5k wrote:
         | A couple of those could be considered "inspired by" if you (a)
         | squint and (b) ignore all the examples that are clearly the
         | same ;)
         | 
         | I played the duke nukem 1 & 2 shareware _back in the day_ but I
         | missed out on Turrican thanks for sending me down this rabbit
         | hole.
        
       | davedx wrote:
       | I remember implementing a side scrolling platformer on my 386 and
       | being boggled by how slow everything was compared to on consoles.
       | Didn't know what hardware acceleration was then, and this was
       | before I got Internet access so I worked it out myself, coded it
       | in C, then hand optimized the inner drawing loop in assembly,
       | rewriting the pixel writes to use rep/mov instructions for each
       | tile. This took a while but I managed to squeeze out acceptable
       | performance for my game with Keen-like smooth scrolling.
       | 
       | Reading Masters of Doom some 30 years later was pretty eye
       | opening. This article too - to this day I've never heard of latch
       | writes.
       | 
       | So much voodoo in graphics programming!!
        
         | moosedev wrote:
         | Since you mentioned latch writes, check out Michael Abrash's
         | Graphics Programming Black Book[0], chapter 23 onwards, if you
         | feel like immersing yourself further in well-written VGA lore.
         | 
         | Not recommended for your present-day productivity (unless
         | you're making retro games!)
         | 
         | [0] https://www.jagregory.com/abrash-black-book/
        
       | layer8 wrote:
       | TLDR: The primary scrolling used 8-pixel steps (based on 8x8
       | tiles), while the parallax scrolling was in 4-pixel steps just by
       | using two (or 2x2) variations of the tiles. Also, the EGA
       | hardware allowed copying tiles within video memory with four
       | times the speed of memory accesses from the CPU, by operating EGA
       | latch registers for the four bitplanes in parallel. The number of
       | tiles on the screen where sprites and tiles and background
       | partially overlapped, and therefore required slower drawing
       | methods, was minimized.
        
       | rob74 wrote:
       | Ha! You call _that_ parallax scrolling? Then take a look at
       | _this_ (Amiga, 1993):
       | https://www.youtube.com/watch?v=BoiHk_3siYg. In the first level,
       | the bands of clouds are moving in (I think) 6 different levels of
       | parallax, and also the mountain range and swamp below has
       | different levels of parallax. Ok, this was a game that, as one
       | reviewer put it, "squeezes all the graphic power out of the
       | Amiga". Would you believe that this was a computer which was only
       | capable of displaying 32 colors at once? Ok, that was without
       | tricks of course, and this game probably uses every trick in the
       | book...
        
         | z303 wrote:
         | Not to take anything away from the developers but the Amiga
         | does have hardware sprites, hardware scrolling, a blitter, the
         | copper and dual playfield mode to make things a little easier
        
         | chrisseaton wrote:
         | > Ha! You call that parallax scrolling?
         | 
         | Don't get why you need to put down what someone else did
         | because someone else did something better at the same time?
         | Nobody claimed it was the best parallax at the time.
        
           | neilwilson wrote:
           | Perhaps a little context would help
           | 
           | https://genius.com/Monty-python-four-yorkshiremen-live-
           | lyric...
        
             | dota_fanatic wrote:
             | That's a stretch. That sketch is about one-upmanship as to
             | who suffered more. (Which is also toxic behavior when taken
             | out of comedic contexts. I know people who do this
             | unironically and it's not healthy.)
             | 
             | Agree with the parent, it's great to develop a richer
             | context on top of the OP and have everyone benefit as a
             | result, but there's no need to put one down in order to
             | raise another. They're both cool and interesting.
        
               | dhosek wrote:
               | In my day there were no graphics cards. You had to write
               | the bits into special parts of memory yourself. And you
               | considered yourself lucky to get 140 pixels on a line.
        
             | chrisseaton wrote:
             | Seems an entirely unconnected bit?
        
         | christkv wrote:
         | I mean the Duke Nukem 2 parallax is impressive because it's
         | basically beating a square peg into a round hole.
         | 
         | The Amiga had a lot more helpful hardware. Lionheart really is
         | an incredible title for squeezing so much out of the OCS
         | chipset.
        
         | ekianjo wrote:
         | YOu could also go back to Shadow of the Beast 1, much earlier
         | on the Amiga, with a very impressive feat when it comes to
         | parallax scrollings.
         | 
         | https://www.youtube.com/watch?v=y9BltSvKMlQ
         | 
         | Honestly, PC games were a complete joke compared to whatever
         | was on the Amiga, until Wing Commander 1 came out.
        
           | icedchai wrote:
           | I still remember when I first played Shadow of the Beast,
           | back in 1989 on my Amiga 500. It was incredible.
        
             | ekianjo wrote:
             | It was the future! Compared to all 8 bits games of the time
             | it was such a HUGE step forward, everyone who saw it was
             | absolutely amazed.
        
           | z303 wrote:
           | A nice breakdown on how it was done [1]
           | 
           | [1] https://codetapper.com/amiga/sprite-tricks/shadow-of-the-
           | bea...
        
         | [deleted]
        
         | layer8 wrote:
         | I'll throw in Turrican II level 3-1:
         | https://youtu.be/-TSjfMNAXwU
        
           | the_af wrote:
           | Cool, and technically impressive!
           | 
           | But this kind of game raises my stress levels :D
           | 
           | Yes, I used to play R-Type, Blood Money, etc. Then I realized
           | I didn't enjoy them, I _suffered_ them.
        
         | mortenjorck wrote:
         | While not nearly as lush, this is another impressive bit of
         | Amiga parallax scrolling from six years earlier:
         | https://www.youtube.com/watch?v=GwATApeN2Qw
         | 
         | (Also the only video I could find with the original, heroic-
         | sounding music I remember, as everyone else seems to have
         | somehow ended up with a disk image using an oddly-substituted
         | filler track.)
        
         | TacticalCoder wrote:
         | That vid is a very bad example for the vid itself is not
         | running at 50/60 Hz. And that was the whole thing back then:
         | most great game on the Amiga (and the Atari ST) were running at
         | "full frame rate". Arcade games too (except some still amazing
         | ones like Outrun which was 30 fps IIRC).
         | 
         | A parallax a 50 Hz was silky smooth. A video of a game running
         | at 50 Hz that is recorded at 30 fps doesn't do the original
         | game justice.
         | 
         | The link to Shadow of The Beast (Amiga 1989) is much better in
         | that you can configure YouTube to play the vid at 50 Hz.
        
       | dottrap wrote:
       | Many of the comments here imply this article is about how to do
       | parallax scrolling in general or think the article is suggesting
       | Duke Nukem II was pioneering parallax scrolling. This is not what
       | the article is about.
       | 
       | This article is about how Duke Nukem II specifically implemented
       | drawing so that it could actually achieve playable framerates on
       | EGA video cards and slow ISA buses, which were too slow to do a
       | naive implementation.
        
         | [deleted]
        
           | [deleted]
        
       | ghoomketu wrote:
       | My god the things programmers had to do back in the day to
       | squeeze every single bit out of the machine and here I was
       | feeling smug using Weakmap instead of map for my code
       | optimisation :P
       | 
       | I also remember carmack's fast square root function. So many
       | amazing tricks. There definitely needs to a site or sub-reddit
       | dedicated to these.
        
         | qbasic_forever wrote:
         | Track down the Graphics Gems series of books, it's what most of
         | the game devs back in that era used to get tricks like fast
         | square root, etc.
         | https://www.realtimerendering.com/resources/GraphicsGems/
        
           | sumtechguy wrote:
           | I always liked this site for some interesting tricks.
           | 
           | https://graphics.stanford.edu/~seander/bithacks.html
        
       | desi_ninja wrote:
       | great to see lethal guitar's work getting featured here. Rigel
       | Engine is a very cool and ambitious project to revitalize a retro
       | game. He is also very welcoming. I had my fun time contributing
       | to it few years back.
        
       | gwbas1c wrote:
       | > Earlier, I also said that VGA games more frequently featured
       | parallax, and that VGA was easier to program than EGA. This is
       | primarily because in 256-color VGA mode, each pixel always
       | occupies one byte. So all the complexity caused by the need to
       | address individual bits disappears. VGA still has a planar memory
       | layout, but this applies to bytes instead of bits.
       | 
       | My dad picked up an old EGA computer from work in the early 90s.
       | I was always frustrated that almost all games required a VGA at
       | the time. Now I understand why... It was too much effort to be
       | backwards compatible with what was increasingly becoming niche
       | hardware.
        
         | tdumitrescu wrote:
         | It wasn't just coding, it was also a lot of design/art
         | resources. Going from 256->16 colors would look terrible with
         | automatic dithering. My recollection is that there were a few
         | Sierra titles made for VGA that also supported EGA and that it
         | looked like someone had gone through each screen by hand to
         | make the low-color ones look acceptable-ish.
        
           | the_af wrote:
           | EGA art specifically designed for EGA could look beautiful.
           | For example, I love EGA Monkey Island. Most adventures with
           | EGA support had different graphics for EGA vs VGA.
           | 
           | But yeah, automatic dithering didn't look nice.
        
       ___________________________________________________________________
       (page generated 2022-07-15 23:00 UTC)