changeset 0:b0b91cadc484

Initial Xcode 4 templates for SDL/Mac 1.2 and 1.3. The major difference between the two is SDLMain. Copy all templates to ~/Library/Developer/Xcode/Templates/SDL or /Library/Developer/Xcode/Templates/SDL Templates based off information documented here: http://blog.boreal-kiss.net/2011/03/11/a-minimal-project-template-for-xcode-4/
author Eric Wing <ewing . public |-at-| gmail . com>
date Sun, 02 Oct 2011 21:14:53 -0700
parents
children 545ef7038418
files SDL 1.2 Mac Application.xctemplate/SDLMain.h SDL 1.2 Mac Application.xctemplate/SDLMain.m SDL 1.2 Mac Application.xctemplate/TemplateInfo.plist SDL 1.2 Mac OpenGL Application.xctemplate/TemplateInfo.plist SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/atlantis.c SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/atlantis.h SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/dolphin.c SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/shark.c SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/swim.c SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/whale.c SDL 1.2 Mac OpenGL Application.xctemplate/main.c SDL 1.3 Mac Application.xctemplate/TemplateInfo.plist SDL 1.3 Mac OpenGL Application.xctemplate/TemplateInfo.plist SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/atlantis.c SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/atlantis.h SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/dolphin.c SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/shark.c SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/swim.c SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/whale.c SDL 1.3 Mac OpenGL Application.xctemplate/main.c SDLApplicationBase.xctemplate/Prefix.pch SDLApplicationBase.xctemplate/TemplateIcon.icns SDLApplicationBase.xctemplate/TemplateInfo.plist SDLApplicationBase.xctemplate/main.c SDLApplicationBase.xctemplate/main.m
diffstat 25 files changed, 12758 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac Application.xctemplate/SDLMain.h	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,16 @@
+/*   SDLMain.m - main entry point for our Cocoa-ized SDL app
+       Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
+       Non-NIB-Code & other changes: Max Horn <max@quendi.de>
+
+    Feel free to customize this file to suit your needs
+*/
+
+#ifndef _SDLMain_h_
+#define _SDLMain_h_
+
+#import <Cocoa/Cocoa.h>
+
+@interface SDLMain : NSObject
+@end
+
+#endif /* _SDLMain_h_ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac Application.xctemplate/SDLMain.m	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,383 @@
+/*   SDLMain.m - main entry point for our Cocoa-ized SDL app
+       Initial Version: Darrell Walisser <dwaliss1@purdue.edu>
+       Non-NIB-Code & other changes: Max Horn <max@quendi.de>
+
+    Feel free to customize this file to suit your needs
+*/
+
+#include "SDL.h"
+#include "SDLMain.h"
+#include <sys/param.h> /* for MAXPATHLEN */
+#include <unistd.h>
+
+/* For some reaon, Apple removed setAppleMenu from the headers in 10.4,
+ but the method still is there and works. To avoid warnings, we declare
+ it ourselves here. */
+@interface NSApplication(SDL_Missing_Methods)
+- (void)setAppleMenu:(NSMenu *)menu;
+@end
+
+/* Use this flag to determine whether we use SDLMain.nib or not */
+#define		SDL_USE_NIB_FILE	0
+
+/* Use this flag to determine whether we use CPS (docking) or not */
+#define		SDL_USE_CPS		1
+#ifdef SDL_USE_CPS
+/* Portions of CPS.h */
+typedef struct CPSProcessSerNum
+{
+	UInt32		lo;
+	UInt32		hi;
+} CPSProcessSerNum;
+
+extern OSErr	CPSGetCurrentProcess( CPSProcessSerNum *psn);
+extern OSErr 	CPSEnableForegroundOperation( CPSProcessSerNum *psn, UInt32 _arg2, UInt32 _arg3, UInt32 _arg4, UInt32 _arg5);
+extern OSErr	CPSSetFrontProcess( CPSProcessSerNum *psn);
+
+#endif /* SDL_USE_CPS */
+
+static int    gArgc;
+static char  **gArgv;
+static BOOL   gFinderLaunch;
+static BOOL   gCalledAppMainline = FALSE;
+
+static NSString *getApplicationName(void)
+{
+    const NSDictionary *dict;
+    NSString *appName = 0;
+
+    /* Determine the application name */
+    dict = (const NSDictionary *)CFBundleGetInfoDictionary(CFBundleGetMainBundle());
+    if (dict)
+        appName = [dict objectForKey: @"CFBundleName"];
+    
+    if (![appName length])
+        appName = [[NSProcessInfo processInfo] processName];
+
+    return appName;
+}
+
+#if SDL_USE_NIB_FILE
+/* A helper category for NSString */
+@interface NSString (ReplaceSubString)
+- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString;
+@end
+#endif
+
+@interface SDLApplication : NSApplication
+@end
+
+@implementation SDLApplication
+/* Invoked from the Quit menu item */
+- (void)terminate:(id)sender
+{
+    /* Post a SDL_QUIT event */
+    SDL_Event event;
+    event.type = SDL_QUIT;
+    SDL_PushEvent(&event);
+}
+@end
+
+/* The main class of the application, the application's delegate */
+@implementation SDLMain
+
+/* Set the working directory to the .app's parent directory */
+- (void) setupWorkingDirectory:(BOOL)shouldChdir
+{
+    if (shouldChdir)
+    {
+        char parentdir[MAXPATHLEN];
+        CFURLRef url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
+        CFURLRef url2 = CFURLCreateCopyDeletingLastPathComponent(0, url);
+        if (CFURLGetFileSystemRepresentation(url2, 1, (UInt8 *)parentdir, MAXPATHLEN)) {
+            chdir(parentdir);   /* chdir to the binary app's parent */
+        }
+        CFRelease(url);
+        CFRelease(url2);
+    }
+}
+
+#if SDL_USE_NIB_FILE
+
+/* Fix menu to contain the real app name instead of "SDL App" */
+- (void)fixMenu:(NSMenu *)aMenu withAppName:(NSString *)appName
+{
+    NSRange aRange;
+    NSEnumerator *enumerator;
+    NSMenuItem *menuItem;
+
+    aRange = [[aMenu title] rangeOfString:@"SDL App"];
+    if (aRange.length != 0)
+        [aMenu setTitle: [[aMenu title] stringByReplacingRange:aRange with:appName]];
+
+    enumerator = [[aMenu itemArray] objectEnumerator];
+    while ((menuItem = [enumerator nextObject]))
+    {
+        aRange = [[menuItem title] rangeOfString:@"SDL App"];
+        if (aRange.length != 0)
+            [menuItem setTitle: [[menuItem title] stringByReplacingRange:aRange with:appName]];
+        if ([menuItem hasSubmenu])
+            [self fixMenu:[menuItem submenu] withAppName:appName];
+    }
+    [ aMenu sizeToFit ];
+}
+
+#else
+
+static void setApplicationMenu(void)
+{
+    /* warning: this code is very odd */
+    NSMenu *appleMenu;
+    NSMenuItem *menuItem;
+    NSString *title;
+    NSString *appName;
+    
+    appName = getApplicationName();
+    appleMenu = [[NSMenu alloc] initWithTitle:@""];
+    
+    /* Add menu items */
+    title = [@"About " stringByAppendingString:appName];
+    [appleMenu addItemWithTitle:title action:@selector(orderFrontStandardAboutPanel:) keyEquivalent:@""];
+
+    [appleMenu addItem:[NSMenuItem separatorItem]];
+
+    title = [@"Hide " stringByAppendingString:appName];
+    [appleMenu addItemWithTitle:title action:@selector(hide:) keyEquivalent:@"h"];
+
+    menuItem = (NSMenuItem *)[appleMenu addItemWithTitle:@"Hide Others" action:@selector(hideOtherApplications:) keyEquivalent:@"h"];
+    [menuItem setKeyEquivalentModifierMask:(NSAlternateKeyMask|NSCommandKeyMask)];
+
+    [appleMenu addItemWithTitle:@"Show All" action:@selector(unhideAllApplications:) keyEquivalent:@""];
+
+    [appleMenu addItem:[NSMenuItem separatorItem]];
+
+    title = [@"Quit " stringByAppendingString:appName];
+    [appleMenu addItemWithTitle:title action:@selector(terminate:) keyEquivalent:@"q"];
+
+    
+    /* Put menu into the menubar */
+    menuItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""];
+    [menuItem setSubmenu:appleMenu];
+    [[NSApp mainMenu] addItem:menuItem];
+
+    /* Tell the application object that this is now the application menu */
+    [NSApp setAppleMenu:appleMenu];
+
+    /* Finally give up our references to the objects */
+    [appleMenu release];
+    [menuItem release];
+}
+
+/* Create a window menu */
+static void setupWindowMenu(void)
+{
+    NSMenu      *windowMenu;
+    NSMenuItem  *windowMenuItem;
+    NSMenuItem  *menuItem;
+
+    windowMenu = [[NSMenu alloc] initWithTitle:@"Window"];
+    
+    /* "Minimize" item */
+    menuItem = [[NSMenuItem alloc] initWithTitle:@"Minimize" action:@selector(performMiniaturize:) keyEquivalent:@"m"];
+    [windowMenu addItem:menuItem];
+    [menuItem release];
+    
+    /* Put menu into the menubar */
+    windowMenuItem = [[NSMenuItem alloc] initWithTitle:@"Window" action:nil keyEquivalent:@""];
+    [windowMenuItem setSubmenu:windowMenu];
+    [[NSApp mainMenu] addItem:windowMenuItem];
+    
+    /* Tell the application object that this is now the window menu */
+    [NSApp setWindowsMenu:windowMenu];
+
+    /* Finally give up our references to the objects */
+    [windowMenu release];
+    [windowMenuItem release];
+}
+
+/* Replacement for NSApplicationMain */
+static void CustomApplicationMain (int argc, char **argv)
+{
+    NSAutoreleasePool	*pool = [[NSAutoreleasePool alloc] init];
+    SDLMain				*sdlMain;
+
+    /* Ensure the application object is initialised */
+    [SDLApplication sharedApplication];
+    
+#ifdef SDL_USE_CPS
+    {
+        CPSProcessSerNum PSN;
+        /* Tell the dock about us */
+        if (!CPSGetCurrentProcess(&PSN))
+            if (!CPSEnableForegroundOperation(&PSN,0x03,0x3C,0x2C,0x1103))
+                if (!CPSSetFrontProcess(&PSN))
+                    [SDLApplication sharedApplication];
+    }
+#endif /* SDL_USE_CPS */
+
+    /* Set up the menubar */
+    [NSApp setMainMenu:[[NSMenu alloc] init]];
+    setApplicationMenu();
+    setupWindowMenu();
+
+    /* Create SDLMain and make it the app delegate */
+    sdlMain = [[SDLMain alloc] init];
+    [NSApp setDelegate:sdlMain];
+    
+    /* Start the main event loop */
+    [NSApp run];
+    
+    [sdlMain release];
+    [pool release];
+}
+
+#endif
+
+
+/*
+ * Catch document open requests...this lets us notice files when the app
+ *  was launched by double-clicking a document, or when a document was
+ *  dragged/dropped on the app's icon. You need to have a
+ *  CFBundleDocumentsType section in your Info.plist to get this message,
+ *  apparently.
+ *
+ * Files are added to gArgv, so to the app, they'll look like command line
+ *  arguments. Previously, apps launched from the finder had nothing but
+ *  an argv[0].
+ *
+ * This message may be received multiple times to open several docs on launch.
+ *
+ * This message is ignored once the app's mainline has been called.
+ */
+- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
+{
+    const char *temparg;
+    size_t arglen;
+    char *arg;
+    char **newargv;
+
+    if (!gFinderLaunch)  /* MacOS is passing command line args. */
+        return FALSE;
+
+    if (gCalledAppMainline)  /* app has started, ignore this document. */
+        return FALSE;
+
+    temparg = [filename UTF8String];
+    arglen = SDL_strlen(temparg) + 1;
+    arg = (char *) SDL_malloc(arglen);
+    if (arg == NULL)
+        return FALSE;
+
+    newargv = (char **) realloc(gArgv, sizeof (char *) * (gArgc + 2));
+    if (newargv == NULL)
+    {
+        SDL_free(arg);
+        return FALSE;
+    }
+    gArgv = newargv;
+
+    SDL_strlcpy(arg, temparg, arglen);
+    gArgv[gArgc++] = arg;
+    gArgv[gArgc] = NULL;
+    return TRUE;
+}
+
+
+/* Called when the internal event loop has just started running */
+- (void) applicationDidFinishLaunching: (NSNotification *) note
+{
+    int status;
+
+    /* Set the working directory to the .app's parent directory */
+    [self setupWorkingDirectory:gFinderLaunch];
+
+#if SDL_USE_NIB_FILE
+    /* Set the main menu to contain the real app name instead of "SDL App" */
+    [self fixMenu:[NSApp mainMenu] withAppName:getApplicationName()];
+#endif
+
+    /* Hand off to main application code */
+    gCalledAppMainline = TRUE;
+    status = SDL_main (gArgc, gArgv);
+
+    /* We're done, thank you for playing */
+    exit(status);
+}
+@end
+
+
+@implementation NSString (ReplaceSubString)
+
+- (NSString *)stringByReplacingRange:(NSRange)aRange with:(NSString *)aString
+{
+    unsigned int bufferSize;
+    unsigned int selfLen = [self length];
+    unsigned int aStringLen = [aString length];
+    unichar *buffer;
+    NSRange localRange;
+    NSString *result;
+
+    bufferSize = selfLen + aStringLen - aRange.length;
+    buffer = (unichar *)NSAllocateMemoryPages(bufferSize*sizeof(unichar));
+    
+    /* Get first part into buffer */
+    localRange.location = 0;
+    localRange.length = aRange.location;
+    [self getCharacters:buffer range:localRange];
+    
+    /* Get middle part into buffer */
+    localRange.location = 0;
+    localRange.length = aStringLen;
+    [aString getCharacters:(buffer+aRange.location) range:localRange];
+     
+    /* Get last part into buffer */
+    localRange.location = aRange.location + aRange.length;
+    localRange.length = selfLen - localRange.location;
+    [self getCharacters:(buffer+aRange.location+aStringLen) range:localRange];
+    
+    /* Build output string */
+    result = [NSString stringWithCharacters:buffer length:bufferSize];
+    
+    NSDeallocateMemoryPages(buffer, bufferSize);
+    
+    return result;
+}
+
+@end
+
+
+
+#ifdef main
+#  undef main
+#endif
+
+
+/* Main entry point to executable - should *not* be SDL_main! */
+int main (int argc, char **argv)
+{
+    /* Copy the arguments into a global variable */
+    /* This is passed if we are launched by double-clicking */
+    if ( argc >= 2 && strncmp (argv[1], "-psn", 4) == 0 ) {
+        gArgv = (char **) SDL_malloc(sizeof (char *) * 2);
+        gArgv[0] = argv[0];
+        gArgv[1] = NULL;
+        gArgc = 1;
+        gFinderLaunch = YES;
+    } else {
+        int i;
+        gArgc = argc;
+        gArgv = (char **) SDL_malloc(sizeof (char *) * (argc+1));
+        for (i = 0; i <= argc; i++)
+            gArgv[i] = argv[i];
+        gFinderLaunch = NO;
+    }
+
+#if SDL_USE_NIB_FILE
+    [SDLApplication poseAsClass:[NSApplication class]];
+    NSApplicationMain (argc, argv);
+#else
+    CustomApplicationMain (argc, argv);
+#endif
+    return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac Application.xctemplate/TemplateInfo.plist	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>Ancestors</key>
+	<array>
+		<string>org.libsdl.SDLApplicationBase</string>
+		<string>com.apple.dt.unit.macBase</string>
+	</array>
+	<key>Identifier</key>
+	<string>org.libsdl.SDL12ApplicationMac</string>
+	<key>Kind</key>
+	<string>Xcode.Xcode3.ProjectTemplateUnitKind</string>
+	<key>Targets</key>
+	<array>
+		<dict>
+			<key>Frameworks</key>
+			<array>
+				<string>AppKit</string>
+				<string>Foundation</string>
+				<string>SDL</string>
+			</array>
+			<key>BuildPhases</key>
+			<array>
+				<dict>
+					<key>Class</key>
+					<string>Sources</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>Frameworks</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>Resources</string>
+				</dict>
+			</array>
+			<key>Configurations</key>
+			<dict>
+				<key>Debug</key>
+				<dict>
+					<key>COPY_PHASE_STRIP</key>
+					<string>NO</string>
+					<key>GCC_DYNAMIC_NO_PIC</key>
+					<string>NO</string>
+				</dict>
+				<key>Release</key>
+				<dict>
+					<key>COPY_PHASE_STRIP</key>
+					<string>YES</string>
+				</dict>
+			</dict>
+			<key>ProductType</key>
+			<string>com.apple.product-type.application</string>
+			<key>SharedSettings</key>
+			<dict>
+				<key>FRAMEWORK_SEARCH_PATHS</key>
+				<string>/Library/Frameworks</string>
+				<key>USER_HEADER_SEARCH_PATHS</key>
+				<string>/Library/Frameworks/SDL.framework/Headers</string>
+				<key>MACOSX_DEPLOYMENT_TARGET</key>
+				<string>10.5</string>
+				<key>ARCHS</key>
+				<string>x86_64 i386</string>
+			</dict>
+		</dict>
+	</array>
+	<key>Concrete</key>
+	<true/>
+	<key>Definitions</key>
+	<dict>
+		<key>SDLMain.m</key>
+		<dict>
+			<key>Group</key>
+			<string>Supporting Files</string>
+			<key>Path</key>
+			<string>SDLMain.m</string>
+		</dict>
+		<key>SDLMain.h</key>
+		<dict>
+			<key>Group</key>
+			<string>Supporting Files</string>
+			<key>Path</key>
+			<string>SDLMain.h</string>
+		</dict>
+	</dict>
+	<key>Nodes</key>
+	<array>
+		<string>SDLMain.m</string>
+		<string>SDLMain.h</string>
+	</array>
+	<key>Description</key>
+	<string>This template provides a starting point for an application that uses SDL 1.2 for Mac.</string>
+</dict>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac OpenGL Application.xctemplate/TemplateInfo.plist	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>Ancestors</key>
+	<array>
+		<string>org.libsdl.SDL12ApplicationMac</string>
+	</array>
+	<key>Identifier</key>
+	<string>org.libsdl.SDL12ApplicationMacOpenGL</string>
+	<key>Kind</key>
+	<string>Xcode.Xcode3.ProjectTemplateUnitKind</string>
+	<key>Targets</key>
+	<array>
+		<dict>
+			<key>Frameworks</key>
+			<array>
+				<string>OpenGL</string>
+			</array>
+		</dict>
+	</array>
+	<key>Concrete</key>
+	<true/>
+	<key>Definitions</key>
+	<dict>
+		<key>main.c</key>
+		<dict>
+			<key>Group</key>
+			<string>Supporting Files</string>
+			<key>Path</key>
+			<string>main.c</string>
+		</dict>
+		<key>atlantis/atlantis.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/atlantis.c</string>
+		</dict>
+		<key>atlantis/atlantis.h</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/atlantis.h</string>
+		</dict>
+		<key>atlantis/dolphin.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/dolphin.c</string>
+		</dict>
+		<key>atlantis/shark.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/shark.c</string>
+		</dict>
+		<key>atlantis/swim.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/swim.c</string>
+		</dict>
+		<key>atlantis/whale.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/whale.c</string>
+		</dict>
+	</dict>
+	<key>Nodes</key>
+	<array>
+		<string>main.c</string>
+		<string>atlantis/atlantis.c</string>
+		<string>atlantis/atlantis.h</string>
+		<string>atlantis/dolphin.c</string>
+		<string>atlantis/shark.c</string>
+		<string>atlantis/swim.c</string>
+		<string>atlantis/whale.c</string>
+	</array>
+	<key>Description</key>
+	<string>This template provides a starting point for an application that uses SDL 1.3 with OpenGL for Mac.</string>
+</dict>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/atlantis.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,464 @@
+
+/* Copyright (c) Mark J. Kilgard, 1994. */
+
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <sys/time.h>
+#ifdef USE_GLUT
+#include <GLUT/glut.h>
+#endif
+#include "SDL_opengl.h"
+#include "atlantis.h"
+
+fishRec sharks[NUM_SHARKS];
+fishRec momWhale;
+fishRec babyWhale;
+fishRec dolph;
+
+GLboolean Timing = GL_TRUE;
+
+int w_win = 640;
+int h_win = 480;
+GLint count  = 0;
+GLenum StrMode = GL_VENDOR;
+
+GLboolean moving;
+
+static double mtime(void)
+{
+   struct timeval tk_time;
+   struct timezone tz;
+   
+   gettimeofday(&tk_time, &tz);
+   
+   return 4294.967296 * tk_time.tv_sec + 0.000001 * tk_time.tv_usec;
+}
+
+static double filter(double in, double *save)
+{
+	static double k1 = 0.9;
+	static double k2 = 0.05;
+
+	save[3] = in;
+	save[1] = save[0]*k1 + k2*(save[3] + save[2]);
+
+	save[0]=save[1];
+	save[2]=save[3];
+
+	return(save[1]);
+}
+
+void DrawStr(const char *str)
+{
+#ifdef USE_GLUT
+	GLint i = 0;
+	
+	if(!str) return;
+        
+	while(str[i])
+	{
+		glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
+		i++;
+	}
+#endif
+}
+
+void
+InitFishs(void)
+{
+    int i;
+
+    for (i = 0; i < NUM_SHARKS; i++) {
+        sharks[i].x = 70000.0 + rand() % 6000;
+        sharks[i].y = rand() % 6000;
+        sharks[i].z = rand() % 6000;
+        sharks[i].psi = rand() % 360 - 180.0;
+        sharks[i].v = 1.0;
+    }
+
+    dolph.x = 30000.0;
+    dolph.y = 0.0;
+    dolph.z = 6000.0;
+    dolph.psi = 90.0;
+    dolph.theta = 0.0;
+    dolph.v = 3.0;
+
+    momWhale.x = 70000.0;
+    momWhale.y = 0.0;
+    momWhale.z = 0.0;
+    momWhale.psi = 90.0;
+    momWhale.theta = 0.0;
+    momWhale.v = 3.0;
+
+    babyWhale.x = 60000.0;
+    babyWhale.y = -2000.0;
+    babyWhale.z = -2000.0;
+    babyWhale.psi = 90.0;
+    babyWhale.theta = 0.0;
+    babyWhale.v = 3.0;
+}
+
+void
+Atlantis_Init(void)
+{
+    static float ambient[] = {0.2, 0.2, 0.2, 1.0};
+    static float diffuse[] = {1.0, 1.0, 1.0, 1.0};
+    static float position[] = {0.0, 1.0, 0.0, 0.0};
+    static float mat_shininess[] = {90.0};
+    static float mat_specular[] = {0.8, 0.8, 0.8, 1.0};
+    static float mat_diffuse[] = {0.46, 0.66, 0.795, 1.0};
+    static float mat_ambient[] = {0.3, 0.4, 0.5, 1.0};
+    static float lmodel_ambient[] = {0.4, 0.4, 0.4, 1.0};
+    static float lmodel_localviewer[] = {0.0};
+    //GLfloat map1[4] = {0.0, 0.0, 0.0, 0.0};
+    //GLfloat map2[4] = {0.0, 0.0, 0.0, 0.0};
+    static float fog_color[] = {0.0, 0.5, 0.9, 1.0};
+
+    glFrontFace(GL_CCW);
+
+    glDepthFunc(GL_LESS);
+    glEnable(GL_DEPTH_TEST);
+
+    glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
+    glLightfv(GL_LIGHT0, GL_POSITION, position);
+    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
+    glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_localviewer);
+    glEnable(GL_LIGHTING);
+    glEnable(GL_LIGHT0);
+
+    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
+
+    InitFishs();
+
+    glEnable(GL_FOG);
+	glFogi(GL_FOG_MODE, GL_EXP);
+	glFogf(GL_FOG_DENSITY, 0.0000025);
+	glFogfv(GL_FOG_COLOR, fog_color);
+
+    glClearColor(0.0, 0.5, 0.9, 1.0);
+}
+
+void
+Atlantis_Reshape(int width, int height)
+{
+	w_win = width;
+	h_win = height;
+	
+    glViewport(0, 0, width, height);
+
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    gluPerspective(60.0, (GLfloat) width / (GLfloat) height, 20000.0, 300000.0);
+    glMatrixMode(GL_MODELVIEW);
+}
+
+void
+Atlantis_Animate(void)
+{
+    int i;
+
+    for (i = 0; i < NUM_SHARKS; i++) {
+        SharkPilot(&sharks[i]);
+        SharkMiss(i);
+    }
+    WhalePilot(&dolph);
+    dolph.phi++;
+    //glutPostRedisplay();
+    WhalePilot(&momWhale);
+    momWhale.phi++;
+    WhalePilot(&babyWhale);
+    babyWhale.phi++;
+}
+
+void
+Atlantis_Key(unsigned char key, int x, int y)
+{
+    switch (key) {
+    case 't':
+    	Timing = !Timing;
+    break;
+    case ' ':
+    	switch(StrMode)
+    	{
+		    case GL_EXTENSIONS:
+    			StrMode = GL_VENDOR;
+		    break;
+		    case GL_VENDOR:
+		    	StrMode = GL_RENDERER;
+		    break;
+		    case GL_RENDERER:
+		    	StrMode = GL_VERSION;
+		    break;
+		    case GL_VERSION:
+		    	StrMode = GL_EXTENSIONS;
+		    break;
+		}
+	break;
+    case 27:           /* Esc will quit */
+        exit(1);
+    break;
+    case 's':             		/* "s" start animation */
+        moving = GL_TRUE;
+        //glutIdleFunc(Animate);
+    break;
+    case 'a':          			/* "a" stop animation */
+        moving = GL_FALSE;
+        //glutIdleFunc(NULL);
+    break;
+    case '.':          			/* "." will advance frame */
+        if (!moving) {
+            Atlantis_Animate();
+        }
+    }
+}
+/*
+void Display(void)
+{
+	static float P123[3] = {-448.94, -203.14, 9499.60};
+	static float P124[3] = {-442.64, -185.20, 9528.07};
+	static float P125[3] = {-441.07, -148.05, 9528.07};
+	static float P126[3] = {-443.43, -128.84, 9499.60};
+	static float P127[3] = {-456.87, -146.78, 9466.67};
+	static float P128[3] = {-453.68, -183.93, 9466.67};
+
+	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+	
+	glPushMatrix();
+    FishTransform(&dolph);
+    DrawDolphin(&dolph);
+    glPopMatrix();
+ 
+	glutSwapBuffers();
+}
+*/
+
+void
+Atlantis_Display(void)
+{
+    int i;
+    static double th[4] = {0.0, 0.0, 0.0, 0.0};
+	static double t1 = 0.0, t2 = 0.0, t;
+	char num_str[128];
+    
+    t1 = t2;
+
+    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+    for (i = 0; i < NUM_SHARKS; i++) {
+        glPushMatrix();
+        FishTransform(&sharks[i]);
+        DrawShark(&sharks[i]);
+        glPopMatrix();
+    }
+
+    glPushMatrix();
+    FishTransform(&dolph);
+    DrawDolphin(&dolph);
+    glPopMatrix();
+
+    glPushMatrix();
+    FishTransform(&momWhale);
+    DrawWhale(&momWhale);
+    glPopMatrix();
+
+    glPushMatrix();
+    FishTransform(&babyWhale);
+    glScalef(0.45, 0.45, 0.3);
+    DrawWhale(&babyWhale);
+    glPopMatrix();
+    
+    if(Timing)
+    {
+		t2 = mtime();
+		t = t2 - t1;
+		if(t > 0.0001) t = 1.0 / t;
+		
+		glDisable(GL_LIGHTING);
+		//glDisable(GL_DEPTH_TEST);
+		
+		glColor3f(1.0, 0.0, 0.0);
+		
+		glMatrixMode (GL_PROJECTION);
+		glPushMatrix();
+		glLoadIdentity();
+		glOrtho(0, w_win, 0, h_win, -10.0, 10.0);
+		
+		glRasterPos2f(5.0, 5.0);
+		
+		switch(StrMode)
+		{
+			case GL_VENDOR:
+				sprintf(num_str, "%0.2f Hz, %dx%d, VENDOR: ", filter(t, th), w_win, h_win);
+				DrawStr(num_str);
+				DrawStr(glGetString(GL_VENDOR));
+			break;
+			case GL_RENDERER:
+				sprintf(num_str, "%0.2f Hz, %dx%d, RENDERER: ", filter(t, th), w_win, h_win);
+				DrawStr(num_str);
+				DrawStr(glGetString(GL_RENDERER));
+			break;
+			case GL_VERSION:
+				sprintf(num_str, "%0.2f Hz, %dx%d, VERSION: ", filter(t, th), w_win, h_win);
+				DrawStr(num_str);
+				DrawStr(glGetString(GL_VERSION));
+			break;
+			case GL_EXTENSIONS:
+				sprintf(num_str, "%0.2f Hz, %dx%d, EXTENSIONS: ", filter(t, th), w_win, h_win);
+				DrawStr(num_str);
+				DrawStr(glGetString(GL_EXTENSIONS));
+			break;
+		}
+		
+		glPopMatrix();
+		glMatrixMode(GL_MODELVIEW);
+		
+		glEnable(GL_LIGHTING);
+		//glEnable(GL_DEPTH_TEST);
+	}
+	
+    count++;
+
+//    glutSwapBuffers();
+}
+
+/*
+void
+Visible(int state)
+{
+    if (state == GLUT_VISIBLE) {
+        if (moving)
+            glutIdleFunc(Animate);
+    } else {
+        if (moving)
+            glutIdleFunc(NULL);
+    }
+}
+
+
+void
+timingSelect(int value)
+{
+    switch(value)
+    {
+		case 1:
+			StrMode = GL_VENDOR;
+		break;
+		case 2:
+			StrMode = GL_RENDERER;
+		break;
+		case 3:
+			StrMode = GL_VERSION;
+		break;
+		case 4:
+			StrMode = GL_EXTENSIONS;
+		break;
+    }
+}
+
+void
+menuSelect(int value)
+{
+    switch (value) {
+    case 1:
+        moving = GL_TRUE;
+        glutIdleFunc(Animate);
+        break;
+    case 2:
+        moving = GL_FALSE;
+        glutIdleFunc(NULL);
+        break;
+    case 4:
+        exit(0);
+        break;
+    }
+}
+
+int
+main(int argc, char **argv)
+{
+	GLboolean fullscreen = GL_FALSE; 
+	GLint time_menu;
+ 	
+ 	srand(0);
+
+        glutInit(&argc, argv);
+	if (argc > 1 && !strcmp(argv[1], "-w"))
+		fullscreen = GL_FALSE;
+
+	//glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
+	glutInitDisplayString("rgba double depth=24");
+	if (fullscreen) {
+	  glutGameModeString("1024x768:32");
+	  glutEnterGameMode();
+	} else {
+	  glutInitWindowSize(320, 240);
+	  glutCreateWindow("Atlantis Timing");
+	}
+    Init();
+    glutDisplayFunc(Display);
+    glutReshapeFunc(Reshape);
+    glutKeyboardFunc(Key);
+    moving = GL_TRUE;
+glutIdleFunc(Animate);
+    glutVisibilityFunc(Visible);
+    
+    time_menu = glutCreateMenu(timingSelect);
+    glutAddMenuEntry("GL_VENDOR", 1);
+    glutAddMenuEntry("GL_RENDERER", 2);
+    glutAddMenuEntry("GL_VERSION", 3);
+    glutAddMenuEntry("GL_EXTENSIONS", 4);
+    
+    glutCreateMenu(menuSelect);
+    glutAddMenuEntry("Start motion", 1);
+    glutAddMenuEntry("Stop motion", 2);
+    glutAddSubMenu("Timing Mode", time_menu);
+    glutAddMenuEntry("Quit", 4);
+    
+    //glutAttachMenu(GLUT_RIGHT_BUTTON);
+    glutAttachMenu(GLUT_RIGHT_BUTTON);
+    glutMainLoop();
+    return 0;             // ANSI C requires main to return int.
+}
+*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/atlantis.h	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,65 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#define RAD 57.295
+#define RRAD 0.01745
+
+#define NUM_SHARKS 4
+#define SHARKSIZE 6000
+#define SHARKSPEED 100.0
+
+#define WHALESPEED 250.0
+
+typedef struct _fishRec {
+    float x, y, z, phi, theta, psi, v;
+    float xt, yt, zt;
+    float htail, vtail;
+    float dtheta;
+    int spurt, attack;
+} fishRec;
+
+extern fishRec sharks[NUM_SHARKS];
+extern fishRec momWhale;
+extern fishRec babyWhale;
+extern fishRec dolph;
+
+extern void FishTransform(fishRec *);
+extern void WhalePilot(fishRec *);
+extern void SharkPilot(fishRec *);
+extern void SharkMiss(int);
+extern void DrawWhale(fishRec *);
+extern void DrawShark(fishRec *);
+extern void DrawDolphin(fishRec *);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/dolphin.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,1934 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <math.h>
+#include <GLUT/glut.h>
+#include "atlantis.h"
+/* *INDENT-OFF* */
+static float N001[3] = {-0.005937 ,-0.101998 ,-0.994767};
+static float N002[3] = {0.936780 ,-0.200803 ,0.286569};
+static float N003[3] = {-0.233062 ,0.972058 ,0.028007};
+static float N005[3] = {0.898117 ,0.360171 ,0.252315};
+static float N006[3] = {-0.915437 ,0.348456 ,0.201378};
+static float N007[3] = {0.602263 ,-0.777527 ,0.180920};
+static float N008[3] = {-0.906912 ,-0.412015 ,0.088061};
+static float N012[3] = {0.884408 ,-0.429417 ,-0.182821};
+static float N013[3] = {0.921121 ,0.311084 ,-0.234016};
+static float N014[3] = {0.382635 ,0.877882 ,-0.287948};
+static float N015[3] = {-0.380046 ,0.888166 ,-0.258316};
+static float N016[3] = {-0.891515 ,0.392238 ,-0.226607};
+static float N017[3] = {-0.901419 ,-0.382002 ,-0.203763};
+static float N018[3] = {-0.367225 ,-0.911091 ,-0.187243};
+static float N019[3] = {0.339539 ,-0.924846 ,-0.171388};
+static float N020[3] = {0.914706 ,-0.378617 ,-0.141290};
+static float N021[3] = {0.950662 ,0.262713 ,-0.164994};
+static float N022[3] = {0.546359 ,0.801460 ,-0.243218};
+static float N023[3] = {-0.315796 ,0.917068 ,-0.243431};
+static float N024[3] = {-0.825687 ,0.532277 ,-0.186875};
+static float N025[3] = {-0.974763 ,-0.155232 ,-0.160435};
+static float N026[3] = {-0.560596 ,-0.816658 ,-0.137119};
+static float N027[3] = {0.380210 ,-0.910817 ,-0.160786};
+static float N028[3] = {0.923772 ,-0.358322 ,-0.135093};
+static float N029[3] = {0.951202 ,0.275053 ,-0.139859};
+static float N030[3] = {0.686099 ,0.702548 ,-0.188932};
+static float N031[3] = {-0.521865 ,0.826719 ,-0.210220};
+static float N032[3] = {-0.923820 ,0.346739 ,-0.162258};
+static float N033[3] = {-0.902095 ,-0.409995 ,-0.134646};
+static float N034[3] = {-0.509115 ,-0.848498 ,-0.144404};
+static float N035[3] = {0.456469 ,-0.880293 ,-0.129305};
+static float N036[3] = {0.873401 ,-0.475489 ,-0.105266};
+static float N037[3] = {0.970825 ,0.179861 ,-0.158584};
+static float N038[3] = {0.675609 ,0.714187 ,-0.183004};
+static float N039[3] = {-0.523574 ,0.830212 ,-0.191360};
+static float N040[3] = {-0.958895 ,0.230808 ,-0.165071};
+static float N041[3] = {-0.918285 ,-0.376803 ,-0.121542};
+static float N042[3] = {-0.622467 ,-0.774167 ,-0.114888};
+static float N043[3] = {0.404497 ,-0.908807 ,-0.102231};
+static float N044[3] = {0.930538 ,-0.365155 ,-0.027588};
+static float N045[3] = {0.921920 ,0.374157 ,-0.100345};
+static float N046[3] = {0.507346 ,0.860739 ,0.041562};
+static float N047[3] = {-0.394646 ,0.918815 ,-0.005730};
+static float N048[3] = {-0.925411 ,0.373024 ,-0.066837};
+static float N049[3] = {-0.945337 ,-0.322309 ,-0.049551};
+static float N050[3] = {-0.660437 ,-0.750557 ,-0.022072};
+static float N051[3] = {0.488835 ,-0.871950 ,-0.027261};
+static float N052[3] = {0.902599 ,-0.421397 ,0.087969};
+static float N053[3] = {0.938636 ,0.322606 ,0.122020};
+static float N054[3] = {0.484605 ,0.871078 ,0.079878};
+static float N055[3] = {-0.353607 ,0.931559 ,0.084619};
+static float N056[3] = {-0.867759 ,0.478564 ,0.134054};
+static float N057[3] = {-0.951583 ,-0.296030 ,0.082794};
+static float N058[3] = {-0.672355 ,-0.730209 ,0.121384};
+static float N059[3] = {0.528336 ,-0.842452 ,0.105525};
+static float N060[3] = {0.786913 ,-0.564760 ,0.248627};
+static float N062[3] = {0.622098 ,0.765230 ,0.165584};
+static float N063[3] = {-0.631711 ,0.767816 ,0.106773};
+static float N064[3] = {-0.687886 ,0.606351 ,0.398938};
+static float N065[3] = {-0.946327 ,-0.281623 ,0.158598};
+static float N066[3] = {-0.509549 ,-0.860437 ,0.002776};
+static float N067[3] = {0.462594 ,-0.876692 ,0.131977};
+static float N071[3] = {0.000000 ,1.000000 ,0.000000};
+static float N077[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N078[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N079[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N080[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N081[3] = {-0.571197 ,0.816173 ,0.087152};
+static float N082[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N083[3] = {-0.571197 ,0.816173 ,0.087152};
+static float N084[3] = {-0.571197 ,0.816173 ,0.087152};
+static float N085[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N086[3] = {-0.571197 ,0.816173 ,0.087152};
+static float N087[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N088[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N089[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N090[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N091[3] = {0.000000 ,1.000000 ,0.000000};
+static float N092[3] = {0.000000 ,1.000000 ,0.000000};
+static float N093[3] = {0.000000 ,1.000000 ,0.000000};
+static float N094[3] = {1.000000 ,0.000000 ,0.000000};
+static float N095[3] = {-1.000000 ,0.000000 ,0.000000};
+static float N097[3] = {-0.697296 ,0.702881 ,0.140491};
+static float N098[3] = {0.918864 ,0.340821 ,0.198819};
+static float N099[3] = {-0.932737 ,0.201195 ,0.299202};
+static float N100[3] = {0.029517 ,0.981679 ,0.188244};
+static float N102[3] = {0.813521 ,-0.204936 ,0.544229};
+static float N110[3] = {-0.781480 ,-0.384779 ,0.491155};
+static float N111[3] = {-0.722243 ,0.384927 ,0.574627};
+static float N112[3] = {-0.752278 ,0.502679 ,0.425901};
+static float N113[3] = {0.547257 ,0.367910 ,0.751766};
+static float N114[3] = {0.725949 ,-0.232568 ,0.647233};
+static float N115[3] = {-0.747182 ,-0.660786 ,0.071280};
+static float N116[3] = {0.931519 ,0.200748 ,0.303270};
+static float N117[3] = {-0.828928 ,0.313757 ,0.463071};
+static float N118[3] = {0.902554 ,-0.370967 ,0.218587};
+static float N119[3] = {-0.879257 ,-0.441851 ,0.177973};
+static float N120[3] = {0.642327 ,0.611901 ,0.461512};
+static float N121[3] = {0.964817 ,-0.202322 ,0.167910};
+static float N122[3] = {0.000000 ,1.000000 ,0.000000};
+static float P001[3] = {5.68, -300.95, 1324.70};
+static float P002[3] = {338.69, -219.63, 9677.03};
+static float P003[3] = {12.18, 474.59, 9138.14};
+static float P005[3] = {487.51, 198.05, 9350.78};
+static float P006[3] = {-457.61, 68.74, 9427.85};
+static float P007[3] = {156.52, -266.72, 10311.68};
+static float P008[3] = {-185.56, -266.51, 10310.47};
+static float P009[3] = {124.39, -261.46, 1942.34};
+static float P010[3] = {-130.05, -261.46, 1946.03};
+static float P011[3] = {141.07, -320.11, 1239.38};
+static float P012[3] = {156.48, -360.12, 2073.41};
+static float P013[3] = {162.00, -175.88, 2064.44};
+static float P014[3] = {88.16, -87.72, 2064.02};
+static float P015[3] = {-65.21, -96.13, 2064.02};
+static float P016[3] = {-156.48, -180.96, 2064.44};
+static float P017[3] = {-162.00, -368.93, 2082.39};
+static float P018[3] = {-88.16, -439.22, 2082.39};
+static float P019[3] = {65.21, -440.32, 2083.39};
+static float P020[3] = {246.87, -356.02, 2576.95};
+static float P021[3] = {253.17, -111.15, 2567.15};
+static float P022[3] = {132.34, 51.41, 2559.84};
+static float P023[3] = {-97.88, 40.44, 2567.15};
+static float P024[3] = {-222.97, -117.49, 2567.15};
+static float P025[3] = {-252.22, -371.53, 2569.92};
+static float P026[3] = {-108.44, -518.19, 2586.75};
+static float P027[3] = {97.88, -524.79, 2586.75};
+static float P028[3] = {370.03, -421.19, 3419.70};
+static float P029[3] = {351.15, -16.98, 3423.17};
+static float P030[3] = {200.66, 248.46, 3430.37};
+static float P031[3] = {-148.42, 235.02, 3417.91};
+static float P032[3] = {-360.21, -30.27, 3416.84};
+static float P033[3] = {-357.90, -414.89, 3407.04};
+static float P034[3] = {-148.88, -631.35, 3409.90};
+static float P035[3] = {156.38, -632.59, 3419.70};
+static float P036[3] = {462.61, -469.21, 4431.51};
+static float P037[3] = {466.60, 102.25, 4434.98};
+static float P038[3] = {243.05, 474.34, 4562.02};
+static float P039[3] = {-191.23, 474.40, 4554.42};
+static float P040[3] = {-476.12, 111.05, 4451.11};
+static float P041[3] = {-473.36, -470.74, 4444.78};
+static float P042[3] = {-266.95, -748.41, 4447.78};
+static float P043[3] = {211.14, -749.91, 4429.73};
+static float P044[3] = {680.57, -370.27, 5943.46};
+static float P045[3] = {834.01, 363.09, 6360.63};
+static float P046[3] = {371.29, 804.51, 6486.26};
+static float P047[3] = {-291.43, 797.22, 6494.28};
+static float P048[3] = {-784.13, 370.75, 6378.01};
+static float P049[3] = {-743.29, -325.82, 5943.46};
+static float P050[3] = {-383.24, -804.77, 5943.46};
+static float P051[3] = {283.47, -846.09, 5943.46};
+static float iP001[3] = {5.68, -300.95, 1324.70};
+static float iP009[3] = {124.39, -261.46, 1942.34};
+static float iP010[3] = {-130.05, -261.46, 1946.03};
+static float iP011[3] = {141.07, -320.11, 1239.38};
+static float iP012[3] = {156.48, -360.12, 2073.41};
+static float iP013[3] = {162.00, -175.88, 2064.44};
+static float iP014[3] = {88.16, -87.72, 2064.02};
+static float iP015[3] = {-65.21, -96.13, 2064.02};
+static float iP016[3] = {-156.48, -180.96, 2064.44};
+static float iP017[3] = {-162.00, -368.93, 2082.39};
+static float iP018[3] = {-88.16, -439.22, 2082.39};
+static float iP019[3] = {65.21, -440.32, 2083.39};
+static float iP020[3] = {246.87, -356.02, 2576.95};
+static float iP021[3] = {253.17, -111.15, 2567.15};
+static float iP022[3] = {132.34, 51.41, 2559.84};
+static float iP023[3] = {-97.88, 40.44, 2567.15};
+static float iP024[3] = {-222.97, -117.49, 2567.15};
+static float iP025[3] = {-252.22, -371.53, 2569.92};
+static float iP026[3] = {-108.44, -518.19, 2586.75};
+static float iP027[3] = {97.88, -524.79, 2586.75};
+static float iP028[3] = {370.03, -421.19, 3419.70};
+static float iP029[3] = {351.15, -16.98, 3423.17};
+static float iP030[3] = {200.66, 248.46, 3430.37};
+static float iP031[3] = {-148.42, 235.02, 3417.91};
+static float iP032[3] = {-360.21, -30.27, 3416.84};
+static float iP033[3] = {-357.90, -414.89, 3407.04};
+static float iP034[3] = {-148.88, -631.35, 3409.90};
+static float iP035[3] = {156.38, -632.59, 3419.70};
+static float iP036[3] = {462.61, -469.21, 4431.51};
+static float iP037[3] = {466.60, 102.25, 4434.98};
+static float iP038[3] = {243.05, 474.34, 4562.02};
+static float iP039[3] = {-191.23, 474.40, 4554.42};
+static float iP040[3] = {-476.12, 111.05, 4451.11};
+static float iP041[3] = {-473.36, -470.74, 4444.78};
+static float iP042[3] = {-266.95, -748.41, 4447.78};
+static float iP043[3] = {211.14, -749.91, 4429.73};
+static float iP044[3] = {680.57, -370.27, 5943.46};
+static float iP045[3] = {834.01, 363.09, 6360.63};
+static float iP046[3] = {371.29, 804.51, 6486.26};
+static float iP047[3] = {-291.43, 797.22, 6494.28};
+static float iP048[3] = {-784.13, 370.75, 6378.01};
+static float iP049[3] = {-743.29, -325.82, 5943.46};
+static float iP050[3] = {-383.24, -804.77, 5943.46};
+static float iP051[3] = {283.47, -846.09, 5943.46};
+static float P052[3] = {599.09, -300.15, 7894.03};
+static float P053[3] = {735.48, 306.26, 7911.92};
+static float P054[3] = {246.22, 558.53, 8460.50};
+static float P055[3] = {-230.41, 559.84, 8473.23};
+static float P056[3] = {-698.66, 320.83, 7902.59};
+static float P057[3] = {-643.29, -299.16, 7902.59};
+static float P058[3] = {-341.47, -719.30, 7902.59};
+static float P059[3] = {252.57, -756.12, 7902.59};
+static float P060[3] = {458.39, -265.31, 9355.44};
+static float P062[3] = {224.04, 338.75, 9450.30};
+static float P063[3] = {-165.71, 341.04, 9462.35};
+static float P064[3] = {-298.11, 110.13, 10180.37};
+static float P065[3] = {-473.99, -219.71, 9355.44};
+static float P066[3] = {-211.97, -479.87, 9355.44};
+static float P067[3] = {192.86, -491.45, 9348.73};
+static float P068[3] = {-136.29, -319.84, 1228.73};
+static float P069[3] = {1111.17, -314.14, 1314.19};
+static float P070[3] = {-1167.34, -321.61, 1319.45};
+static float P071[3] = {1404.86, -306.66, 1235.45};
+static float P072[3] = {-1409.73, -314.14, 1247.66};
+static float P073[3] = {1254.01, -296.87, 1544.58};
+static float P074[3] = {-1262.09, -291.70, 1504.26};
+static float P075[3] = {965.71, -269.26, 1742.65};
+static float P076[3] = {-900.97, -276.74, 1726.07};
+static float iP068[3] = {-136.29, -319.84, 1228.73};
+static float iP069[3] = {1111.17, -314.14, 1314.19};
+static float iP070[3] = {-1167.34, -321.61, 1319.45};
+static float iP071[3] = {1404.86, -306.66, 1235.45};
+static float iP072[3] = {-1409.73, -314.14, 1247.66};
+static float iP073[3] = {1254.01, -296.87, 1544.58};
+static float iP074[3] = {-1262.09, -291.70, 1504.26};
+static float iP075[3] = {965.71, -269.26, 1742.65};
+static float iP076[3] = {-900.97, -276.74, 1726.07};
+static float P077[3] = {1058.00, -448.81, 8194.66};
+static float P078[3] = {-1016.51, -456.43, 8190.62};
+static float P079[3] = {-1515.96, -676.45, 7754.93};
+static float P080[3] = {1856.75, -830.34, 7296.56};
+static float P081[3] = {1472.16, -497.38, 7399.68};
+static float P082[3] = {-1775.26, -829.51, 7298.46};
+static float P083[3] = {911.09, -252.51, 7510.99};
+static float P084[3] = {-1451.94, -495.62, 7384.30};
+static float P085[3] = {1598.75, -669.26, 7769.90};
+static float P086[3] = {-836.53, -250.08, 7463.25};
+static float P087[3] = {722.87, -158.18, 8006.41};
+static float P088[3] = {-688.86, -162.28, 7993.89};
+static float P089[3] = {-626.92, -185.30, 8364.98};
+static float P090[3] = {647.72, -189.46, 8354.99};
+static float P091[3] = {0.00, 835.01, 5555.62};
+static float P092[3] = {0.00, 1350.18, 5220.86};
+static float P093[3] = {0.00, 1422.94, 5285.27};
+static float P094[3] = {0.00, 1296.75, 5650.19};
+static float P095[3] = {0.00, 795.63, 6493.88};
+static float iP091[3] = {0.00, 835.01, 5555.62};
+static float iP092[3] = {0.00, 1350.18, 5220.86};
+static float iP093[3] = {0.00, 1422.94, 5285.27};
+static float iP094[3] = {0.00, 1296.75, 5650.19};
+static float iP095[3] = {0.00, 795.63, 6493.88};
+static float P097[3] = {-194.91, -357.14, 10313.32};
+static float P098[3] = {135.35, -357.66, 10307.94};
+static float iP097[3] = {-194.91, -357.14, 10313.32};
+static float iP098[3] = {135.35, -357.66, 10307.94};
+static float P099[3] = {-380.53, -221.14, 9677.98};
+static float P100[3] = {0.00, 412.99, 9629.33};
+static float P102[3] = {59.51, -412.55, 10677.58};
+static float iP102[3] = {59.51, -412.55, 10677.58};
+static float P103[3] = {6.50, 484.74, 9009.94};
+static float P105[3] = {-41.86, 476.51, 9078.17};
+static float P108[3] = {49.20, 476.83, 9078.24};
+static float P110[3] = {-187.62, -410.04, 10674.12};
+static float iP110[3] = {-187.62, -410.04, 10674.12};
+static float P111[3] = {-184.25, -318.70, 10723.88};
+static float iP111[3] = {-184.25, -318.70, 10723.88};
+static float P112[3] = {-179.61, -142.81, 10670.26};
+static float P113[3] = {57.43, -147.94, 10675.26};
+static float P114[3] = {54.06, -218.90, 10712.44};
+static float P115[3] = {-186.35, -212.09, 10713.76};
+static float P116[3] = {205.90, -84.61, 10275.97};
+static float P117[3] = {-230.96, -83.26, 10280.09};
+static float iP118[3] = {216.78, -509.17, 10098.94};
+static float iP119[3] = {-313.21, -510.79, 10102.62};
+static float P118[3] = {216.78, -509.17, 10098.94};
+static float P119[3] = {-313.21, -510.79, 10102.62};
+static float P120[3] = {217.95, 96.34, 10161.62};
+static float P121[3] = {71.99, -319.74, 10717.70};
+static float iP121[3] = {71.99, -319.74, 10717.70};
+static float P122[3] = {0.00, 602.74, 5375.84};
+static float iP122[3] = {0.00, 602.74, 5375.84};
+static float P123[3] = {-448.94, -203.14, 9499.60};
+static float P124[3] = {-442.64, -185.20, 9528.07};
+static float P125[3] = {-441.07, -148.05, 9528.07};
+static float P126[3] = {-443.43, -128.84, 9499.60};
+static float P127[3] = {-456.87, -146.78, 9466.67};
+static float P128[3] = {-453.68, -183.93, 9466.67};
+static float P129[3] = {428.43, -124.08, 9503.03};
+static float P130[3] = {419.73, -142.14, 9534.56};
+static float P131[3] = {419.92, -179.96, 9534.56};
+static float P132[3] = {431.20, -199.73, 9505.26};
+static float P133[3] = {442.28, -181.67, 9475.96};
+static float P134[3] = {442.08, -143.84, 9475.96};
+/* *INDENT-ON* */
+
+void
+Dolphin001(void)
+{
+    glNormal3fv(N071);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P001);
+    glVertex3fv(P068);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P068);
+    glVertex3fv(P076);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P068);
+    glVertex3fv(P070);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P076);
+    glVertex3fv(P070);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P070);
+    glVertex3fv(P072);
+    glVertex3fv(P074);
+    glEnd();
+    glNormal3fv(N119);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P072);
+    glVertex3fv(P070);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P074);
+    glVertex3fv(P070);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P070);
+    glVertex3fv(P068);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P076);
+    glVertex3fv(P068);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P068);
+    glVertex3fv(P001);
+    glVertex3fv(P010);
+    glEnd();
+}
+
+void
+Dolphin002(void)
+{
+    glNormal3fv(N071);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P011);
+    glVertex3fv(P001);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P075);
+    glVertex3fv(P011);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P069);
+    glVertex3fv(P011);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P069);
+    glVertex3fv(P075);
+    glVertex3fv(P073);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P071);
+    glVertex3fv(P069);
+    glVertex3fv(P073);
+    glEnd();
+    glNormal3fv(N119);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P001);
+    glVertex3fv(P011);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P009);
+    glVertex3fv(P011);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P011);
+    glVertex3fv(P069);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P069);
+    glVertex3fv(P073);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P069);
+    glVertex3fv(P071);
+    glVertex3fv(P073);
+    glEnd();
+}
+
+void
+Dolphin003(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glEnd();
+}
+
+void
+Dolphin004(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glEnd();
+}
+
+void
+Dolphin005(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+}
+
+void
+Dolphin006(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N093);
+    glVertex3fv(P093);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N093);
+    glVertex3fv(P093);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N122);
+    glVertex3fv(P122);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N122);
+    glVertex3fv(P122);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glEnd();
+}
+
+void
+Dolphin007(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+}
+
+void
+Dolphin008(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glEnd();
+}
+
+void
+Dolphin009(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+}
+
+void
+Dolphin010(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N080);
+    glVertex3fv(P080);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N090);
+    glVertex3fv(P090);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N080);
+    glVertex3fv(P080);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glNormal3fv(N090);
+    glVertex3fv(P090);
+    glEnd();
+}
+
+void
+Dolphin011(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N082);
+    glVertex3fv(P082);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N082);
+    glVertex3fv(P082);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+}
+
+void
+Dolphin012(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glEnd();
+}
+
+void
+Dolphin013(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glNormal3fv(N112);
+    glVertex3fv(P112);
+    glNormal3fv(N113);
+    glVertex3fv(P113);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N114);
+    glVertex3fv(P114);
+    glNormal3fv(N113);
+    glVertex3fv(P113);
+    glNormal3fv(N112);
+    glVertex3fv(P112);
+    glNormal3fv(N115);
+    glVertex3fv(P115);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N114);
+    glVertex3fv(P114);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glNormal3fv(N113);
+    glVertex3fv(P113);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N114);
+    glVertex3fv(P114);
+    glNormal3fv(N007);
+    glVertex3fv(P007);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N007);
+    glVertex3fv(P007);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P002);
+    glVertex3fv(P007);
+    glVertex3fv(P008);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P007);
+    glVertex3fv(P114);
+    glVertex3fv(P115);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N112);
+    glVertex3fv(P112);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N112);
+    glVertex3fv(P112);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N115);
+    glVertex3fv(P115);
+    glEnd();
+}
+
+void
+Dolphin014(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N111);
+    glVertex3fv(P111);
+    glNormal3fv(N110);
+    glVertex3fv(P110);
+    glNormal3fv(N102);
+    glVertex3fv(P102);
+    glNormal3fv(N121);
+    glVertex3fv(P121);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N111);
+    glVertex3fv(P111);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N110);
+    glVertex3fv(P110);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glNormal3fv(N110);
+    glVertex3fv(P110);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P098);
+    glVertex3fv(P097);
+    glVertex3fv(P111);
+    glVertex3fv(P121);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P002);
+    glVertex3fv(P099);
+    glVertex3fv(P097);
+    glVertex3fv(P098);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N110);
+    glVertex3fv(P110);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glNormal3fv(N102);
+    glVertex3fv(P102);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glNormal3fv(N102);
+    glVertex3fv(P102);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N102);
+    glVertex3fv(P102);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glNormal3fv(N121);
+    glVertex3fv(P121);
+    glEnd();
+}
+
+void
+Dolphin015(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+}
+
+void
+Dolphin016(void)
+{
+
+    glDisable(GL_DEPTH_TEST);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P123);
+    glVertex3fv(P124);
+    glVertex3fv(P125);
+    glVertex3fv(P126);
+    glVertex3fv(P127);
+    glVertex3fv(P128);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P129);
+    glVertex3fv(P130);
+    glVertex3fv(P131);
+    glVertex3fv(P132);
+    glVertex3fv(P133);
+    glVertex3fv(P134);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P103);
+    glVertex3fv(P105);
+    glVertex3fv(P108);
+    glEnd();
+    glEnable(GL_DEPTH_TEST);
+}
+
+void
+DrawDolphin(fishRec * fish)
+{
+    float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7;
+    float pitch, thrash, chomp;
+
+    fish->htail = (int) (fish->htail - (int) (10.0 * fish->v)) % 360;
+
+    thrash = 70.0 * fish->v;
+
+    seg0 = 1.0 * thrash * sin((fish->htail) * RRAD);
+    seg3 = 1.0 * thrash * sin((fish->htail) * RRAD);
+    seg1 = 2.0 * thrash * sin((fish->htail + 4.0) * RRAD);
+    seg2 = 3.0 * thrash * sin((fish->htail + 6.0) * RRAD);
+    seg4 = 4.0 * thrash * sin((fish->htail + 10.0) * RRAD);
+    seg5 = 4.5 * thrash * sin((fish->htail + 15.0) * RRAD);
+    seg6 = 5.0 * thrash * sin((fish->htail + 20.0) * RRAD);
+    seg7 = 6.0 * thrash * sin((fish->htail + 30.0) * RRAD);
+
+    pitch = fish->v * sin((fish->htail + 180.0) * RRAD);
+
+    if (fish->v > 2.0) {
+        chomp = -(fish->v - 2.0) * 200.0;
+    }
+    chomp = 100.0;
+
+    P012[1] = iP012[1] + seg5;
+    P013[1] = iP013[1] + seg5;
+    P014[1] = iP014[1] + seg5;
+    P015[1] = iP015[1] + seg5;
+    P016[1] = iP016[1] + seg5;
+    P017[1] = iP017[1] + seg5;
+    P018[1] = iP018[1] + seg5;
+    P019[1] = iP019[1] + seg5;
+
+    P020[1] = iP020[1] + seg4;
+    P021[1] = iP021[1] + seg4;
+    P022[1] = iP022[1] + seg4;
+    P023[1] = iP023[1] + seg4;
+    P024[1] = iP024[1] + seg4;
+    P025[1] = iP025[1] + seg4;
+    P026[1] = iP026[1] + seg4;
+    P027[1] = iP027[1] + seg4;
+
+    P028[1] = iP028[1] + seg2;
+    P029[1] = iP029[1] + seg2;
+    P030[1] = iP030[1] + seg2;
+    P031[1] = iP031[1] + seg2;
+    P032[1] = iP032[1] + seg2;
+    P033[1] = iP033[1] + seg2;
+    P034[1] = iP034[1] + seg2;
+    P035[1] = iP035[1] + seg2;
+
+    P036[1] = iP036[1] + seg1;
+    P037[1] = iP037[1] + seg1;
+    P038[1] = iP038[1] + seg1;
+    P039[1] = iP039[1] + seg1;
+    P040[1] = iP040[1] + seg1;
+    P041[1] = iP041[1] + seg1;
+    P042[1] = iP042[1] + seg1;
+    P043[1] = iP043[1] + seg1;
+
+    P044[1] = iP044[1] + seg0;
+    P045[1] = iP045[1] + seg0;
+    P046[1] = iP046[1] + seg0;
+    P047[1] = iP047[1] + seg0;
+    P048[1] = iP048[1] + seg0;
+    P049[1] = iP049[1] + seg0;
+    P050[1] = iP050[1] + seg0;
+    P051[1] = iP051[1] + seg0;
+
+    P009[1] = iP009[1] + seg6;
+    P010[1] = iP010[1] + seg6;
+    P075[1] = iP075[1] + seg6;
+    P076[1] = iP076[1] + seg6;
+
+    P001[1] = iP001[1] + seg7;
+    P011[1] = iP011[1] + seg7;
+    P068[1] = iP068[1] + seg7;
+    P069[1] = iP069[1] + seg7;
+    P070[1] = iP070[1] + seg7;
+    P071[1] = iP071[1] + seg7;
+    P072[1] = iP072[1] + seg7;
+    P073[1] = iP073[1] + seg7;
+    P074[1] = iP074[1] + seg7;
+
+    P091[1] = iP091[1] + seg3;
+    P092[1] = iP092[1] + seg3;
+    P093[1] = iP093[1] + seg3;
+    P094[1] = iP094[1] + seg3;
+    P095[1] = iP095[1] + seg3;
+    P122[1] = iP122[1] + seg3 * 1.5;
+
+    P097[1] = iP097[1] + chomp;
+    P098[1] = iP098[1] + chomp;
+    P102[1] = iP102[1] + chomp;
+    P110[1] = iP110[1] + chomp;
+    P111[1] = iP111[1] + chomp;
+    P121[1] = iP121[1] + chomp;
+    P118[1] = iP118[1] + chomp;
+    P119[1] = iP119[1] + chomp;
+
+    glPushMatrix();
+
+    glRotatef(pitch, 1.0, 0.0, 0.0);
+
+    glTranslatef(0.0, 0.0, 7000.0);
+
+    glRotatef(180.0, 0.0, 1.0, 0.0);
+
+    glEnable(GL_CULL_FACE);
+    Dolphin014();
+    Dolphin010();
+    Dolphin009();
+    Dolphin012();
+    Dolphin013();
+    Dolphin006();
+    Dolphin002();
+    Dolphin001();
+    Dolphin003();
+    Dolphin015();
+    Dolphin004();
+    Dolphin005();
+    Dolphin007();
+    Dolphin008();
+    Dolphin011();
+    Dolphin016();
+    glDisable(GL_CULL_FACE);
+
+    glPopMatrix();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/shark.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,1308 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <GLUT/glut.h>
+#include <math.h>
+#include "atlantis.h"
+/* *INDENT-OFF* */
+static float N002[3] = {0.000077 ,-0.020611 ,0.999788};
+static float N003[3] = {0.961425 ,0.258729 ,-0.093390};
+static float N004[3] = {0.510811 ,-0.769633 ,-0.383063};
+static float N005[3] = {0.400123 ,0.855734 ,-0.328055};
+static float N006[3] = {-0.770715 ,0.610204 ,-0.183440};
+static float N007[3] = {-0.915597 ,-0.373345 ,-0.149316};
+static float N008[3] = {-0.972788 ,0.208921 ,-0.100179};
+static float N009[3] = {-0.939713 ,-0.312268 ,-0.139383};
+static float N010[3] = {-0.624138 ,-0.741047 ,-0.247589};
+static float N011[3] = {0.591434 ,-0.768401 ,-0.244471};
+static float N012[3] = {0.935152 ,-0.328495 ,-0.132598};
+static float N013[3] = {0.997102 ,0.074243 ,-0.016593};
+static float N014[3] = {0.969995 ,0.241712 ,-0.026186};
+static float N015[3] = {0.844539 ,0.502628 ,-0.184714};
+static float N016[3] = {-0.906608 ,0.386308 ,-0.169787};
+static float N017[3] = {-0.970016 ,0.241698 ,-0.025516};
+static float N018[3] = {-0.998652 ,0.050493 ,-0.012045};
+static float N019[3] = {-0.942685 ,-0.333051 ,-0.020556};
+static float N020[3] = {-0.660944 ,-0.750276 ,0.015480};
+static float N021[3] = {0.503549 ,-0.862908 ,-0.042749};
+static float N022[3] = {0.953202 ,-0.302092 ,-0.012089};
+static float N023[3] = {0.998738 ,0.023574 ,0.044344};
+static float N024[3] = {0.979297 ,0.193272 ,0.060202};
+static float N025[3] = {0.798300 ,0.464885 ,0.382883};
+static float N026[3] = {-0.756590 ,0.452403 ,0.472126};
+static float N027[3] = {-0.953855 ,0.293003 ,0.065651};
+static float N028[3] = {-0.998033 ,0.040292 ,0.048028};
+static float N029[3] = {-0.977079 ,-0.204288 ,0.059858};
+static float N030[3] = {-0.729117 ,-0.675304 ,0.111140};
+static float N031[3] = {0.598361 ,-0.792753 ,0.116221};
+static float N032[3] = {0.965192 ,-0.252991 ,0.066332};
+static float N033[3] = {0.998201 ,-0.002790 ,0.059892};
+static float N034[3] = {0.978657 ,0.193135 ,0.070207};
+static float N035[3] = {0.718815 ,0.680392 ,0.142733};
+static float N036[3] = {-0.383096 ,0.906212 ,0.178936};
+static float N037[3] = {-0.952831 ,0.292590 ,0.080647};
+static float N038[3] = {-0.997680 ,0.032417 ,0.059861};
+static float N039[3] = {-0.982629 ,-0.169881 ,0.074700};
+static float N040[3] = {-0.695424 ,-0.703466 ,0.146700};
+static float N041[3] = {0.359323 ,-0.915531 ,0.180805};
+static float N042[3] = {0.943356 ,-0.319387 ,0.089842};
+static float N043[3] = {0.998272 ,-0.032435 ,0.048993};
+static float N044[3] = {0.978997 ,0.193205 ,0.065084};
+static float N045[3] = {0.872144 ,0.470094 ,-0.135565};
+static float N046[3] = {-0.664282 ,0.737945 ,-0.119027};
+static float N047[3] = {-0.954508 ,0.288570 ,0.075107};
+static float N048[3] = {-0.998273 ,0.032406 ,0.048993};
+static float N049[3] = {-0.979908 ,-0.193579 ,0.048038};
+static float N050[3] = {-0.858736 ,-0.507202 ,-0.072938};
+static float N051[3] = {0.643545 ,-0.763887 ,-0.048237};
+static float N052[3] = {0.955580 ,-0.288954 ,0.058068};
+static float N058[3] = {0.000050 ,0.793007 ,-0.609213};
+static float N059[3] = {0.913510 ,0.235418 ,-0.331779};
+static float N060[3] = {-0.807970 ,0.495000 ,-0.319625};
+static float N061[3] = {0.000000 ,0.784687 ,-0.619892};
+static float N062[3] = {0.000000 ,-1.000000 ,0.000000};
+static float N063[3] = {0.000000 ,1.000000 ,0.000000};
+static float N064[3] = {0.000000 ,1.000000 ,0.000000};
+static float N065[3] = {0.000000 ,1.000000 ,0.000000};
+static float N066[3] = {-0.055784 ,0.257059 ,0.964784};
+static float N069[3] = {-0.000505 ,-0.929775 ,-0.368127};
+static float N070[3] = {0.000000 ,1.000000 ,0.000000};
+static float P002[3] = {0.00, -36.59, 5687.72};
+static float P003[3] = {90.00, 114.73, 724.38};
+static float P004[3] = {58.24, -146.84, 262.35};
+static float P005[3] = {27.81, 231.52, 510.43};
+static float P006[3] = {-27.81, 230.43, 509.76};
+static float P007[3] = {-46.09, -146.83, 265.84};
+static float P008[3] = {-90.00, 103.84, 718.53};
+static float P009[3] = {-131.10, -165.92, 834.85};
+static float P010[3] = {-27.81, -285.31, 500.00};
+static float P011[3] = {27.81, -285.32, 500.00};
+static float P012[3] = {147.96, -170.89, 845.50};
+static float P013[3] = {180.00, 0.00, 2000.00};
+static float P014[3] = {145.62, 352.67, 2000.00};
+static float P015[3] = {55.62, 570.63, 2000.00};
+static float P016[3] = {-55.62, 570.64, 2000.00};
+static float P017[3] = {-145.62, 352.68, 2000.00};
+static float P018[3] = {-180.00, 0.01, 2000.00};
+static float P019[3] = {-178.20, -352.66, 2001.61};
+static float P020[3] = {-55.63, -570.63, 2000.00};
+static float P021[3] = {55.62, -570.64, 2000.00};
+static float P022[3] = {179.91, -352.69, 1998.39};
+static float P023[3] = {150.00, 0.00, 3000.00};
+static float P024[3] = {121.35, 293.89, 3000.00};
+static float P025[3] = {46.35, 502.93, 2883.09};
+static float P026[3] = {-46.35, 497.45, 2877.24};
+static float P027[3] = {-121.35, 293.90, 3000.00};
+static float P028[3] = {-150.00, 0.00, 3000.00};
+static float P029[3] = {-152.21, -304.84, 2858.68};
+static float P030[3] = {-46.36, -475.52, 3000.00};
+static float P031[3] = {46.35, -475.53, 3000.00};
+static float P032[3] = {155.64, -304.87, 2863.50};
+static float P033[3] = {90.00, 0.00, 4000.00};
+static float P034[3] = {72.81, 176.33, 4000.00};
+static float P035[3] = {27.81, 285.32, 4000.00};
+static float P036[3] = {-27.81, 285.32, 4000.00};
+static float P037[3] = {-72.81, 176.34, 4000.00};
+static float P038[3] = {-90.00, 0.00, 4000.00};
+static float P039[3] = {-72.81, -176.33, 4000.00};
+static float P040[3] = {-27.81, -285.31, 4000.00};
+static float P041[3] = {27.81, -285.32, 4000.00};
+static float P042[3] = {72.81, -176.34, 4000.00};
+static float P043[3] = {30.00, 0.00, 5000.00};
+static float P044[3] = {24.27, 58.78, 5000.00};
+static float P045[3] = {9.27, 95.11, 5000.00};
+static float P046[3] = {-9.27, 95.11, 5000.00};
+static float P047[3] = {-24.27, 58.78, 5000.00};
+static float P048[3] = {-30.00, 0.00, 5000.00};
+static float P049[3] = {-24.27, -58.78, 5000.00};
+static float P050[3] = {-9.27, -95.10, 5000.00};
+static float P051[3] = {9.27, -95.11, 5000.00};
+static float P052[3] = {24.27, -58.78, 5000.00};
+static float P058[3] = {0.00, 1212.72, 2703.08};
+static float P059[3] = {50.36, 0.00, 108.14};
+static float P060[3] = {-22.18, 0.00, 108.14};
+static float P061[3] = {0.00, 1181.61, 6344.65};
+static float P062[3] = {516.45, -887.08, 2535.45};
+static float P063[3] = {-545.69, -879.31, 2555.63};
+static float P064[3] = {618.89, -1005.64, 2988.32};
+static float P065[3] = {-635.37, -1014.79, 2938.68};
+static float P066[3] = {0.00, 1374.43, 3064.18};
+static float P069[3] = {0.00, -418.25, 5765.04};
+static float P070[3] = {0.00, 1266.91, 6629.60};
+static float P071[3] = {-139.12, -124.96, 997.98};
+static float P072[3] = {-139.24, -110.18, 1020.68};
+static float P073[3] = {-137.33, -94.52, 1022.63};
+static float P074[3] = {-137.03, -79.91, 996.89};
+static float P075[3] = {-135.21, -91.48, 969.14};
+static float P076[3] = {-135.39, -110.87, 968.76};
+static float P077[3] = {150.23, -78.44, 995.53};
+static float P078[3] = {152.79, -92.76, 1018.46};
+static float P079[3] = {154.19, -110.20, 1020.55};
+static float P080[3] = {151.33, -124.15, 993.77};
+static float P081[3] = {150.49, -111.19, 969.86};
+static float P082[3] = {150.79, -92.41, 969.70};
+static float iP002[3] = {0.00, -36.59, 5687.72};
+static float iP004[3] = {58.24, -146.84, 262.35};
+static float iP007[3] = {-46.09, -146.83, 265.84};
+static float iP010[3] = {-27.81, -285.31, 500.00};
+static float iP011[3] = {27.81, -285.32, 500.00};
+static float iP023[3] = {150.00, 0.00, 3000.00};
+static float iP024[3] = {121.35, 293.89, 3000.00};
+static float iP025[3] = {46.35, 502.93, 2883.09};
+static float iP026[3] = {-46.35, 497.45, 2877.24};
+static float iP027[3] = {-121.35, 293.90, 3000.00};
+static float iP028[3] = {-150.00, 0.00, 3000.00};
+static float iP029[3] = {-121.35, -304.84, 2853.86};
+static float iP030[3] = {-46.36, -475.52, 3000.00};
+static float iP031[3] = {46.35, -475.53, 3000.00};
+static float iP032[3] = {121.35, -304.87, 2853.86};
+static float iP033[3] = {90.00, 0.00, 4000.00};
+static float iP034[3] = {72.81, 176.33, 4000.00};
+static float iP035[3] = {27.81, 285.32, 4000.00};
+static float iP036[3] = {-27.81, 285.32, 4000.00};
+static float iP037[3] = {-72.81, 176.34, 4000.00};
+static float iP038[3] = {-90.00, 0.00, 4000.00};
+static float iP039[3] = {-72.81, -176.33, 4000.00};
+static float iP040[3] = {-27.81, -285.31, 4000.00};
+static float iP041[3] = {27.81, -285.32, 4000.00};
+static float iP042[3] = {72.81, -176.34, 4000.00};
+static float iP043[3] = {30.00, 0.00, 5000.00};
+static float iP044[3] = {24.27, 58.78, 5000.00};
+static float iP045[3] = {9.27, 95.11, 5000.00};
+static float iP046[3] = {-9.27, 95.11, 5000.00};
+static float iP047[3] = {-24.27, 58.78, 5000.00};
+static float iP048[3] = {-30.00, 0.00, 5000.00};
+static float iP049[3] = {-24.27, -58.78, 5000.00};
+static float iP050[3] = {-9.27, -95.10, 5000.00};
+static float iP051[3] = {9.27, -95.11, 5000.00};
+static float iP052[3] = {24.27, -58.78, 5000.00};
+static float iP061[3] = {0.00, 1181.61, 6344.65};
+static float iP069[3] = {0.00, -418.25, 5765.04};
+static float iP070[3] = {0.00, 1266.91, 6629.60};
+/* *INDENT-ON* */
+
+void
+Fish001(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N007);
+    glVertex3fv(P007);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N007);
+    glVertex3fv(P007);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P071);
+    glVertex3fv(P072);
+    glVertex3fv(P073);
+    glVertex3fv(P074);
+    glVertex3fv(P075);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P077);
+    glVertex3fv(P078);
+    glVertex3fv(P079);
+    glVertex3fv(P080);
+    glVertex3fv(P081);
+    glVertex3fv(P082);
+    glEnd();
+}
+
+void
+Fish002(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+}
+
+void
+Fish003(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glEnd();
+}
+
+void
+Fish004(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glEnd();
+}
+
+void
+Fish005(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+}
+
+void
+Fish006(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+}
+
+void
+Fish007(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+}
+
+void
+Fish008(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+}
+
+void
+Fish009(void)
+{
+    glBegin(GL_POLYGON);
+    glVertex3fv(P059);
+    glVertex3fv(P012);
+    glVertex3fv(P009);
+    glVertex3fv(P060);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P012);
+    glVertex3fv(P004);
+    glVertex3fv(P007);
+    glVertex3fv(P009);
+    glEnd();
+}
+
+void
+Fish_1(void)
+{
+    Fish004();
+    Fish005();
+    Fish003();
+    Fish007();
+    Fish006();
+    Fish002();
+    Fish008();
+    Fish009();
+    Fish001();
+}
+
+void
+Fish_2(void)
+{
+    Fish005();
+    Fish004();
+    Fish003();
+    Fish008();
+    Fish006();
+    Fish002();
+    Fish007();
+    Fish009();
+    Fish001();
+}
+
+void
+Fish_3(void)
+{
+    Fish005();
+    Fish004();
+    Fish007();
+    Fish003();
+    Fish002();
+    Fish008();
+    Fish009();
+    Fish001();
+    Fish006();
+}
+
+void
+Fish_4(void)
+{
+    Fish005();
+    Fish004();
+    Fish008();
+    Fish003();
+    Fish002();
+    Fish007();
+    Fish009();
+    Fish001();
+    Fish006();
+}
+
+void
+Fish_5(void)
+{
+    Fish009();
+    Fish006();
+    Fish007();
+    Fish001();
+    Fish002();
+    Fish003();
+    Fish008();
+    Fish004();
+    Fish005();
+}
+
+void
+Fish_6(void)
+{
+    Fish009();
+    Fish006();
+    Fish008();
+    Fish001();
+    Fish002();
+    Fish007();
+    Fish003();
+    Fish004();
+    Fish005();
+}
+
+void
+Fish_7(void)
+{
+    Fish009();
+    Fish001();
+    Fish007();
+    Fish005();
+    Fish002();
+    Fish008();
+    Fish003();
+    Fish004();
+    Fish006();
+}
+
+void
+Fish_8(void)
+{
+    Fish009();
+    Fish008();
+    Fish001();
+    Fish002();
+    Fish007();
+    Fish003();
+    Fish005();
+    Fish004();
+    Fish006();
+}
+
+void
+DrawShark(fishRec * fish)
+{
+    float mat[4][4];
+    int n;
+    float seg1, seg2, seg3, seg4, segup;
+    float thrash, chomp;
+
+    fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
+
+    thrash = 50.0 * fish->v;
+
+    seg1 = 0.6 * thrash * sin(fish->htail * RRAD);
+    seg2 = 1.8 * thrash * sin((fish->htail + 45.0) * RRAD);
+    seg3 = 3.0 * thrash * sin((fish->htail + 90.0) * RRAD);
+    seg4 = 4.0 * thrash * sin((fish->htail + 110.0) * RRAD);
+
+    chomp = 0.0;
+    if (fish->v > 2.0) {
+        chomp = -(fish->v - 2.0) * 200.0;
+    }
+    P004[1] = iP004[1] + chomp;
+    P007[1] = iP007[1] + chomp;
+    P010[1] = iP010[1] + chomp;
+    P011[1] = iP011[1] + chomp;
+
+    P023[0] = iP023[0] + seg1;
+    P024[0] = iP024[0] + seg1;
+    P025[0] = iP025[0] + seg1;
+    P026[0] = iP026[0] + seg1;
+    P027[0] = iP027[0] + seg1;
+    P028[0] = iP028[0] + seg1;
+    P029[0] = iP029[0] + seg1;
+    P030[0] = iP030[0] + seg1;
+    P031[0] = iP031[0] + seg1;
+    P032[0] = iP032[0] + seg1;
+    P033[0] = iP033[0] + seg2;
+    P034[0] = iP034[0] + seg2;
+    P035[0] = iP035[0] + seg2;
+    P036[0] = iP036[0] + seg2;
+    P037[0] = iP037[0] + seg2;
+    P038[0] = iP038[0] + seg2;
+    P039[0] = iP039[0] + seg2;
+    P040[0] = iP040[0] + seg2;
+    P041[0] = iP041[0] + seg2;
+    P042[0] = iP042[0] + seg2;
+    P043[0] = iP043[0] + seg3;
+    P044[0] = iP044[0] + seg3;
+    P045[0] = iP045[0] + seg3;
+    P046[0] = iP046[0] + seg3;
+    P047[0] = iP047[0] + seg3;
+    P048[0] = iP048[0] + seg3;
+    P049[0] = iP049[0] + seg3;
+    P050[0] = iP050[0] + seg3;
+    P051[0] = iP051[0] + seg3;
+    P052[0] = iP052[0] + seg3;
+    P002[0] = iP002[0] + seg4;
+    P061[0] = iP061[0] + seg4;
+    P069[0] = iP069[0] + seg4;
+    P070[0] = iP070[0] + seg4;
+
+    fish->vtail += ((fish->dtheta - fish->vtail) * 0.1);
+
+    if (fish->vtail > 0.5) {
+        fish->vtail = 0.5;
+    } else if (fish->vtail < -0.5) {
+        fish->vtail = -0.5;
+    }
+    segup = thrash * fish->vtail;
+
+    P023[1] = iP023[1] + segup;
+    P024[1] = iP024[1] + segup;
+    P025[1] = iP025[1] + segup;
+    P026[1] = iP026[1] + segup;
+    P027[1] = iP027[1] + segup;
+    P028[1] = iP028[1] + segup;
+    P029[1] = iP029[1] + segup;
+    P030[1] = iP030[1] + segup;
+    P031[1] = iP031[1] + segup;
+    P032[1] = iP032[1] + segup;
+    P033[1] = iP033[1] + segup * 5.0;
+    P034[1] = iP034[1] + segup * 5.0;
+    P035[1] = iP035[1] + segup * 5.0;
+    P036[1] = iP036[1] + segup * 5.0;
+    P037[1] = iP037[1] + segup * 5.0;
+    P038[1] = iP038[1] + segup * 5.0;
+    P039[1] = iP039[1] + segup * 5.0;
+    P040[1] = iP040[1] + segup * 5.0;
+    P041[1] = iP041[1] + segup * 5.0;
+    P042[1] = iP042[1] + segup * 5.0;
+    P043[1] = iP043[1] + segup * 12.0;
+    P044[1] = iP044[1] + segup * 12.0;
+    P045[1] = iP045[1] + segup * 12.0;
+    P046[1] = iP046[1] + segup * 12.0;
+    P047[1] = iP047[1] + segup * 12.0;
+    P048[1] = iP048[1] + segup * 12.0;
+    P049[1] = iP049[1] + segup * 12.0;
+    P050[1] = iP050[1] + segup * 12.0;
+    P051[1] = iP051[1] + segup * 12.0;
+    P052[1] = iP052[1] + segup * 12.0;
+    P002[1] = iP002[1] + segup * 17.0;
+    P061[1] = iP061[1] + segup * 17.0;
+    P069[1] = iP069[1] + segup * 17.0;
+    P070[1] = iP070[1] + segup * 17.0;
+
+    glPushMatrix();
+
+    glTranslatef(0.0, 0.0, -3000.0);
+
+    glGetFloatv(GL_MODELVIEW_MATRIX, &mat[0][0]);
+    n = 0;
+    if (mat[0][2] >= 0.0) {
+        n += 1;
+    }
+    if (mat[1][2] >= 0.0) {
+        n += 2;
+    }
+    if (mat[2][2] >= 0.0) {
+        n += 4;
+    }
+    glScalef(2.0, 1.0, 1.0);
+
+    glEnable(GL_CULL_FACE);
+    switch (n) {
+    case 0:
+        Fish_1();
+        break;
+    case 1:
+        Fish_2();
+        break;
+    case 2:
+        Fish_3();
+        break;
+    case 3:
+        Fish_4();
+        break;
+    case 4:
+        Fish_5();
+        break;
+    case 5:
+        Fish_6();
+        break;
+    case 6:
+        Fish_7();
+        break;
+    case 7:
+        Fish_8();
+        break;
+    }
+    glDisable(GL_CULL_FACE);
+
+    glPopMatrix();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/swim.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,188 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <math.h>
+#include <stdlib.h>  /* For rand(). */
+#include <GLUT/glut.h>
+#include "atlantis.h"
+
+void
+FishTransform(fishRec * fish)
+{
+
+    glTranslatef(fish->y, fish->z, -fish->x);
+    glRotatef(-fish->psi, 0.0, 1.0, 0.0);
+    glRotatef(fish->theta, 1.0, 0.0, 0.0);
+    glRotatef(-fish->phi, 0.0, 0.0, 1.0);
+}
+
+void
+WhalePilot(fishRec * fish)
+{
+
+    fish->phi = -20.0;
+    fish->theta = 0.0;
+    fish->psi -= 0.5;
+
+    fish->x += WHALESPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
+    fish->y += WHALESPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
+    fish->z += WHALESPEED * fish->v * sin(fish->theta / RAD);
+}
+
+void
+SharkPilot(fishRec * fish)
+{
+    static int sign = 1;
+    float X, Y, Z, tpsi, ttheta, thetal;
+
+    fish->xt = 60000.0;
+    fish->yt = 0.0;
+    fish->zt = 0.0;
+
+    X = fish->xt - fish->x;
+    Y = fish->yt - fish->y;
+    Z = fish->zt - fish->z;
+
+    thetal = fish->theta;
+
+    ttheta = RAD * atan(Z / (sqrt(X * X + Y * Y)));
+
+    if (ttheta > fish->theta + 0.25) {
+        fish->theta += 0.5;
+    } else if (ttheta < fish->theta - 0.25) {
+        fish->theta -= 0.5;
+    }
+    if (fish->theta > 90.0) {
+        fish->theta = 90.0;
+    }
+    if (fish->theta < -90.0) {
+        fish->theta = -90.0;
+    }
+    fish->dtheta = fish->theta - thetal;
+
+    tpsi = RAD * atan2(Y, X);
+
+    fish->attack = 0;
+
+    if (fabs(tpsi - fish->psi) < 10.0) {
+        fish->attack = 1;
+    } else if (fabs(tpsi - fish->psi) < 45.0) {
+        if (fish->psi > tpsi) {
+            fish->psi -= 0.5;
+            if (fish->psi < -180.0) {
+                fish->psi += 360.0;
+            }
+        } else if (fish->psi < tpsi) {
+            fish->psi += 0.5;
+            if (fish->psi > 180.0) {
+                fish->psi -= 360.0;
+            }
+        }
+    } else {
+        if (rand() % 100 > 98) {
+            sign = 1 - sign;
+        }
+        fish->psi += sign;
+        if (fish->psi > 180.0) {
+            fish->psi -= 360.0;
+        }
+        if (fish->psi < -180.0) {
+            fish->psi += 360.0;
+        }
+    }
+
+    if (fish->attack) {
+        if (fish->v < 1.1) {
+            fish->spurt = 1;
+        }
+        if (fish->spurt) {
+            fish->v += 0.2;
+        }
+        if (fish->v > 5.0) {
+            fish->spurt = 0;
+        }
+        if ((fish->v > 1.0) && (!fish->spurt)) {
+            fish->v -= 0.2;
+        }
+    } else {
+        if (!(rand() % 400) && (!fish->spurt)) {
+            fish->spurt = 1;
+        }
+        if (fish->spurt) {
+            fish->v += 0.05;
+        }
+        if (fish->v > 3.0) {
+            fish->spurt = 0;
+        }
+        if ((fish->v > 1.0) && (!fish->spurt)) {
+            fish->v -= 0.05;
+        }
+    }
+
+    fish->x += SHARKSPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
+    fish->y += SHARKSPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
+    fish->z += SHARKSPEED * fish->v * sin(fish->theta / RAD);
+}
+
+void
+SharkMiss(int i)
+{
+    int j;
+    float avoid, thetal;
+    float X, Y, Z, R;
+
+    for (j = 0; j < NUM_SHARKS; j++) {
+        if (j != i) {
+            X = sharks[j].x - sharks[i].x;
+            Y = sharks[j].y - sharks[i].y;
+            Z = sharks[j].z - sharks[i].z;
+
+            R = sqrt(X * X + Y * Y + Z * Z);
+
+            avoid = 1.0;
+            thetal = sharks[i].theta;
+
+            if (R < SHARKSIZE) {
+                if (Z > 0.0) {
+                    sharks[i].theta -= avoid;
+                } else {
+                    sharks[i].theta += avoid;
+                }
+            }
+            sharks[i].dtheta += (sharks[i].theta - thetal);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac OpenGL Application.xctemplate/atlantis/whale.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,1798 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <GLUT/glut.h>
+#include <math.h>
+#include "atlantis.h"
+/* *INDENT-OFF* */
+static float N001[3] = {0.019249 ,0.011340 ,-0.999750};
+static float N002[3] = {-0.132579 ,0.954547 ,0.266952};
+static float N003[3] = {-0.196061 ,0.980392 ,-0.019778};
+static float N004[3] = {0.695461 ,0.604704 ,0.388158};
+static float N005[3] = {0.870600 ,0.425754 ,0.246557};
+static float N006[3] = {-0.881191 ,0.392012 ,0.264251};
+static float N008[3] = {-0.341437 ,0.887477 ,0.309523};
+static float N009[3] = {0.124035 ,-0.992278 ,0.000000};
+static float N010[3] = {0.242536 ,0.000000 ,-0.970143};
+static float N011[3] = {0.588172 ,0.000000 ,0.808736};
+static float N012[3] = {0.929824 ,-0.340623 ,-0.139298};
+static float N013[3] = {0.954183 ,0.267108 ,-0.134865};
+static float N014[3] = {0.495127 ,0.855436 ,-0.151914};
+static float N015[3] = {-0.390199 ,0.906569 ,-0.160867};
+static float N016[3] = {-0.923605 ,0.354581 ,-0.145692};
+static float N017[3] = {-0.955796 ,-0.260667 ,-0.136036};
+static float N018[3] = {-0.501283 ,-0.853462 ,-0.142540};
+static float N019[3] = {0.405300 ,-0.901974 ,-0.148913};
+static float N020[3] = {0.909913 ,-0.392746 ,-0.133451};
+static float N021[3] = {0.936494 ,0.331147 ,-0.115414};
+static float N022[3] = {0.600131 ,0.793724 ,-0.099222};
+static float N023[3] = {-0.231556 ,0.968361 ,-0.093053};
+static float N024[3] = {-0.844369 ,0.525330 ,-0.105211};
+static float N025[3] = {-0.982725 ,-0.136329 ,-0.125164};
+static float N026[3] = {-0.560844 ,-0.822654 ,-0.093241};
+static float N027[3] = {0.263884 ,-0.959981 ,-0.093817};
+static float N028[3] = {0.842057 ,-0.525192 ,-0.122938};
+static float N029[3] = {0.921620 ,0.367565 ,-0.124546};
+static float N030[3] = {0.613927 ,0.784109 ,-0.090918};
+static float N031[3] = {-0.448754 ,0.888261 ,-0.098037};
+static float N032[3] = {-0.891865 ,0.434376 ,-0.126077};
+static float N033[3] = {-0.881447 ,-0.448017 ,-0.149437};
+static float N034[3] = {-0.345647 ,-0.922057 ,-0.174183};
+static float N035[3] = {0.307998 ,-0.941371 ,-0.137688};
+static float N036[3] = {0.806316 ,-0.574647 ,-0.140124};
+static float N037[3] = {0.961346 ,0.233646 ,-0.145681};
+static float N038[3] = {0.488451 ,0.865586 ,-0.110351};
+static float N039[3] = {-0.374290 ,0.921953 ,-0.099553};
+static float N040[3] = {-0.928504 ,0.344533 ,-0.138485};
+static float N041[3] = {-0.918419 ,-0.371792 ,-0.135189};
+static float N042[3] = {-0.520666 ,-0.833704 ,-0.183968};
+static float N043[3] = {0.339204 ,-0.920273 ,-0.195036};
+static float N044[3] = {0.921475 ,-0.387382 ,-0.028636};
+static float N045[3] = {0.842465 ,0.533335 ,-0.076204};
+static float N046[3] = {0.380110 ,0.924939 ,0.002073};
+static float N047[3] = {-0.276128 ,0.961073 ,-0.009579};
+static float N048[3] = {-0.879684 ,0.473001 ,-0.049250};
+static float N049[3] = {-0.947184 ,-0.317614 ,-0.044321};
+static float N050[3] = {-0.642059 ,-0.764933 ,-0.051363};
+static float N051[3] = {0.466794 ,-0.880921 ,-0.077990};
+static float N052[3] = {0.898509 ,-0.432277 ,0.076279};
+static float N053[3] = {0.938985 ,0.328141 ,0.103109};
+static float N054[3] = {0.442420 ,0.895745 ,0.043647};
+static float N055[3] = {-0.255163 ,0.966723 ,0.018407};
+static float N056[3] = {-0.833769 ,0.540650 ,0.111924};
+static float N057[3] = {-0.953653 ,-0.289939 ,0.080507};
+static float N058[3] = {-0.672357 ,-0.730524 ,0.119461};
+static float N059[3] = {0.522249 ,-0.846652 ,0.102157};
+static float N060[3] = {0.885868 ,-0.427631 ,0.179914};
+static float N062[3] = {0.648942 ,0.743116 ,0.163255};
+static float N063[3] = {-0.578967 ,0.807730 ,0.111219};
+static float N065[3] = {-0.909864 ,-0.352202 ,0.219321};
+static float N066[3] = {-0.502541 ,-0.818090 ,0.279610};
+static float N067[3] = {0.322919 ,-0.915358 ,0.240504};
+static float N068[3] = {0.242536 ,0.000000 ,-0.970143};
+static float N069[3] = {0.000000 ,1.000000 ,0.000000};
+static float N070[3] = {0.000000 ,1.000000 ,0.000000};
+static float N071[3] = {0.000000 ,1.000000 ,0.000000};
+static float N072[3] = {0.000000 ,1.000000 ,0.000000};
+static float N073[3] = {0.000000 ,1.000000 ,0.000000};
+static float N074[3] = {0.000000 ,1.000000 ,0.000000};
+static float N075[3] = {0.031220 ,0.999025 ,-0.031220};
+static float N076[3] = {0.000000 ,1.000000 ,0.000000};
+static float N077[3] = {0.446821 ,0.893642 ,0.041889};
+static float N078[3] = {0.863035 ,-0.100980 ,0.494949};
+static float N079[3] = {0.585597 ,-0.808215 ,0.062174};
+static float N080[3] = {0.000000 ,1.000000 ,0.000000};
+static float N081[3] = {1.000000 ,0.000000 ,0.000000};
+static float N082[3] = {0.000000 ,1.000000 ,0.000000};
+static float N083[3] = {-1.000000 ,0.000000 ,0.000000};
+static float N084[3] = {-0.478893 ,0.837129 ,-0.264343};
+static float N085[3] = {0.000000 ,1.000000 ,0.000000};
+static float N086[3] = {0.763909 ,0.539455 ,-0.354163};
+static float N087[3] = {0.446821 ,0.893642 ,0.041889};
+static float N088[3] = {0.385134 ,-0.908288 ,0.163352};
+static float N089[3] = {-0.605952 ,0.779253 ,-0.159961};
+static float N090[3] = {0.000000 ,1.000000 ,0.000000};
+static float N091[3] = {0.000000 ,1.000000 ,0.000000};
+static float N092[3] = {0.000000 ,1.000000 ,0.000000};
+static float N093[3] = {0.000000 ,1.000000 ,0.000000};
+static float N094[3] = {1.000000 ,0.000000 ,0.000000};
+static float N095[3] = {-1.000000 ,0.000000 ,0.000000};
+static float N096[3] = {0.644444 ,-0.621516 ,0.445433};
+static float N097[3] = {-0.760896 ,-0.474416 ,0.442681};
+static float N098[3] = {0.636888 ,-0.464314 ,0.615456};
+static float N099[3] = {-0.710295 ,0.647038 ,0.277168};
+static float N100[3] = {0.009604 ,0.993655 ,0.112063};
+static float iP001[3] = {18.74, 13.19, 3.76};
+static float P001[3] = {18.74, 13.19, 3.76};
+static float P002[3] = {0.00, 390.42, 10292.57};
+static float P003[3] = {55.80, 622.31, 8254.35};
+static float P004[3] = {20.80, 247.66, 10652.13};
+static float P005[3] = {487.51, 198.05, 9350.78};
+static float P006[3] = {-457.61, 199.04, 9353.01};
+static float P008[3] = {-34.67, 247.64, 10663.71};
+static float iP009[3] = {97.46, 67.63, 593.82};
+static float iP010[3] = {-84.33, 67.63, 588.18};
+static float iP011[3] = {118.69, 8.98, -66.91};
+static float P009[3] = {97.46, 67.63, 593.82};
+static float P010[3] = {-84.33, 67.63, 588.18};
+static float P011[3] = {118.69, 8.98, -66.91};
+static float iP012[3] = {156.48, -31.95, 924.54};
+static float iP013[3] = {162.00, 110.22, 924.54};
+static float iP014[3] = {88.16, 221.65, 924.54};
+static float iP015[3] = {-65.21, 231.16, 924.54};
+static float iP016[3] = {-156.48, 121.97, 924.54};
+static float iP017[3] = {-162.00, -23.93, 924.54};
+static float iP018[3] = {-88.16, -139.10, 924.54};
+static float iP019[3] = {65.21, -148.61, 924.54};
+static float iP020[3] = {246.87, -98.73, 1783.04};
+static float iP021[3] = {253.17, 127.76, 1783.04};
+static float iP022[3] = {132.34, 270.77, 1783.04};
+static float iP023[3] = {-97.88, 285.04, 1783.04};
+static float iP024[3] = {-222.97, 139.80, 1783.04};
+static float iP025[3] = {-225.29, -86.68, 1783.04};
+static float iP026[3] = {-108.44, -224.15, 1783.04};
+static float iP027[3] = {97.88, -221.56, 1783.04};
+static float iP028[3] = {410.55, -200.66, 3213.87};
+static float iP029[3] = {432.19, 148.42, 3213.87};
+static float iP030[3] = {200.66, 410.55, 3213.87};
+static float iP031[3] = {-148.42, 432.19, 3213.87};
+static float iP032[3] = {-407.48, 171.88, 3213.87};
+static float iP033[3] = {-432.19, -148.42, 3213.87};
+static float iP034[3] = {-148.88, -309.74, 3213.87};
+static float iP035[3] = {156.38, -320.17, 3213.87};
+static float iP036[3] = {523.39, -303.81, 4424.57};
+static float iP037[3] = {574.66, 276.84, 4424.57};
+static float iP038[3] = {243.05, 492.50, 4424.57};
+static float iP039[3] = {-191.23, 520.13, 4424.57};
+static float iP040[3] = {-523.39, 304.01, 4424.57};
+static float iP041[3] = {-574.66, -231.83, 4424.57};
+static float iP042[3] = {-266.95, -578.17, 4424.57};
+static float iP043[3] = {211.14, -579.67, 4424.57};
+static float iP044[3] = {680.57, -370.27, 5943.46};
+static float iP045[3] = {834.01, 363.09, 5943.46};
+static float iP046[3] = {371.29, 614.13, 5943.46};
+static float iP047[3] = {-291.43, 621.86, 5943.46};
+static float iP048[3] = {-784.13, 362.60, 5943.46};
+static float iP049[3] = {-743.29, -325.82, 5943.46};
+static float iP050[3] = {-383.24, -804.77, 5943.46};
+static float iP051[3] = {283.47, -846.09, 5943.46};
+static float P012[3] = {156.48, -31.95, 924.54};
+static float P013[3] = {162.00, 110.22, 924.54};
+static float P014[3] = {88.16, 221.65, 924.54};
+static float P015[3] = {-65.21, 231.16, 924.54};
+static float P016[3] = {-156.48, 121.97, 924.54};
+static float P017[3] = {-162.00, -23.93, 924.54};
+static float P018[3] = {-88.16, -139.10, 924.54};
+static float P019[3] = {65.21, -148.61, 924.54};
+static float P020[3] = {246.87, -98.73, 1783.04};
+static float P021[3] = {253.17, 127.76, 1783.04};
+static float P022[3] = {132.34, 270.77, 1783.04};
+static float P023[3] = {-97.88, 285.04, 1783.04};
+static float P024[3] = {-222.97, 139.80, 1783.04};
+static float P025[3] = {-225.29, -86.68, 1783.04};
+static float P026[3] = {-108.44, -224.15, 1783.04};
+static float P027[3] = {97.88, -221.56, 1783.04};
+static float P028[3] = {410.55, -200.66, 3213.87};
+static float P029[3] = {432.19, 148.42, 3213.87};
+static float P030[3] = {200.66, 410.55, 3213.87};
+static float P031[3] = {-148.42, 432.19, 3213.87};
+static float P032[3] = {-407.48, 171.88, 3213.87};
+static float P033[3] = {-432.19, -148.42, 3213.87};
+static float P034[3] = {-148.88, -309.74, 3213.87};
+static float P035[3] = {156.38, -320.17, 3213.87};
+static float P036[3] = {523.39, -303.81, 4424.57};
+static float P037[3] = {574.66, 276.84, 4424.57};
+static float P038[3] = {243.05, 492.50, 4424.57};
+static float P039[3] = {-191.23, 520.13, 4424.57};
+static float P040[3] = {-523.39, 304.01, 4424.57};
+static float P041[3] = {-574.66, -231.83, 4424.57};
+static float P042[3] = {-266.95, -578.17, 4424.57};
+static float P043[3] = {211.14, -579.67, 4424.57};
+static float P044[3] = {680.57, -370.27, 5943.46};
+static float P045[3] = {834.01, 363.09, 5943.46};
+static float P046[3] = {371.29, 614.13, 5943.46};
+static float P047[3] = {-291.43, 621.86, 5943.46};
+static float P048[3] = {-784.13, 362.60, 5943.46};
+static float P049[3] = {-743.29, -325.82, 5943.46};
+static float P050[3] = {-383.24, -804.77, 5943.46};
+static float P051[3] = {283.47, -846.09, 5943.46};
+static float P052[3] = {599.09, -332.24, 7902.59};
+static float P053[3] = {735.48, 306.26, 7911.92};
+static float P054[3] = {321.55, 558.53, 7902.59};
+static float P055[3] = {-260.54, 559.84, 7902.59};
+static float P056[3] = {-698.66, 320.83, 7902.59};
+static float P057[3] = {-643.29, -299.16, 7902.59};
+static float P058[3] = {-341.47, -719.30, 7902.59};
+static float P059[3] = {252.57, -756.12, 7902.59};
+static float P060[3] = {458.39, -265.31, 9355.44};
+static float P062[3] = {224.04, 438.98, 9364.77};
+static float P063[3] = {-165.71, 441.27, 9355.44};
+static float P065[3] = {-473.99, -219.71, 9355.44};
+static float P066[3] = {-211.97, -479.87, 9355.44};
+static float P067[3] = {192.86, -504.03, 9355.44};
+static float iP068[3] = {-112.44, 9.25, -64.42};
+static float iP069[3] = {1155.63, 0.00, -182.46};
+static float iP070[3] = {-1143.13, 0.00, -181.54};
+static float iP071[3] = {1424.23, 0.00, -322.09};
+static float iP072[3] = {-1368.01, 0.00, -310.38};
+static float iP073[3] = {1255.57, 2.31, 114.05};
+static float iP074[3] = {-1149.38, 0.00, 117.12};
+static float iP075[3] = {718.36, 0.00, 433.36};
+static float iP076[3] = {-655.90, 0.00, 433.36};
+static float P068[3] = {-112.44, 9.25, -64.42};
+static float P069[3] = {1155.63, 0.00, -182.46};
+static float P070[3] = {-1143.13, 0.00, -181.54};
+static float P071[3] = {1424.23, 0.00, -322.09};
+static float P072[3] = {-1368.01, 0.00, -310.38};
+static float P073[3] = {1255.57, 2.31, 114.05};
+static float P074[3] = {-1149.38, 0.00, 117.12};
+static float P075[3] = {718.36, 0.00, 433.36};
+static float P076[3] = {-655.90, 0.00, 433.36};
+static float P077[3] = {1058.00, -2.66, 7923.51};
+static float P078[3] = {-1016.51, -15.47, 7902.87};
+static float P079[3] = {-1363.99, -484.50, 7593.38};
+static float P080[3] = {1478.09, -861.47, 7098.12};
+static float P081[3] = {1338.06, -284.68, 7024.15};
+static float P082[3] = {-1545.51, -860.64, 7106.60};
+static float P083[3] = {1063.19, -70.46, 7466.60};
+static float P084[3] = {-1369.18, -288.11, 7015.34};
+static float P085[3] = {1348.44, -482.50, 7591.41};
+static float P086[3] = {-1015.45, -96.80, 7474.86};
+static float P087[3] = {731.04, 148.38, 7682.58};
+static float P088[3] = {-697.03, 151.82, 7668.81};
+static float P089[3] = {-686.82, 157.09, 7922.29};
+static float P090[3] = {724.73, 147.75, 7931.39};
+static float iP091[3] = {0.00, 327.10, 2346.55};
+static float iP092[3] = {0.00, 552.28, 2311.31};
+static float iP093[3] = {0.00, 721.16, 2166.41};
+static float iP094[3] = {0.00, 693.42, 2388.80};
+static float iP095[3] = {0.00, 389.44, 2859.97};
+static float P091[3] = {0.00, 327.10, 2346.55};
+static float P092[3] = {0.00, 552.28, 2311.31};
+static float P093[3] = {0.00, 721.16, 2166.41};
+static float P094[3] = {0.00, 693.42, 2388.80};
+static float P095[3] = {0.00, 389.44, 2859.97};
+static float iP096[3] = {222.02, -183.67, 10266.89};
+static float iP097[3] = {-128.90, -182.70, 10266.89};
+static float iP098[3] = {41.04, 88.31, 10659.36};
+static float iP099[3] = {-48.73, 88.30, 10659.36};
+static float P096[3] = {222.02, -183.67, 10266.89};
+static float P097[3] = {-128.90, -182.70, 10266.89};
+static float P098[3] = {41.04, 88.31, 10659.36};
+static float P099[3] = {-48.73, 88.30, 10659.36};
+static float P100[3] = {0.00, 603.42, 9340.68};
+static float P104[3] = {-9.86, 567.62, 7858.65};
+static float P105[3] = {31.96, 565.27, 7908.46};
+static float P106[3] = {22.75, 568.13, 7782.83};
+static float P107[3] = {58.93, 568.42, 7775.94};
+static float P108[3] = {55.91, 565.59, 7905.86};
+static float P109[3] = {99.21, 566.00, 7858.65};
+static float P110[3] = {-498.83, 148.14, 9135.10};
+static float P111[3] = {-495.46, 133.24, 9158.48};
+static float P112[3] = {-490.82, 146.23, 9182.76};
+static float P113[3] = {-489.55, 174.11, 9183.66};
+static float P114[3] = {-492.92, 189.00, 9160.28};
+static float P115[3] = {-497.56, 176.02, 9136.00};
+static float P116[3] = {526.54, 169.68, 9137.70};
+static float P117[3] = {523.49, 184.85, 9161.42};
+static float P118[3] = {518.56, 171.78, 9186.06};
+static float P119[3] = {516.68, 143.53, 9186.98};
+static float P120[3] = {519.73, 128.36, 9163.26};
+static float P121[3] = {524.66, 141.43, 9138.62};
+/* *INDENT-ON* */
+
+void
+Whale001(void)
+{
+
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N074);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N072);
+    glVertex3fv(P072);
+    glNormal3fv(N074);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N072);
+    glVertex3fv(P072);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N074);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N074);
+    glVertex3fv(P074);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glEnd();
+}
+
+void
+Whale002(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glNormal3fv(N073);
+    glVertex3fv(P073);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N071);
+    glVertex3fv(P071);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N073);
+    glVertex3fv(P073);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N073);
+    glVertex3fv(P073);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N071);
+    glVertex3fv(P071);
+    glNormal3fv(N073);
+    glVertex3fv(P073);
+    glEnd();
+}
+
+void
+Whale003(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glEnd();
+}
+
+void
+Whale004(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glEnd();
+}
+
+void
+Whale005(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+}
+
+void
+Whale006(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N093);
+    glVertex3fv(P093);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N093);
+    glVertex3fv(P093);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glEnd();
+}
+
+void
+Whale007(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+}
+
+void
+Whale008(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glEnd();
+}
+
+void
+Whale009(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+}
+
+void
+Whale010(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N080);
+    glVertex3fv(P080);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N090);
+    glVertex3fv(P090);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N080);
+    glVertex3fv(P080);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glNormal3fv(N090);
+    glVertex3fv(P090);
+    glEnd();
+}
+
+void
+Whale011(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N082);
+    glVertex3fv(P082);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N082);
+    glVertex3fv(P082);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+}
+
+void
+Whale012(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+}
+
+void
+Whale013(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P005);
+    glVertex3fv(P006);
+    glVertex3fv(P099);
+    glVertex3fv(P098);
+    glEnd();
+}
+
+void
+Whale014(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P006);
+    glVertex3fv(P005);
+    glVertex3fv(P004);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glEnd();
+}
+
+void
+Whale015(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glEnd();
+}
+
+void
+Whale016(void)
+{
+    glBegin(GL_POLYGON);
+    glVertex3fv(P104);
+    glVertex3fv(P105);
+    glVertex3fv(P106);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P107);
+    glVertex3fv(P108);
+    glVertex3fv(P109);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P110);
+    glVertex3fv(P111);
+    glVertex3fv(P112);
+    glVertex3fv(P113);
+    glVertex3fv(P114);
+    glVertex3fv(P115);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P116);
+    glVertex3fv(P117);
+    glVertex3fv(P118);
+    glVertex3fv(P119);
+    glVertex3fv(P120);
+    glVertex3fv(P121);
+    glEnd();
+}
+
+void
+DrawWhale(fishRec * fish)
+{
+    float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7;
+    float pitch, thrash, chomp;
+
+    fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
+
+    thrash = 70.0 * fish->v;
+
+    seg0 = 1.5 * thrash * sin((fish->htail) * RRAD);
+    seg1 = 2.5 * thrash * sin((fish->htail + 10.0) * RRAD);
+    seg2 = 3.7 * thrash * sin((fish->htail + 15.0) * RRAD);
+    seg3 = 4.8 * thrash * sin((fish->htail + 23.0) * RRAD);
+    seg4 = 6.0 * thrash * sin((fish->htail + 28.0) * RRAD);
+    seg5 = 6.5 * thrash * sin((fish->htail + 35.0) * RRAD);
+    seg6 = 6.5 * thrash * sin((fish->htail + 40.0) * RRAD);
+    seg7 = 6.5 * thrash * sin((fish->htail + 55.0) * RRAD);
+
+    pitch = fish->v * sin((fish->htail - 160.0) * RRAD);
+
+    chomp = 0.0;
+    if (fish->v > 2.0) {
+        chomp = -(fish->v - 2.0) * 200.0;
+    }
+    P012[1] = iP012[1] + seg5;
+    P013[1] = iP013[1] + seg5;
+    P014[1] = iP014[1] + seg5;
+    P015[1] = iP015[1] + seg5;
+    P016[1] = iP016[1] + seg5;
+    P017[1] = iP017[1] + seg5;
+    P018[1] = iP018[1] + seg5;
+    P019[1] = iP019[1] + seg5;
+
+    P020[1] = iP020[1] + seg4;
+    P021[1] = iP021[1] + seg4;
+    P022[1] = iP022[1] + seg4;
+    P023[1] = iP023[1] + seg4;
+    P024[1] = iP024[1] + seg4;
+    P025[1] = iP025[1] + seg4;
+    P026[1] = iP026[1] + seg4;
+    P027[1] = iP027[1] + seg4;
+
+    P028[1] = iP028[1] + seg2;
+    P029[1] = iP029[1] + seg2;
+    P030[1] = iP030[1] + seg2;
+    P031[1] = iP031[1] + seg2;
+    P032[1] = iP032[1] + seg2;
+    P033[1] = iP033[1] + seg2;
+    P034[1] = iP034[1] + seg2;
+    P035[1] = iP035[1] + seg2;
+
+    P036[1] = iP036[1] + seg1;
+    P037[1] = iP037[1] + seg1;
+    P038[1] = iP038[1] + seg1;
+    P039[1] = iP039[1] + seg1;
+    P040[1] = iP040[1] + seg1;
+    P041[1] = iP041[1] + seg1;
+    P042[1] = iP042[1] + seg1;
+    P043[1] = iP043[1] + seg1;
+
+    P044[1] = iP044[1] + seg0;
+    P045[1] = iP045[1] + seg0;
+    P046[1] = iP046[1] + seg0;
+    P047[1] = iP047[1] + seg0;
+    P048[1] = iP048[1] + seg0;
+    P049[1] = iP049[1] + seg0;
+    P050[1] = iP050[1] + seg0;
+    P051[1] = iP051[1] + seg0;
+
+    P009[1] = iP009[1] + seg6;
+    P010[1] = iP010[1] + seg6;
+    P075[1] = iP075[1] + seg6;
+    P076[1] = iP076[1] + seg6;
+
+    P001[1] = iP001[1] + seg7;
+    P011[1] = iP011[1] + seg7;
+    P068[1] = iP068[1] + seg7;
+    P069[1] = iP069[1] + seg7;
+    P070[1] = iP070[1] + seg7;
+    P071[1] = iP071[1] + seg7;
+    P072[1] = iP072[1] + seg7;
+    P073[1] = iP073[1] + seg7;
+    P074[1] = iP074[1] + seg7;
+
+    P091[1] = iP091[1] + seg3 * 1.1;
+    P092[1] = iP092[1] + seg3;
+    P093[1] = iP093[1] + seg3;
+    P094[1] = iP094[1] + seg3;
+    P095[1] = iP095[1] + seg3 * 0.9;
+
+    P099[1] = iP099[1] + chomp;
+    P098[1] = iP098[1] + chomp;
+    P097[1] = iP097[1] + chomp;
+    P096[1] = iP096[1] + chomp;
+
+    glPushMatrix();
+
+    glRotatef(pitch, 1.0, 0.0, 0.0);
+
+    glTranslatef(0.0, 0.0, 8000.0);
+
+    glRotatef(180.0, 0.0, 1.0, 0.0);
+
+    glScalef(3.0, 3.0, 3.0);
+
+    glEnable(GL_CULL_FACE);
+
+    Whale001();
+    Whale002();
+    Whale003();
+    Whale004();
+    Whale005();
+    Whale006();
+    Whale007();
+    Whale008();
+    Whale009();
+    Whale010();
+    Whale011();
+    Whale012();
+    Whale013();
+    Whale014();
+    Whale015();
+    Whale016();
+
+    glDisable(GL_CULL_FACE);
+
+    glPopMatrix();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.2 Mac OpenGL Application.xctemplate/main.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,179 @@
+
+/* Simple program:  Create a blank window, wait for keypress, quit.
+
+   Please see the SDL documentation for details on using the SDL API:
+   /Developer/Documentation/SDL/docs.html
+*/
+   
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "SDL.h"
+
+extern void Atlantis_Init ();
+extern void Atlantis_Reshape (int w, int h);
+extern void Atlantis_Animate ();
+extern void Atlantis_Display ();
+
+static SDL_Surface *gScreen;
+
+static void initAttributes ()
+{
+    // Setup attributes we want for the OpenGL context
+    
+    int value;
+    
+    // Don't set color bit sizes (SDL_GL_RED_SIZE, etc)
+    //    Mac OS X will always use 8-8-8-8 ARGB for 32-bit screens and
+    //    5-5-5 RGB for 16-bit screens
+    
+    // Request a 16-bit depth buffer (without this, there is no depth buffer)
+    value = 16;
+    SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, value);
+    
+    
+    // Request double-buffered OpenGL
+    //     The fact that windows are double-buffered on Mac OS X has no effect
+    //     on OpenGL double buffering.
+    value = 1;
+    SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, value);
+}
+
+static void printAttributes ()
+{
+    // Print out attributes of the context we created
+    int nAttr;
+    int i;
+    
+    int  attr[] = { SDL_GL_RED_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_GREEN_SIZE,
+                    SDL_GL_ALPHA_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_DEPTH_SIZE };
+                    
+    char *desc[] = { "Red size: %d bits\n", "Blue size: %d bits\n", "Green size: %d bits\n",
+                     "Alpha size: %d bits\n", "Color buffer size: %d bits\n", 
+                     "Depth bufer size: %d bits\n" };
+
+    nAttr = sizeof(attr) / sizeof(int);
+    
+    for (i = 0; i < nAttr; i++) {
+    
+        int value;
+        SDL_GL_GetAttribute (attr[i], &value);
+        printf (desc[i], value);
+    } 
+}
+
+static void createSurface (int fullscreen)
+{
+    Uint32 flags = 0;
+    
+    flags = SDL_OPENGL;
+    if (fullscreen)
+        flags |= SDL_FULLSCREEN;
+    
+    // Create window
+    gScreen = SDL_SetVideoMode (640, 480, 0, flags);
+    if (gScreen == NULL) {
+        
+        fprintf (stderr, "Couldn't set 640x480 OpenGL video mode: %s\n",
+                 SDL_GetError());
+        SDL_Quit();
+        exit(2);
+    }
+}
+
+static void initGL ()
+{
+    Atlantis_Init ();
+    Atlantis_Reshape (gScreen->w, gScreen->h);
+}
+
+static void drawGL ()
+{
+    Atlantis_Animate ();
+    Atlantis_Display ();
+}
+
+static void mainLoop ()
+{
+    SDL_Event event;
+    int done = 0;
+    int fps = 24;
+    int delay = 1000/fps;
+    int thenTicks = -1;
+    int nowTicks;
+    
+    while ( !done ) {
+
+        /* Check for events */
+        while ( SDL_PollEvent (&event) ) {
+            switch (event.type) {
+
+                case SDL_MOUSEMOTION:
+                    break;
+                case SDL_MOUSEBUTTONDOWN:
+                    break;
+                case SDL_KEYDOWN:
+                    /* Any keypress quits the app... */
+                case SDL_QUIT:
+                    done = 1;
+                    break;
+                default:
+                    break;
+            }
+        }
+    
+        // Draw at 24 hz
+        //     This approach is not normally recommended - it is better to
+        //     use time-based animation and run as fast as possible
+        drawGL ();
+        SDL_GL_SwapBuffers ();
+
+        // Time how long each draw-swap-delay cycle takes
+        // and adjust delay to get closer to target framerate
+        if (thenTicks > 0) {
+            nowTicks = SDL_GetTicks ();
+            delay += (1000/fps - (nowTicks-thenTicks));
+            thenTicks = nowTicks;
+            if (delay < 0)
+                delay = 1000/fps;
+        }
+        else {
+            thenTicks = SDL_GetTicks ();
+        }
+
+        SDL_Delay (delay);
+    }
+}
+
+int main(int argc, char *argv[])
+{
+    // Init SDL video subsystem
+    if ( SDL_Init (SDL_INIT_VIDEO) < 0 ) {
+        
+        fprintf(stderr, "Couldn't initialize SDL: %s\n",
+            SDL_GetError());
+        exit(1);
+    }
+
+    // Set GL context attributes
+    initAttributes ();
+    
+    // Create GL context
+    createSurface (0);
+    
+    // Get GL context attributes
+    printAttributes ();
+    
+    // Init GL state
+    initGL ();
+    
+    // Draw, get events...
+    mainLoop ();
+    
+    // Cleanup
+    SDL_Quit();
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac Application.xctemplate/TemplateInfo.plist	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>Ancestors</key>
+	<array>
+		<string>org.libsdl.SDLApplicationBase</string>
+		<string>com.apple.dt.unit.macBase</string>
+	</array>
+	<key>Identifier</key>
+	<string>org.libsdl.SDL13ApplicationMac</string>
+	<key>Kind</key>
+	<string>Xcode.Xcode3.ProjectTemplateUnitKind</string>
+	<key>Targets</key>
+	<array>
+		<dict>
+			<key>Frameworks</key>
+			<array>
+				<string>AppKit</string>
+				<string>Foundation</string>
+				<string>SDL</string>
+			</array>
+			<key>BuildPhases</key>
+			<array>
+				<dict>
+					<key>Class</key>
+					<string>Sources</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>Frameworks</string>
+				</dict>
+				<dict>
+					<key>Class</key>
+					<string>Resources</string>
+				</dict>
+			</array>
+			<key>Configurations</key>
+			<dict>
+				<key>Debug</key>
+				<dict>
+					<key>COPY_PHASE_STRIP</key>
+					<string>NO</string>
+					<key>GCC_DYNAMIC_NO_PIC</key>
+					<string>NO</string>
+				</dict>
+				<key>Release</key>
+				<dict>
+					<key>COPY_PHASE_STRIP</key>
+					<string>YES</string>
+				</dict>
+			</dict>
+			<key>ProductType</key>
+			<string>com.apple.product-type.application</string>
+			<key>SharedSettings</key>
+			<dict>
+				<key>FRAMEWORK_SEARCH_PATHS</key>
+				<string>/Library/Frameworks</string>
+				<key>USER_HEADER_SEARCH_PATHS</key>
+				<string>/Library/Frameworks/SDL.framework/Headers</string>
+				<key>MACOSX_DEPLOYMENT_TARGET</key>
+				<string>10.5</string>
+				<key>ARCHS</key>
+				<string>x86_64 i386</string>
+			</dict>
+		</dict>
+	</array>
+	<key>Concrete</key>
+	<true/>
+	<key>Definitions</key>
+	<dict/>
+	<key>Nodes</key>
+	<array/>
+	<key>Description</key>
+	<string>This template provides a starting point for an application that uses SDL 1.3 for Mac.</string>
+</dict>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac OpenGL Application.xctemplate/TemplateInfo.plist	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>Ancestors</key>
+	<array>
+		<string>org.libsdl.SDL13ApplicationMac</string>
+	</array>
+	<key>Identifier</key>
+	<string>org.libsdl.SDL13ApplicationMacOpenGL</string>
+	<key>Kind</key>
+	<string>Xcode.Xcode3.ProjectTemplateUnitKind</string>
+	<key>Targets</key>
+	<array>
+		<dict>
+			<key>Frameworks</key>
+			<array>
+				<string>OpenGL</string>
+			</array>
+		</dict>
+	</array>
+	<key>Concrete</key>
+	<true/>
+	<key>Definitions</key>
+	<dict>
+		<key>main.c</key>
+		<dict>
+			<key>Group</key>
+			<string>Supporting Files</string>
+			<key>Path</key>
+			<string>main.c</string>
+		</dict>
+		<key>atlantis/atlantis.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/atlantis.c</string>
+		</dict>
+		<key>atlantis/atlantis.h</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/atlantis.h</string>
+		</dict>
+		<key>atlantis/dolphin.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/dolphin.c</string>
+		</dict>
+		<key>atlantis/shark.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/shark.c</string>
+		</dict>
+		<key>atlantis/swim.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/swim.c</string>
+		</dict>
+		<key>atlantis/whale.c</key>
+		<dict>
+			<key>Group</key>
+			<string>atlantis</string>
+			<key>Path</key>
+			<string>atlantis/whale.c</string>
+		</dict>
+	</dict>
+	<key>Nodes</key>
+	<array>
+		<string>main.c</string>
+		<string>atlantis/atlantis.c</string>
+		<string>atlantis/atlantis.h</string>
+		<string>atlantis/dolphin.c</string>
+		<string>atlantis/shark.c</string>
+		<string>atlantis/swim.c</string>
+		<string>atlantis/whale.c</string>
+	</array>
+	<key>Description</key>
+	<string>This template provides a starting point for an application that uses SDL 1.3 with OpenGL for Mac.</string>
+</dict>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/atlantis.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,464 @@
+
+/* Copyright (c) Mark J. Kilgard, 1994. */
+
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <sys/time.h>
+#ifdef USE_GLUT
+#include <GLUT/glut.h>
+#endif
+#include "SDL_opengl.h"
+#include "atlantis.h"
+
+fishRec sharks[NUM_SHARKS];
+fishRec momWhale;
+fishRec babyWhale;
+fishRec dolph;
+
+GLboolean Timing = GL_TRUE;
+
+int w_win = 640;
+int h_win = 480;
+GLint count  = 0;
+GLenum StrMode = GL_VENDOR;
+
+GLboolean moving;
+
+static double mtime(void)
+{
+   struct timeval tk_time;
+   struct timezone tz;
+   
+   gettimeofday(&tk_time, &tz);
+   
+   return 4294.967296 * tk_time.tv_sec + 0.000001 * tk_time.tv_usec;
+}
+
+static double filter(double in, double *save)
+{
+	static double k1 = 0.9;
+	static double k2 = 0.05;
+
+	save[3] = in;
+	save[1] = save[0]*k1 + k2*(save[3] + save[2]);
+
+	save[0]=save[1];
+	save[2]=save[3];
+
+	return(save[1]);
+}
+
+void DrawStr(const char *str)
+{
+#ifdef USE_GLUT
+	GLint i = 0;
+	
+	if(!str) return;
+        
+	while(str[i])
+	{
+		glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, str[i]);
+		i++;
+	}
+#endif
+}
+
+void
+InitFishs(void)
+{
+    int i;
+
+    for (i = 0; i < NUM_SHARKS; i++) {
+        sharks[i].x = 70000.0 + rand() % 6000;
+        sharks[i].y = rand() % 6000;
+        sharks[i].z = rand() % 6000;
+        sharks[i].psi = rand() % 360 - 180.0;
+        sharks[i].v = 1.0;
+    }
+
+    dolph.x = 30000.0;
+    dolph.y = 0.0;
+    dolph.z = 6000.0;
+    dolph.psi = 90.0;
+    dolph.theta = 0.0;
+    dolph.v = 3.0;
+
+    momWhale.x = 70000.0;
+    momWhale.y = 0.0;
+    momWhale.z = 0.0;
+    momWhale.psi = 90.0;
+    momWhale.theta = 0.0;
+    momWhale.v = 3.0;
+
+    babyWhale.x = 60000.0;
+    babyWhale.y = -2000.0;
+    babyWhale.z = -2000.0;
+    babyWhale.psi = 90.0;
+    babyWhale.theta = 0.0;
+    babyWhale.v = 3.0;
+}
+
+void
+Atlantis_Init(void)
+{
+    static float ambient[] = {0.2, 0.2, 0.2, 1.0};
+    static float diffuse[] = {1.0, 1.0, 1.0, 1.0};
+    static float position[] = {0.0, 1.0, 0.0, 0.0};
+    static float mat_shininess[] = {90.0};
+    static float mat_specular[] = {0.8, 0.8, 0.8, 1.0};
+    static float mat_diffuse[] = {0.46, 0.66, 0.795, 1.0};
+    static float mat_ambient[] = {0.3, 0.4, 0.5, 1.0};
+    static float lmodel_ambient[] = {0.4, 0.4, 0.4, 1.0};
+    static float lmodel_localviewer[] = {0.0};
+    //GLfloat map1[4] = {0.0, 0.0, 0.0, 0.0};
+    //GLfloat map2[4] = {0.0, 0.0, 0.0, 0.0};
+    static float fog_color[] = {0.0, 0.5, 0.9, 1.0};
+
+    glFrontFace(GL_CCW);
+
+    glDepthFunc(GL_LESS);
+    glEnable(GL_DEPTH_TEST);
+
+    glLightfv(GL_LIGHT0, GL_AMBIENT, ambient);
+    glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuse);
+    glLightfv(GL_LIGHT0, GL_POSITION, position);
+    glLightModelfv(GL_LIGHT_MODEL_AMBIENT, lmodel_ambient);
+    glLightModelfv(GL_LIGHT_MODEL_LOCAL_VIEWER, lmodel_localviewer);
+    glEnable(GL_LIGHTING);
+    glEnable(GL_LIGHT0);
+
+    glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, mat_shininess);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, mat_specular);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, mat_diffuse);
+    glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, mat_ambient);
+
+    InitFishs();
+
+    glEnable(GL_FOG);
+	glFogi(GL_FOG_MODE, GL_EXP);
+	glFogf(GL_FOG_DENSITY, 0.0000025);
+	glFogfv(GL_FOG_COLOR, fog_color);
+
+    glClearColor(0.0, 0.5, 0.9, 1.0);
+}
+
+void
+Atlantis_Reshape(int width, int height)
+{
+	w_win = width;
+	h_win = height;
+	
+    glViewport(0, 0, width, height);
+
+    glMatrixMode(GL_PROJECTION);
+    glLoadIdentity();
+    gluPerspective(60.0, (GLfloat) width / (GLfloat) height, 20000.0, 300000.0);
+    glMatrixMode(GL_MODELVIEW);
+}
+
+void
+Atlantis_Animate(void)
+{
+    int i;
+
+    for (i = 0; i < NUM_SHARKS; i++) {
+        SharkPilot(&sharks[i]);
+        SharkMiss(i);
+    }
+    WhalePilot(&dolph);
+    dolph.phi++;
+    //glutPostRedisplay();
+    WhalePilot(&momWhale);
+    momWhale.phi++;
+    WhalePilot(&babyWhale);
+    babyWhale.phi++;
+}
+
+void
+Atlantis_Key(unsigned char key, int x, int y)
+{
+    switch (key) {
+    case 't':
+    	Timing = !Timing;
+    break;
+    case ' ':
+    	switch(StrMode)
+    	{
+		    case GL_EXTENSIONS:
+    			StrMode = GL_VENDOR;
+		    break;
+		    case GL_VENDOR:
+		    	StrMode = GL_RENDERER;
+		    break;
+		    case GL_RENDERER:
+		    	StrMode = GL_VERSION;
+		    break;
+		    case GL_VERSION:
+		    	StrMode = GL_EXTENSIONS;
+		    break;
+		}
+	break;
+    case 27:           /* Esc will quit */
+        exit(1);
+    break;
+    case 's':             		/* "s" start animation */
+        moving = GL_TRUE;
+        //glutIdleFunc(Animate);
+    break;
+    case 'a':          			/* "a" stop animation */
+        moving = GL_FALSE;
+        //glutIdleFunc(NULL);
+    break;
+    case '.':          			/* "." will advance frame */
+        if (!moving) {
+            Atlantis_Animate();
+        }
+    }
+}
+/*
+void Display(void)
+{
+	static float P123[3] = {-448.94, -203.14, 9499.60};
+	static float P124[3] = {-442.64, -185.20, 9528.07};
+	static float P125[3] = {-441.07, -148.05, 9528.07};
+	static float P126[3] = {-443.43, -128.84, 9499.60};
+	static float P127[3] = {-456.87, -146.78, 9466.67};
+	static float P128[3] = {-453.68, -183.93, 9466.67};
+
+	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+	
+	glPushMatrix();
+    FishTransform(&dolph);
+    DrawDolphin(&dolph);
+    glPopMatrix();
+ 
+	glutSwapBuffers();
+}
+*/
+
+void
+Atlantis_Display(void)
+{
+    int i;
+    static double th[4] = {0.0, 0.0, 0.0, 0.0};
+	static double t1 = 0.0, t2 = 0.0, t;
+	char num_str[128];
+    
+    t1 = t2;
+
+    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+    for (i = 0; i < NUM_SHARKS; i++) {
+        glPushMatrix();
+        FishTransform(&sharks[i]);
+        DrawShark(&sharks[i]);
+        glPopMatrix();
+    }
+
+    glPushMatrix();
+    FishTransform(&dolph);
+    DrawDolphin(&dolph);
+    glPopMatrix();
+
+    glPushMatrix();
+    FishTransform(&momWhale);
+    DrawWhale(&momWhale);
+    glPopMatrix();
+
+    glPushMatrix();
+    FishTransform(&babyWhale);
+    glScalef(0.45, 0.45, 0.3);
+    DrawWhale(&babyWhale);
+    glPopMatrix();
+    
+    if(Timing)
+    {
+		t2 = mtime();
+		t = t2 - t1;
+		if(t > 0.0001) t = 1.0 / t;
+		
+		glDisable(GL_LIGHTING);
+		//glDisable(GL_DEPTH_TEST);
+		
+		glColor3f(1.0, 0.0, 0.0);
+		
+		glMatrixMode (GL_PROJECTION);
+		glPushMatrix();
+		glLoadIdentity();
+		glOrtho(0, w_win, 0, h_win, -10.0, 10.0);
+		
+		glRasterPos2f(5.0, 5.0);
+		
+		switch(StrMode)
+		{
+			case GL_VENDOR:
+				sprintf(num_str, "%0.2f Hz, %dx%d, VENDOR: ", filter(t, th), w_win, h_win);
+				DrawStr(num_str);
+				DrawStr(glGetString(GL_VENDOR));
+			break;
+			case GL_RENDERER:
+				sprintf(num_str, "%0.2f Hz, %dx%d, RENDERER: ", filter(t, th), w_win, h_win);
+				DrawStr(num_str);
+				DrawStr(glGetString(GL_RENDERER));
+			break;
+			case GL_VERSION:
+				sprintf(num_str, "%0.2f Hz, %dx%d, VERSION: ", filter(t, th), w_win, h_win);
+				DrawStr(num_str);
+				DrawStr(glGetString(GL_VERSION));
+			break;
+			case GL_EXTENSIONS:
+				sprintf(num_str, "%0.2f Hz, %dx%d, EXTENSIONS: ", filter(t, th), w_win, h_win);
+				DrawStr(num_str);
+				DrawStr(glGetString(GL_EXTENSIONS));
+			break;
+		}
+		
+		glPopMatrix();
+		glMatrixMode(GL_MODELVIEW);
+		
+		glEnable(GL_LIGHTING);
+		//glEnable(GL_DEPTH_TEST);
+	}
+	
+    count++;
+
+//    glutSwapBuffers();
+}
+
+/*
+void
+Visible(int state)
+{
+    if (state == GLUT_VISIBLE) {
+        if (moving)
+            glutIdleFunc(Animate);
+    } else {
+        if (moving)
+            glutIdleFunc(NULL);
+    }
+}
+
+
+void
+timingSelect(int value)
+{
+    switch(value)
+    {
+		case 1:
+			StrMode = GL_VENDOR;
+		break;
+		case 2:
+			StrMode = GL_RENDERER;
+		break;
+		case 3:
+			StrMode = GL_VERSION;
+		break;
+		case 4:
+			StrMode = GL_EXTENSIONS;
+		break;
+    }
+}
+
+void
+menuSelect(int value)
+{
+    switch (value) {
+    case 1:
+        moving = GL_TRUE;
+        glutIdleFunc(Animate);
+        break;
+    case 2:
+        moving = GL_FALSE;
+        glutIdleFunc(NULL);
+        break;
+    case 4:
+        exit(0);
+        break;
+    }
+}
+
+int
+main(int argc, char **argv)
+{
+	GLboolean fullscreen = GL_FALSE; 
+	GLint time_menu;
+ 	
+ 	srand(0);
+
+        glutInit(&argc, argv);
+	if (argc > 1 && !strcmp(argv[1], "-w"))
+		fullscreen = GL_FALSE;
+
+	//glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
+	glutInitDisplayString("rgba double depth=24");
+	if (fullscreen) {
+	  glutGameModeString("1024x768:32");
+	  glutEnterGameMode();
+	} else {
+	  glutInitWindowSize(320, 240);
+	  glutCreateWindow("Atlantis Timing");
+	}
+    Init();
+    glutDisplayFunc(Display);
+    glutReshapeFunc(Reshape);
+    glutKeyboardFunc(Key);
+    moving = GL_TRUE;
+glutIdleFunc(Animate);
+    glutVisibilityFunc(Visible);
+    
+    time_menu = glutCreateMenu(timingSelect);
+    glutAddMenuEntry("GL_VENDOR", 1);
+    glutAddMenuEntry("GL_RENDERER", 2);
+    glutAddMenuEntry("GL_VERSION", 3);
+    glutAddMenuEntry("GL_EXTENSIONS", 4);
+    
+    glutCreateMenu(menuSelect);
+    glutAddMenuEntry("Start motion", 1);
+    glutAddMenuEntry("Stop motion", 2);
+    glutAddSubMenu("Timing Mode", time_menu);
+    glutAddMenuEntry("Quit", 4);
+    
+    //glutAttachMenu(GLUT_RIGHT_BUTTON);
+    glutAttachMenu(GLUT_RIGHT_BUTTON);
+    glutMainLoop();
+    return 0;             // ANSI C requires main to return int.
+}
+*/
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/atlantis.h	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,65 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#define RAD 57.295
+#define RRAD 0.01745
+
+#define NUM_SHARKS 4
+#define SHARKSIZE 6000
+#define SHARKSPEED 100.0
+
+#define WHALESPEED 250.0
+
+typedef struct _fishRec {
+    float x, y, z, phi, theta, psi, v;
+    float xt, yt, zt;
+    float htail, vtail;
+    float dtheta;
+    int spurt, attack;
+} fishRec;
+
+extern fishRec sharks[NUM_SHARKS];
+extern fishRec momWhale;
+extern fishRec babyWhale;
+extern fishRec dolph;
+
+extern void FishTransform(fishRec *);
+extern void WhalePilot(fishRec *);
+extern void SharkPilot(fishRec *);
+extern void SharkMiss(int);
+extern void DrawWhale(fishRec *);
+extern void DrawShark(fishRec *);
+extern void DrawDolphin(fishRec *);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/dolphin.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,1934 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <math.h>
+#include <GLUT/glut.h>
+#include "atlantis.h"
+/* *INDENT-OFF* */
+static float N001[3] = {-0.005937 ,-0.101998 ,-0.994767};
+static float N002[3] = {0.936780 ,-0.200803 ,0.286569};
+static float N003[3] = {-0.233062 ,0.972058 ,0.028007};
+static float N005[3] = {0.898117 ,0.360171 ,0.252315};
+static float N006[3] = {-0.915437 ,0.348456 ,0.201378};
+static float N007[3] = {0.602263 ,-0.777527 ,0.180920};
+static float N008[3] = {-0.906912 ,-0.412015 ,0.088061};
+static float N012[3] = {0.884408 ,-0.429417 ,-0.182821};
+static float N013[3] = {0.921121 ,0.311084 ,-0.234016};
+static float N014[3] = {0.382635 ,0.877882 ,-0.287948};
+static float N015[3] = {-0.380046 ,0.888166 ,-0.258316};
+static float N016[3] = {-0.891515 ,0.392238 ,-0.226607};
+static float N017[3] = {-0.901419 ,-0.382002 ,-0.203763};
+static float N018[3] = {-0.367225 ,-0.911091 ,-0.187243};
+static float N019[3] = {0.339539 ,-0.924846 ,-0.171388};
+static float N020[3] = {0.914706 ,-0.378617 ,-0.141290};
+static float N021[3] = {0.950662 ,0.262713 ,-0.164994};
+static float N022[3] = {0.546359 ,0.801460 ,-0.243218};
+static float N023[3] = {-0.315796 ,0.917068 ,-0.243431};
+static float N024[3] = {-0.825687 ,0.532277 ,-0.186875};
+static float N025[3] = {-0.974763 ,-0.155232 ,-0.160435};
+static float N026[3] = {-0.560596 ,-0.816658 ,-0.137119};
+static float N027[3] = {0.380210 ,-0.910817 ,-0.160786};
+static float N028[3] = {0.923772 ,-0.358322 ,-0.135093};
+static float N029[3] = {0.951202 ,0.275053 ,-0.139859};
+static float N030[3] = {0.686099 ,0.702548 ,-0.188932};
+static float N031[3] = {-0.521865 ,0.826719 ,-0.210220};
+static float N032[3] = {-0.923820 ,0.346739 ,-0.162258};
+static float N033[3] = {-0.902095 ,-0.409995 ,-0.134646};
+static float N034[3] = {-0.509115 ,-0.848498 ,-0.144404};
+static float N035[3] = {0.456469 ,-0.880293 ,-0.129305};
+static float N036[3] = {0.873401 ,-0.475489 ,-0.105266};
+static float N037[3] = {0.970825 ,0.179861 ,-0.158584};
+static float N038[3] = {0.675609 ,0.714187 ,-0.183004};
+static float N039[3] = {-0.523574 ,0.830212 ,-0.191360};
+static float N040[3] = {-0.958895 ,0.230808 ,-0.165071};
+static float N041[3] = {-0.918285 ,-0.376803 ,-0.121542};
+static float N042[3] = {-0.622467 ,-0.774167 ,-0.114888};
+static float N043[3] = {0.404497 ,-0.908807 ,-0.102231};
+static float N044[3] = {0.930538 ,-0.365155 ,-0.027588};
+static float N045[3] = {0.921920 ,0.374157 ,-0.100345};
+static float N046[3] = {0.507346 ,0.860739 ,0.041562};
+static float N047[3] = {-0.394646 ,0.918815 ,-0.005730};
+static float N048[3] = {-0.925411 ,0.373024 ,-0.066837};
+static float N049[3] = {-0.945337 ,-0.322309 ,-0.049551};
+static float N050[3] = {-0.660437 ,-0.750557 ,-0.022072};
+static float N051[3] = {0.488835 ,-0.871950 ,-0.027261};
+static float N052[3] = {0.902599 ,-0.421397 ,0.087969};
+static float N053[3] = {0.938636 ,0.322606 ,0.122020};
+static float N054[3] = {0.484605 ,0.871078 ,0.079878};
+static float N055[3] = {-0.353607 ,0.931559 ,0.084619};
+static float N056[3] = {-0.867759 ,0.478564 ,0.134054};
+static float N057[3] = {-0.951583 ,-0.296030 ,0.082794};
+static float N058[3] = {-0.672355 ,-0.730209 ,0.121384};
+static float N059[3] = {0.528336 ,-0.842452 ,0.105525};
+static float N060[3] = {0.786913 ,-0.564760 ,0.248627};
+static float N062[3] = {0.622098 ,0.765230 ,0.165584};
+static float N063[3] = {-0.631711 ,0.767816 ,0.106773};
+static float N064[3] = {-0.687886 ,0.606351 ,0.398938};
+static float N065[3] = {-0.946327 ,-0.281623 ,0.158598};
+static float N066[3] = {-0.509549 ,-0.860437 ,0.002776};
+static float N067[3] = {0.462594 ,-0.876692 ,0.131977};
+static float N071[3] = {0.000000 ,1.000000 ,0.000000};
+static float N077[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N078[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N079[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N080[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N081[3] = {-0.571197 ,0.816173 ,0.087152};
+static float N082[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N083[3] = {-0.571197 ,0.816173 ,0.087152};
+static float N084[3] = {-0.571197 ,0.816173 ,0.087152};
+static float N085[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N086[3] = {-0.571197 ,0.816173 ,0.087152};
+static float N087[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N088[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N089[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N090[3] = {-0.880770 ,0.461448 ,0.106351};
+static float N091[3] = {0.000000 ,1.000000 ,0.000000};
+static float N092[3] = {0.000000 ,1.000000 ,0.000000};
+static float N093[3] = {0.000000 ,1.000000 ,0.000000};
+static float N094[3] = {1.000000 ,0.000000 ,0.000000};
+static float N095[3] = {-1.000000 ,0.000000 ,0.000000};
+static float N097[3] = {-0.697296 ,0.702881 ,0.140491};
+static float N098[3] = {0.918864 ,0.340821 ,0.198819};
+static float N099[3] = {-0.932737 ,0.201195 ,0.299202};
+static float N100[3] = {0.029517 ,0.981679 ,0.188244};
+static float N102[3] = {0.813521 ,-0.204936 ,0.544229};
+static float N110[3] = {-0.781480 ,-0.384779 ,0.491155};
+static float N111[3] = {-0.722243 ,0.384927 ,0.574627};
+static float N112[3] = {-0.752278 ,0.502679 ,0.425901};
+static float N113[3] = {0.547257 ,0.367910 ,0.751766};
+static float N114[3] = {0.725949 ,-0.232568 ,0.647233};
+static float N115[3] = {-0.747182 ,-0.660786 ,0.071280};
+static float N116[3] = {0.931519 ,0.200748 ,0.303270};
+static float N117[3] = {-0.828928 ,0.313757 ,0.463071};
+static float N118[3] = {0.902554 ,-0.370967 ,0.218587};
+static float N119[3] = {-0.879257 ,-0.441851 ,0.177973};
+static float N120[3] = {0.642327 ,0.611901 ,0.461512};
+static float N121[3] = {0.964817 ,-0.202322 ,0.167910};
+static float N122[3] = {0.000000 ,1.000000 ,0.000000};
+static float P001[3] = {5.68, -300.95, 1324.70};
+static float P002[3] = {338.69, -219.63, 9677.03};
+static float P003[3] = {12.18, 474.59, 9138.14};
+static float P005[3] = {487.51, 198.05, 9350.78};
+static float P006[3] = {-457.61, 68.74, 9427.85};
+static float P007[3] = {156.52, -266.72, 10311.68};
+static float P008[3] = {-185.56, -266.51, 10310.47};
+static float P009[3] = {124.39, -261.46, 1942.34};
+static float P010[3] = {-130.05, -261.46, 1946.03};
+static float P011[3] = {141.07, -320.11, 1239.38};
+static float P012[3] = {156.48, -360.12, 2073.41};
+static float P013[3] = {162.00, -175.88, 2064.44};
+static float P014[3] = {88.16, -87.72, 2064.02};
+static float P015[3] = {-65.21, -96.13, 2064.02};
+static float P016[3] = {-156.48, -180.96, 2064.44};
+static float P017[3] = {-162.00, -368.93, 2082.39};
+static float P018[3] = {-88.16, -439.22, 2082.39};
+static float P019[3] = {65.21, -440.32, 2083.39};
+static float P020[3] = {246.87, -356.02, 2576.95};
+static float P021[3] = {253.17, -111.15, 2567.15};
+static float P022[3] = {132.34, 51.41, 2559.84};
+static float P023[3] = {-97.88, 40.44, 2567.15};
+static float P024[3] = {-222.97, -117.49, 2567.15};
+static float P025[3] = {-252.22, -371.53, 2569.92};
+static float P026[3] = {-108.44, -518.19, 2586.75};
+static float P027[3] = {97.88, -524.79, 2586.75};
+static float P028[3] = {370.03, -421.19, 3419.70};
+static float P029[3] = {351.15, -16.98, 3423.17};
+static float P030[3] = {200.66, 248.46, 3430.37};
+static float P031[3] = {-148.42, 235.02, 3417.91};
+static float P032[3] = {-360.21, -30.27, 3416.84};
+static float P033[3] = {-357.90, -414.89, 3407.04};
+static float P034[3] = {-148.88, -631.35, 3409.90};
+static float P035[3] = {156.38, -632.59, 3419.70};
+static float P036[3] = {462.61, -469.21, 4431.51};
+static float P037[3] = {466.60, 102.25, 4434.98};
+static float P038[3] = {243.05, 474.34, 4562.02};
+static float P039[3] = {-191.23, 474.40, 4554.42};
+static float P040[3] = {-476.12, 111.05, 4451.11};
+static float P041[3] = {-473.36, -470.74, 4444.78};
+static float P042[3] = {-266.95, -748.41, 4447.78};
+static float P043[3] = {211.14, -749.91, 4429.73};
+static float P044[3] = {680.57, -370.27, 5943.46};
+static float P045[3] = {834.01, 363.09, 6360.63};
+static float P046[3] = {371.29, 804.51, 6486.26};
+static float P047[3] = {-291.43, 797.22, 6494.28};
+static float P048[3] = {-784.13, 370.75, 6378.01};
+static float P049[3] = {-743.29, -325.82, 5943.46};
+static float P050[3] = {-383.24, -804.77, 5943.46};
+static float P051[3] = {283.47, -846.09, 5943.46};
+static float iP001[3] = {5.68, -300.95, 1324.70};
+static float iP009[3] = {124.39, -261.46, 1942.34};
+static float iP010[3] = {-130.05, -261.46, 1946.03};
+static float iP011[3] = {141.07, -320.11, 1239.38};
+static float iP012[3] = {156.48, -360.12, 2073.41};
+static float iP013[3] = {162.00, -175.88, 2064.44};
+static float iP014[3] = {88.16, -87.72, 2064.02};
+static float iP015[3] = {-65.21, -96.13, 2064.02};
+static float iP016[3] = {-156.48, -180.96, 2064.44};
+static float iP017[3] = {-162.00, -368.93, 2082.39};
+static float iP018[3] = {-88.16, -439.22, 2082.39};
+static float iP019[3] = {65.21, -440.32, 2083.39};
+static float iP020[3] = {246.87, -356.02, 2576.95};
+static float iP021[3] = {253.17, -111.15, 2567.15};
+static float iP022[3] = {132.34, 51.41, 2559.84};
+static float iP023[3] = {-97.88, 40.44, 2567.15};
+static float iP024[3] = {-222.97, -117.49, 2567.15};
+static float iP025[3] = {-252.22, -371.53, 2569.92};
+static float iP026[3] = {-108.44, -518.19, 2586.75};
+static float iP027[3] = {97.88, -524.79, 2586.75};
+static float iP028[3] = {370.03, -421.19, 3419.70};
+static float iP029[3] = {351.15, -16.98, 3423.17};
+static float iP030[3] = {200.66, 248.46, 3430.37};
+static float iP031[3] = {-148.42, 235.02, 3417.91};
+static float iP032[3] = {-360.21, -30.27, 3416.84};
+static float iP033[3] = {-357.90, -414.89, 3407.04};
+static float iP034[3] = {-148.88, -631.35, 3409.90};
+static float iP035[3] = {156.38, -632.59, 3419.70};
+static float iP036[3] = {462.61, -469.21, 4431.51};
+static float iP037[3] = {466.60, 102.25, 4434.98};
+static float iP038[3] = {243.05, 474.34, 4562.02};
+static float iP039[3] = {-191.23, 474.40, 4554.42};
+static float iP040[3] = {-476.12, 111.05, 4451.11};
+static float iP041[3] = {-473.36, -470.74, 4444.78};
+static float iP042[3] = {-266.95, -748.41, 4447.78};
+static float iP043[3] = {211.14, -749.91, 4429.73};
+static float iP044[3] = {680.57, -370.27, 5943.46};
+static float iP045[3] = {834.01, 363.09, 6360.63};
+static float iP046[3] = {371.29, 804.51, 6486.26};
+static float iP047[3] = {-291.43, 797.22, 6494.28};
+static float iP048[3] = {-784.13, 370.75, 6378.01};
+static float iP049[3] = {-743.29, -325.82, 5943.46};
+static float iP050[3] = {-383.24, -804.77, 5943.46};
+static float iP051[3] = {283.47, -846.09, 5943.46};
+static float P052[3] = {599.09, -300.15, 7894.03};
+static float P053[3] = {735.48, 306.26, 7911.92};
+static float P054[3] = {246.22, 558.53, 8460.50};
+static float P055[3] = {-230.41, 559.84, 8473.23};
+static float P056[3] = {-698.66, 320.83, 7902.59};
+static float P057[3] = {-643.29, -299.16, 7902.59};
+static float P058[3] = {-341.47, -719.30, 7902.59};
+static float P059[3] = {252.57, -756.12, 7902.59};
+static float P060[3] = {458.39, -265.31, 9355.44};
+static float P062[3] = {224.04, 338.75, 9450.30};
+static float P063[3] = {-165.71, 341.04, 9462.35};
+static float P064[3] = {-298.11, 110.13, 10180.37};
+static float P065[3] = {-473.99, -219.71, 9355.44};
+static float P066[3] = {-211.97, -479.87, 9355.44};
+static float P067[3] = {192.86, -491.45, 9348.73};
+static float P068[3] = {-136.29, -319.84, 1228.73};
+static float P069[3] = {1111.17, -314.14, 1314.19};
+static float P070[3] = {-1167.34, -321.61, 1319.45};
+static float P071[3] = {1404.86, -306.66, 1235.45};
+static float P072[3] = {-1409.73, -314.14, 1247.66};
+static float P073[3] = {1254.01, -296.87, 1544.58};
+static float P074[3] = {-1262.09, -291.70, 1504.26};
+static float P075[3] = {965.71, -269.26, 1742.65};
+static float P076[3] = {-900.97, -276.74, 1726.07};
+static float iP068[3] = {-136.29, -319.84, 1228.73};
+static float iP069[3] = {1111.17, -314.14, 1314.19};
+static float iP070[3] = {-1167.34, -321.61, 1319.45};
+static float iP071[3] = {1404.86, -306.66, 1235.45};
+static float iP072[3] = {-1409.73, -314.14, 1247.66};
+static float iP073[3] = {1254.01, -296.87, 1544.58};
+static float iP074[3] = {-1262.09, -291.70, 1504.26};
+static float iP075[3] = {965.71, -269.26, 1742.65};
+static float iP076[3] = {-900.97, -276.74, 1726.07};
+static float P077[3] = {1058.00, -448.81, 8194.66};
+static float P078[3] = {-1016.51, -456.43, 8190.62};
+static float P079[3] = {-1515.96, -676.45, 7754.93};
+static float P080[3] = {1856.75, -830.34, 7296.56};
+static float P081[3] = {1472.16, -497.38, 7399.68};
+static float P082[3] = {-1775.26, -829.51, 7298.46};
+static float P083[3] = {911.09, -252.51, 7510.99};
+static float P084[3] = {-1451.94, -495.62, 7384.30};
+static float P085[3] = {1598.75, -669.26, 7769.90};
+static float P086[3] = {-836.53, -250.08, 7463.25};
+static float P087[3] = {722.87, -158.18, 8006.41};
+static float P088[3] = {-688.86, -162.28, 7993.89};
+static float P089[3] = {-626.92, -185.30, 8364.98};
+static float P090[3] = {647.72, -189.46, 8354.99};
+static float P091[3] = {0.00, 835.01, 5555.62};
+static float P092[3] = {0.00, 1350.18, 5220.86};
+static float P093[3] = {0.00, 1422.94, 5285.27};
+static float P094[3] = {0.00, 1296.75, 5650.19};
+static float P095[3] = {0.00, 795.63, 6493.88};
+static float iP091[3] = {0.00, 835.01, 5555.62};
+static float iP092[3] = {0.00, 1350.18, 5220.86};
+static float iP093[3] = {0.00, 1422.94, 5285.27};
+static float iP094[3] = {0.00, 1296.75, 5650.19};
+static float iP095[3] = {0.00, 795.63, 6493.88};
+static float P097[3] = {-194.91, -357.14, 10313.32};
+static float P098[3] = {135.35, -357.66, 10307.94};
+static float iP097[3] = {-194.91, -357.14, 10313.32};
+static float iP098[3] = {135.35, -357.66, 10307.94};
+static float P099[3] = {-380.53, -221.14, 9677.98};
+static float P100[3] = {0.00, 412.99, 9629.33};
+static float P102[3] = {59.51, -412.55, 10677.58};
+static float iP102[3] = {59.51, -412.55, 10677.58};
+static float P103[3] = {6.50, 484.74, 9009.94};
+static float P105[3] = {-41.86, 476.51, 9078.17};
+static float P108[3] = {49.20, 476.83, 9078.24};
+static float P110[3] = {-187.62, -410.04, 10674.12};
+static float iP110[3] = {-187.62, -410.04, 10674.12};
+static float P111[3] = {-184.25, -318.70, 10723.88};
+static float iP111[3] = {-184.25, -318.70, 10723.88};
+static float P112[3] = {-179.61, -142.81, 10670.26};
+static float P113[3] = {57.43, -147.94, 10675.26};
+static float P114[3] = {54.06, -218.90, 10712.44};
+static float P115[3] = {-186.35, -212.09, 10713.76};
+static float P116[3] = {205.90, -84.61, 10275.97};
+static float P117[3] = {-230.96, -83.26, 10280.09};
+static float iP118[3] = {216.78, -509.17, 10098.94};
+static float iP119[3] = {-313.21, -510.79, 10102.62};
+static float P118[3] = {216.78, -509.17, 10098.94};
+static float P119[3] = {-313.21, -510.79, 10102.62};
+static float P120[3] = {217.95, 96.34, 10161.62};
+static float P121[3] = {71.99, -319.74, 10717.70};
+static float iP121[3] = {71.99, -319.74, 10717.70};
+static float P122[3] = {0.00, 602.74, 5375.84};
+static float iP122[3] = {0.00, 602.74, 5375.84};
+static float P123[3] = {-448.94, -203.14, 9499.60};
+static float P124[3] = {-442.64, -185.20, 9528.07};
+static float P125[3] = {-441.07, -148.05, 9528.07};
+static float P126[3] = {-443.43, -128.84, 9499.60};
+static float P127[3] = {-456.87, -146.78, 9466.67};
+static float P128[3] = {-453.68, -183.93, 9466.67};
+static float P129[3] = {428.43, -124.08, 9503.03};
+static float P130[3] = {419.73, -142.14, 9534.56};
+static float P131[3] = {419.92, -179.96, 9534.56};
+static float P132[3] = {431.20, -199.73, 9505.26};
+static float P133[3] = {442.28, -181.67, 9475.96};
+static float P134[3] = {442.08, -143.84, 9475.96};
+/* *INDENT-ON* */
+
+void
+Dolphin001(void)
+{
+    glNormal3fv(N071);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P001);
+    glVertex3fv(P068);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P068);
+    glVertex3fv(P076);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P068);
+    glVertex3fv(P070);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P076);
+    glVertex3fv(P070);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P070);
+    glVertex3fv(P072);
+    glVertex3fv(P074);
+    glEnd();
+    glNormal3fv(N119);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P072);
+    glVertex3fv(P070);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P074);
+    glVertex3fv(P070);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P070);
+    glVertex3fv(P068);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P076);
+    glVertex3fv(P068);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P068);
+    glVertex3fv(P001);
+    glVertex3fv(P010);
+    glEnd();
+}
+
+void
+Dolphin002(void)
+{
+    glNormal3fv(N071);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P011);
+    glVertex3fv(P001);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P075);
+    glVertex3fv(P011);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P069);
+    glVertex3fv(P011);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P069);
+    glVertex3fv(P075);
+    glVertex3fv(P073);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P071);
+    glVertex3fv(P069);
+    glVertex3fv(P073);
+    glEnd();
+    glNormal3fv(N119);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P001);
+    glVertex3fv(P011);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P009);
+    glVertex3fv(P011);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P011);
+    glVertex3fv(P069);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P069);
+    glVertex3fv(P073);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P069);
+    glVertex3fv(P071);
+    glVertex3fv(P073);
+    glEnd();
+}
+
+void
+Dolphin003(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glEnd();
+}
+
+void
+Dolphin004(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glEnd();
+}
+
+void
+Dolphin005(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+}
+
+void
+Dolphin006(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N093);
+    glVertex3fv(P093);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N093);
+    glVertex3fv(P093);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N122);
+    glVertex3fv(P122);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N122);
+    glVertex3fv(P122);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glEnd();
+}
+
+void
+Dolphin007(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+}
+
+void
+Dolphin008(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glEnd();
+}
+
+void
+Dolphin009(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+}
+
+void
+Dolphin010(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N080);
+    glVertex3fv(P080);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N090);
+    glVertex3fv(P090);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N080);
+    glVertex3fv(P080);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glNormal3fv(N090);
+    glVertex3fv(P090);
+    glEnd();
+}
+
+void
+Dolphin011(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N082);
+    glVertex3fv(P082);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N082);
+    glVertex3fv(P082);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+}
+
+void
+Dolphin012(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glEnd();
+}
+
+void
+Dolphin013(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glNormal3fv(N112);
+    glVertex3fv(P112);
+    glNormal3fv(N113);
+    glVertex3fv(P113);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N114);
+    glVertex3fv(P114);
+    glNormal3fv(N113);
+    glVertex3fv(P113);
+    glNormal3fv(N112);
+    glVertex3fv(P112);
+    glNormal3fv(N115);
+    glVertex3fv(P115);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N114);
+    glVertex3fv(P114);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glNormal3fv(N113);
+    glVertex3fv(P113);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N114);
+    glVertex3fv(P114);
+    glNormal3fv(N007);
+    glVertex3fv(P007);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N007);
+    glVertex3fv(P007);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P002);
+    glVertex3fv(P007);
+    glVertex3fv(P008);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P007);
+    glVertex3fv(P114);
+    glVertex3fv(P115);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N112);
+    glVertex3fv(P112);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N112);
+    glVertex3fv(P112);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N115);
+    glVertex3fv(P115);
+    glEnd();
+}
+
+void
+Dolphin014(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N111);
+    glVertex3fv(P111);
+    glNormal3fv(N110);
+    glVertex3fv(P110);
+    glNormal3fv(N102);
+    glVertex3fv(P102);
+    glNormal3fv(N121);
+    glVertex3fv(P121);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N111);
+    glVertex3fv(P111);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N110);
+    glVertex3fv(P110);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glNormal3fv(N110);
+    glVertex3fv(P110);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P098);
+    glVertex3fv(P097);
+    glVertex3fv(P111);
+    glVertex3fv(P121);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P002);
+    glVertex3fv(P099);
+    glVertex3fv(P097);
+    glVertex3fv(P098);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N110);
+    glVertex3fv(P110);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glNormal3fv(N102);
+    glVertex3fv(P102);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N119);
+    glVertex3fv(P119);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N118);
+    glVertex3fv(P118);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glNormal3fv(N102);
+    glVertex3fv(P102);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N102);
+    glVertex3fv(P102);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glNormal3fv(N121);
+    glVertex3fv(P121);
+    glEnd();
+}
+
+void
+Dolphin015(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N117);
+    glVertex3fv(P117);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N120);
+    glVertex3fv(P120);
+    glNormal3fv(N116);
+    glVertex3fv(P116);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+}
+
+void
+Dolphin016(void)
+{
+
+    glDisable(GL_DEPTH_TEST);
+    glBegin(GL_POLYGON);
+    glVertex3fv(P123);
+    glVertex3fv(P124);
+    glVertex3fv(P125);
+    glVertex3fv(P126);
+    glVertex3fv(P127);
+    glVertex3fv(P128);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P129);
+    glVertex3fv(P130);
+    glVertex3fv(P131);
+    glVertex3fv(P132);
+    glVertex3fv(P133);
+    glVertex3fv(P134);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P103);
+    glVertex3fv(P105);
+    glVertex3fv(P108);
+    glEnd();
+    glEnable(GL_DEPTH_TEST);
+}
+
+void
+DrawDolphin(fishRec * fish)
+{
+    float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7;
+    float pitch, thrash, chomp;
+
+    fish->htail = (int) (fish->htail - (int) (10.0 * fish->v)) % 360;
+
+    thrash = 70.0 * fish->v;
+
+    seg0 = 1.0 * thrash * sin((fish->htail) * RRAD);
+    seg3 = 1.0 * thrash * sin((fish->htail) * RRAD);
+    seg1 = 2.0 * thrash * sin((fish->htail + 4.0) * RRAD);
+    seg2 = 3.0 * thrash * sin((fish->htail + 6.0) * RRAD);
+    seg4 = 4.0 * thrash * sin((fish->htail + 10.0) * RRAD);
+    seg5 = 4.5 * thrash * sin((fish->htail + 15.0) * RRAD);
+    seg6 = 5.0 * thrash * sin((fish->htail + 20.0) * RRAD);
+    seg7 = 6.0 * thrash * sin((fish->htail + 30.0) * RRAD);
+
+    pitch = fish->v * sin((fish->htail + 180.0) * RRAD);
+
+    if (fish->v > 2.0) {
+        chomp = -(fish->v - 2.0) * 200.0;
+    }
+    chomp = 100.0;
+
+    P012[1] = iP012[1] + seg5;
+    P013[1] = iP013[1] + seg5;
+    P014[1] = iP014[1] + seg5;
+    P015[1] = iP015[1] + seg5;
+    P016[1] = iP016[1] + seg5;
+    P017[1] = iP017[1] + seg5;
+    P018[1] = iP018[1] + seg5;
+    P019[1] = iP019[1] + seg5;
+
+    P020[1] = iP020[1] + seg4;
+    P021[1] = iP021[1] + seg4;
+    P022[1] = iP022[1] + seg4;
+    P023[1] = iP023[1] + seg4;
+    P024[1] = iP024[1] + seg4;
+    P025[1] = iP025[1] + seg4;
+    P026[1] = iP026[1] + seg4;
+    P027[1] = iP027[1] + seg4;
+
+    P028[1] = iP028[1] + seg2;
+    P029[1] = iP029[1] + seg2;
+    P030[1] = iP030[1] + seg2;
+    P031[1] = iP031[1] + seg2;
+    P032[1] = iP032[1] + seg2;
+    P033[1] = iP033[1] + seg2;
+    P034[1] = iP034[1] + seg2;
+    P035[1] = iP035[1] + seg2;
+
+    P036[1] = iP036[1] + seg1;
+    P037[1] = iP037[1] + seg1;
+    P038[1] = iP038[1] + seg1;
+    P039[1] = iP039[1] + seg1;
+    P040[1] = iP040[1] + seg1;
+    P041[1] = iP041[1] + seg1;
+    P042[1] = iP042[1] + seg1;
+    P043[1] = iP043[1] + seg1;
+
+    P044[1] = iP044[1] + seg0;
+    P045[1] = iP045[1] + seg0;
+    P046[1] = iP046[1] + seg0;
+    P047[1] = iP047[1] + seg0;
+    P048[1] = iP048[1] + seg0;
+    P049[1] = iP049[1] + seg0;
+    P050[1] = iP050[1] + seg0;
+    P051[1] = iP051[1] + seg0;
+
+    P009[1] = iP009[1] + seg6;
+    P010[1] = iP010[1] + seg6;
+    P075[1] = iP075[1] + seg6;
+    P076[1] = iP076[1] + seg6;
+
+    P001[1] = iP001[1] + seg7;
+    P011[1] = iP011[1] + seg7;
+    P068[1] = iP068[1] + seg7;
+    P069[1] = iP069[1] + seg7;
+    P070[1] = iP070[1] + seg7;
+    P071[1] = iP071[1] + seg7;
+    P072[1] = iP072[1] + seg7;
+    P073[1] = iP073[1] + seg7;
+    P074[1] = iP074[1] + seg7;
+
+    P091[1] = iP091[1] + seg3;
+    P092[1] = iP092[1] + seg3;
+    P093[1] = iP093[1] + seg3;
+    P094[1] = iP094[1] + seg3;
+    P095[1] = iP095[1] + seg3;
+    P122[1] = iP122[1] + seg3 * 1.5;
+
+    P097[1] = iP097[1] + chomp;
+    P098[1] = iP098[1] + chomp;
+    P102[1] = iP102[1] + chomp;
+    P110[1] = iP110[1] + chomp;
+    P111[1] = iP111[1] + chomp;
+    P121[1] = iP121[1] + chomp;
+    P118[1] = iP118[1] + chomp;
+    P119[1] = iP119[1] + chomp;
+
+    glPushMatrix();
+
+    glRotatef(pitch, 1.0, 0.0, 0.0);
+
+    glTranslatef(0.0, 0.0, 7000.0);
+
+    glRotatef(180.0, 0.0, 1.0, 0.0);
+
+    glEnable(GL_CULL_FACE);
+    Dolphin014();
+    Dolphin010();
+    Dolphin009();
+    Dolphin012();
+    Dolphin013();
+    Dolphin006();
+    Dolphin002();
+    Dolphin001();
+    Dolphin003();
+    Dolphin015();
+    Dolphin004();
+    Dolphin005();
+    Dolphin007();
+    Dolphin008();
+    Dolphin011();
+    Dolphin016();
+    glDisable(GL_CULL_FACE);
+
+    glPopMatrix();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/shark.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,1308 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <GLUT/glut.h>
+#include <math.h>
+#include "atlantis.h"
+/* *INDENT-OFF* */
+static float N002[3] = {0.000077 ,-0.020611 ,0.999788};
+static float N003[3] = {0.961425 ,0.258729 ,-0.093390};
+static float N004[3] = {0.510811 ,-0.769633 ,-0.383063};
+static float N005[3] = {0.400123 ,0.855734 ,-0.328055};
+static float N006[3] = {-0.770715 ,0.610204 ,-0.183440};
+static float N007[3] = {-0.915597 ,-0.373345 ,-0.149316};
+static float N008[3] = {-0.972788 ,0.208921 ,-0.100179};
+static float N009[3] = {-0.939713 ,-0.312268 ,-0.139383};
+static float N010[3] = {-0.624138 ,-0.741047 ,-0.247589};
+static float N011[3] = {0.591434 ,-0.768401 ,-0.244471};
+static float N012[3] = {0.935152 ,-0.328495 ,-0.132598};
+static float N013[3] = {0.997102 ,0.074243 ,-0.016593};
+static float N014[3] = {0.969995 ,0.241712 ,-0.026186};
+static float N015[3] = {0.844539 ,0.502628 ,-0.184714};
+static float N016[3] = {-0.906608 ,0.386308 ,-0.169787};
+static float N017[3] = {-0.970016 ,0.241698 ,-0.025516};
+static float N018[3] = {-0.998652 ,0.050493 ,-0.012045};
+static float N019[3] = {-0.942685 ,-0.333051 ,-0.020556};
+static float N020[3] = {-0.660944 ,-0.750276 ,0.015480};
+static float N021[3] = {0.503549 ,-0.862908 ,-0.042749};
+static float N022[3] = {0.953202 ,-0.302092 ,-0.012089};
+static float N023[3] = {0.998738 ,0.023574 ,0.044344};
+static float N024[3] = {0.979297 ,0.193272 ,0.060202};
+static float N025[3] = {0.798300 ,0.464885 ,0.382883};
+static float N026[3] = {-0.756590 ,0.452403 ,0.472126};
+static float N027[3] = {-0.953855 ,0.293003 ,0.065651};
+static float N028[3] = {-0.998033 ,0.040292 ,0.048028};
+static float N029[3] = {-0.977079 ,-0.204288 ,0.059858};
+static float N030[3] = {-0.729117 ,-0.675304 ,0.111140};
+static float N031[3] = {0.598361 ,-0.792753 ,0.116221};
+static float N032[3] = {0.965192 ,-0.252991 ,0.066332};
+static float N033[3] = {0.998201 ,-0.002790 ,0.059892};
+static float N034[3] = {0.978657 ,0.193135 ,0.070207};
+static float N035[3] = {0.718815 ,0.680392 ,0.142733};
+static float N036[3] = {-0.383096 ,0.906212 ,0.178936};
+static float N037[3] = {-0.952831 ,0.292590 ,0.080647};
+static float N038[3] = {-0.997680 ,0.032417 ,0.059861};
+static float N039[3] = {-0.982629 ,-0.169881 ,0.074700};
+static float N040[3] = {-0.695424 ,-0.703466 ,0.146700};
+static float N041[3] = {0.359323 ,-0.915531 ,0.180805};
+static float N042[3] = {0.943356 ,-0.319387 ,0.089842};
+static float N043[3] = {0.998272 ,-0.032435 ,0.048993};
+static float N044[3] = {0.978997 ,0.193205 ,0.065084};
+static float N045[3] = {0.872144 ,0.470094 ,-0.135565};
+static float N046[3] = {-0.664282 ,0.737945 ,-0.119027};
+static float N047[3] = {-0.954508 ,0.288570 ,0.075107};
+static float N048[3] = {-0.998273 ,0.032406 ,0.048993};
+static float N049[3] = {-0.979908 ,-0.193579 ,0.048038};
+static float N050[3] = {-0.858736 ,-0.507202 ,-0.072938};
+static float N051[3] = {0.643545 ,-0.763887 ,-0.048237};
+static float N052[3] = {0.955580 ,-0.288954 ,0.058068};
+static float N058[3] = {0.000050 ,0.793007 ,-0.609213};
+static float N059[3] = {0.913510 ,0.235418 ,-0.331779};
+static float N060[3] = {-0.807970 ,0.495000 ,-0.319625};
+static float N061[3] = {0.000000 ,0.784687 ,-0.619892};
+static float N062[3] = {0.000000 ,-1.000000 ,0.000000};
+static float N063[3] = {0.000000 ,1.000000 ,0.000000};
+static float N064[3] = {0.000000 ,1.000000 ,0.000000};
+static float N065[3] = {0.000000 ,1.000000 ,0.000000};
+static float N066[3] = {-0.055784 ,0.257059 ,0.964784};
+static float N069[3] = {-0.000505 ,-0.929775 ,-0.368127};
+static float N070[3] = {0.000000 ,1.000000 ,0.000000};
+static float P002[3] = {0.00, -36.59, 5687.72};
+static float P003[3] = {90.00, 114.73, 724.38};
+static float P004[3] = {58.24, -146.84, 262.35};
+static float P005[3] = {27.81, 231.52, 510.43};
+static float P006[3] = {-27.81, 230.43, 509.76};
+static float P007[3] = {-46.09, -146.83, 265.84};
+static float P008[3] = {-90.00, 103.84, 718.53};
+static float P009[3] = {-131.10, -165.92, 834.85};
+static float P010[3] = {-27.81, -285.31, 500.00};
+static float P011[3] = {27.81, -285.32, 500.00};
+static float P012[3] = {147.96, -170.89, 845.50};
+static float P013[3] = {180.00, 0.00, 2000.00};
+static float P014[3] = {145.62, 352.67, 2000.00};
+static float P015[3] = {55.62, 570.63, 2000.00};
+static float P016[3] = {-55.62, 570.64, 2000.00};
+static float P017[3] = {-145.62, 352.68, 2000.00};
+static float P018[3] = {-180.00, 0.01, 2000.00};
+static float P019[3] = {-178.20, -352.66, 2001.61};
+static float P020[3] = {-55.63, -570.63, 2000.00};
+static float P021[3] = {55.62, -570.64, 2000.00};
+static float P022[3] = {179.91, -352.69, 1998.39};
+static float P023[3] = {150.00, 0.00, 3000.00};
+static float P024[3] = {121.35, 293.89, 3000.00};
+static float P025[3] = {46.35, 502.93, 2883.09};
+static float P026[3] = {-46.35, 497.45, 2877.24};
+static float P027[3] = {-121.35, 293.90, 3000.00};
+static float P028[3] = {-150.00, 0.00, 3000.00};
+static float P029[3] = {-152.21, -304.84, 2858.68};
+static float P030[3] = {-46.36, -475.52, 3000.00};
+static float P031[3] = {46.35, -475.53, 3000.00};
+static float P032[3] = {155.64, -304.87, 2863.50};
+static float P033[3] = {90.00, 0.00, 4000.00};
+static float P034[3] = {72.81, 176.33, 4000.00};
+static float P035[3] = {27.81, 285.32, 4000.00};
+static float P036[3] = {-27.81, 285.32, 4000.00};
+static float P037[3] = {-72.81, 176.34, 4000.00};
+static float P038[3] = {-90.00, 0.00, 4000.00};
+static float P039[3] = {-72.81, -176.33, 4000.00};
+static float P040[3] = {-27.81, -285.31, 4000.00};
+static float P041[3] = {27.81, -285.32, 4000.00};
+static float P042[3] = {72.81, -176.34, 4000.00};
+static float P043[3] = {30.00, 0.00, 5000.00};
+static float P044[3] = {24.27, 58.78, 5000.00};
+static float P045[3] = {9.27, 95.11, 5000.00};
+static float P046[3] = {-9.27, 95.11, 5000.00};
+static float P047[3] = {-24.27, 58.78, 5000.00};
+static float P048[3] = {-30.00, 0.00, 5000.00};
+static float P049[3] = {-24.27, -58.78, 5000.00};
+static float P050[3] = {-9.27, -95.10, 5000.00};
+static float P051[3] = {9.27, -95.11, 5000.00};
+static float P052[3] = {24.27, -58.78, 5000.00};
+static float P058[3] = {0.00, 1212.72, 2703.08};
+static float P059[3] = {50.36, 0.00, 108.14};
+static float P060[3] = {-22.18, 0.00, 108.14};
+static float P061[3] = {0.00, 1181.61, 6344.65};
+static float P062[3] = {516.45, -887.08, 2535.45};
+static float P063[3] = {-545.69, -879.31, 2555.63};
+static float P064[3] = {618.89, -1005.64, 2988.32};
+static float P065[3] = {-635.37, -1014.79, 2938.68};
+static float P066[3] = {0.00, 1374.43, 3064.18};
+static float P069[3] = {0.00, -418.25, 5765.04};
+static float P070[3] = {0.00, 1266.91, 6629.60};
+static float P071[3] = {-139.12, -124.96, 997.98};
+static float P072[3] = {-139.24, -110.18, 1020.68};
+static float P073[3] = {-137.33, -94.52, 1022.63};
+static float P074[3] = {-137.03, -79.91, 996.89};
+static float P075[3] = {-135.21, -91.48, 969.14};
+static float P076[3] = {-135.39, -110.87, 968.76};
+static float P077[3] = {150.23, -78.44, 995.53};
+static float P078[3] = {152.79, -92.76, 1018.46};
+static float P079[3] = {154.19, -110.20, 1020.55};
+static float P080[3] = {151.33, -124.15, 993.77};
+static float P081[3] = {150.49, -111.19, 969.86};
+static float P082[3] = {150.79, -92.41, 969.70};
+static float iP002[3] = {0.00, -36.59, 5687.72};
+static float iP004[3] = {58.24, -146.84, 262.35};
+static float iP007[3] = {-46.09, -146.83, 265.84};
+static float iP010[3] = {-27.81, -285.31, 500.00};
+static float iP011[3] = {27.81, -285.32, 500.00};
+static float iP023[3] = {150.00, 0.00, 3000.00};
+static float iP024[3] = {121.35, 293.89, 3000.00};
+static float iP025[3] = {46.35, 502.93, 2883.09};
+static float iP026[3] = {-46.35, 497.45, 2877.24};
+static float iP027[3] = {-121.35, 293.90, 3000.00};
+static float iP028[3] = {-150.00, 0.00, 3000.00};
+static float iP029[3] = {-121.35, -304.84, 2853.86};
+static float iP030[3] = {-46.36, -475.52, 3000.00};
+static float iP031[3] = {46.35, -475.53, 3000.00};
+static float iP032[3] = {121.35, -304.87, 2853.86};
+static float iP033[3] = {90.00, 0.00, 4000.00};
+static float iP034[3] = {72.81, 176.33, 4000.00};
+static float iP035[3] = {27.81, 285.32, 4000.00};
+static float iP036[3] = {-27.81, 285.32, 4000.00};
+static float iP037[3] = {-72.81, 176.34, 4000.00};
+static float iP038[3] = {-90.00, 0.00, 4000.00};
+static float iP039[3] = {-72.81, -176.33, 4000.00};
+static float iP040[3] = {-27.81, -285.31, 4000.00};
+static float iP041[3] = {27.81, -285.32, 4000.00};
+static float iP042[3] = {72.81, -176.34, 4000.00};
+static float iP043[3] = {30.00, 0.00, 5000.00};
+static float iP044[3] = {24.27, 58.78, 5000.00};
+static float iP045[3] = {9.27, 95.11, 5000.00};
+static float iP046[3] = {-9.27, 95.11, 5000.00};
+static float iP047[3] = {-24.27, 58.78, 5000.00};
+static float iP048[3] = {-30.00, 0.00, 5000.00};
+static float iP049[3] = {-24.27, -58.78, 5000.00};
+static float iP050[3] = {-9.27, -95.10, 5000.00};
+static float iP051[3] = {9.27, -95.11, 5000.00};
+static float iP052[3] = {24.27, -58.78, 5000.00};
+static float iP061[3] = {0.00, 1181.61, 6344.65};
+static float iP069[3] = {0.00, -418.25, 5765.04};
+static float iP070[3] = {0.00, 1266.91, 6629.60};
+/* *INDENT-ON* */
+
+void
+Fish001(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N007);
+    glVertex3fv(P007);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glNormal3fv(N007);
+    glVertex3fv(P007);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P071);
+    glVertex3fv(P072);
+    glVertex3fv(P073);
+    glVertex3fv(P074);
+    glVertex3fv(P075);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P077);
+    glVertex3fv(P078);
+    glVertex3fv(P079);
+    glVertex3fv(P080);
+    glVertex3fv(P081);
+    glVertex3fv(P082);
+    glEnd();
+}
+
+void
+Fish002(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+}
+
+void
+Fish003(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glEnd();
+}
+
+void
+Fish004(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N061);
+    glVertex3fv(P061);
+    glEnd();
+}
+
+void
+Fish005(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+}
+
+void
+Fish006(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+}
+
+void
+Fish007(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N064);
+    glVertex3fv(P064);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+}
+
+void
+Fish008(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+}
+
+void
+Fish009(void)
+{
+    glBegin(GL_POLYGON);
+    glVertex3fv(P059);
+    glVertex3fv(P012);
+    glVertex3fv(P009);
+    glVertex3fv(P060);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P012);
+    glVertex3fv(P004);
+    glVertex3fv(P007);
+    glVertex3fv(P009);
+    glEnd();
+}
+
+void
+Fish_1(void)
+{
+    Fish004();
+    Fish005();
+    Fish003();
+    Fish007();
+    Fish006();
+    Fish002();
+    Fish008();
+    Fish009();
+    Fish001();
+}
+
+void
+Fish_2(void)
+{
+    Fish005();
+    Fish004();
+    Fish003();
+    Fish008();
+    Fish006();
+    Fish002();
+    Fish007();
+    Fish009();
+    Fish001();
+}
+
+void
+Fish_3(void)
+{
+    Fish005();
+    Fish004();
+    Fish007();
+    Fish003();
+    Fish002();
+    Fish008();
+    Fish009();
+    Fish001();
+    Fish006();
+}
+
+void
+Fish_4(void)
+{
+    Fish005();
+    Fish004();
+    Fish008();
+    Fish003();
+    Fish002();
+    Fish007();
+    Fish009();
+    Fish001();
+    Fish006();
+}
+
+void
+Fish_5(void)
+{
+    Fish009();
+    Fish006();
+    Fish007();
+    Fish001();
+    Fish002();
+    Fish003();
+    Fish008();
+    Fish004();
+    Fish005();
+}
+
+void
+Fish_6(void)
+{
+    Fish009();
+    Fish006();
+    Fish008();
+    Fish001();
+    Fish002();
+    Fish007();
+    Fish003();
+    Fish004();
+    Fish005();
+}
+
+void
+Fish_7(void)
+{
+    Fish009();
+    Fish001();
+    Fish007();
+    Fish005();
+    Fish002();
+    Fish008();
+    Fish003();
+    Fish004();
+    Fish006();
+}
+
+void
+Fish_8(void)
+{
+    Fish009();
+    Fish008();
+    Fish001();
+    Fish002();
+    Fish007();
+    Fish003();
+    Fish005();
+    Fish004();
+    Fish006();
+}
+
+void
+DrawShark(fishRec * fish)
+{
+    float mat[4][4];
+    int n;
+    float seg1, seg2, seg3, seg4, segup;
+    float thrash, chomp;
+
+    fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
+
+    thrash = 50.0 * fish->v;
+
+    seg1 = 0.6 * thrash * sin(fish->htail * RRAD);
+    seg2 = 1.8 * thrash * sin((fish->htail + 45.0) * RRAD);
+    seg3 = 3.0 * thrash * sin((fish->htail + 90.0) * RRAD);
+    seg4 = 4.0 * thrash * sin((fish->htail + 110.0) * RRAD);
+
+    chomp = 0.0;
+    if (fish->v > 2.0) {
+        chomp = -(fish->v - 2.0) * 200.0;
+    }
+    P004[1] = iP004[1] + chomp;
+    P007[1] = iP007[1] + chomp;
+    P010[1] = iP010[1] + chomp;
+    P011[1] = iP011[1] + chomp;
+
+    P023[0] = iP023[0] + seg1;
+    P024[0] = iP024[0] + seg1;
+    P025[0] = iP025[0] + seg1;
+    P026[0] = iP026[0] + seg1;
+    P027[0] = iP027[0] + seg1;
+    P028[0] = iP028[0] + seg1;
+    P029[0] = iP029[0] + seg1;
+    P030[0] = iP030[0] + seg1;
+    P031[0] = iP031[0] + seg1;
+    P032[0] = iP032[0] + seg1;
+    P033[0] = iP033[0] + seg2;
+    P034[0] = iP034[0] + seg2;
+    P035[0] = iP035[0] + seg2;
+    P036[0] = iP036[0] + seg2;
+    P037[0] = iP037[0] + seg2;
+    P038[0] = iP038[0] + seg2;
+    P039[0] = iP039[0] + seg2;
+    P040[0] = iP040[0] + seg2;
+    P041[0] = iP041[0] + seg2;
+    P042[0] = iP042[0] + seg2;
+    P043[0] = iP043[0] + seg3;
+    P044[0] = iP044[0] + seg3;
+    P045[0] = iP045[0] + seg3;
+    P046[0] = iP046[0] + seg3;
+    P047[0] = iP047[0] + seg3;
+    P048[0] = iP048[0] + seg3;
+    P049[0] = iP049[0] + seg3;
+    P050[0] = iP050[0] + seg3;
+    P051[0] = iP051[0] + seg3;
+    P052[0] = iP052[0] + seg3;
+    P002[0] = iP002[0] + seg4;
+    P061[0] = iP061[0] + seg4;
+    P069[0] = iP069[0] + seg4;
+    P070[0] = iP070[0] + seg4;
+
+    fish->vtail += ((fish->dtheta - fish->vtail) * 0.1);
+
+    if (fish->vtail > 0.5) {
+        fish->vtail = 0.5;
+    } else if (fish->vtail < -0.5) {
+        fish->vtail = -0.5;
+    }
+    segup = thrash * fish->vtail;
+
+    P023[1] = iP023[1] + segup;
+    P024[1] = iP024[1] + segup;
+    P025[1] = iP025[1] + segup;
+    P026[1] = iP026[1] + segup;
+    P027[1] = iP027[1] + segup;
+    P028[1] = iP028[1] + segup;
+    P029[1] = iP029[1] + segup;
+    P030[1] = iP030[1] + segup;
+    P031[1] = iP031[1] + segup;
+    P032[1] = iP032[1] + segup;
+    P033[1] = iP033[1] + segup * 5.0;
+    P034[1] = iP034[1] + segup * 5.0;
+    P035[1] = iP035[1] + segup * 5.0;
+    P036[1] = iP036[1] + segup * 5.0;
+    P037[1] = iP037[1] + segup * 5.0;
+    P038[1] = iP038[1] + segup * 5.0;
+    P039[1] = iP039[1] + segup * 5.0;
+    P040[1] = iP040[1] + segup * 5.0;
+    P041[1] = iP041[1] + segup * 5.0;
+    P042[1] = iP042[1] + segup * 5.0;
+    P043[1] = iP043[1] + segup * 12.0;
+    P044[1] = iP044[1] + segup * 12.0;
+    P045[1] = iP045[1] + segup * 12.0;
+    P046[1] = iP046[1] + segup * 12.0;
+    P047[1] = iP047[1] + segup * 12.0;
+    P048[1] = iP048[1] + segup * 12.0;
+    P049[1] = iP049[1] + segup * 12.0;
+    P050[1] = iP050[1] + segup * 12.0;
+    P051[1] = iP051[1] + segup * 12.0;
+    P052[1] = iP052[1] + segup * 12.0;
+    P002[1] = iP002[1] + segup * 17.0;
+    P061[1] = iP061[1] + segup * 17.0;
+    P069[1] = iP069[1] + segup * 17.0;
+    P070[1] = iP070[1] + segup * 17.0;
+
+    glPushMatrix();
+
+    glTranslatef(0.0, 0.0, -3000.0);
+
+    glGetFloatv(GL_MODELVIEW_MATRIX, &mat[0][0]);
+    n = 0;
+    if (mat[0][2] >= 0.0) {
+        n += 1;
+    }
+    if (mat[1][2] >= 0.0) {
+        n += 2;
+    }
+    if (mat[2][2] >= 0.0) {
+        n += 4;
+    }
+    glScalef(2.0, 1.0, 1.0);
+
+    glEnable(GL_CULL_FACE);
+    switch (n) {
+    case 0:
+        Fish_1();
+        break;
+    case 1:
+        Fish_2();
+        break;
+    case 2:
+        Fish_3();
+        break;
+    case 3:
+        Fish_4();
+        break;
+    case 4:
+        Fish_5();
+        break;
+    case 5:
+        Fish_6();
+        break;
+    case 6:
+        Fish_7();
+        break;
+    case 7:
+        Fish_8();
+        break;
+    }
+    glDisable(GL_CULL_FACE);
+
+    glPopMatrix();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/swim.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,188 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <math.h>
+#include <stdlib.h>  /* For rand(). */
+#include <GLUT/glut.h>
+#include "atlantis.h"
+
+void
+FishTransform(fishRec * fish)
+{
+
+    glTranslatef(fish->y, fish->z, -fish->x);
+    glRotatef(-fish->psi, 0.0, 1.0, 0.0);
+    glRotatef(fish->theta, 1.0, 0.0, 0.0);
+    glRotatef(-fish->phi, 0.0, 0.0, 1.0);
+}
+
+void
+WhalePilot(fishRec * fish)
+{
+
+    fish->phi = -20.0;
+    fish->theta = 0.0;
+    fish->psi -= 0.5;
+
+    fish->x += WHALESPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
+    fish->y += WHALESPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
+    fish->z += WHALESPEED * fish->v * sin(fish->theta / RAD);
+}
+
+void
+SharkPilot(fishRec * fish)
+{
+    static int sign = 1;
+    float X, Y, Z, tpsi, ttheta, thetal;
+
+    fish->xt = 60000.0;
+    fish->yt = 0.0;
+    fish->zt = 0.0;
+
+    X = fish->xt - fish->x;
+    Y = fish->yt - fish->y;
+    Z = fish->zt - fish->z;
+
+    thetal = fish->theta;
+
+    ttheta = RAD * atan(Z / (sqrt(X * X + Y * Y)));
+
+    if (ttheta > fish->theta + 0.25) {
+        fish->theta += 0.5;
+    } else if (ttheta < fish->theta - 0.25) {
+        fish->theta -= 0.5;
+    }
+    if (fish->theta > 90.0) {
+        fish->theta = 90.0;
+    }
+    if (fish->theta < -90.0) {
+        fish->theta = -90.0;
+    }
+    fish->dtheta = fish->theta - thetal;
+
+    tpsi = RAD * atan2(Y, X);
+
+    fish->attack = 0;
+
+    if (fabs(tpsi - fish->psi) < 10.0) {
+        fish->attack = 1;
+    } else if (fabs(tpsi - fish->psi) < 45.0) {
+        if (fish->psi > tpsi) {
+            fish->psi -= 0.5;
+            if (fish->psi < -180.0) {
+                fish->psi += 360.0;
+            }
+        } else if (fish->psi < tpsi) {
+            fish->psi += 0.5;
+            if (fish->psi > 180.0) {
+                fish->psi -= 360.0;
+            }
+        }
+    } else {
+        if (rand() % 100 > 98) {
+            sign = 1 - sign;
+        }
+        fish->psi += sign;
+        if (fish->psi > 180.0) {
+            fish->psi -= 360.0;
+        }
+        if (fish->psi < -180.0) {
+            fish->psi += 360.0;
+        }
+    }
+
+    if (fish->attack) {
+        if (fish->v < 1.1) {
+            fish->spurt = 1;
+        }
+        if (fish->spurt) {
+            fish->v += 0.2;
+        }
+        if (fish->v > 5.0) {
+            fish->spurt = 0;
+        }
+        if ((fish->v > 1.0) && (!fish->spurt)) {
+            fish->v -= 0.2;
+        }
+    } else {
+        if (!(rand() % 400) && (!fish->spurt)) {
+            fish->spurt = 1;
+        }
+        if (fish->spurt) {
+            fish->v += 0.05;
+        }
+        if (fish->v > 3.0) {
+            fish->spurt = 0;
+        }
+        if ((fish->v > 1.0) && (!fish->spurt)) {
+            fish->v -= 0.05;
+        }
+    }
+
+    fish->x += SHARKSPEED * fish->v * cos(fish->psi / RAD) * cos(fish->theta / RAD);
+    fish->y += SHARKSPEED * fish->v * sin(fish->psi / RAD) * cos(fish->theta / RAD);
+    fish->z += SHARKSPEED * fish->v * sin(fish->theta / RAD);
+}
+
+void
+SharkMiss(int i)
+{
+    int j;
+    float avoid, thetal;
+    float X, Y, Z, R;
+
+    for (j = 0; j < NUM_SHARKS; j++) {
+        if (j != i) {
+            X = sharks[j].x - sharks[i].x;
+            Y = sharks[j].y - sharks[i].y;
+            Z = sharks[j].z - sharks[i].z;
+
+            R = sqrt(X * X + Y * Y + Z * Z);
+
+            avoid = 1.0;
+            thetal = sharks[i].theta;
+
+            if (R < SHARKSIZE) {
+                if (Z > 0.0) {
+                    sharks[i].theta -= avoid;
+                } else {
+                    sharks[i].theta += avoid;
+                }
+            }
+            sharks[i].dtheta += (sharks[i].theta - thetal);
+        }
+    }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac OpenGL Application.xctemplate/atlantis/whale.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,1798 @@
+/**
+ * (c) Copyright 1993, 1994, Silicon Graphics, Inc.
+ * ALL RIGHTS RESERVED
+ * Permission to use, copy, modify, and distribute this software for
+ * any purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies and that both the copyright notice
+ * and this permission notice appear in supporting documentation, and that
+ * the name of Silicon Graphics, Inc. not be used in advertising
+ * or publicity pertaining to distribution of the software without specific,
+ * written prior permission.
+ *
+ * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
+ * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
+ * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
+ * FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL SILICON
+ * GRAPHICS, INC.  BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
+ * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
+ * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
+ * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
+ * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC.  HAS BEEN
+ * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
+ * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * US Government Users Restricted Rights
+ * Use, duplication, or disclosure by the Government is subject to
+ * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
+ * (c)(1)(ii) of the Rights in Technical Data and Computer Software
+ * clause at DFARS 252.227-7013 and/or in similar or successor
+ * clauses in the FAR or the DOD or NASA FAR Supplement.
+ * Unpublished-- rights reserved under the copyright laws of the
+ * United States.  Contractor/manufacturer is Silicon Graphics,
+ * Inc., 2011 N.  Shoreline Blvd., Mountain View, CA 94039-7311.
+ *
+ * OpenGL(TM) is a trademark of Silicon Graphics, Inc.
+ */
+#include <GLUT/glut.h>
+#include <math.h>
+#include "atlantis.h"
+/* *INDENT-OFF* */
+static float N001[3] = {0.019249 ,0.011340 ,-0.999750};
+static float N002[3] = {-0.132579 ,0.954547 ,0.266952};
+static float N003[3] = {-0.196061 ,0.980392 ,-0.019778};
+static float N004[3] = {0.695461 ,0.604704 ,0.388158};
+static float N005[3] = {0.870600 ,0.425754 ,0.246557};
+static float N006[3] = {-0.881191 ,0.392012 ,0.264251};
+static float N008[3] = {-0.341437 ,0.887477 ,0.309523};
+static float N009[3] = {0.124035 ,-0.992278 ,0.000000};
+static float N010[3] = {0.242536 ,0.000000 ,-0.970143};
+static float N011[3] = {0.588172 ,0.000000 ,0.808736};
+static float N012[3] = {0.929824 ,-0.340623 ,-0.139298};
+static float N013[3] = {0.954183 ,0.267108 ,-0.134865};
+static float N014[3] = {0.495127 ,0.855436 ,-0.151914};
+static float N015[3] = {-0.390199 ,0.906569 ,-0.160867};
+static float N016[3] = {-0.923605 ,0.354581 ,-0.145692};
+static float N017[3] = {-0.955796 ,-0.260667 ,-0.136036};
+static float N018[3] = {-0.501283 ,-0.853462 ,-0.142540};
+static float N019[3] = {0.405300 ,-0.901974 ,-0.148913};
+static float N020[3] = {0.909913 ,-0.392746 ,-0.133451};
+static float N021[3] = {0.936494 ,0.331147 ,-0.115414};
+static float N022[3] = {0.600131 ,0.793724 ,-0.099222};
+static float N023[3] = {-0.231556 ,0.968361 ,-0.093053};
+static float N024[3] = {-0.844369 ,0.525330 ,-0.105211};
+static float N025[3] = {-0.982725 ,-0.136329 ,-0.125164};
+static float N026[3] = {-0.560844 ,-0.822654 ,-0.093241};
+static float N027[3] = {0.263884 ,-0.959981 ,-0.093817};
+static float N028[3] = {0.842057 ,-0.525192 ,-0.122938};
+static float N029[3] = {0.921620 ,0.367565 ,-0.124546};
+static float N030[3] = {0.613927 ,0.784109 ,-0.090918};
+static float N031[3] = {-0.448754 ,0.888261 ,-0.098037};
+static float N032[3] = {-0.891865 ,0.434376 ,-0.126077};
+static float N033[3] = {-0.881447 ,-0.448017 ,-0.149437};
+static float N034[3] = {-0.345647 ,-0.922057 ,-0.174183};
+static float N035[3] = {0.307998 ,-0.941371 ,-0.137688};
+static float N036[3] = {0.806316 ,-0.574647 ,-0.140124};
+static float N037[3] = {0.961346 ,0.233646 ,-0.145681};
+static float N038[3] = {0.488451 ,0.865586 ,-0.110351};
+static float N039[3] = {-0.374290 ,0.921953 ,-0.099553};
+static float N040[3] = {-0.928504 ,0.344533 ,-0.138485};
+static float N041[3] = {-0.918419 ,-0.371792 ,-0.135189};
+static float N042[3] = {-0.520666 ,-0.833704 ,-0.183968};
+static float N043[3] = {0.339204 ,-0.920273 ,-0.195036};
+static float N044[3] = {0.921475 ,-0.387382 ,-0.028636};
+static float N045[3] = {0.842465 ,0.533335 ,-0.076204};
+static float N046[3] = {0.380110 ,0.924939 ,0.002073};
+static float N047[3] = {-0.276128 ,0.961073 ,-0.009579};
+static float N048[3] = {-0.879684 ,0.473001 ,-0.049250};
+static float N049[3] = {-0.947184 ,-0.317614 ,-0.044321};
+static float N050[3] = {-0.642059 ,-0.764933 ,-0.051363};
+static float N051[3] = {0.466794 ,-0.880921 ,-0.077990};
+static float N052[3] = {0.898509 ,-0.432277 ,0.076279};
+static float N053[3] = {0.938985 ,0.328141 ,0.103109};
+static float N054[3] = {0.442420 ,0.895745 ,0.043647};
+static float N055[3] = {-0.255163 ,0.966723 ,0.018407};
+static float N056[3] = {-0.833769 ,0.540650 ,0.111924};
+static float N057[3] = {-0.953653 ,-0.289939 ,0.080507};
+static float N058[3] = {-0.672357 ,-0.730524 ,0.119461};
+static float N059[3] = {0.522249 ,-0.846652 ,0.102157};
+static float N060[3] = {0.885868 ,-0.427631 ,0.179914};
+static float N062[3] = {0.648942 ,0.743116 ,0.163255};
+static float N063[3] = {-0.578967 ,0.807730 ,0.111219};
+static float N065[3] = {-0.909864 ,-0.352202 ,0.219321};
+static float N066[3] = {-0.502541 ,-0.818090 ,0.279610};
+static float N067[3] = {0.322919 ,-0.915358 ,0.240504};
+static float N068[3] = {0.242536 ,0.000000 ,-0.970143};
+static float N069[3] = {0.000000 ,1.000000 ,0.000000};
+static float N070[3] = {0.000000 ,1.000000 ,0.000000};
+static float N071[3] = {0.000000 ,1.000000 ,0.000000};
+static float N072[3] = {0.000000 ,1.000000 ,0.000000};
+static float N073[3] = {0.000000 ,1.000000 ,0.000000};
+static float N074[3] = {0.000000 ,1.000000 ,0.000000};
+static float N075[3] = {0.031220 ,0.999025 ,-0.031220};
+static float N076[3] = {0.000000 ,1.000000 ,0.000000};
+static float N077[3] = {0.446821 ,0.893642 ,0.041889};
+static float N078[3] = {0.863035 ,-0.100980 ,0.494949};
+static float N079[3] = {0.585597 ,-0.808215 ,0.062174};
+static float N080[3] = {0.000000 ,1.000000 ,0.000000};
+static float N081[3] = {1.000000 ,0.000000 ,0.000000};
+static float N082[3] = {0.000000 ,1.000000 ,0.000000};
+static float N083[3] = {-1.000000 ,0.000000 ,0.000000};
+static float N084[3] = {-0.478893 ,0.837129 ,-0.264343};
+static float N085[3] = {0.000000 ,1.000000 ,0.000000};
+static float N086[3] = {0.763909 ,0.539455 ,-0.354163};
+static float N087[3] = {0.446821 ,0.893642 ,0.041889};
+static float N088[3] = {0.385134 ,-0.908288 ,0.163352};
+static float N089[3] = {-0.605952 ,0.779253 ,-0.159961};
+static float N090[3] = {0.000000 ,1.000000 ,0.000000};
+static float N091[3] = {0.000000 ,1.000000 ,0.000000};
+static float N092[3] = {0.000000 ,1.000000 ,0.000000};
+static float N093[3] = {0.000000 ,1.000000 ,0.000000};
+static float N094[3] = {1.000000 ,0.000000 ,0.000000};
+static float N095[3] = {-1.000000 ,0.000000 ,0.000000};
+static float N096[3] = {0.644444 ,-0.621516 ,0.445433};
+static float N097[3] = {-0.760896 ,-0.474416 ,0.442681};
+static float N098[3] = {0.636888 ,-0.464314 ,0.615456};
+static float N099[3] = {-0.710295 ,0.647038 ,0.277168};
+static float N100[3] = {0.009604 ,0.993655 ,0.112063};
+static float iP001[3] = {18.74, 13.19, 3.76};
+static float P001[3] = {18.74, 13.19, 3.76};
+static float P002[3] = {0.00, 390.42, 10292.57};
+static float P003[3] = {55.80, 622.31, 8254.35};
+static float P004[3] = {20.80, 247.66, 10652.13};
+static float P005[3] = {487.51, 198.05, 9350.78};
+static float P006[3] = {-457.61, 199.04, 9353.01};
+static float P008[3] = {-34.67, 247.64, 10663.71};
+static float iP009[3] = {97.46, 67.63, 593.82};
+static float iP010[3] = {-84.33, 67.63, 588.18};
+static float iP011[3] = {118.69, 8.98, -66.91};
+static float P009[3] = {97.46, 67.63, 593.82};
+static float P010[3] = {-84.33, 67.63, 588.18};
+static float P011[3] = {118.69, 8.98, -66.91};
+static float iP012[3] = {156.48, -31.95, 924.54};
+static float iP013[3] = {162.00, 110.22, 924.54};
+static float iP014[3] = {88.16, 221.65, 924.54};
+static float iP015[3] = {-65.21, 231.16, 924.54};
+static float iP016[3] = {-156.48, 121.97, 924.54};
+static float iP017[3] = {-162.00, -23.93, 924.54};
+static float iP018[3] = {-88.16, -139.10, 924.54};
+static float iP019[3] = {65.21, -148.61, 924.54};
+static float iP020[3] = {246.87, -98.73, 1783.04};
+static float iP021[3] = {253.17, 127.76, 1783.04};
+static float iP022[3] = {132.34, 270.77, 1783.04};
+static float iP023[3] = {-97.88, 285.04, 1783.04};
+static float iP024[3] = {-222.97, 139.80, 1783.04};
+static float iP025[3] = {-225.29, -86.68, 1783.04};
+static float iP026[3] = {-108.44, -224.15, 1783.04};
+static float iP027[3] = {97.88, -221.56, 1783.04};
+static float iP028[3] = {410.55, -200.66, 3213.87};
+static float iP029[3] = {432.19, 148.42, 3213.87};
+static float iP030[3] = {200.66, 410.55, 3213.87};
+static float iP031[3] = {-148.42, 432.19, 3213.87};
+static float iP032[3] = {-407.48, 171.88, 3213.87};
+static float iP033[3] = {-432.19, -148.42, 3213.87};
+static float iP034[3] = {-148.88, -309.74, 3213.87};
+static float iP035[3] = {156.38, -320.17, 3213.87};
+static float iP036[3] = {523.39, -303.81, 4424.57};
+static float iP037[3] = {574.66, 276.84, 4424.57};
+static float iP038[3] = {243.05, 492.50, 4424.57};
+static float iP039[3] = {-191.23, 520.13, 4424.57};
+static float iP040[3] = {-523.39, 304.01, 4424.57};
+static float iP041[3] = {-574.66, -231.83, 4424.57};
+static float iP042[3] = {-266.95, -578.17, 4424.57};
+static float iP043[3] = {211.14, -579.67, 4424.57};
+static float iP044[3] = {680.57, -370.27, 5943.46};
+static float iP045[3] = {834.01, 363.09, 5943.46};
+static float iP046[3] = {371.29, 614.13, 5943.46};
+static float iP047[3] = {-291.43, 621.86, 5943.46};
+static float iP048[3] = {-784.13, 362.60, 5943.46};
+static float iP049[3] = {-743.29, -325.82, 5943.46};
+static float iP050[3] = {-383.24, -804.77, 5943.46};
+static float iP051[3] = {283.47, -846.09, 5943.46};
+static float P012[3] = {156.48, -31.95, 924.54};
+static float P013[3] = {162.00, 110.22, 924.54};
+static float P014[3] = {88.16, 221.65, 924.54};
+static float P015[3] = {-65.21, 231.16, 924.54};
+static float P016[3] = {-156.48, 121.97, 924.54};
+static float P017[3] = {-162.00, -23.93, 924.54};
+static float P018[3] = {-88.16, -139.10, 924.54};
+static float P019[3] = {65.21, -148.61, 924.54};
+static float P020[3] = {246.87, -98.73, 1783.04};
+static float P021[3] = {253.17, 127.76, 1783.04};
+static float P022[3] = {132.34, 270.77, 1783.04};
+static float P023[3] = {-97.88, 285.04, 1783.04};
+static float P024[3] = {-222.97, 139.80, 1783.04};
+static float P025[3] = {-225.29, -86.68, 1783.04};
+static float P026[3] = {-108.44, -224.15, 1783.04};
+static float P027[3] = {97.88, -221.56, 1783.04};
+static float P028[3] = {410.55, -200.66, 3213.87};
+static float P029[3] = {432.19, 148.42, 3213.87};
+static float P030[3] = {200.66, 410.55, 3213.87};
+static float P031[3] = {-148.42, 432.19, 3213.87};
+static float P032[3] = {-407.48, 171.88, 3213.87};
+static float P033[3] = {-432.19, -148.42, 3213.87};
+static float P034[3] = {-148.88, -309.74, 3213.87};
+static float P035[3] = {156.38, -320.17, 3213.87};
+static float P036[3] = {523.39, -303.81, 4424.57};
+static float P037[3] = {574.66, 276.84, 4424.57};
+static float P038[3] = {243.05, 492.50, 4424.57};
+static float P039[3] = {-191.23, 520.13, 4424.57};
+static float P040[3] = {-523.39, 304.01, 4424.57};
+static float P041[3] = {-574.66, -231.83, 4424.57};
+static float P042[3] = {-266.95, -578.17, 4424.57};
+static float P043[3] = {211.14, -579.67, 4424.57};
+static float P044[3] = {680.57, -370.27, 5943.46};
+static float P045[3] = {834.01, 363.09, 5943.46};
+static float P046[3] = {371.29, 614.13, 5943.46};
+static float P047[3] = {-291.43, 621.86, 5943.46};
+static float P048[3] = {-784.13, 362.60, 5943.46};
+static float P049[3] = {-743.29, -325.82, 5943.46};
+static float P050[3] = {-383.24, -804.77, 5943.46};
+static float P051[3] = {283.47, -846.09, 5943.46};
+static float P052[3] = {599.09, -332.24, 7902.59};
+static float P053[3] = {735.48, 306.26, 7911.92};
+static float P054[3] = {321.55, 558.53, 7902.59};
+static float P055[3] = {-260.54, 559.84, 7902.59};
+static float P056[3] = {-698.66, 320.83, 7902.59};
+static float P057[3] = {-643.29, -299.16, 7902.59};
+static float P058[3] = {-341.47, -719.30, 7902.59};
+static float P059[3] = {252.57, -756.12, 7902.59};
+static float P060[3] = {458.39, -265.31, 9355.44};
+static float P062[3] = {224.04, 438.98, 9364.77};
+static float P063[3] = {-165.71, 441.27, 9355.44};
+static float P065[3] = {-473.99, -219.71, 9355.44};
+static float P066[3] = {-211.97, -479.87, 9355.44};
+static float P067[3] = {192.86, -504.03, 9355.44};
+static float iP068[3] = {-112.44, 9.25, -64.42};
+static float iP069[3] = {1155.63, 0.00, -182.46};
+static float iP070[3] = {-1143.13, 0.00, -181.54};
+static float iP071[3] = {1424.23, 0.00, -322.09};
+static float iP072[3] = {-1368.01, 0.00, -310.38};
+static float iP073[3] = {1255.57, 2.31, 114.05};
+static float iP074[3] = {-1149.38, 0.00, 117.12};
+static float iP075[3] = {718.36, 0.00, 433.36};
+static float iP076[3] = {-655.90, 0.00, 433.36};
+static float P068[3] = {-112.44, 9.25, -64.42};
+static float P069[3] = {1155.63, 0.00, -182.46};
+static float P070[3] = {-1143.13, 0.00, -181.54};
+static float P071[3] = {1424.23, 0.00, -322.09};
+static float P072[3] = {-1368.01, 0.00, -310.38};
+static float P073[3] = {1255.57, 2.31, 114.05};
+static float P074[3] = {-1149.38, 0.00, 117.12};
+static float P075[3] = {718.36, 0.00, 433.36};
+static float P076[3] = {-655.90, 0.00, 433.36};
+static float P077[3] = {1058.00, -2.66, 7923.51};
+static float P078[3] = {-1016.51, -15.47, 7902.87};
+static float P079[3] = {-1363.99, -484.50, 7593.38};
+static float P080[3] = {1478.09, -861.47, 7098.12};
+static float P081[3] = {1338.06, -284.68, 7024.15};
+static float P082[3] = {-1545.51, -860.64, 7106.60};
+static float P083[3] = {1063.19, -70.46, 7466.60};
+static float P084[3] = {-1369.18, -288.11, 7015.34};
+static float P085[3] = {1348.44, -482.50, 7591.41};
+static float P086[3] = {-1015.45, -96.80, 7474.86};
+static float P087[3] = {731.04, 148.38, 7682.58};
+static float P088[3] = {-697.03, 151.82, 7668.81};
+static float P089[3] = {-686.82, 157.09, 7922.29};
+static float P090[3] = {724.73, 147.75, 7931.39};
+static float iP091[3] = {0.00, 327.10, 2346.55};
+static float iP092[3] = {0.00, 552.28, 2311.31};
+static float iP093[3] = {0.00, 721.16, 2166.41};
+static float iP094[3] = {0.00, 693.42, 2388.80};
+static float iP095[3] = {0.00, 389.44, 2859.97};
+static float P091[3] = {0.00, 327.10, 2346.55};
+static float P092[3] = {0.00, 552.28, 2311.31};
+static float P093[3] = {0.00, 721.16, 2166.41};
+static float P094[3] = {0.00, 693.42, 2388.80};
+static float P095[3] = {0.00, 389.44, 2859.97};
+static float iP096[3] = {222.02, -183.67, 10266.89};
+static float iP097[3] = {-128.90, -182.70, 10266.89};
+static float iP098[3] = {41.04, 88.31, 10659.36};
+static float iP099[3] = {-48.73, 88.30, 10659.36};
+static float P096[3] = {222.02, -183.67, 10266.89};
+static float P097[3] = {-128.90, -182.70, 10266.89};
+static float P098[3] = {41.04, 88.31, 10659.36};
+static float P099[3] = {-48.73, 88.30, 10659.36};
+static float P100[3] = {0.00, 603.42, 9340.68};
+static float P104[3] = {-9.86, 567.62, 7858.65};
+static float P105[3] = {31.96, 565.27, 7908.46};
+static float P106[3] = {22.75, 568.13, 7782.83};
+static float P107[3] = {58.93, 568.42, 7775.94};
+static float P108[3] = {55.91, 565.59, 7905.86};
+static float P109[3] = {99.21, 566.00, 7858.65};
+static float P110[3] = {-498.83, 148.14, 9135.10};
+static float P111[3] = {-495.46, 133.24, 9158.48};
+static float P112[3] = {-490.82, 146.23, 9182.76};
+static float P113[3] = {-489.55, 174.11, 9183.66};
+static float P114[3] = {-492.92, 189.00, 9160.28};
+static float P115[3] = {-497.56, 176.02, 9136.00};
+static float P116[3] = {526.54, 169.68, 9137.70};
+static float P117[3] = {523.49, 184.85, 9161.42};
+static float P118[3] = {518.56, 171.78, 9186.06};
+static float P119[3] = {516.68, 143.53, 9186.98};
+static float P120[3] = {519.73, 128.36, 9163.26};
+static float P121[3] = {524.66, 141.43, 9138.62};
+/* *INDENT-ON* */
+
+void
+Whale001(void)
+{
+
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N074);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N072);
+    glVertex3fv(P072);
+    glNormal3fv(N074);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N072);
+    glVertex3fv(P072);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N074);
+    glVertex3fv(P074);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N074);
+    glVertex3fv(P074);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N070);
+    glVertex3fv(P070);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N076);
+    glVertex3fv(P076);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N068);
+    glVertex3fv(P068);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N010);
+    glVertex3fv(P010);
+    glEnd();
+}
+
+void
+Whale002(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glNormal3fv(N073);
+    glVertex3fv(P073);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N071);
+    glVertex3fv(P071);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N073);
+    glVertex3fv(P073);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N009);
+    glVertex3fv(P009);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N011);
+    glVertex3fv(P011);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N073);
+    glVertex3fv(P073);
+    glNormal3fv(N075);
+    glVertex3fv(P075);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N069);
+    glVertex3fv(P069);
+    glNormal3fv(N071);
+    glVertex3fv(P071);
+    glNormal3fv(N073);
+    glVertex3fv(P073);
+    glEnd();
+}
+
+void
+Whale003(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N001);
+    glVertex3fv(P001);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glEnd();
+}
+
+void
+Whale004(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N015);
+    glVertex3fv(P015);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N016);
+    glVertex3fv(P016);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N017);
+    glVertex3fv(P017);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N014);
+    glVertex3fv(P014);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N013);
+    glVertex3fv(P013);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N018);
+    glVertex3fv(P018);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N019);
+    glVertex3fv(P019);
+    glNormal3fv(N012);
+    glVertex3fv(P012);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glEnd();
+}
+
+void
+Whale005(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N022);
+    glVertex3fv(P022);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N023);
+    glVertex3fv(P023);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N024);
+    glVertex3fv(P024);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N021);
+    glVertex3fv(P021);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N020);
+    glVertex3fv(P020);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N025);
+    glVertex3fv(P025);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N026);
+    glVertex3fv(P026);
+    glNormal3fv(N027);
+    glVertex3fv(P027);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glEnd();
+}
+
+void
+Whale006(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N093);
+    glVertex3fv(P093);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N093);
+    glVertex3fv(P093);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N091);
+    glVertex3fv(P091);
+    glNormal3fv(N092);
+    glVertex3fv(P092);
+    glNormal3fv(N094);
+    glVertex3fv(P094);
+    glNormal3fv(N095);
+    glVertex3fv(P095);
+    glEnd();
+}
+
+void
+Whale007(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N030);
+    glVertex3fv(P030);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N029);
+    glVertex3fv(P029);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N028);
+    glVertex3fv(P028);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N035);
+    glVertex3fv(P035);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N034);
+    glVertex3fv(P034);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N031);
+    glVertex3fv(P031);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N032);
+    glVertex3fv(P032);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N033);
+    glVertex3fv(P033);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glEnd();
+}
+
+void
+Whale008(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N043);
+    glVertex3fv(P043);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N042);
+    glVertex3fv(P042);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N036);
+    glVertex3fv(P036);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N041);
+    glVertex3fv(P041);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N040);
+    glVertex3fv(P040);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N037);
+    glVertex3fv(P037);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N038);
+    glVertex3fv(P038);
+    glNormal3fv(N039);
+    glVertex3fv(P039);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glEnd();
+}
+
+void
+Whale009(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N051);
+    glVertex3fv(P051);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N044);
+    glVertex3fv(P044);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N050);
+    glVertex3fv(P050);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N049);
+    glVertex3fv(P049);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N048);
+    glVertex3fv(P048);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N045);
+    glVertex3fv(P045);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N046);
+    glVertex3fv(P046);
+    glNormal3fv(N047);
+    glVertex3fv(P047);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+}
+
+void
+Whale010(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N080);
+    glVertex3fv(P080);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N090);
+    glVertex3fv(P090);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N080);
+    glVertex3fv(P080);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N081);
+    glVertex3fv(P081);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N085);
+    glVertex3fv(P085);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N083);
+    glVertex3fv(P083);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N087);
+    glVertex3fv(P087);
+    glNormal3fv(N077);
+    glVertex3fv(P077);
+    glNormal3fv(N090);
+    glVertex3fv(P090);
+    glEnd();
+}
+
+void
+Whale011(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N082);
+    glVertex3fv(P082);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N088);
+    glVertex3fv(P088);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N089);
+    glVertex3fv(P089);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N086);
+    glVertex3fv(P086);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N078);
+    glVertex3fv(P078);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N084);
+    glVertex3fv(P084);
+    glNormal3fv(N082);
+    glVertex3fv(P082);
+    glNormal3fv(N079);
+    glVertex3fv(P079);
+    glEnd();
+}
+
+void
+Whale012(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N059);
+    glVertex3fv(P059);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N058);
+    glVertex3fv(P058);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N057);
+    glVertex3fv(P057);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N056);
+    glVertex3fv(P056);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N053);
+    glVertex3fv(P053);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N052);
+    glVertex3fv(P052);
+    glEnd();
+}
+
+void
+Whale013(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N066);
+    glVertex3fv(P066);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N067);
+    glVertex3fv(P067);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N060);
+    glVertex3fv(P060);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N096);
+    glVertex3fv(P096);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glNormal3fv(N098);
+    glVertex3fv(P098);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N065);
+    glVertex3fv(P065);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N097);
+    glVertex3fv(P097);
+    glNormal3fv(N099);
+    glVertex3fv(P099);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P005);
+    glVertex3fv(P006);
+    glVertex3fv(P099);
+    glVertex3fv(P098);
+    glEnd();
+}
+
+void
+Whale014(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glNormal3fv(N005);
+    glVertex3fv(P005);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P006);
+    glVertex3fv(P005);
+    glVertex3fv(P004);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N006);
+    glVertex3fv(P006);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N008);
+    glVertex3fv(P008);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N004);
+    glVertex3fv(P004);
+    glEnd();
+}
+
+void
+Whale015(void)
+{
+    glBegin(GL_POLYGON);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N055);
+    glVertex3fv(P055);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N003);
+    glVertex3fv(P003);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N054);
+    glVertex3fv(P054);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N063);
+    glVertex3fv(P063);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glNormal3fv(N100);
+    glVertex3fv(P100);
+    glNormal3fv(N002);
+    glVertex3fv(P002);
+    glNormal3fv(N062);
+    glVertex3fv(P062);
+    glEnd();
+}
+
+void
+Whale016(void)
+{
+    glBegin(GL_POLYGON);
+    glVertex3fv(P104);
+    glVertex3fv(P105);
+    glVertex3fv(P106);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P107);
+    glVertex3fv(P108);
+    glVertex3fv(P109);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P110);
+    glVertex3fv(P111);
+    glVertex3fv(P112);
+    glVertex3fv(P113);
+    glVertex3fv(P114);
+    glVertex3fv(P115);
+    glEnd();
+    glBegin(GL_POLYGON);
+    glVertex3fv(P116);
+    glVertex3fv(P117);
+    glVertex3fv(P118);
+    glVertex3fv(P119);
+    glVertex3fv(P120);
+    glVertex3fv(P121);
+    glEnd();
+}
+
+void
+DrawWhale(fishRec * fish)
+{
+    float seg0, seg1, seg2, seg3, seg4, seg5, seg6, seg7;
+    float pitch, thrash, chomp;
+
+    fish->htail = (int) (fish->htail - (int) (5.0 * fish->v)) % 360;
+
+    thrash = 70.0 * fish->v;
+
+    seg0 = 1.5 * thrash * sin((fish->htail) * RRAD);
+    seg1 = 2.5 * thrash * sin((fish->htail + 10.0) * RRAD);
+    seg2 = 3.7 * thrash * sin((fish->htail + 15.0) * RRAD);
+    seg3 = 4.8 * thrash * sin((fish->htail + 23.0) * RRAD);
+    seg4 = 6.0 * thrash * sin((fish->htail + 28.0) * RRAD);
+    seg5 = 6.5 * thrash * sin((fish->htail + 35.0) * RRAD);
+    seg6 = 6.5 * thrash * sin((fish->htail + 40.0) * RRAD);
+    seg7 = 6.5 * thrash * sin((fish->htail + 55.0) * RRAD);
+
+    pitch = fish->v * sin((fish->htail - 160.0) * RRAD);
+
+    chomp = 0.0;
+    if (fish->v > 2.0) {
+        chomp = -(fish->v - 2.0) * 200.0;
+    }
+    P012[1] = iP012[1] + seg5;
+    P013[1] = iP013[1] + seg5;
+    P014[1] = iP014[1] + seg5;
+    P015[1] = iP015[1] + seg5;
+    P016[1] = iP016[1] + seg5;
+    P017[1] = iP017[1] + seg5;
+    P018[1] = iP018[1] + seg5;
+    P019[1] = iP019[1] + seg5;
+
+    P020[1] = iP020[1] + seg4;
+    P021[1] = iP021[1] + seg4;
+    P022[1] = iP022[1] + seg4;
+    P023[1] = iP023[1] + seg4;
+    P024[1] = iP024[1] + seg4;
+    P025[1] = iP025[1] + seg4;
+    P026[1] = iP026[1] + seg4;
+    P027[1] = iP027[1] + seg4;
+
+    P028[1] = iP028[1] + seg2;
+    P029[1] = iP029[1] + seg2;
+    P030[1] = iP030[1] + seg2;
+    P031[1] = iP031[1] + seg2;
+    P032[1] = iP032[1] + seg2;
+    P033[1] = iP033[1] + seg2;
+    P034[1] = iP034[1] + seg2;
+    P035[1] = iP035[1] + seg2;
+
+    P036[1] = iP036[1] + seg1;
+    P037[1] = iP037[1] + seg1;
+    P038[1] = iP038[1] + seg1;
+    P039[1] = iP039[1] + seg1;
+    P040[1] = iP040[1] + seg1;
+    P041[1] = iP041[1] + seg1;
+    P042[1] = iP042[1] + seg1;
+    P043[1] = iP043[1] + seg1;
+
+    P044[1] = iP044[1] + seg0;
+    P045[1] = iP045[1] + seg0;
+    P046[1] = iP046[1] + seg0;
+    P047[1] = iP047[1] + seg0;
+    P048[1] = iP048[1] + seg0;
+    P049[1] = iP049[1] + seg0;
+    P050[1] = iP050[1] + seg0;
+    P051[1] = iP051[1] + seg0;
+
+    P009[1] = iP009[1] + seg6;
+    P010[1] = iP010[1] + seg6;
+    P075[1] = iP075[1] + seg6;
+    P076[1] = iP076[1] + seg6;
+
+    P001[1] = iP001[1] + seg7;
+    P011[1] = iP011[1] + seg7;
+    P068[1] = iP068[1] + seg7;
+    P069[1] = iP069[1] + seg7;
+    P070[1] = iP070[1] + seg7;
+    P071[1] = iP071[1] + seg7;
+    P072[1] = iP072[1] + seg7;
+    P073[1] = iP073[1] + seg7;
+    P074[1] = iP074[1] + seg7;
+
+    P091[1] = iP091[1] + seg3 * 1.1;
+    P092[1] = iP092[1] + seg3;
+    P093[1] = iP093[1] + seg3;
+    P094[1] = iP094[1] + seg3;
+    P095[1] = iP095[1] + seg3 * 0.9;
+
+    P099[1] = iP099[1] + chomp;
+    P098[1] = iP098[1] + chomp;
+    P097[1] = iP097[1] + chomp;
+    P096[1] = iP096[1] + chomp;
+
+    glPushMatrix();
+
+    glRotatef(pitch, 1.0, 0.0, 0.0);
+
+    glTranslatef(0.0, 0.0, 8000.0);
+
+    glRotatef(180.0, 0.0, 1.0, 0.0);
+
+    glScalef(3.0, 3.0, 3.0);
+
+    glEnable(GL_CULL_FACE);
+
+    Whale001();
+    Whale002();
+    Whale003();
+    Whale004();
+    Whale005();
+    Whale006();
+    Whale007();
+    Whale008();
+    Whale009();
+    Whale010();
+    Whale011();
+    Whale012();
+    Whale013();
+    Whale014();
+    Whale015();
+    Whale016();
+
+    glDisable(GL_CULL_FACE);
+
+    glPopMatrix();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDL 1.3 Mac OpenGL Application.xctemplate/main.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,179 @@
+
+/* Simple program:  Create a blank window, wait for keypress, quit.
+
+   Please see the SDL documentation for details on using the SDL API:
+   /Developer/Documentation/SDL/docs.html
+*/
+   
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "SDL.h"
+
+extern void Atlantis_Init ();
+extern void Atlantis_Reshape (int w, int h);
+extern void Atlantis_Animate ();
+extern void Atlantis_Display ();
+
+static SDL_Surface *gScreen;
+
+static void initAttributes ()
+{
+    // Setup attributes we want for the OpenGL context
+    
+    int value;
+    
+    // Don't set color bit sizes (SDL_GL_RED_SIZE, etc)
+    //    Mac OS X will always use 8-8-8-8 ARGB for 32-bit screens and
+    //    5-5-5 RGB for 16-bit screens
+    
+    // Request a 16-bit depth buffer (without this, there is no depth buffer)
+    value = 16;
+    SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, value);
+    
+    
+    // Request double-buffered OpenGL
+    //     The fact that windows are double-buffered on Mac OS X has no effect
+    //     on OpenGL double buffering.
+    value = 1;
+    SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, value);
+}
+
+static void printAttributes ()
+{
+    // Print out attributes of the context we created
+    int nAttr;
+    int i;
+    
+    int  attr[] = { SDL_GL_RED_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_GREEN_SIZE,
+                    SDL_GL_ALPHA_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_DEPTH_SIZE };
+                    
+    char *desc[] = { "Red size: %d bits\n", "Blue size: %d bits\n", "Green size: %d bits\n",
+                     "Alpha size: %d bits\n", "Color buffer size: %d bits\n", 
+                     "Depth bufer size: %d bits\n" };
+
+    nAttr = sizeof(attr) / sizeof(int);
+    
+    for (i = 0; i < nAttr; i++) {
+    
+        int value;
+        SDL_GL_GetAttribute (attr[i], &value);
+        printf (desc[i], value);
+    } 
+}
+
+static void createSurface (int fullscreen)
+{
+    Uint32 flags = 0;
+    
+    flags = SDL_OPENGL;
+    if (fullscreen)
+        flags |= SDL_FULLSCREEN;
+    
+    // Create window
+    gScreen = SDL_SetVideoMode (640, 480, 0, flags);
+    if (gScreen == NULL) {
+        
+        fprintf (stderr, "Couldn't set 640x480 OpenGL video mode: %s\n",
+                 SDL_GetError());
+        SDL_Quit();
+        exit(2);
+    }
+}
+
+static void initGL ()
+{
+    Atlantis_Init ();
+    Atlantis_Reshape (gScreen->w, gScreen->h);
+}
+
+static void drawGL ()
+{
+    Atlantis_Animate ();
+    Atlantis_Display ();
+}
+
+static void mainLoop ()
+{
+    SDL_Event event;
+    int done = 0;
+    int fps = 24;
+    int delay = 1000/fps;
+    int thenTicks = -1;
+    int nowTicks;
+    
+    while ( !done ) {
+
+        /* Check for events */
+        while ( SDL_PollEvent (&event) ) {
+            switch (event.type) {
+
+                case SDL_MOUSEMOTION:
+                    break;
+                case SDL_MOUSEBUTTONDOWN:
+                    break;
+                case SDL_KEYDOWN:
+                    /* Any keypress quits the app... */
+                case SDL_QUIT:
+                    done = 1;
+                    break;
+                default:
+                    break;
+            }
+        }
+    
+        // Draw at 24 hz
+        //     This approach is not normally recommended - it is better to
+        //     use time-based animation and run as fast as possible
+        drawGL ();
+        SDL_GL_SwapBuffers ();
+
+        // Time how long each draw-swap-delay cycle takes
+        // and adjust delay to get closer to target framerate
+        if (thenTicks > 0) {
+            nowTicks = SDL_GetTicks ();
+            delay += (1000/fps - (nowTicks-thenTicks));
+            thenTicks = nowTicks;
+            if (delay < 0)
+                delay = 1000/fps;
+        }
+        else {
+            thenTicks = SDL_GetTicks ();
+        }
+
+        SDL_Delay (delay);
+    }
+}
+
+int main(int argc, char *argv[])
+{
+    // Init SDL video subsystem
+    if ( SDL_Init (SDL_INIT_VIDEO) < 0 ) {
+        
+        fprintf(stderr, "Couldn't initialize SDL: %s\n",
+            SDL_GetError());
+        exit(1);
+    }
+
+    // Set GL context attributes
+    initAttributes ();
+    
+    // Create GL context
+    createSurface (0);
+    
+    // Get GL context attributes
+    printAttributes ();
+    
+    // Init GL state
+    initGL ();
+    
+    // Draw, get events...
+    mainLoop ();
+    
+    // Cleanup
+    SDL_Quit();
+
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDLApplicationBase.xctemplate/Prefix.pch	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,7 @@
+//
+// Prefix header for all source files of the '___PROJECTNAME___' target in the '___PROJECTNAME___' project
+//
+
+#ifdef __OBJC__
+	#import <Foundation/Foundation.h>
+#endif
Binary file SDLApplicationBase.xctemplate/TemplateIcon.icns has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDLApplicationBase.xctemplate/TemplateInfo.plist	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+	<key>Ancestors</key>
+	<array>
+		<string>com.apple.dt.unit.bundleBase</string>
+		<string>com.apple.dt.unit.objectiveCApplication</string>
+	</array>
+	<key>Identifier</key>
+	<string>org.libsdl.SDLApplicationBase</string>
+	<key>Kind</key>
+	<string>Xcode.Xcode3.ProjectTemplateUnitKind</string>
+	<key>Targets</key>
+	<array>
+		<dict>
+			<key>ProductType</key>
+			<string>com.apple.product-type.application</string>
+			<key>SharedSettings</key>
+			<dict>
+				<key>GCC_PRECOMPILE_PREFIX_HEADER</key>
+				<string>YES</string>
+				<key>GCC_PREFIX_HEADER</key>
+				<string>___PACKAGENAME___/Prefix.pch</string>
+			</dict>
+		</dict>
+	</array>
+	<key>Definitions</key>
+	<dict>
+		<key>main.c</key>
+		<dict>
+			<key>Group</key>
+			<string>Supporting Files</string>
+			<key>Path</key>
+			<string>main.c</string>
+		</dict>
+		<key>Prefix.pch</key>
+		<dict>
+			<key>Group</key>
+			<string>Supporting Files</string>
+			<key>Path</key>
+			<string>Prefix.pch</string>
+			<key>TargetIndices</key>
+			<array/>
+		</dict>
+		<key>main.m</key>
+		<dict>
+			<key>Group</key>
+			<string>Useless Files</string>
+			<key>Path</key>
+			<string>main.m</string>
+		</dict>
+	</dict>
+	<key>Nodes</key>
+	<array>
+		<string>main.c</string>
+		<string>Prefix.pch</string>
+		<string>main.m</string>
+	</array>
+</dict>
+</plist>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDLApplicationBase.xctemplate/main.c	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,65 @@
+
+/* Simple program:  Create a blank window, wait for keypress, quit.
+
+   Please see the SDL documentation for details on using the SDL API:
+   /Developer/Documentation/SDL/docs.html
+*/
+   
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include "SDL.h"
+
+int main(int argc, char *argv[])
+{
+	Uint32 initflags = SDL_INIT_VIDEO;  /* See documentation for details */
+	SDL_Surface *screen;
+	Uint8  video_bpp = 0;
+	Uint32 videoflags = SDL_SWSURFACE;
+	int    done;
+        SDL_Event event;
+
+	/* Initialize the SDL library */
+	if ( SDL_Init(initflags) < 0 ) {
+		fprintf(stderr, "Couldn't initialize SDL: %s\n",
+			SDL_GetError());
+		exit(1);
+	}
+
+	/* Set 640x480 video mode */
+	screen=SDL_SetVideoMode(640,480, video_bpp, videoflags);
+        if (screen == NULL) {
+		fprintf(stderr, "Couldn't set 640x480x%d video mode: %s\n",
+                        video_bpp, SDL_GetError());
+		SDL_Quit();
+		exit(2);
+	}
+
+	done = 0;
+	while ( !done ) {
+
+		/* Check for events */
+		while ( SDL_PollEvent(&event) ) {
+			switch (event.type) {
+
+				case SDL_MOUSEMOTION:
+					break;
+				case SDL_MOUSEBUTTONDOWN:
+					break;
+				case SDL_KEYDOWN:
+					/* Any keypress quits the app... */
+				case SDL_QUIT:
+					done = 1;
+					break;
+				default:
+					break;
+			}
+		}
+	}
+	
+	/* Clean up the SDL library */
+	SDL_Quit();
+	return(0);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/SDLApplicationBase.xctemplate/main.m	Sun Oct 02 21:14:53 2011 -0700
@@ -0,0 +1,4 @@
+/* main.m is an artifact of the Xcode template process. 
+ You may delete this file.
+ You only need main.c
+ */
\ No newline at end of file