OpenMod 0.0.1 http://www.captured.com/nonamectf/openmod ------------------------------------------------------------------------------- IMPORTANT NOTE!: This readme itself is in prerelease form. It is primarily here (in the pre-release source-relases) to show off OpenMod's sparkly new LGPL license, as well as author information. ------------------------------------------------------------------------------- 1. Current Features ------------------------------------------------------------------------------- OpenMod is a simple UnrealScript package which provides Unreal mods with some powerful dynamically loaded information. As of the current release, OpenMod supports the following features: * Dynamic Level Information - Upon the start of a game, OpenMod will load a level specific UnrealScript class which can spawn new actors, move existing actors, delete existing actors, and perform any other operation allowed in UnrealScript. This UnrealScript class is kept separate of the level and is server side only, allowing mod authors and/or server admins to make changes to actors in a level without having to have the user download a modified map. It also allows and provides the following: * Single player maps can be converted to DM and/or CTF play without having to have users redownload the entire map. (Some of Unreal's single player maps approach 10mb in size. An OpenMod info file is typically only a few kilobytes in size!) * CTF map authors can spawn OpenMod-provided "flag placeholders" which, when coupled with an OpenMod-compliant CTF mod, will have the mod-specific flag spawned in that location. This allows one map to support multiple CTF mods by only having to create one set of flag location data! * CTF extensions supported by NoName CTF (http://www.captured.com/nonamectf) with UWar support forthcoming (http://www.planetunreal.com/uwar) ------------------------------------------------------------------------------- 2. Release Notes ------------------------------------------------------------------------------- 0.0.1: ------------------------------------------------------------------------------- 3. Future Plans ------------------------------------------------------------------------------- OpenMod is currently in the very early stages of development. As such, it is far from reaching a full feature set. Some future plans include: * Item-set support - Server admins and/or mod authors can define various different sets of items, which can: * Be provided to each player upon spawning/respawning. (Ex: Each player could be, by default, given a grappling hook for each game.) * Replace existing weapons and/or items in a level with different ones. (Ex: A mod-author, upon creating a new weapon, could create a corresponding item-set to replace all instances of a particular weapon with theirs.) * Multiplayer Dynamic Music Support - Allowing different music to be played under certain circumstances. (Ex: In a CTF game, have fast-paced music played when the flag is stolen and have it slow-down when it is in base.) * Improved documentation. All of this will be available on the currently under-construction, OpenMod web site. (http://www.captured.com/nonamectf/openmod) Ideas for additional features are welcome. Please e-mail davidl@captured.com with your ideas. ------------------------------------------------------------------------------- 4. Adding OpenMod support to a mod. ------------------------------------------------------------------------------- OpenMod, being a server-side only mod, only requires a few minor changes to the specific game type. In order to ease this process for mod authors, especially considering the fact that game types are located in various parts of the class hierarchy, OpenMod-compliant mods only need to spawn an 'OpenModGameInfo' object, occasionally provide it with bits of information, and make function calls to the object. ------------------------------------------------------------------------------- 5. Creating an OpenMod-compliant CTF map ------------------------------------------------------------------------------- If you're interested in creating a CTF map which works under any OpenMod compliant CTF mod (see the "Features" section for a list of currently supported mods), all you have to do is use OpenMod's "PlaceHolder" objects to specify where flags and/or flag bases are placed. These objects are available in OpenMod.u and can be found under NavigationPoint->PlaceHolder. The CTFFlagPH branch contains place holders for flags and the CTFFlagBasePH branch contains place holders for flag bases (where flags can be captured at.) Note: Be sure to use the proper team specific subclasses of CTFFlagPH and CTFFlagBasePH, otherwise your map will not have their proper flags and/or flag bases spawned in them. ------------------------------------------------------------------------------- 6. Converting an existing map to an OpenMod-compliant CTF map ------------------------------------------------------------------------------- If you're interested in converting an existing map to CTF play, OpenMod will let you do this without having to modify the map at all (therefore preventing you from having to redistribute an entire second copy of the map!). Also, you by going through OpenMod, your map can support any OpenMod-compliant CTF mod. (See the "Features" section for a list of currently supported mods.) To do this, you're going to need a break out a copy of UnrealEd. Once this is done, open the level you want to convert as well as OpenMod.u (this can be loaded by going to the "Browse" selection box (on the right side of the window), selecting "Classes", and then pressing the "Load" button (bottom-right corner of the screen.) Next, from within the list of classes, go to NavigationPoint->PlaceHolder. From there, there will be two branches of objects, Flag place holders and Flag Base place holders. Place these items onto the map in the spots you'd like them to end up at, *BUT DON'T SAVE THE LEVEL!!!!*. The whole point of this conversion feature is that you don't have to make any changes to the map files. Instead, right click on each of the place holder objects (on the map), one by one, go to the object's properties, look under the "Movement" section, then jot down the Location's X, Y, and Z values. Now, go back to the list of classes and open up Info->OpenModInfo. Now create a subclass underneath this one. NOTE, the naming of this class is quite important as it will determine whether or not your module is recognized and loaded by OpenMod. You'll need to get the name of the map first (*NOT* the file name but the map's name.) This can be found by going to the Options menu, looking under Level Properties, LevelInfo, and then Title. If the title is 10 letters or less long, then this will be easy. Simply write down the name of it without any spaces or dashes and name your new class: Class Name: Info Package Name: Data For example, if you had a level titled "DM MyLevel", you would name your class InfoDMMyLevel and put it in the package DataDMMyLevel. However, if the level's title is longer than 10 letters long, then you will have to take the first five and last five letters in the name (excluding spaces), combine them together end-to-end, and then append the "Info" and "Data" as explained above. For example, if you had a level titled: "DM Warehouse Battle", your class would be called "DMWarattleInfo" and it would be placed in the package "DMWarattleData". Now, before we do anything with this subclass of OpenModInfo, we're going to have to create another class which will actually spawn the place holders onto the map. From the class list, open up Info->DynInfo->DynZoneInfo-> DynLevelInfo->DynDMLevelInfo->DynTGLevelInfo and select DynCTFLevelInfo. Next, create a subclass underneath DynCTFLevelInfo. The name of this class does not matter, however it has to be in the same package as the new subclass of OpenModInfo is (the one you just created a few moments ago.) However, for the sake of consistency and clarity, you should name your class according to the following convention: DynCTFLevelInfo_ Note: The should be the same one you used when creating the subclass of OpenModInfo. For example, if you're working on the level "DM Warehouse Battle", you'd name your class 'DynCTFLevelInfo_DMWarattle'. Once you have this class created, open up it's source code and create an Initialize() function, such as the one below. function bool Initialize() { // Blue Flag Spawn(class'CTFBlueFlagPH',,,vect(254.033295, -281.846130, 30.099634)); Spawn(class'CTFBlueFlagBasePH',,,vect(356.835327, -145.883789, 29.100412)); // Red Flag Spawn(class'CTFRedFlagPH',,,vect(8448.337891, -2198.896729, 30.100130)); Spawn(class'CTFRedFlagBasePH',,,vect(8309.743164, -2309.148682, 29.100412)); return Super.Initialize(); } You can simply take this function and copy it into your class. The values go in the order X,Y,Z. So for this example, the CTFRedFlagPH is placed along the X coordinate at 8448.337891, the Y coordinate at -2198.896729, and the Z coordinate at 30.100130. Note to UnrealScripters: The function *MUST* call Super.Initialize() and it *MUST* do so *AFTER* all the CTFFlagPH and CTFFlagBasePH objects have been spawned! You are more than welcome to make your function as complex as you want. By this, you can use foreach to replace various items in a level or possibly remove some or add some. It's up to you. Look at DataDMAriza.DynCTFLevelInfo_DMAriza for something quite a bit more complex! Now, for the last part, go back to your OpenModInfo class and open up it's properties sheet. Open up OpenModInfo->AvailableInfo. In the next available AvailableInfo slot (this should be the top one), type in the name of your DynCTFLevelInfo subclass and hit enter. The full name of that class should now show up in that entry. If not, make sure you have your spelling correct. Lastly, make sure you compile your class (hit F7 within UnrealED) and save it when you're finished. If you have any questions, feel free to e-mail davidl@captured.com with any questions. ------------------------------------------------------------------------------- 7. Authors ------------------------------------------------------------------------------- * David "VicViper" Ludwig (davidl@captured.com) - Project Co-ordinator, Coding * James "StarDrifter" Abbatiello (abbeyj@frag.com) - Differ * Ob1-Kenobi (ob1.kenobi@mailexcite.com) - TeamTriggers, TShieldBelt, + more ------------------------------------------------------------------------------- 8. Copyright and License ------------------------------------------------------------------------------- OpenMod, Providing Unreal and Unreal Engine based games with a powerful set of dynamic information tools. Copyright (C) 1998 by it's respective authors. Please see the "authors" section of this file for a complete list. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. The GNU Library General Public License may also be found at http://www.gnu.org