Still Rising / Vanity
The -not for pussies- Making-of

Written by Hicks, Beb & Ultrasyd


To write the making-of Still Rising (link), I (Hicks) must start by briefly explaining what is my demomaking conception. This detour is not futile or useless, because your demo will be an illustration of "what a demo must look like". Frequently, people neglect this theoretical question and claim that demomaking is about fun with friends, having a nice time in front of the bigscreen at the parties, and else. I don't think that the best demos have been made with a lot of fun, but essentially with a lot of work, sweat, problems and headlock. Fun and friends are another thing!

When people accept to answer the question "What must be a demo?", then, an opposition as old as demomaking itself starts: technical demos vs. artistic demos. Of course, nowadays we need to make a synthesis between these two approaches. But the question remains: what is the most important aspect? Today there is something that I could call an "artistic school" in demomaking, represented for example by Human Traffic and Smoke & Mirrors by Ghostown & Loonies (Amiga AGA), or Phortem by Condense (Amstrad CPC). I respect and appreciate the work of Slayer, Jazzcat, CeD and DMA-SC, but I consider that it's not the good approach. They insist on the theme, story, ambience and graphical sides of the demo, but they miss the essential thing: a demomaker must propose something that people believe to be impossible. Luminagia by Loonies (Amiga AGA), Starstruck by TBL (Amiga AGA) or Batman Forever by Batman Group (Amstrad CPC) illustrate the other approach.

The demomaking notion is closely linked to a set of binding technical limits, associated with each computer. The demomaker's task is to find tips, optimisations and new approaches to bypass these constraints. The magician shows you an empty hat. Shortly after, he takes out from this hat a little rabbit. There must be a trick, but which one? A successful demo must generate this kind of impressions.

1. The coding and direction side (by Hicks)

It's useful to briefly sum up the Amstrad CPC capacities. The standard model used by demomakers is:

- 128 kb of memory. 64kb are linear, plus 4 pages of 16kb each,
- 3,3 Mhz Z80A processor. The initial processor is 4 Mhz, but slowed by other devices,
- AY3 8912 chipset for music (the same as ZX Spectrum and Atari ST),
- 3 graphical modes. Mode 0 (160*200, 16 colors among 27) and few mode 1 (320*200, 4 colors among 27) are used in Still Rising,
- CRTC graphical chip. A "line repetition" is free, but no text mode, no hard scrolling and no hard sprites.

In our previous big demo, named From Scratch (link), we tried to combine a maximum of hardware techniques, like distortions, scrollings, lot of colors, X-rotator, etc. Then, it was important to do something different this time, including mainly a mix of hardware tricks and software optimized effects, and to maintain a background or a foreground constantly with the effects.

It would be long and boring to explain how was made each effect. Then I will present in this section the main ideas related to the coding and direction sides of the demo.

1.1. Singleload and tools

It's very important to insist on this point. Still Rising loads 65kb of data at the begining, and when the music starts, the show runs for 6 minutes without loading any other piece of data. Batman Forever, for example, uses a trackload and more than 600kb of data, ten times more! Then it's another exercise, with more constraints. I don't want to say that coding a trackload is easy, because on CPC, our disk manager is not so easy to use. But, it's clear that it's easier to make an effect when 95% of the memory is free for each effect.

Another invisible point is the tools used to develop the demo. The whole demo has been developed using the real machine, with 3.5" disc drive and ROM extensions. Tools used are: DAMS for the z80 code, OCP Art Studio for the graphics, and Starkos for the music. The data has been crunched with Exomizer, some pixels made with Graph 2X, and the end of the music composed with Arkos Tracker. But our ethic stays to maximize the pure native development (and to break cross-developer asses :)).

1.2. Multi-layers

Few demos on CPC propose different layers when something is displayed on the screen. In fact, we don't have hard sprites (like the C-64) or independent layers (like Amiga). One of our first ideas was to not only put "an amazing, big and fast effect on the screen", but to do it with a foreground or a background. Then you can see a background and a moving raster-bar behind the zoomscroll, a pong over the rotozoom, some dancing aliens behind the twisters, or the credits over the kaleidoscope effect. To do that, we chose a 4*4 font since the begining as some of our effects are blocky.

1.3. Blocky effects (without text-mode)

Our graphical chipset (our beloved CRTC) allows us to set a new screen address for each line, and free line repetition. Since we don't have a text-mode like on C-64, we use this repetition to "simulate" a simple text mode with 4*4 pixels. Then, you display one line with a software routine (using the stack pointer) and repeat it 3 times. Then the effect is 3 times bigger for free. Or almost free, because you must then cut your routine to integrate the hardware instructions to set the screen address. The rotozoom and kaleidoscope effects are working like that.

1.4. New use of CRTC: dynamic line spliting integration in software effects

Advisory, technical hints follow! When coders use line splitting on CPC, it's always in the same spirit: to set the new offset at each X lines, where X is constant. For example in the blocky effects, the change happens each 4 lines. A new approach is this one: changing 20 times the memory address on the whole screen, but at different moments on the screen. The scroll-zoom is working like that. Consider that the X zoom is software and the Y zoom hardware in this way. Then we can make a Y-stretch for quasi-free in hardware, but you have to manage the code interruption when it's time to change the line address. And when you add a moving raster-bar behind the scroll-zoom, you have to manage a second code interruption... and risk your mental integrity :) For the little story: this effect of 20 lines is an answer to Rhino's zoom-scroll of 16 lines (without background) in the already named Batman Forever.

1.5. A specific problem: the lightsourced twister

The creation of the twister brought us a specific problem. There are few rubbers on CPC, but this effect is quite popular on the demoscene. We watched all of them, but we didn't want to copy them, and only "adapt", for example, the C-64 dithered classical twisters with the CPC palette. We were looking for something new. Then, we made different tries. The global idea was to cut the rubber into different solid slices. Our first idea was to display a flat twister, but with complex shapes (holes, bumps, etc.). But the result wasn't good because the fake perspective was too visible. The second idea, in reaction, was to add more perspective with a textured twister. And yes, it was good! But the graphical aspect wasn't good enough (few colors). Then, the third and final idea was to try the first lightsourced twister on CPC. Beb used a 4*4 dithering to obtain a lot of different colors and the result is finally good!

1.6. Music player and code generation & management

As you can see, each effect of this demo is fullscreen. It means that at each frame, we move from 10kb (rotozoom is 25fps) to 24kb (kaleidoscope is 50 fps) with different tricks. Then, the structure is: 30 lines of player and code management & generation on the begining of the screen (invisible part) and approximately 280 lines of effect displayed on the visible screen. Trust me, 30 lines to play the music and generate/manage the main code (effect displaying) is very short! Then, I wrote my own "stable on-the-fly killer depacking player" which is approximately 14 lines long (14*64 microseconds). The raw music was 246kb long (14 registers for one frame, 6 minutes of demo) and 22kb crunched. I can then decrunch 14 datas in 7 lines and send them to the sound chipset in 7 other lines. A perfect job for coder pr0n lovers!

2. The graphical side (by Beb)

The main problem with this kind of demo (where all is stored into memory) is the small place we have to store all the graphics and maps. At first we wanted to have an arrogant picture for the loading part. I'm not a HipHop music fan, but I thought it was a great idea to shoot the different Vanity guys with narcissistic attitudes. Many people will blame us for that :) Each time we load a file, we add a face. I wanted to do a fake rasterline dithering effect and a proper palette for each guy (with only 16 colors). When all is loaded you can watch a CPC World record with the biggest falling sprite in one frame.

When we started Still Rising we wanted to use fake extended colors, like SuperSly has done in the past. Today many graphician do that on CPC but only with static picture. I tried to do it on moving effects. We have strange and nice colors on the zooming plasma or the flat twisters.

For the rotozoomer, who is definitely the greatest one on CPC (ha ha), I mixed the famous sentence "Why so serious" coming from Nolan's Batman and a complet redrawn picture from Jack Nicholson (the best joker in a movie, because is really the same in his real life). It's a joke for BatmanGroup. And I did a too bright picture. Sometime we miss the Pong in the front plan. Damn!

The main graphic is an interesting picture 'cause it's the first time (I think) you can see a screen with different resolutions. The whole screen uses mode 0 resolution (fat pixels with 16 colors) and the bottom uses mode 1 (4 colors). It was a bit difficult to use splitrasters and try to add a lot of colors in the back (but we have a smooth "Still Rising" logo). It's also the first "on the fly" drawn picture. Unfortunately you can't see the real result on emulators because they don't do the job in the right way :)

After all these great amount of picture we don't have any more memory. So we have to use the same map for different Kaleidoscope effects. Only moving the colors to have differents graphics.

Maybe next time we will do a "pussy demo" with a trackloading :)

3. The musical side (by Ultrasyd)

First of all, I was very happy to be contacted by Hicks and Beb for this demo. That was in early 2010. My experience on CPC was quite limited (I started in 2009), but the challenge interesting. The idea was to make something modern, different from what had been previously made on this machine, and also different from what I used to make at that time. For some unknown reasons, the ZX Spectrum scene has some very nice dance / rave music and fat beats (ex: Kenotron "Nightly Delirium"), while the CPC scene focuses on great melodies and arps.

From the indication I had about the design, I chose to make an electronic soundscape browsing a few modern musical genres. But with the limitation of the CPC! I also work a lot on Atari ST(e), which has a soundchip of the same family, but actually much more powerful to me, which makes it easier for dance music. On Amstrad CPC, we are limited to 3 AY channels, 50 Hz, no samples in my case... all that with an awful stereo repartition :D

It was a choice to have few melodies and a rather cold render, knowing that classical melodies and arps would have been more pleasant for the audience. The soundtrack starts with a bit of electro, passes to hip hop with some kind of scratches on the kicks, then moves to drum'n'bass. Urban noisy music that is.

Today, with the experience I have on Atari, I would make things differently. I was technically more satisfied with the soundtrack of "Bloc(k)Us", which was made later. But I'm still open to work on CPC, and I'd like some new technical challenges, more accurate instruments design ... Why not wobbles :D

4. Reception and final words (by Hicks)

Finally, the demo has been released at Revision 2013, and finished second, behind Rink a Dink Redux by Lemon on Amiga 500.

Today I can make a self-criticism of our work:

- the zoomscroll is probably too long and a little bit boring,
- the presence of a theme would have give more unity,
- 6 minutes of show needs more effects,
- a better exploitation of the sound chipset (AY3 8912) and Floppy Disc Drive Controller (FDC 765),
- more innovative effects and more innovative technics (CRTC especially).

We also received some unjustified critique. For exemple, some guys take some "arrogant demomaker jokes" towards Batman Group too seriously. They probably lack of humor and demomaking culture. Some people find also the demo "too technical". In my opinion it's exactly as if you found a girl "too sexy", it makes no sense. But I guess that they want to say that a minimal technical level is necessary to appreciate some aspects of this demo, exactly like a minimal technical level is needed to understand some art forms (I precise that I don't pretend that demomaking is art). Yes, demomaking can't and shouldn't be mainstream!

Thanks to Grim for the screenshots
Thanks to Toms for the english tips

To learn more about Amstrad CPC, leave your wife, sell your children, and try!