Azteroidz3D
(c) Ryan Haksi, 1998
email: cryogen@infoserve.net
http://home.bc.rogers.wave.ca/borealis/ryan.html


LICENSING:
I hereby give you the rights to play it all you want, and make as many copies
for personal use as you wish. I reserve the rights to distribution for myself
however. All source code/program executables are copyright 1998, Ryan Haksi.

VoodooExtreme/Diamond has been granted the right of distribution for versions
1.00, 1.01, 1.02 and 1.03.


REGISTERING AZTEROIDZ3D
At this time the registered version of Azteroidz3D is still not available. 
(But work is progressing). The biggest thing the registered version will add
is support for mouselook and new powerups.

Registration will be done through the Azteroidz3D web site at:
http://home.bc.rogers.wave.ca/borealis/a3d_index.html


INSTRUCTIONS:
If you are using Win95 (I feel for you) make sure to set the desktop to 
a hicolor (65536 colors / 16bit color) mode. Otherwise the game might not work.
Really you should have this done allready, otherwise Quake I & II wouldnt work
either.


CONTROLS:
SPACE       - fires
UP ARROW    - thrust
DOWN ARROW  - braking thrust
LEFT ARROW  - turn left
RIGHT ARROW - turn right

NOTE: Both the cursor keys and the numeric keypad work.


THE OBJECT:
shoot all the rocks, once they are all dead you will proceed to the next
level. The smart player will make sure they pick up any powerups left lying
around before they blast that last fragment.


EXTRA LIVES:
You get an extra life at 1000 pts, and also 2000, 4000, 6000 etc.


POWERUPS:
There are 3 powerup types you can pick up while you are playing the game.
Powerups are spawned when you shoot a saucer. Picking up a second powerup
while you allready have one will change to the 2nd powerup but add its time
to your total powerup time remaining.

GREEN - My favorite, the rail gun. Right after I grab it I head to the nearest
       corner of the playing field and brake to a stop. Then I start sniping,
       with practice you can get the timing down so that you can split a big
       rock on the first shot, and then nail all 4 little rocks just as they
       appear with your second shot. lasts 35 seconds.

BLUE  - Triple shot. Not bad, with a little luck you can bracket a big rock
       and whittle it down to nothing. The only problem with this strategy is
       that it can spit a fragment right at you and if you're too close you'll
       get whacked before you can dodge. lasts 30 seconds.

PURPLE- Autofire. Fun while it lasts, you fire twice as fast. It lasts for 
       only 25 seconds. Range increases slightly too. This puppy works best if
       you can pick up another powerup first, so that you can have autofire for
       a longer amount of time.


LEVEL FEATURES:
Various things are introduced as you progress through the game:
Level 2 - the saucer starts to shoot
Level 3 - "Dark Level", looks great! shoot to see.
Level 4 - 2 saucers

The background planet art for the 1st 4 levels is different after that it
repeats, but hey, whaddya expect for a free game?


SOUND
As configured currently, stereo is set to on. Its not the best stereo in
the world but its not bad. If your game is running slow you can try turning
it off.


MUSIC
The game will randomly pick a track off whatever audio cd you have plugged
in your CD-ROM, I like the Quake II cd myself.


3D CARD SUPPORT
Azteroidz should run on just about any 3D card, or even a 2D card (although
it doesnt look quite as good). It autodetects what kind of setup you have
and enables features appropriately. Any kind of OpenGL driver will do, whether
it be a Quake "MiniGL" driver, an OpenGL ICD, or even just the lowly old
software OpenGL driver included with Windows NT and Windows 98. Owners of
the original retail Windows95 version can download the software opengl driver
for free from the microsoft web site, somewhere on http://www.microsoft.com


PERFORMANCE ISSUES:
Feel free to edit the plasma.ini file to tweak some of the settings. Right
now it is most appropriate for my own machine (Monster3D/NT4.0/P166MMX).
Reducing the # of dynamic lights to 2 will make a big difference on slower
machines. Reducing the particle density (like to 0 - ie off - for example) 
will help a little bit too. Actually the code is pretty well optimized, thanx 
to a few bouts with the profiler. You might also try changing the priority
to max. I dont know how much it will help but it cant hurt. Once you quit the
game the average frame rate is written into the boot.log file, typically I
get an average frame rate > 45 on my machine (Pretty good, no?).


AUDIO STUTTERING
Depending on how slow your machine is and/or how slow your 3D card is you 
may have problems with the audio. (MM Timers seem to be less accurate under
Win95 for some reason). If this happens try increasing the mixahead setting
in the plasma.ini file to 900, and if that doesnt do it try reducing both
the timerres and period settings by one. One of my friends had this problem
under Win95, I havent seen it it myself. (And hopefully I have changed the
defaults enough so that it wont be a problem again but you never know). 


GENERAL TROUBLE SHOOTING
The first thing to do is to check the boot.log that the game creates every
time it is run. If the game has trapped out without loading all the way
(as opposed to hanging up) the reason should be written in the boot.log.
Honestly it seems pretty solid, so assuming you've set your desktop to the
right color depth and have a voodoo card, you should be golden.


COMMENTARY:
Just in case anyone thinks I suck at my own game, that 12K+ score in the
hiscore list is legitimate. Actually it should be higher, my girlfriend was
insisting that I take a break right then, and was attempting to cover up my
eyes in order to speed up the dying process. Actually once you get the hang
of it the game is pretty easy, I've had much higher scores but they were 
pre-hiscore list. (One of the last things implemented actually).

I dont know if anyone actually cares but I rewrote the lighting engine a 
while back to use only Vertex lighting, hopefully it should now be possible
to get the PowerVR & Permedia2 cards to work with the game.

I made this thing with my own Plasma game engine. If anyone cares, I used
MSVC version 4.2, Note that I dont use 5.0. Why? because I've used it and MS
butchered the interface, I much prefer the one they used in 4.2. And I wish
they'd include support for 16 bit execs so I didnt have to also have MSVC
1.52 installed but that's neither here nor there really.

You'll notice that all the textures are simple 24 bit bitmaps, dont like 'em
plug in your own, ditto for the sound effects which are just normal .wav 
files. You can thank the NASA space image archives for the scans of the
planets, and a few other web sites I stumbled across (like the free texture 
archive or whatever they call themselves) for the other textures. Although 
the saucer bitmap is all mine baby, and the ship texture was massively edited 
from its raw form to fit my model.

Hmm if anyone is wondering what file format .3d is, its my own. Sadly, lacking
any form of 3d modeler whatsoever, I was reduced to typing in coord's by hand.
(ick) I think before I do another of these things I'll spring for Truespace
or a similar product.

Features of Azteroidz3D / the Plasma Game Engine:
-Gouraud shading
-Alpha blending (transparency) effects (src/1-src blending required)
-Dynamic Colored Lighting (src*dst blending required)
-Bilinear filtering of textures
-Real-time lighting of models
-Particle Effects
-Wave audio support 
-real-time mixing of multiple audio channels
-positional audio effects (they get quieter as you get farther away)
-positional stereo mixing, (mixes left/right volumes based on position)
-support for NT3.5/4.0 and Win95/98
-fully client/server architecture. (Well this version cheats slightly to get
the high score list)
-CD Audio support, threaded so as not to pause the game during track changes

While I decided not to distribute source code for the entire game, if anyone
is interested in example source code for bits and pieces of how I did this
and that, feel free to email me, Most of it I'd be more than willing to share 
(all the lower level stuff), I just dont want to give out the whole kit and 
kaboodle since I plan on doing more with it.

I've also got a fair amount of sample MiniGL/OpenGL code posted on my web
site. Including demos on camera movement, fluid animation, textured fonts,
loading a bitmap etc etc. 

Refer to http://home.bc.rogers.wave.ca/borealis/opengl.html

I'll also probably get around to some demo sound code too, both CD audio
and creating a multi-channel digital audio mixer. Someday...


AND DID I MENTION....
Speaking of my mud, heres a blatant plug: 
Play Crimson/2799, a complete from scratch mud server and world.
FULL ansi, scripted quests, autoactions, and a slew of other features.
For a preview of the script language that will be integrated into future
version of the plasma game engine, logon to the mud and type help C4.
telnet to phantom.me.uvic.ca 5005
http://phantom.me.uvic.ca/mud


FUTURE PLANS
Well I'm not sure what I'm going to do with myself. I'm still trying
to figure out whether I should be making games my real job or keep doing it
on the side. If anyone out there wants to pay me enough to make it worth my
while, I'm definately available.. :-)

I definately plan on doing more with Azteroidz though, there's a registered
version in the works which supports mouselook, more powerups etc. And
internet play will show up sooner or later. I have a early beta of the LAN
coop play done allready.


NT4.0 SOAP BOX
Frankly there's no excuse for a game not running under NT4.0/SP3. If I can do
it, and both quake's can do it, surely the rest of the industry can do it too.
(And may I point out that I dont even have any documentation on the MiniGL
driver(s)). There's a reason why I dont own a copy of Jedi Knight, even though
I quite liked both Outlaws and Dark Forces... I can't even imagine why anyone
would WANT to develop a product using Win95. It gives me the willies just
thinking about it. Too bad Microsoft is making a mess with DirectX versions,
it wont even get any better in the future! NT5.0 is a loooooonnnnnnggg way
off. Speaking of DirectX5.0, I'm still irked that MS went to the trouble of 
making a beta version of DX5.0 for NT, and then dropped the ball at the last 
moment. Whats up with that?


VERSION HISTORY
1.07 Added support for software only OpenGL drivers, Dump more info to the
boot.log. Autoenables features based on driver performance testing. Added a
noGDI setting to help troubleshoot supporting the Matrox G200.


1.06 Fixed some rendering bugs that affected text under drivers other than
the 3dfx one.

1.05 Fixed some bugs in the OpenGL init code that affected drivers other than
3dfxgl.dll.

1.04 Rewrote renderer to drop the requirement for src*dst blending, this 
should allow the game to run properly on cards which dont support it. (ie
Riva128 and PowerVR among others)

1.03 multithreaded CD track changes, no gameplay pause anymore

1.02 migrated down new logging module and fixed stereo sound driver from my
upcoming coop multiplay client/server version.

1.01 reduced static array sizes to compensate for compiler bug which shows up
with large array sizes. (The invisible saucer bug)

1.00 As entered in VE contest. (I was robbed I tell ya)


DISCLAIMER
There is no expressed or implicit warranty associated with this software.  
Use at your own risk.


LEGAL CRUD
I really hate to have to include this sort of crud, but hey, its a dog eat
dog world.


PLEASE READ THIS SOFTWARE LICENSE AGREEMENT
"LICENSE" CAREFULLY BEFORE INSTALLING THE SOFTWARE.
BY INSTALLING THE SOFTWARE, YOU ARE AGREEING TO BE
BOUND BY THE TERMS OF THIS LICENSE. IF YOU DO NOT
AGREE TO THE TERMS OF THIS LICENSE, DO NOT INSTALL THE
SOFTWARE.

1. LICENSE. The software accompanying this License
whether on disk, in read only memory, on any other media or in any other
form (the "A3D Software") are licensed, not sold, to you by Ryan Haksi.
You own the media on which the A3D Software is recorded but Ryan Haksi 
retains title to the A3D Software. The A3D Software and any copies made 
and/or distributed under this License are subject to this License.

2. TERMINATION. The term of this Agreement will be for the duration of
Ryan Haksi's copyright in the Software. This Agreement may be terminated
immediately without notice by Ryan Haksi if you breach or fail to comply with
any of the terms and conditions of this Agreement. Upon termination, you
shall immediately remove and destroy all copies of the Software or any
part thereof. Upon Ryan Haksi's request, you will certify to Ryan Haksi 
that all complete and partial copies of the Software have been destroyed. 
The provisions of this Agreement, other than the license grant contained 
in Section 1 ("License") shall survive termination.

3. COPYRIGHT The Software is owned by Ryan Haksi and is protected by
the United States and Canadian copyright laws and international treaty 
provisions. Therefore, you must treat the Software like any other 
copyrighted material (e.g., a book or musical recording) except that
you may either (a) make one copy of the Software and written materials
solely for backup or archival purposes, (b) transfer the Software and written
materials to a single hard disk provided that you keep the original
solely for backup or archival purposes.

4. OTHER RESTRICTIONS You may not rent, lease, or otherwise
transfer the Software. You may not reverse engineer, decompile, or
dissemble the Software. The source code of the Software is confidential
information owned by Ryan Haksi. You may not disclose it to any third
party, make derivative works based upon it, or use it for any purpose
except the specific uses expressly permitted in the user documentation
which accompanies the Software.

5. NO WARRANTIES Because this product is provided solely for
evaluation purposes, it is provided "as is," without warranty of any kind.
Ryan Haksi specifically disclaims all warranties, either express or implied,
including but not limited to implied warranties of merchantability and
fitness for a particular purpose, with regard to the Software, the
accompanying written materials, and any accompanying hardware.

6. NO LIABILITY FOR CONSEQUENTIAL DAMAGES In no event
shall Ryan Haksi be liable for any damages whatsoever (including without
limitation, damages for loss of business profits, business interruption, loss
of business information, or any other pecuniary loss) arising out of the use
of or inability to use the Software, even if Ryan Haksi has been advised of
the possibility of such damages. Because some states do not allow the
exclusion or limitation of liability for consequential or incidental
damages, the above limitation may not apply to you.

7. MISCELLANEOUS The cost of setup, testing, and evaluation of
Software shall be borne by you. The cost of any return of the
Software to Ryan Haksi shall be borne by you.

8. COMPLETE AGREEMENT. This Agreement embraces the full and
complete understanding of the parties as to the subject matter hereof and
may not be altered or modified, except by written amendment which
expressly refers to this Agreement and which is duly executed by both
parties. If any part of this Agreement is found void and unenforceable, 
it will not affect the validity of the balance of the Agreement, which 
shall remain valid and enforceable according to its terms.
