LIMITED USE SOFTWARE LICENSE AGREEMENT

This Limited Use Software License Agreement (this "Agreement") is a legal agreement between you, the end-user, and Id Software, Inc. ("ID").  BY CONTINUING THE DOWNLOAD OR INSTALLATION OF THE GAME PROGRAM ENTITLED WOLFENSTEIN: ENEMY TERRITORY  (THE "SOFTWARE"), BY LOADING OR RUNNING THE SOFTWARE, OR BY PLACING OR COPYING THE SOFTWARE ONTO YOUR COMPUTER HARD DRIVE, COMPUTER RAM OR OTHER STORAGE, YOU ARE AGREEING TO BE BOUND BY THE TERMS OF THIS AGREEMENT.  You agree that you are obtaining a copy of the Software via download only, and you acknowledge and agree that you shall not copy or retain the Software except as expressly permitted herein.

1.	Grant of License.  Subject to the terms and provisions of this Agreement and so long as you fully comply at all times with this Agreement, ID grants to you the non-exclusive and limited right to use the Software only in executable or object code form.  The term "Software" includes all elements of the Software, including, without limitation, data files and screen displays.  You are not receiving any ownership or proprietary right, title or interest in or to the Software or the copyrights, trademarks or other rights related thereto.  For purposes of the first sentence of this section, "use" means loading the Software into RAM and/or onto computer hard drive, as well as installation of the Software on a hard disk or other storage device, and means the uses permitted in sections 2 and 4 hereinbelow.  You agree that the Software will not be downloaded, shipped, transferred, exported or re-exported into any country or to a national or resident of any country in violation of the United States Export Administration Act (or any other law governing such matters) by you or anyone at your direction and that you will not utilize, and will not authorize anyone to utilize, in any other manner, the Software in violation of any applicable law.  The Software shall not be downloaded or otherwise exported or re-exported into any country or to a national or resident of any country to which the United States has embargoed goods or to anyone or into any country who/that are prohibited, by applicable law, from receiving such property.  In exercising your limited rights hereunder, you shall comply, at all times, with all applicable laws, regulations, ordinances and statutes.  ID reserves all rights not granted in this Agreement, including, without limitation, all rights to ID's trademarks.

2.	Permitted New Creations.  Subject to the terms and provisions of this Agreement and so long as you fully comply at all times with this Agreement, ID grants to you the non-exclusive and limited right to create for the Software (except any Software code) your own modifications (the "New Creations") that shall operate only with the Software (but not any demo, test or other version of the Software).  You may include within the New Creations certain textures and other images (the "Software Images") from the Software.  You shall not create any New Creations that infringe against any third-party right or that are libelous, defamatory, obscene, false, misleading, or otherwise illegal or unlawful. You agree that the New Creations will not be downloaded, shipped, transferred, exported or re-exported into any country or to a national or resident of any country in violation of the United States Export Administration Act (or any other law governing such matters) by you or anyone at your direction and that you will not utilize, and will not authorize anyone to utilize, in any other manner, the New Creations in violation of any applicable law.  The New Creations shall not be downloaded or otherwise exported or re-exported into any country or to a national or resident of any country to which the United States has embargoed goods or to anyone or into any country who/that are prohibited, by applicable law, from receiving such property.  You shall not rent, sell, lease, lend, offer on a pay-per-play basis or otherwise commercially exploit or commercially distribute the New Creations.  You are permitted only to distribute, without any cost or charge, the New Creations to other end-users so long as such distribution is not infringing against any third-party right and is not otherwise illegal or unlawful.  As noted below, in the event you commit any breach of this Agreement, your license and this Agreement automatically shall terminate, without notice.

3.	Prohibitions with Regard to the Software.  You, whether directly or indirectly, shall not do any of the following acts:

a.	rent the Software;

b.	sell the Software;

c.	lease or lend the Software;

d.	offer the Software on a "pay-per-play" basis;

e.	distribute the Software by any means, except as permitted by section 4 hereinbelow;

f.	in any other manner and through any medium whatsoever commercially exploit the Software, or use the Software for any commercial purpose, including, without limitation, giving away copies of the Software for free to promote or market any other material;

g.	disassemble, reverse engineer, decompile, modify, except as permitted by section 2 hereinabove, or alter the Software;

h.	translate the Software;

i.	reproduce or copy the Software, except as permitted by section 4 hereinbelow;

j.	publicly display the Software;

k.	prepare or develop derivative works based upon the Software; or

l.	modify, remove or alter this Agreement or any notices or other markings or legends, such as trademark or copyright notices, affixed on or within the Software.

4.	Permitted Distribution and Copying.  So long as this Agreement accompanies each copy you make of the Software and so long as you fully comply at all times with this Agreement, ID grants to you the non-exclusive and limited right to:  (i) copy the Software from the download onto your computer hard drive; (ii) copy the Software from your computer hard drive into your computer RAM; (iii) copy on one (1) hard disk one (1) "back up" or archival copy of the Software; and (iv) copy the Software and distribute such copies as standalone copies on physical media or in electronic format of the Software free of charge for non-commercial purposes and not in connection with any other material.  You shall not distribute copies of the Software as mounted on or attached to the covers or any other part of magazines or other printed material.  You shall not copy or distribute the Software in any manner that infringes against, misappropriates or otherwise violates any third-party right or that is libelous, defamatory, obscene, false, misleading, or otherwise illegal or unlawful.  You shall not receive any postage, shipping, handling or other charge, payment, fee, or other consideration, including items in trade, in exchange for or in connection with copies of Software you may distribute, even if only for reimbursement.  You shall not receive any value or consideration in exchange for or in connection with copies of the Software you may distribute.  You shall not distribute the Software bundled, co-packaged or together with any material.  You shall not distribute the Software in connection with the promotion or marketing of any material.  Except as such are included by ID within copies of the Software that you are permitted to make under this Agreement, you shall not reproduce, depict, display or copy the title of the Software, the ID name or any screen display or other element or part of the Software.  In exercising your limited rights hereunder, you shall comply, at all times, with all applicable laws, regulations, ordinances and statutes.  ID reserves all rights not granted in this Agreement. You shall not commercially distribute the Software unless you first enter into a separate contract with ID, on terms and conditions determined in ID's sole discretion, and only upon your receipt of a written agreement executed by an authorized officer of ID.

5.	Intellectual Property Rights.  The Software and all copyrights, trademarks and all other conceivable intellectual property rights related to the Software are owned by ID and are protected by United States copyright laws, international treaty provisions and all applicable law, such as the Lanham Act.  You must treat the Software like any other copyrighted material, as required by 17 U.S.C. § 101 et seq. and other applicable law.  You agree to use your best efforts to see that any user of the Software licensed hereunder, or the New Creations, complies with this Agreement.  You agree that you are receiving a copy of the Software by limited license only and not by sale and that the "first sale" doctrine of 17 U.S.C. § 109 does not apply to your receipt or use of the Software. This section shall survive the cancellation or termination of this Agreement.

6.         NO ID WARRANTIES.  ID DISCLAIMS , AND ITS LICENSEE'S (INCLUDING, WITHOUT LIMITATION, ACTIVISION INC. AND ITS AFFILIATES) DISCLAIM, ALL WARRANTIES, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE AND ANY WARRANTY OF NON-INFRINGEMENT, WITH RESPECT TO THE SOFTWARE, THE SOFTWARE IMAGES AND OTHERWISE.  THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY.  ID DOES NOT (AND ITS LICENSEES DO NOT) WARRANT THAT THE SOFTWARE OR THE OPERATION OF THE SOFTWARE WILL BE UNINTERRUPTED OR ERROR FREE OR THAT THE SOFTWARE WILL MEET YOUR SPECIFIC OR SPECIAL REQUIREMENTS.  ADDITIONAL STATEMENTS, WHETHER ORAL OR WRITTEN, DO NOT CONSTITUTE WARRANTIES BY ID (OR ANY ID LICENSEE) AND SHOULD NOT BE RELIED UPON.  THIS SECTION SHALL SURVIVE THE CANCELLATION OR TERMINATION OF THIS AGREEMENT.

7.	Governing Law, Venue, Indemnity and Liability Limitation.  This Agreement shall be construed in accordance with and governed by the applicable laws of the State of Texas and applicable United States federal law.  Exclusive venue for all litigation regarding this Agreement shall be in Dallas County, Texas, and you agree to submit to the jurisdiction of the federal and state courts in Dallas County, Texas, for any such litigation.  You hereby agree to indemnify, defend and hold harmless ID and ID's officers, employees, directors, agents, licensees (excluding you), sub-licensees (excluding you), successors and assigns from and against all losses, lawsuits, damages, causes of action and claims relating to and/or arising from the New Creations or the distribution or other use of the New Creations or relating to and/or arising from your breach of this Agreement.  You agree that your unauthorized use of the Software Images, or the Software, or any part thereof, immediately and irreparably will damage ID such that ID could not be compensated adequately solely by a monetary award, and upon such actual or threatened unauthorized use, at ID's option, that ID shall be entitled to an injunctive order, in addition to all other available remedies, including a monetary award, to prohibit such unauthorized use without the necessity of ID posting bond or other security.  IN ANY CASE, ID, AND ID'S OFFICERS, EMPLOYEES, DIRECTORS, SHAREHOLDERS, REPRESENTATIVES, AGENTS, LICENSEES (EXCLUDING YOU), SUBLICENSEES (EXCLUDING YOU), SUCCESSORS AND ASSIGNS SHALL NOT BE LIABLE FOR ANY CLAIM BY ANY THIRD PARTY OR FOR ANY LOSS OF DATA, LOSS OF PROFITS, LOST SAVINGS, SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT OR PUNITIVE DAMAGES OR ANY OTHER DAMAGES ARISING FROM ANY ALLEGED CLAIM FOR BREACH OF WARRANTY, BREACH OF CONTRACT, NEGLIGENCE, STRICT PRODUCT LIABILITY, OR OTHER LEGAL THEORY EVEN IF ID OR ID'S REPRESENTATIVES HAVE BEEN ADVISED OF THE POSSIBILITY OF ANY SUCH DAMAGES, OR EVEN IF SUCH DAMAGES ARE FORESEEABLE.  Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so the above limitation or exclusion may not apply to you.  This section shall survive the cancellation or termination of this Agreement.

8.	United States Government Restricted Rights.  To the extent applicable, the United States Government shall only have those rights to use the Software as expressly stated and expressly limited and restricted in this Agreement, as provided in 48 C.F.R. §§ 227.7201 through 227.7204, inclusive.

9.	General Provisions.  Neither this Agreement nor any part or portion hereof shall be assigned or sublicensed by you.  ID may assign its rights under this Agreement in ID's sole discretion.  Should any provision of this Agreement be held to be void, invalid, unenforceable or illegal by a court of competent jurisdiction, the validity and enforceability of the other provisions shall not be affected thereby.  If any provision is determined to be unenforceable by a court of competent jurisdiction, you agree to a modification of such provision to provide for enforcement of the provision's intent, to the maximum extent permitted by applicable law.  Failure of ID to enforce any provision of this Agreement shall not constitute or be construed as a waiver of such provision or of the right to enforce such provision.  IMMEDIATELY UPON YOUR FAILURE TO COMPLY WITH OR BREACH OF ANY TERM OR PROVISION OF THIS AGREEMENT, YOUR LICENSE GRANTED HEREIN AND THIS AGREEMENT AUTOMATICALLY SHALL TERMINATE, WITHOUT NOTICE, AND ID MAY PURSUE ALL RELIEF AND REMEDIES AGAINST YOU THAT ARE AVAILABLE UNDER APPLICABLE LAW AND/OR THIS AGREEMENT.  Immediately upon termination of this Agreement, any and all rights you are granted hereunder shall terminate, you shall have no right to use the Software or the New Creations, in any manner, and you immediately shall destroy all copies of the Software and the New Creations in your possession, custody or control, and all rights granted hereunder shall revert, without notice, to and be vested in ID.

YOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT, YOU UNDERSTAND THIS AGREEMENT, AND UNDERSTAND THAT BY CONTINUING THE DOWNLOAD OR INSTALLATION OF THE SOFTWARE, BY LOADING OR RUNNING THE SOFTWARE, OR BY PLACING OR COPYING THE SOFTWARE ONTO YOUR COMPUTER HARD DRIVE OR RAM, YOU AGREE TO BE BOUND BY THE TERMS AND CONDITIONS OF THIS AGREEMENT.  YOU FURTHER AGREE THAT, EXCEPT FOR WRITTEN SEPARATE AGREEMENTS, IF ANY, BETWEEN ID AND YOU, THIS AGREEMENT IS A COMPLETE AND EXCLUSIVE STATEMENT OF THE RIGHTS AND LIABILITIES OF THE PARTIES HERETO, RELATING TO THE SUBJECT MATTER HEREOF.  THIS AGREEMENT SUPERSEDES ALL PRIOR ORAL AGREEMENTS, PROPOSALS OR UNDERSTANDINGS, AND ANY OTHER COMMUNICATIONS, IF ANY, BETWEEN ID AND YOU RELATING TO THE SUBJECT MATTER OF THIS AGREEMENT.
