Difference between revisions of "Minimizing your Script"

From the Oblivion ConstructionSet Wiki
Jump to navigation Jump to search
imported>KyleWollaston
imported>DragoonWraith
m (Reverted edits by KyleWollaston (Talk); changed back to last version by Halo112358)
Line 42: Line 42:


   (some extremely long code block)
   (some extremely long code block)
end</pre>
You can also do this:
<pre>;; optimized 2
begin GameMode
  if (some condition)
    if (some condition) == 0
      return
    endif
    (some extremely long code block)
  endif
end</pre>
end</pre>



Revision as of 00:51, 24 November 2008

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:

scn YourSwitchScript

short Working

begin onActivate
  set Working to 1
end

and this on the item:

scn YourItemScript

begin GameMode
  if YourSwitchScript.Working
...
  endif
end

An important note on If blocks vs early Returns

The Morrowind scripting community determined that the script engine would process all code inside of an If block (even if the condition was false) until the script engine could find an exit point. An exit point can be either an accessible RETURN call, or the end of the script. It appears that this is also true in Oblivion - see the OblivionScriptsOptimized thread linked below.

This:

;; unoptimized

begin GameMode
  if (some condition)
    (some extremely long code block)
  endif
end

Is considerably more expensive than this:

;; optimized

begin GameMode
  if (some condition) == 0 ;; logical negation
    RETURN
  endif

  (some extremely long code block)
end

In short, best practices for Oblivion scripting are to call RETURN early and often. For large scripts this subtle coding difference can yield dramatic performance gains.

External thread of tips

OblivionScriptsOptimized