DUKE NUKEM 3D (tm),
including all versions, patches and upgrades (the "Game")
Copyright 1996 3D Realms Entertainment - a division of Apogee Software, Ltd.
P.O. Box 496419, Garland, TX 75049
TEL: 1+214-271-2137 ("3D Realms").  All rights reserved.

BY COPYING OR USING THIS PROGRAM, YOU INDICATE YOUR AGREEMENT TO THE FOLLOWING
TERMS, WHICH ARE THE ONLY ONES BY WHICH 3D REALMS PERMITS COPYING OR USE. THIS
PROGRAM IS NOT SHAREWARE. DISTRIBUTING IT WITHOUT 3D REALMS' PERMISSION IS
ILLEGAL.

[1] OWNERSHIP.  Except to the extent expressly licensed by us, we have and
    reserve the exclusive copyright, trade secret and other rights to the
    Program, and the right to use the Trademarks "3D Realms", the 3D Realms
    "logo", "Duke Nukem", "Duke Nukem 3D" and any of the characters contained
    within the Game in connection with it.

[2] USE AND COPIES. You may use the Program only for your own purposes "just
    like a book".  This permits use by any number of people on any number of
    machines to use it so long as -- just like a book -- there is NO
    POSSIBILITY that more than one copy will be used at a time.  You have no
    right to copy this Program except for legal backups.

[3]  NEW LEVELS.

     "New Levels" are data that modify or substitute for Game data, thus
     modifying or replacing one or more Game levels.  Creating or distributing
     a New Level or a software tool that has no substantial purpose other than
     to contribute to the creation of a New Level infringes rights of 3D Realms
     and is prohibited by law except as permitted by 3D Realms.  3D REALMS
     PERMITS NEW LEVELS ONLY THAT MEET ALL OF THE FOLLOWING CONDITIONS:

 [A] The Level must only work with a RETAIL episode of the Game. It must NOT
     work with this Episode One.

 [B] The level must not contain modifications to any COM, EXE, or DLL, or to
     other executable file.

 [C] The level must not contain any illegal material, or (without
     appropriate irrevocable licenses) any trademarks, copyright protected
     work, or other property of third parties.

 [D] The level must prominently identify at least in every online description
     and with reasonable duration on an opening screen
     (1) the name and email address of the level's creators, and
     (2) the words "THIS LEVEL IS NOT MADE BY OR SUPPORTED BY 3D REALMS".

 [E] The level and any use of it must be offered solely for free (other than
     any incidental online charges).

 [F] By distributing or permitting the distribution of any New Level, all
     owners of any trademark, copyright or other right, title or interest
     therein (to the extent different from the Game as originally distributed
     by 3D Realms) grant back to 3D Realms an irrevocable royalty free right
     to distribute the level.

 [G] The distributor of any New Level or Level Editor must be authorized to
     distribute the Game itself (either in writing, or by being within a
     category where no writing is needed under this LICENSE.DOC).

[4] LIMITED WARRANTY AND LIMITATION OF REMEDIES

    If this Program (including any related written material) contained a
    physical defect, you may receive a replacement if you return it within
    90 days of receiving it from 3D Realms.  Aside from this, IT IS PROVIDED
    "AS-IS", AND NO WARRANTIES OF ANY KIND (INCLUDING IMPLIED WARRANTIES OF
    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE), EXPRESS OR IMPLIED,
    ARE MADE AS TO IT OR ANY MEDIUM IT MAY BE ON.  OUR ENTIRE LIABILITY AND
    YOUR EXCLUSIVE REMEDY IS SUCH REPLACEMENT, AND UNDER NO CIRCUMSTANCES WILL
    WE PROVIDE ANY OTHER REMEDY FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL,
    PUNITIVE, INCIDENTAL OR OTHER DAMAGES ARISING FROM IT, INCLUDING SUCH FROM
    NEGLIGENCE, STRICT LIABILITY, OR BREACH OF WARRANTY OR CONTRACT, EVEN AFTER
    NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  Some states do not allow the
    exclusion or limitation of implied warranties or liability for incidental
    or consequential damages, so this may not apply to buyers of the Program.
    This gives you specific legal rights, and you may also have other rights
    which vary from state to state.

[5] MISCELLANY

    [A] With respect to every matter arising under this, you consent to the
        exclusive jurisdiction and venue of the state and federal courts
        sitting in Dallas, Texas and to service by certified mail, return
        receipt requested, or as otherwise permitted by law.

    [B] You will not modify, reverse compile, disassemble, or reverse engineer
        the Program, or use or disclose any of our secret information that it
        contains.

[V.04.18.96]
