pouët.net

G. Rowdy by Desire [web]

G. Rowdy by Desire
------------------

A 32k Amiga OCS intro for the TRSAC 2022 intro or oldskool
competition.

Started out as one-screener, compo-filler two months ago.
Yet again. Must REALLY stop doing this.

Requirements
~~~~~~~~~~~~
MC68000, OCS, 512 KB Chip, 512 KB Fast.

Credits
~~~~~~~
mA2E - music, text
Optic - title logo, font, clean up of main gfx, text
Platon - code, design, tetris gfx, main gfx, text

Additional Credits
~~~~~~~~~~~~~~~~~~
Virgill - AmigaKlang
Dan - AmigaKlang2Asm
Leonard - LightSpeedPlayer
a/b - original sine table code
Blueberry - Shrinkler

Tech Tech
~~~~~~~~~
This is my first production based on my new demo/intro
framework. I hope I will find the time do a public release
soon. As with Waffles of Math Construction, this intro makes
heavy use of multitasking to play the music while still
calculating the AmigaKlang samples.

Cryptoburners did a Gouraud cube in 1994 in their production
"Crash Test" before, but it was only 25 FPS, the rotation was
jerky and the edges inaccurate. It used a 16 colors gradient,
but the palette was not arranged in an optimal way.

There is another fabulous unreleased Amiga Gouraud cube by
Axis in 16 colors with dithering, but it runs in 25 Hz for
most of the time.

Tin's "The 50Hz Stare" cube on the Atari used 6 colors, but
with a dithering pattern. The cube is much smaller, but it
runs in 50Hz.

Another Atari demo by No Extra ("So Fast Intro") showed
an eight colours Gouraud cube with 2x2 pixels and much
slower than 25Hz. But it didn't use dithering, so the
visual banding inspired me to try out what I could achieve
with the Amiga blitter.

So here we are: Two times eight colours (could have also
been one sixteen colours gradient, but then I couldn't
have used my graphics) running at a constant 50Hz
framerate with 1x1 pixels in a 176x176 area.

The smiling lady is a 31 colors graphics, but anything
except for the two gray and wine gradients are
actually sprites to save DMA bandwidth. Even more, the
display window is changed throughout the display to
even more minimize the display DMA required. This is all
necessary because the effect is mostly blitter bound.

The blitter is busy clearing four planes, filling four
planes and drawing a few lines (I had a version that
would selectively clear and erase the lines with the
cpu and blitter, but that was actually slower than the
naive method).

The blitter draws only the gradient lines and only has
to draw exactly one line per bitplane because the
palette is arranged in Gray code order. The CPU draws
the outlines of the cube. The code for the interpolation
is one of the most complicated pieces of code I've ever
written and it uses a few tricks to get it running within
one frame.

The 3D calculations (not table based) and the inner line 
interpolation are done in background task ahead of time
to level the different CPU requirements.

Also, the blitter is allowed to spill into the next frame
from time to time.

The DMA view shows that there is not much idle time left.
The blitter and the CPU are working in parallel most of
the frame.