=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Nighthawk V3 Install             Copyright (C) 1997-2004 Jason Nunn et al
                                 Head Designer/Maintainer: Eric Gillespie
                                        http://night-hawk.sourceforge.net
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=


3rd (OpenGL) revision notes (June 2004)
---------------------------------------

Well, it's been almost 8 years since 1st release. I didn't think i would
be revising this. It has been commited to void in wake of the linux game
revolution.

Looking back at my coding, my state design, event handling and data
management seem amateurish... but it does the job anyway. I certainly
don't write code of this grade anymore.. we all evolve and improve...
and of course, 8 years before that (1989) my code was even worse ;).

Eric revitualised this project about a year ago, creating a domain on
sourceforge and heads a band of testers. He came to me (nagged me for a
year ;) to port Nighthawk to a more modern GUI capable of screen
scaling.

Out of SDL and GTK, I chose OpenGL. There's no urguement really. SDL is
no better than Xlib in my opinion (infact Xlib has more graphical
features than SDL). Also, I have lots of experience with OpenGL from a
demo I developed 4 years ago called "Small Precludes" (check my web page
if you are interested).

Anyway, I've done the port to OpenGL. Although nothing flash (It's the
same basic feel with a few alpha FX).. however, with OpenGL, some nice
nifty effects are now possible... and of course there's now no limit to
your window size ;).

(With a OpenGL port, there is even the prospect of a auuhhh.. Windows
version.. Fuck me dead)

With this new basic frame work implemented, Eric has now got his shit
cut out for him. He can now revamp the sprites and font and generally
bruse it up and add new effects etc (no heavy programming stuff). So, I
submit my revisions for him to finish off ;).

Unfortunately, I have ripped out the sound and music. This is another
project cycle to port that.. and I don't have any desire to complete it.
There's many more things that need improving with the game before sound
is considered IMO. Of course, if somebody *really* wants it in there,
then me my guest ;).

I suggest that you convert the Funk module to a MP3 file and use an
existing library/operating system facility for the channelled playback
of sound. For any interested parties, I'm happy to give you a hand with
the MP3 conversion of the music.

The star wars FX have been deleted (to remove any distribution
violation).

Other contributions for this revision are- Rafael Laboissiere's cascade
mode and Tanel Kulaots level continuence patch. These patches were
emailed to me some years ago. Better late than never ;).

Lastly on testing this game, I can only get up to Esperence before
dieing. I used to be able to play it right up to Tobruk.. but there
again, some of the game timing has been changed. Eric has to tune this
up.


Changes--

  - OpenGL port
     - Being an OpenGL creature, you can have any window size you like. 
However, here are some extra command line options-

           -3  320x200 mode
           -6  640x480 mode  (but you can change these by dragging out
           -1  1024x768 mode                               the window)
           -f  full screen mode like god intended (keeewwl...)

  - If you use the -u command line option, you can change the refresh 
(frames per second) rate... but i would just leave it at it's default.

  - The "-g" god mode command line parameter has been added... no damage 
no score. Primary used to walk though levels for testing.

  - You only have to move over power bays to be recharged now (just like 
the original game).

  - Headup toggle removed... it's now comes up automatically when 
messages are added, and then fades.

  - When a floor is cleared, it fades to dark (just like original). This
wasn't possible to do under Xlib (or the version I developed Nighthawk
on).

  - In the game, if you hit "f", you get a FPS display on the bottom of
the screen.

  - Added 'r' key for reduced sprites toggled at run time rather than 
compile time.

  - The 'q' key quits you out of current game, then program. the ESC key 
ends program immediately.

  - You'll also notice some alpha texturing happening there (keeewwl..).
Nb/ that it uses the most basic OpenGL facilities. No Z-buffering or
transformations are done. Everything is flat 2D orthogonal... so fast
software rendering is hopefully possible on the slower machines still in
use.

  - Added 2 patches (mentioned above)

  - Removed demo (sorry. it's a dead duck -- Due to randomisation and
timing didosynchronisy problems between libc's).

  - Removed sound and music (As explained above).

  - Eric's mouse patch not ported...  but should be easy to port over
though... I haven't really looked into it.. as I'm running out of time
now... Eric.

  - There was a 816 droid (non-existant class) in the last level. Fuck
knows how it got past my testing stages in May 1999... but anyway, I've
changed this to a 810.

  - Timing is slightly different from last version due to real time
calculations being calculated differently (the way OpenGL likes it)...
also the low update rate of the background timer in older versions looks
bad on a bigger screen. I've done most of the tuning, but Eric (and
team) probably needs to do some fine tweaking.

  - I've added an Xlib key rate function to decrease keyboard delay... 
this is to stop that delay when you move the arrow key. This is really a
hack... technically, I should write proper keydown/keyup detection of
arrow keys... but fuck it. This should do for now (this is the one
advantage of using SDL as it has a good keyboard handling mechanism).

Nb/ If you are compiling for another OS, or you are having 
problems, then you can remove this code and the game will still 
run. Comment out instances (and associated code for function 
XkbGetAutoRepeatRate() and XkbSetAutoRepeatRate(). Also uncomment
-lX11 in config.user, and #include <GL/glx.h>

  - I've also rerranged, tidied up code a little bit. Modular bits have 
been placed in seperate files etc.

Finally, Eric now heads this project. For any patches or interests to
contribute, please contact him... although, I'm happy to receive general
feedback about the game. I may take a peripheral role in this project
now...  maybe i'll find time to do further developments with Eric. We'll
see.

Cheers ;)


:Jason Nunn
Sat Jun 12 01:02:25 CST 2004


##########################################################################

Synopsis

Nighthawk is a tribute to one of the most playable and contagious games
ever written- Paradroid by Andrew Braybrook. It was so good, it was worthy
of my attention span for 6 straight months, and was the subject of
conversation at school for many months as well. It was quite amazing seens
that i've never really been into "playing games", the only other game that
lifted my skirt was 3D-Wolfenstein (the pre-cursor to DOOM).

It all started when i was in year 10 (1987). A friend of mine gave me a
copy of Paradroid on a cassette tape (that was the common media for C-64's
among my friends at the time), and that was it!, i was hooked.

Nighthawk was named after the second ship (level) of the original game. It
was extremely difficult to get to this level. If you could slate the
Paradroid level AND Nighthawk level (let alone the other dozen levels),
you were very good, and would have been highly regarded among the
governing pimply faced C-64 evanglist aristocrary at my school (BTW, does
anyone know the full set of ship names in the original game?).

(Nb/ Here is a bit of useless but interesting trivia for you.  Adrian
Bridgett, the Debian maintainer for this distribution noted to me that
Paradroid was also very similar to Quazatron for the Z80 Spectrum, one of
his favourite games. There's also an Amiga variation, and the acclaimed
Paradroid-90 on the Atari-ST).

In October 92 (during the end of my degree i was doing at the time), i
attempted to write a Messydos PC game like this, but didn't have enough
technical knowledge about real time programming and PC's etc. Four years
later, in October 96, started working on this game. Over a period of a
year, i worked on it on and off, to produce 1.0 that was released in
December 97.

Nighthawk has been exclusively written for the Unix/Linux X-Windows GUI,
and have choosen it because it's the most popular, stable, and oldest GUI.
Also, X-windows games are now very fashionable. Some say that
Linux/Xwindows is the game developers preferred choice! (i think i read
that in the Walnut Creek 1998 catalogue?), but i won't go that far yet
anyway ;).


Enjoy..

:Jason Nunn
 (19/12/97)

                         *      *       *      *

Installation
------------

Requirements--

 - OpenGL, GLU and glut libraries (I use Mesa 5.0.1)
 - linux (plus others)


Procedure--

 - Extract tarball

 - Distribution comes with pre-compiled binary which can be run from
directory. it will assume you have a /var/tmp directory for the scores. 
You can try running this program if you like to see if it works.

 - If not (or if you want a permanent home) then--

 - Edit config.user (namely the INSTALL_DIR and SCORES_FILE defs). You 
may have to add extra library parameters in the LIB_FLAGS defination. 
If you still only want to sample game, then leave INSTALL_DIR as is, and 
just compile.

 - make

 - make install

 - done

 - to run the game: type "/usr/local/game/nighthawk/nighthawk" (or 
./nighthawk) depending on where executable is.

 - to see your options: type "nighthawk -h"


                         *      *       *      *


How to Play (By Jason Nunn & Expanded by Adrian Bridgett)



Nighthawk - Paradroid Chapter II - The rescue from Vega
=======================================================

The Earth forces have ambushed an enemy fleet transporting captured Earth
vessels bound for Vega. While crews were boarding these ships for repairs,
surviving Vegarian crew destroyed each ships warp core. This has made the
ships very radioactive, causing many of the droids on board these ships to
go 'rogue'.  Our last contact with the crew indicated heavy loss of life.
All attempts at contact or rescue have proved futile. We can only fear the
worst..

..However, we have depatched a Class 002 Paradroid. Improved over the 001
class, the 002 will teleport to each ship and annihilate all droids.


Game play
---------

The mission is simple- Slate all droids.

You start out as a 002 Paradroid. In the original game, you controlled a
001 Influence device. They differ in the way they control their hosts.
The 001 droid was basically a helmet that fitted over the host droids
head, and could control it for a certain length of time.  The 002 droid
however actually transfers it's programs over to the new host, effectively
'becoming' it, and destroying the old host it occupied.

There are good and bad points to this.  The good point is that you can
occupy the host droid for an unlimited length of time, the bad point is
that you are stuck with the new hosts weaponary, speed and shields.


Key Summary
------------

cursor keys - move
left click  - fire
right click - panic fire
space       - activate (lift, computer, boost)
t           - toggle transfer mode
c           - toggle cascade mode
h           - toggle headsup mode (off by default).
s           - display status
p           - pause
q           - quit


Movement
--------

Use the cursor keys to move around each map. To open a door, either shoot
it (see below) or move into it. Doors will close after a short time.

To move around the ship, you must use the lifts (these look like squares
with a cross through them, you normally start on one). To use a lift, move
over it and press space. A map of the ship will appear, showing all the
lifts and a square dot which represents your droid. Press up or down to
the level you want to go to, and then press space to exit the lift.


Attacking
---------

To shoot, click the left mouse button at the target you are aiming at. A
right mouse click does a burst fire which sprays shots in all directions.

The spin speed of a droid indicates how charged the shields of the droid
are.  At full spin, the droid is fully charged. When a droid has less than
1/4 shields green lights flash, and when they have less than 1/8 shields
red lights flashes instead. To recharge shields, move over a recharging
point (they have swirly bits in them) and press space.


Transferring
------------

You won't get very far in nighthawk unless you learn to transfer to
different droids. To transfer to a different droid, press "t" (white
lights will start flashing and you will be unable to shoot) then click on
a nearby droid (even one on the other side of a wall). The two droids will
"negotiate" (what a euphemism!) to see which one lives. During
negotiations, neither droid can shoot.

During the negotiations a bar will appear - the green part represents your
droid and the blue bar represents the enemy droid. The relative amounts of
these bars will change as the droids battle each other. When the bar has
turned one color, that droid wins. The negotiation will be broken off if
the two droids move too far apart.

As a general rule, don't negotiate with a droid that is more than two
classes above you - e.g if you are in a 423, negotiating with a 606 is
okay, but a 713 will probably kill you.


Status
------

Pressing "s" will display the number of shields you have left and the
number of droids left on the ship (assuming headsup is on). When something
interesting happens, a status message will appear. Here are some:

shields=10      you have 10 shields left
droids=9        there are 9 droids left to kill
002 d 107       002 droid destroyed 107 droid
002 h 423(8)    002 droid hit 423 droid (who now has 8 shields left)
600 captured    started negotiating with 600 droid
lost contact    stopped negotiations (droids move too far apart)
boost=15(+3)    shields were reacharged by 3 to 15


Computers
---------

To find out information about your droid, go to a computer in the wall and
press space. Use the cursor keys to look at different droids, you can find
out:

Type    -  droid number
Name    -  title of the droid
Entry   -  "negotiation" skills
Height  -
Weight  -  can it
Brain   -  intelligence of the droid
Arm     -  weapon (armament)
Shield  -  current and maximum number of shields
Speed   -  how fast the droid can move
Attack  -  agressiveness of the droid


Scoring
-------

Recharging shields   -10
Hit droid            entry level
Destroyed droid      25 x entry level
Transferring         50 x entry level

You get points for hitting/destroying a droid even if it was another droid
that did the shooting!


Weapon types
------------
                 Speed  Damage
Linarite         8      4
Crocoite-Benzol  10     10
Uvarovite        12     20
Tiger-Eye Quartz 9      50


Droid types
-----------

0xx - Prototype Class

These droids are prototype/ experimental class that vary in function
considerably. Approach with caution.


1xx - Cleaning Droids

Mindless, slow, low shielded, unarmed droids that clean the ships.
Harmless.


2xx - Logistic/Servant Droids

Again, brainless droids that do various tasks.  These type can vary in
shield and strength.  This class is harmless as well.


3xx - Messenger Droids

Mindless, but very fast. Low shield rating, and are not armed.


4xx - Maintenance Droids

Designed to repair the ships. Vary in shield and speed ratings. Sometimes
armed.


5xx - Medical Droids

These droids have a high entry level, and are difficult to crack. All of
them are armed, but are not hostile. However, they will shoot at any
droids that attack them.


6xx - Sentinel Droids

These droids 'guard' certain important area's of the ships like lifts,
power bays and other droids. They vary in shield rating, speed and fire
power, but all are armed and will attack.  Approach with caution.


7xx - Battle Droids

This class of droid 'hunts'.  When confronted, any will attack.  They
vary in speed, shield rating and weaponary, but all are extremely
dangerous.


8xx - Crew Droids

These are armed droids that control the ship.  These like the 5xx class
are not hostile, but will become hostile to any droids that attack them.
8xx's are armed with Uvarovite lasers, and pack a rather powerful wallop.


9xx - Command Cyborgs

Each ship will have one of these. They command the ships.  Extremely
armed, extremely shielded, often very fast, and very deadly.


Ships
-----

Ship          Type               Difficulty
-------------------------------------------
Haldeck       Fleet Support      Very easy
Seafarer      Cargo Vessel       Moderate
Anoyle        Attack Frigate     Difficult
Esperence     Battle Cruiser     Tricky/Very difficult
Ophukus       Medical Frigate    Moderate (lots of 5xx's)
Mearkat       Scout Ship         Tricky/Difficult
Friendship    Destroyer Class    Tricky/Difficult (lot's of 6xx's)
Discovery     Scientific Frigate Difficult (lots of 8xx's)
Zaxon         Battle Cruiser     Tricky/Very difficult (lots of 7xx's)
Tobruk        Flag Ship          EXTREMELY difficult (but not impossible)


To start at a particular ship, run nighthawk like this:

  nighthawk -c <ship-number 0-9>

Note that the high score table will treat this as cheating.


Game tips
---------

If possible, create 'friendly fire'. This is very easy to do.  Get
inbetween any two armed droids.  If one of them preemptively attacks,
simply duck at the last minute (if not, then just shoot at one). Their
laser fire will/should/hopefully hit the other droid. The other droid will
then fire back at the droid that accidently attacked it.  When the
attacking droid is hit, it will fire back at the droid firing at
it....hence a shoot out will occur. The result is either two destroyed
droids, or one left staying with a reduced shield.

Another good thing about friendly fire is that it's an excellent
distraction. Any 6xx,7xx, 9xx droids involved in one, won't be concerned
with you at all; they will be too busy blowing away their mate.

Always duck for cover when fired upon, and when you shoot a droid fitted
with weapons, be ready to duck for cover.  Don't just take it. Armed
droids will always return fire immediately with an equal or greater rate.

Get into the habit of firing a 4-6 round volley, then ducking behind a
wall, door, storage unit... or even another droid.  261's are excellent to
hide behind.  These droids are industrial cargo movers. Being heavy
machinery, they have a very high shield rating and can buffer many laser
blows.  Medical Droids (5xx series) are another good example. Medical
droids are armed but passive.  They won't attack anyone unless fired upon.
When an attack droid is firing at you, duck behind a medical droid.  If
the attacking droid hits the medic, then the medic will fire (one shot)
back at the attacking droid (yet another 'friendly fire' example). The 599
Surgeon droids are fitted with the powerful Uvarovite lasers, and will
cheerfully sodomise any minor class 6xx's or 7xx's that accidently attack
it.

This game requires lots of lateral thinking. Simply blasting everything in
sight is not going to get you very far (maybe the first and second ship if
you're lucky). You have to rely on transferring to higher order droids
inorder to conquer droids with more fire power than yourself or to go
through walls. You have to shoot smart. Hostile droids will always attack
with an equal or greater rate. With "head-on" shoot outs (that most
newbies will tend to do), it's only a matter of who has the bigger shields
and lasers who will win. Some droids are simply too risky to confront,
like 799's, and 9xx's. It's far better to transfer to them through a wall
(where you can't get shot at). In Ship "Zaxon" you are forced to confront
7xx's head on as there are so many of them.

On some ships, be selective with droids to destroy. You may need to
transfer back through a wall inorder to return to the place you started.

(Game tip: In the Hull of SS Esperence, leave the 368 droid till last. 
This driod goes from one end of the Hull to the other, and you are able 
to transfer (through wall) back to the other sections of the ship if you 
have forgotten to kill droids in those areas).

As a general rule, if a 6xx is shooting at you, don't shoot back, instead
duck for cover, even if you sustain some hits doing it. Don't stand your
ground and fire back. However, with 7xx's & 9xx's, because of their
unpredictable behaviour and rapid fire power, the above tactic may not
work.

Nb/ that there is a systematic "knack" to completing the levels, and if
people are having difficulty, i'll publish a guide on how to complete each
level.

                         *      *       *      *

Contacts

Project Head Designer/Maintainer:
   Eric Gillespie (The Viking)
   Email: viking667@users.sourceforge.net
   http://night-hawk.sourceforge.net


Original Author:
   Jason Nunn
   http://jsno.leal.com.au

   C/- Jason Nunn
   PO Box 15
   Birdwood SA 5234
   Australia

  (Nb/ I no longer distribute my email address (spam control). This is
the only way to contact me).


Acknowledgements

Version 3

Eric Gillespie..............  Head Designer/Maintainer
Rafael Laboissiere..........  "Cascade" mode
Tanel Kulaots...............  Level continuence


Version 2

Vincent Voois...............  Rescue from Vega song
Nelson Minar................  some small code mods in 2.2.
Eero Tamminen...............  Did up the manual.
Wolfgang Scherer............  vulcanised build scripts in 2.2, added
                              autoconf support.
4-matt of anarchy...........  Introtune song (used in demo)


Version 1

Adrian Bridgett.............  Modifications and Debugging in 1.x
                              Redid instructions etc.


                                   ooo0ooo
