Difference between revisions of "Modding Etiquette"

7,293 bytes added ,  13:21, 24 December 2010
→‎Balance Weapons to MOBS: Defined what MOBS was.
imported>Wrye
imported>Bruneauinfo
(→‎Balance Weapons to MOBS: Defined what MOBS was.)
 
(5 intermediate revisions by 2 users not shown)
Line 37: Line 37:
* Name the archive after the name of the package and include the version number. (E.g. "Wrye Morph 07.7z".)
* Name the archive after the name of the package and include the version number. (E.g. "Wrye Morph 07.7z".)
** Don't use generic names (e.g. NOT "Manual Install.7z").
** Don't use generic names (e.g. NOT "Manual Install.7z").
** Don't start with numbers, underscores or arbirary symbols (e.g. NOT "_My Cool Mod.7z" and NOT "1_Cool Mod.7z").
** Don't start with numbers, underscores or arbitrary symbols (e.g. NOT "_My Cool Mod.7z" and NOT "1_Cool Mod.7z").
** Don't end the archive name lie "-1234.7z". TesNexus appends package id numbers to uploaded archives, which Bain uses for it's "Open at TesNexus" command. Hence a number which looks like a TesNexus id, but is not will resul in Bain opening the wrong package at TesNexus.
** Don't end the archive name like "-1234.7z". TesNexus appends package id numbers to uploaded archives, which Bain uses for it's "Open at TesNexus" command. Hence a number which looks like a TesNexus id, but is not will result in Bain opening the wrong package at TesNexus.
** Don't use ' - ' in the name. Mod sites will convert such names to "Yadda_-_Yadda.yz", which is unattractive. Either skip the dash (Yadda_Yadda.7z) or skip the spaces (Yadda-Yadda.7z).
** Don't use ' - ' in the name. Mod sites will convert such names to "Yadda_-_Yadda.yz", which is unattractive. Either skip the dash (Yadda_Yadda.7z) or skip the spaces (Yadda-Yadda.7z).
* When including version number in mod name, use either no punctuation or use an underscore. E.g. for version 1.31, use "131" or "1_31". The reason for this is that some upload sites automatically remove non-extension '.'s in the archive name.
* When including version number in mod name, use either no punctuation or use an underscore. E.g. for version 1.31, use "131" or "1_31". The reason for this is that some upload sites automatically remove non-extension '.'s in the archive name.
Line 54: Line 54:


=== Archive Structure ===
=== Archive Structure ===
There are currently two main mod installers: OBMM and [[Bain]]. Many (or rather most) users install mods manually. It's possible to create archives that work well with all three installation methods (OBMM, Bain, Manual). For simple packages, this is fairly easy. For complicated packages (with optional and/or alterate files), triple mode archives are possible, though a bit more complicated to create.
There are currently two main mod installers: OBMM and [[Bain]]. Many (or rather most) users install mods manually. It's possible to create archives that work well with all three installation methods (OBMM, Bain, Manual). For simple packages, this is fairly easy. For complicated packages (with optional and/or alternate files), triple mode archives are possible, though a bit more complicated to create.


For '''simple packages''' (with no optional/alternate files), the top level of the archive should correspond to the top level of the Oblivion\Data directory.  
For '''simple packages''' (with no optional/alternate files), the top level of the archive should correspond to the top level of the Oblivion\Data directory.  
Line 87: Line 87:
Note: Cobl provides a number of resources (e.g. hair and eyes) that other mods can take advantage of.
Note: Cobl provides a number of resources (e.g. hair and eyes) that other mods can take advantage of.


== Bug Avoidance ==
* Don't alter anything in cell (3,3) in any existing worldspace. Due to an engine bug, when the player has a mod with edits to this cell active and the cell is loaded, all markers including the player's marker on the local map will disappear. Removing any edits to (3,3) from your mod will fix the problem. This bug does appear by itself even with no mods active, but (3,3) edits will make it worse.
* If your mod adds a bow weapon, or edits any existing bow, be sure to change the Reach value to something other than zero. The suggested value is one. Otherwise, you will trigger a very nasty bug for a small percentage of users where equipping the bow doesn't just crash Oblivion, but can result in a Blue Screen Of Death or a reboot of the PC, depending on their system settings.
* See [[:Category:Troubleshooting|Troubleshooting]] for more bugs and other tips.
== Efficiency ==
* Don't unnecessarily make references persist. Persistent objects are always loaded in memory.
* Check "No Low Level Processing" for actors (creatures or NPCs, even dead/disabled ones) that are never intended to leave a given cell. Low level processing causes their scripts and AI to run once every 5 (?) seconds or so, even if PC is not near.
* Do NOT check '''Quest Item''' unless necessary. Scripts for Quest Item objects run every frame of the game even if PC is nowhere near. If quest item status is necessary, then it's best to turn it on and off using scripts as required.
* Keep your scripting as efficient as possible. Scripts can very rapidly add up and kill performance if too many are running at once - ensure that your scripts are '''only''' running when they need to be. Avoid [[Global Scripts]] as much as possible.
** Avoid using '''GameMode''' blocks if possible. (E.g., if you can use an '''OnLoad''' block instead, do so.)
** If all the script does is enable/disable, consider enabling/disabling from an external script, or if there is a group of related references, assign them all to a single parent reference and enable/disable the parent reference through a script.
** Use quick exits from '''GameMode''' block scripts when possible. I.e., rather than letting the script fall through several lengthy '''If''' statements, instead do a single test at the top to see if rest of script should be skipped, and if so, return.
** When initializing the state of multiple objects (e.g., setting three actor references to attack player under a certain condition), use a single script on one object which sets all, rather than scripting each of them separately.
* Avoid [[Script_Processing#Remote_Ref_Heartbeat|Remote Ref Heartbeat]] -- Do '''not''' set local variables in every frame of persistent ref scripts.
* Avoid using [[PlaceAtMe]] to create new copies of an object when you could simply use [[MoveTo]] on an existing object. Apparently, placed items are never deleted from the world and if used enough can cause savegame size to expand significantly. (E.g., earlier versions of Harvest Flora had this problem.)
== Compatibility ==
*Don't alter objects that exist in Oblivion.esm unless your mod is specifically designed to alter them. Examples of bad alterations include changing the contents of a chest, the destination of a load door, the properties of objects, adding a script to an object, or changing a magic effect. Changes like this will affect all instances of that object in the game. To avoid that, copy the existing object with a new ObjectID before making any changes.
* Keep your mod clean. Information on cleaning mods can be found in the [[Mod Cleaning Tutorial]].
* Keep any new dialogue clean. Information on unclean dialogue can be found in the [[Unclean Dialogue|Unclean Dialogue Tutorial]].
* Don't create self-centered dialogue that adds topics or greetings to all NPCs in the world, without a means to avoid them. Another modder might want to create a NPC that knows absolutely nothing about current events or doesn't care about them. If you want to add generic topics to all NPCs, add them to the quest "'''Generic'''" or make your own quest and test for "'''[[GetIsPlayableRace]] == 1'''" and "'''[[GetInFaction]] ForgottenOnesFaction == 0'''".
* Don't click on '''Recompile All''' in the Script Edit window of the TES Construction Set.  Doing so includes all of the scripts from currently open TES Files in your mod making it bigger in file size and possibly interfering with somebody else's mod.
* Avoid making any changes to the '''Magic Effects''' menu since your changes could interfere with a new expansion or could conflict with another mod altering the same '''Magic Effect'''. Even if that particular '''Magic Effect''' seems to be unused, it may have a planned use at a future date.
== Design ==
=== Maintain Game Balance ===
Keep game balance in mind when creating mods.  Making an item that would normally need recharging use no charges or creating ''super spells'' with little or no magicka cost will severely alter the balance of game play.
== Integration ==
=== Balance Weapons to MOBS ===
If you're releasing a weapon, try to fit the weapon to MOBS (''Medieval Oblivion Equipment Balance System - an existing and popular weapons balance mod.'')
=== Use Standardized Option Setting ===
Option settings should be done using the Options Prototype. The prototype package provides a starter mod which can be modified and integrated with your mod to provide an option setting mechanism which follows a standard design.
The option prototype takes the form of a misc item. When Cobl is present, the item will automatically move to Cobl's options menu, and work as usual from there. When Cobl is not present, the item will remain in the players inventory. Equipping it from inventory will bring up the options menu.
== Use Cobl ==
Cobl (Common Library) is a mod that provides a large set of common resources, facilities and items for other mods to use. It provides: hairs, eyes and races; survival mod integration; alchemical sorters; standard options menu; death handling and much, much more. Many compatibility problems and redundancies can be resolved by building on top of Cobl, and your mod can be enriched by drawing from Cobl's large base of objects.
Objections to using Cobl:
* Users must download and install Cobl separately from your mod. However, this is somewhat offset by Cobl's growing popularity -- many mod players already have Cobl installed.
* Cobl adds quite a bit of stuff which users may not want. This is actually not a problem -- users can choose to not install/activate the various Cobl esp files. Without the "glue" esp files present, Cobl adds very little to the world.
==(Or) Be Cobl Ready==
Even if it's not desirable to make the main mod itself dependent on Cobl, its sometimes possible to build the mod so that it can be patched to integrate with Cobl. In particular:
===Activator Water Wells===
Instead of using statics for water wells, use activators. Such activators can be readily patched to use Cobl water well scripts, which in turn will make them functional with all cobl-aware thirst mods.
===Buffet Plates===
Similarly, buffet plate activators can be added to inns and taverns. These can be patched to provide act as Cobl type buffet plates.
[[Category:Getting Started]]
[[Category:About Modding Etiquette]]
[[Category:About Modding Etiquette]]
Anonymous user