DOOM 3 LIMITED USE SOFTWARE LICENSE AGREEMENT

This DOOM 3 Limited Use Software License Agreement (this "Agreement") is a legal agreement among you, the end-user, and Id Software, Inc. ("Id Software"), and Activision Publishing, Inc. ("Activision").  BY CONTINUING THE INSTALLATION OF THE FULL VERSION GAME PROGRAM ENTITLED DOOM 3 (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.

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 Software 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 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 the Software in any other manner in violation of any applicable law.  The Software shall not be downloaded or otherwise exported or re exported into (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 Software reserves all rights not granted in this Agreement, including, without limitation, all rights to Id Software'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 Software 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 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 the New Creations in any other manner in violation of any applicable law.  The New Creations shall not be downloaded or otherwise exported or re exported into (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 to distribute, without any cost or charge, the New Creations only to other end-users so long as such distribution is not infringing against any third-party right and otherwise is not 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, including, but not limited to, Internet or other electronic distribution, direct mail, retail, mail order, or other means;

f. in any other manner and through any medium whatsoever commercially exploit the Software or use the Software for any commercial purpose;

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;

l. remove or alter any notices or other markings or legends, such as trademark or copyright notices, affixed on or within the Software or the Printed Materials (as defined in section 5 hereinbelow); or

m. remove, alter, modify, disable, or reduce any of the anti-piracy measures contained in the Software, including, without limitation, measures relating to multiplayer play.

4. Prohibition against Cheat Programs.  Any attempt by you, either directly or indirectly, to circumvent or bypass any element of the Software to gain any advantage in multiplayer play of the Software is a material breach of this Agreement.  It is a material breach of this Agreement for you, whether directly or indirectly, to create, develop, copy, reproduce, distribute, or otherwise make any use of any software program or any modification to the Software ("Cheat Program") itself that enables or allows the user thereof to obtain an advantage or otherwise exploit another Software player or user when playing the Software against other players or users on a local area network, any other network, or on the Internet.  Hacking into the executable of the Software, modification of the Software, or any other use of the Software in connection with the creation, development, or use of any such unauthorized Cheat Program is a material breach of this Agreement.  Cheat Programs include, but are not limited to, programs that allow Software players or users to see through walls or other level geometry; programs that allow Software players or users to change their rate of speed outside the allowable limits of the Software; programs that crash either and/or other Software players, users, PC clients, or network servers; programs that automatically target other Software players or users (commonly referred to as "aimbots") that automatically simulate Software player or user input for the purpose of gaining an advantage over other Software players or users; or any other program or modification that functions in a similar capacity or allows any prohibited conduct.

In the event you breach this section or otherwise breach this Agreement, your license and this Agreement automatically shall terminate, without notice, and you shall have no right to play the Software against other players or make any other use of the Software.

5. Permitted Copying.  You may make only the following copies of the Software:  (i) you may copy the Software from the CD ROM that you purchase onto your computer hard drive; (ii) you may copy the Software from your computer hard drive into your computer RAM; and (iii) you may make one (1) "back up" or archival copy of the Software on one (1) hard disk.

6. Intellectual Property Rights.  Certain printed materials (the "Printed Materials") accompany the Software.  The Software, the Printed Materials, and all copyrights, trademarks, and all other conceivable intellectual property rights related to the Software and the Printed Materials are owned by Id Software 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 and the Printed Materials 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, the Printed Materials or the New Creations complies with this Agreement.  You agree that you are receiving a copy of the Software and the Printed Materials 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 or the Printed Materials.  This section shall survive the cancellation or termination of this Agreement.

7. NO ID SOFTWARE WARRANTIES.  ID SOFTWARE DISCLAIMS 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 PRINTED MATERIALS, THE SOFTWARE IMAGES, AND OTHERWISE.  THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY.  ID SOFTWARE DOES 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 SOFTWARE AND SHOULD NOT BE RELIED UPON.  This section shall survive the cancellation or termination of this Agreement.

8. Limited Activision Warranty.  Activision warrants to the original consumer purchaser of the Software that the recording medium on which the Software is recorded will be free from defects in material and workmanship for ninety (90) days from the date of purchase.  If the recording medium is found defective within ninety (90) days of original purchase, Activision agrees to replace, free of charge, any Software discovered to be defective within such period upon its receipt of the Software, postage paid, with the proof of the date of purchase, as long as the Software still is being manufactured by Activision.  In the event that the Software no longer is available, Activision retains the right to substitute a similar game program of equal or greater value.  This warranty is limited to the recording medium containing the Software as originally provided by Activision and is not applicable to normal wear and tear. This warranty shall not be applicable and shall be void if the defect has arisen through abuse, mistreatment, or neglect.

EXCEPT AS SET FORTH ABOVE, THIS WARRANTY IS IN LIEU OF ALL OTHER WARRANTIES, WHETHER ORAL OR WRITTEN, EXPRESS OR IMPLIED, INCLUDING ANY WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, AND NO OTHER REPRESENTATIONS OR CLAIMS OF ANY KIND SHALL BE BINDING ON OR OBLIGATE ACTIVISION.

When returning the Software for warranty replacement, the original Software disks must be sent only in protective packaging and include:  (1) photocopy of your dated sales receipt; (2) your name and return address typed or clearly printed; (3) a brief note describing the defect, the problem(s) you are encountering, and the system on which you are running the Software; and (4) if you are returning the Software after the ninety (90) day warranty period, but within one (1) year after the date of purchase, please include check or money order for $10.00 U.S. (A$19 for Australia, or £10.00 for Europe) currency per CD or floppy disk replacement.  Note:  Certified mail recommended.

In the United States, send to:

Warranty Replacements
Activision, Inc.
P.O. Box 67713
Los Angeles, California  90067

In Europe, send to:

Warranty Replacements
Activision
Parliament House
St. Laurence Way
Slough, Berkshire SL1 2BW
United Kingdom

In Australia and Asia Pacific territories, send to:

Warranty Replacements
Activision
Level 5, 51 Rawson street
Epping, NSW 2121
Australia

9. 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 (but excluding conflicts of laws principles) and applicable United States federal law.  Except as set forth below, 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.  Exclusive venue for all litigation involving Activision, but not involving Id Software, with regard to this Agreement shall be in Los Angeles County, California, and you agree to submit to the jurisdiction of the courts in Los Angeles, California, for any such litigation.  You hereby agree to indemnify, defend and hold harmless Id Software and Activision and Id Software's and Activision's respective 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, the Printed Materials, or the Software, or any part thereof, immediately and irreparably may damage Id Software such that Id Software could not be adequately compensated solely by a monetary award, and in such event, at Id Software's option, that Id Software 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 Software posting bond or other security.  IN ANY CASE, ID SOFTWARE, ACTIVISION, AND ID SOFTWARE AND ACTIVISION'S RESPECTIVE OFFICERS, EMPLOYEES, DIRECTORS, SHAREHOLDERS, REPRESENTATIVES, AGENTS, LICENSEES (EXCLUDING YOU), SUB-LICENSEES (EXCLUDING YOU), SUCCESSORS, AND ASSIGNS SHALL NOT BE LIABLE FOR 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 SOFTWARE, ACTIVISION, OR THEIR RESPECTIVE AGENT(S) HAVE BEEN ADVISED OF THE POSSIBILITY OF ANY SUCH DAMAGES, OR EVEN IF SUCH DAMAGES ARE FORESEEABLE, OR LIABLE FOR ANY CLAIM BY ANY OTHER PARTY.  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.

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

11. General Provisions.  Neither this Agreement nor any part or portion hereof shall be assigned or sublicensed by you.  Id Software and Activision each may assign its respective rights under this Agreement in the assigning party'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 extent permitted by applicable law.  Failure of Id Software or Activision 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 YOUR BREACH OF ANY TERM OR PROVISION OF THIS AGREEMENT, YOUR LICENSE GRANTED HEREIN AND THIS AGREEMENT AUTOMATICALLY SHALL TERMINATE, WITHOUT NOTICE, AND ID SOFTWARE AND ACTIVISION 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, the Printed Materials, or the New Creations, in any manner, you immediately shall destroy all copies of the Software, the Printed Materials, 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 Software.

YOU ACKNOWLEDGE THAT YOU HAVE READ THIS AGREEMENT, YOU UNDERSTAND THIS AGREEMENT, AND UNDERSTAND THAT BY CONTINUING THE 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, AMONG ID SOFTWARE, ACTIVISION, 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, AMONG ID SOFTWARE, ACTIVISION, AND YOU RELATING TO THE SUBJECT MATTER OF THIS AGREEMENT.
