Difference between revisions of "Category:Troubleshooting"

5,451 bytes removed ,  08:23, 23 January 2010
imported>Dev akm
(→‎Common Bugs: moving to an article)
imported>Qazaaq
 
(12 intermediate revisions by 3 users not shown)
Line 1: Line 1:
= Troubleshooting Introduction =
This is a collection of articles on troubleshooting TES IV problems -- gotchas, common mistakes, CS bugs, etc. The basic ideas and topics were originally discussed in [http://www.bethsoft.com/bgsforums/index.php?showtopic=628331 this ESF thread]. Continued reports and peer review has moved to a [http://www.bethsoft.com/bgsforums/index.php?showtopic=837706 new thread] now that the original is almost full.


This is a collection of articles on troubleshooting TES IV problems -- gotchas, common mistakes, CS bugs, etc. The basic ideas and topics were originally discussed in [http://www.bethsoft.com/bgsforums/index.php?showtopic=628331 this ESF thread].  
The original list started back in February 2007 has grown to the point that it needed to be split into separate articles. These articles list of some common mistakes and their effects on players and/or the CS. Please suggest more ideas if you can.


These topics could be organized in a lot of different ways, but for now we can start with a simple list.


I've created it as a category so we can add more specific topic articles in the category.
----


What follows is essentially a long list of some common mistakes and their effects on players and/or the CS. Please suggest more ideas if you can.--[[User:Dev akm|Dev akm]] 17:56, 20 February 2007 (EST)


 
*[[Common Bugs]] - These are annoying problems with the CS and game engine.
 
*[[Common Mistakes]] - These are things that all mod-creators should know not to do.
 
*[[Crashes]] - Common problems that may cause game crashes (CTDs). See also [[Crash Prevention]].
 
*[[CS Crashes]] - Common actions that make the CS crash.
 
*[[Debugging]] - When something just isn't working right, look here for possible causes and ways to track down the bug.
 
*[[Performance Problems]] - This section is intended as a place to list performance problems and tips, especially those related to scripting.
= Debugging =
*[[Fixing the AddTopic Bug]] - Critical dialog bug fix.
 
*[[Obscure Bugs]] - These issues don't occur very often, and we don't even really know what causes them, but they hurt nonetheless.
When something just isn't working right, look here for possible causes.
*[[Helpful Programs]] - These programs can help a lot when troubleshooting.
 
*[[Understanding Mod Conflict Reports]] - An explanation of different mod conflicts.
== Comma Instead of Period ==
 
This can cause severe headaches for the scripter: The compiler will accept a comma in place of a period in reference syntax, but the script will silently fail in the game when the line is encountered.
 
  player.modAV health 200 <- Fine
  player,modAV health 200 <- Suddenly your script is no longer running and you're wondering why
 
Easy to miss when you're looking for logic errors.
 
== Numerals ==
 
Don't start an ID or variable with a numeral.
 
  short 5forFighting; BAD
  long benFolds5; GOOD!
  myGuy.moveTo 0marker; BAD
 
== Mismatched If/Endif ==
 
The compiler will ignore extra [[endif|endifs]] when you save your script, but they can cause the script to stop running when encountered during gameplay. Make sure each [[if]] in your script is paired with exactly one [[endif]]:
<pre>if ( something == happened )
  do something
endif ; GOOD
endif ; BAD, extra endif may cause errors in the game</pre>
The best way to avoid this problem is to use proper indentation of if-blocks.
 
== Quest Topic Scripts ==
 
The Scripting section in the Quest/Topic editor seems to be for very generic scripting like setting global variables and doing things like setstage. Be aware that while some things may compile clean here and seem perfectly fine, they just don't work in-game.
 
== Getself != player ==
 
Be careful if you use:
 
  Getself != player
 
When called in a scripteffect spell, the statement sometimes evaluates true for the player. The easiest solution is to add another condition to double-check it, such as:
 
  getdistance player >0
 
However, [[getDistance]] is unreliable if the player is swimming.
The best solution is to use:
 
  ref refVar
  set refVar to getSelf
  if ( refVar.getIsReference player == 0 )
 
= Performance Problems =
This section is intended as a place to list performance problems and tips, especially those related to scripting.
 
== Gamemode Scripts ==
Avoid using gamemode scripts wherever possible. Use quest scripts if you can, or try to find ways to put as much of the script work into OnLoad, OnEquip, and ScriptEffectStart blocks as possible.
 
If you need to use a GameMode block, use an 'if' test or a flag so the code will only run when necessary. For instance, if you need to run an item script whenever the player hits a switch, place this on the switch:
<pre>scn YourSwitchScript
 
short Working
 
begin onActivate
  set Working to 1
end</pre>
and this on the item:
<pre>scn YourItemScript
 
begin GameMode
  if YourSwitchScript.Working
...
  endif
end</pre>
 
== CPU-Hungry Script Functions ==
Generally, scripts have little affect on FPS, especially compared to graphics. However, if run every frame there are a few functions that will cause a noticeable (>1) drop in FPS:
# [[GetSecondsPassed]]
# [[GetNumItems]] (OBSE)
# [[GetInventoryObject]] (OBSE)
# [[GetFPS]] (OBSE)
#* However, you can run this every few frames without a drop. This is most useful as an alternative to '''GetSecondsPassed''' as ((Number of frames passed) / GetFPS) approximates the amount of time passed.
# GetDistance
#* I have tested the others above, but not this one. However, I have seen it mentioned several times that GetDistance is a CPU heavy function, so I'm including it here.
#*--[[User:Haama|Haama]] 17:54, 10 September 2007 (EDT)
 
Note that for all of these, they are incredibly fast functions. Even the slowest, GetInventoryObject, can be run 1000 times and the next frame will come up in less than a second. They will only cause problems if run them constantly (every frame or so).
 
The main problem with CPU-hungry scripts comes from Oblivion's "brick-wall" for FPS and script processing. Scripts won't touch FPS until you hit a certain limit, and then even a few extra small scripts can start dropping FPS.
 
See [[Code Optimizing]] for more details (in planning/progress).
 
== AI Overload ==
If you use advanced AI on a lot of NPCs or creatures, the game may start to suffer from so-called "AI overload", causing NPCs and creatures to fail to process their AI as you approach them. This can do nasty things like giving roadside bandits a lobotomy -- they just stand around and do nothing as you approach.
 
Creatures that are swimming seem to put an extra large burden on the system, possibly because the pathfinding is trickier in the water?
 
== Low-Level Processing ==
Avoid low-level processing for as many creatures and NPCs as possible. Use the "No Low Level Processing" option to keep them from processing their AI unless the player is in the same cell.
 
= Obscure Problems =
 
These issues don't occur very often, and we don't even really know what causes them, but they hurt nonetheless.
 
== Pathgrid CTDs ==
 
Does anyone really know why the pathgrid CTDs happen? The last thread about it I remember didn't find a solution.
 
This is an older problem that plagued both UL and OOO for a while. Basically, [http://www.elderscrolls.com/forums/index.php?showtopic=495607 changing pathgrids is risky] and requires a lot of testing to avoid CTD issues. I didn't find any surefire solutions for this either. Does anyone know if this topic has been written about in any more detail than the introductory [[Path_Grid_Generation|Path Grid Generation]] article and [[A_beginner%27s_guide%2C_lesson_3_-_The_external_world#Path_Grids_.28simple.29 |Path Grids (simple)]]?
 
== Black Screen Bug ==
 
This is the [http://www.elderscrolls.com/forums/index.php?showtopic=517690 Infamous Nvidia + HDR Black Screen Bug].
 
This bug can usually be fixed by the mod-creator. It is usually caused by problems in a custom mesh. This can happen if the mesh creator forgot to assign a valid material to part of the mesh. It can also happen if you have an opaque texture assigned to a transparent portion of your mesh. It can even sometimes be caused by a standard shader like the GhostEffect.  
 
It can also usually be solved by updating the tangent space of certain mesh nodes in a .nif file. NifSkope has a spell to do this.
 
Once you've narrowed down which .nif is causing the problem, simply open it in NifSkope, right-click each NiTriStrips/NiTriShape node and select ''Mesh -> Update Tangent Space''. This works most of the time.
 
= Related Articles =
 
= Helpful Programs =
[[TES4Edit]]<br>
[[Wrye Bash]]<br>
[[TES4Gecko]]<br>
Anonymous user