The QB Demoscene
by Toshi Horie

The 'Young, New to the Scene, and Very Ambitious' article prompted me to report on the QB demoscene, because some of those qualities accurately describe a QB demo coder. Although most of us are not young compared to the main demo scene coders, we are new to the scene and very ambitious. We are new in the sense that most of us have not done demo-quality work until recently, although there are some people who did very impressive work years ago.

First of all, some of the readers may think "good QB demos" is an oxymoron, but they exist, as well as the QB demoscene, at least in an unofficial capacity. I say unofficial because to this date, only three named groups have formed, and no one have entered a real scene competition. Naturally, no one in the main scene knows about this small QB scene.

However, demos are prolifically being produced by this unofficial group of coders. Some recent demos include SLIQ by Entropy, and TRACER2 and PSKY2 by Pasco. SLIQ features particle blending, voxel graphics, alpha-channel masking, floor mapping, environment mapping, and swirly tunnel effects. TRACER2 is a scriptable raytracer that runs in VESA modes as well as mode 13h that supports quadrics and texture mapping, as well as the canonical sphere and checkerboard, and PSKY2 is a realtime perlin noise-based cloudcover generator.

The graphics effects in the demos is reminiscent of the '93-96 pre-hardware acceleration era in the main demo scene for various reasons. (The notable exception is in the raytracers by Entropy and Pasco). The first reason is because QuickBASIC is nonoptimizing realmode 8086 compiler, generating code that runs at about the speed of Java bytecode, making it inherently slower than code compiled by the current crop of optimizing C/C++ compilers and of course much slower than hand-written assembly. The second is that there are few people programming in QB that understand the graphics and math concepts and are interested in developing or implementing new effects. Finally, there haven't been any demo competitions in the QB scene lately, so I don't know what the quality and speed limit is yet. Also, the demos do not have nice synchronized soundtracks. In fact they completely lack sound. Aside from these limitations, many of the demos are still pretty impressive and fun to watch.

So who writes these demos, and what makes it a scene? Some of the QB demo coders I know are Pasco, a university student in Australia, Entropy, a university student in the U.S.A., SEAV, a university student in the Phillippines, and logiclrd, who was accepted to the University of Waterloo this year (CAN), Gleb, a 10th grader, EvilCreep, a junior high school student in Utah (USA), QBProgger, a high school student in Arizona (USA), and Liquidex, a university student in California (USA). As you can see, the sceners are geographically diverse. But the internet makes it easy for us to communicate with eachother. Communication is done through irc channels like #qbcc on EFnet, web boards like the NeoBASIC board, and web pages, such as Entropy's. The works are sometimes featured in electronic magazines such as QB CM, and occasional graphics competitions (such as the Code-X at Neozones) attract interesting entries.

How did this scene emerge and grow? I can't pinpoint any specific dates as for the beginning of the QB demoscene, but in 1991-92, Rich Geldreich wrote the first widely distributed 3D engine demos in QB (3DEXP and SHADE3D), which Brett Levin improved on. (See QB CM issue 2 for a history of QB 3D engines.) In the years following it, very few QB intros or demos were in wide circulation until the internet became popular around 1995-96 (although there may have been some on Fidonet and BBSs.) The only demo I know from those days is a scroller and wormhole intro called WORMHOLE.BAS by a group called Lucifer in Florida, U.S.A. From 1996 onwards, there was an explosion of 2D demos, which were obviously influenced by the main demo scene. There were a lot of plasmas, fires, and scrollers. Some of the big names were the Xtance Coders Alliance (sinus.bas is one of their simpler productions), and Andrew Ayers. But most of those demos only contained one or two effects at most, and almost never had simultaneous effects on-screen. In 1997-98, QB coders were spending too much time trying to blit quickly without flicker. Andrew Ayers created an initial solution with his BLAST! library.

But the real turning point came when Angelo Mottola released DirectQB, a game programming library similar to DirectX for the QB environment. Because it handled multiple layer blitting, fonts, and sound with ease, it made a good API for demo and game coders. However, this marked the beginning of the "library wars" in which many of the good graphics demo coders spent their time optimizing their graphics routines to outperform DirectQB and each other's libraries. This had the positive effect on the scene because the competition raised the bar on what was considered fast for QB, and what was considered a cool effect. So demo coders started trying more advanced 3D shading techniques and started combining multiple effects.

During this time, the monthly public QB e-magazine called QB: The Magazine really put the spotlight on fast graphics and good art in games and demos. It also had many useful tutorials on 3D programming, written by its readers. So there was a lot of technical as well as creative advances during the summer of 1998 and 99 when the magazine was going strong. Unfortunately, QB:TM stopped publishing in September 1999, and things quieted down, but people like Pasco and Entropy continued writing their demos. There were several attempts to create e-magazines of QBTM's caliber, the best attempt being QB Cult Magazine, followed by the short-lived but exciting QB on Acid magazine. These magazines all featured tutorial and news sections which were essential to the development of the QB demoscene.

This year marks the beginning of the Super VGA era for QB demos. Pasco, Entropy, and I all have written our own realmode VESA pixel plotting and VESA routines for use in our raytracers. Future.Library, written by Michael Sorensen and the people at www.qb45.com enables VESA graphics and Sound Blaster stereo mixing routines with MMX. No demos currently use this library, but it may start another healthy library war, if there is enough publicity in the magazines. It certainly has prompted me to write my VESA mode self-optimizing blitter compiler. To take things to the next level, v1ctor has written a flat mode and protected mode library that uses the DPMI interface, and Dash Dingo has successfully created a working VESA Linear Framebuffer routine that can be called from realmode QuickBASIC.

Overall, QB demo coders have taken different paths to overcome QuickBASIC's limitations. Some people like Angelo Mottola left the scene or moved to PowerBASIC or other languages, while many people like Gabriel Fernandez, QBProgger, leroy, and I started writing their own enhanced QB compilers. In a similar attempt, Liquidex has started writing a preprocessor for QB that understands inline assembly language. Finally, the demos I present here are from people who have gone the third path -- to optimize QuickBASIC code to the extreme without using asm-based libs. This group includes Pasco, Entropy, Sami, and Eclipzer and I who all wrote pure-QB graphics engines and QB demonstrations for them.

Here are some of the best QuickBASIC (QB) demos I've seen.

SLIQ.BAS by Entropy 2000 (multiple 2D and 3D effects)
RAYTRAxx by Entropy 2000 (raytracer with lots of features)
CX_WFALL.BAS by SEAV 1999 (smooth waterfall)
3D5.BAS by Rich Geldreich 1992 (fast interactive wireframe)
SHADE3D.BAS by Rich Geldreich 1992 (flat filled polygons)
2DBLOBS demo by Michael Sorensen 1998 (2D metaballs)
TRACER.BAS by Pasco 2000 (ray tracer)

Links to some of the democoders' pages

Entropy's page (check out the raytracer and BSP tree demos)
http://www.uslink.net/~insty/

SEAV's (Eugene Villar) programming page
http://www.geocities.com/SiliconValley/Horizon/2586/program_nook.html

Marko Dovic's page (Quixoft, look under products, lots of demo stuff in PB page)
http://swiss.scene.org/quixoft/marko/index.html

Pasco's page (one demo under stuff, others not released)
http://members.tripod.com/~Pasco_QB/

QBTM by zkman, which featured several demos and 3D engines
http://hammer.prohosting.com/~coderz/issuez1.htm
http://qbtm.tekscode.com/ (official archived .ZIP)

Toshi Horie
http://www.ocf.berkeley.edu/~horie/project.html (up to date)
http://toshi.tekscode.com (main mirror, soon to be main site)

Search engine for QB code
http://www.basicguru.com/abc/

Liquidex
http://www.alphx.com
http://alphx.com/users/liquidex/files/qb/meta.zip

Toshi Horie