Difference between revisions of "Category:About Modding Etiquette"

Split into sections. Add Efficiency section.
imported>Kivan
m
imported>Wrye
(Split into sections. Add Efficiency section.)
Line 1: Line 1:
== Things to know when making a Mod ==
== Design ==
* 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.


*Keep your mod clean. Information on cleaning mods can be found in the [[Mod Cleaning Tutorial]].
== 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]].


*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.


*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.
* Include alterations to Worldspaces in the Summary window of your mod, in the description of the downloadable file, and on the [[:Category:Mod Worldspace Alterations|Mod Worldspace Alterations]] page.
 
== 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.


*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.
== Efficiency ==
* Don't unnecessarily make references persistent. Persistent objects are always loaded in memory.


*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'''".
* 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.
*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.


*Include alterations to Worldspaces in the Summary window of your mod, in the description of the downloadable file, and on the [[:Category:Mod Worldspace Alterations|Mod Worldspace Alterations]] page.
* Do NOT check '''Quest Item''' unless necessary. Scripts for Quest Item actors 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 turn it 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, and avoid using [[PlaceAtMe]] to create new copies of an object when you could simply use [[MoveTo]] on an existing object.
* 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 refs, assign them all to a single parent ref and enable/disable the parent ref 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.  


*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.
* 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.)


*Include a detailed '''Readme''' file along with your mod. A good readme provides a description of the mod's features, any potential bugs or technical issues, a list of changes made to existing objects, possible sources of conflict with other mods, and some information on how to contact you in the event that a user encounters a problem with your plugin. Creating the readme as a plain text file (such as one written in Notepad) ensures that everyone will be able to read it. And to avoid overwriting another mod's readme, give it a unique name, such as "YourModName - Readme!"
== Releasing ==
* Include a detailed '''Readme''' file along with your mod. A good readme provides a description of the mod's features, any potential bugs or technical issues, a list of changes made to existing objects, possible sources of conflict with other mods, and some information on how to contact you in the event that a user encounters a problem with your plugin. Creating the readme as a plain text file (such as one written in Notepad) ensures that everyone will be able to read it. And to avoid overwriting another mod's readme, give it a unique name, such as "YourModName - Readme!"
** Here's a sample [http://www.tessource.net/files/file.php?id=4793 readme template] (modder's resource) that includes instructions for how to best deal with ArchiveInvalidation problems.   
** Here's a sample [http://www.tessource.net/files/file.php?id=4793 readme template] (modder's resource) that includes instructions for how to best deal with ArchiveInvalidation problems.   
** You can also use the [http://lhammonds.game-host.org/obmm/tools_readme_generator1.asp Readme Generator] to quickly build a custom-tailored and professional-looking text file with very little effort.  
** You can also use the [http://lhammonds.game-host.org/obmm/tools_readme_generator1.asp Readme Generator] to quickly build a custom-tailored and professional-looking text file with very little effort.  
Anonymous user