Progress will be laughably obsolete by the end of the weekend.
; =============; Fundament.ini; =============; Global and character-specific copies of this file are loaded when Fundament; initializes. The global file is loaded first, allowing the character-specific; file to contain overrides. Global configuration is located in Data\ini\.; Character-specific configuration is located in a subdirectory with your; character's name. For instance, Bendu Olo's configuration files are found in; Data\ini\Bendu Olo\. Nothing bad happens if either file is missing.;; You can do a lot of things here, but none of them are mandatory.;; The Basics; ----------; At the most basic level, you can change GMSTs, Oblivion.ini settings and; skill advancement rates. You can also directly load another configuration; file, which has access to all the same functions.;; Fundament.ini operations consist of setting a few quest variables, then; triggering a stage script which processes them. The first step is to set one; of four variables to the name of the thing you want to operate on. If more; than one of these variables contains a non-empty string, the operation will; be skipped.;; To change the value of the game setting iTrainingCostMult -; set fd.GMST to sv_Construct "iTrainingCostMult";; To change the setting "fGamma" in the "Display" section of Oblivion.ini -; set fd.Ini to sv_Construct "fGamma:Display";; To change the advancement ("use") rate for the Acrobatics skill -; set fd.Use to sv_Construct "Acrobatics";; To load global AND character-specific copies of "Awesome.ini" -; set fd.File to sv_Construct "Awesome";; For every operation except File, you also need to set a value. (If you don't,; it defaults to zero.) -; set fd.Value to 3.14159; ; Finally, each skill actually has two separate use rate settings which apply; to different uses of the skill. They're numbered 0 and 1, and use rate 0 is; configured by default. If you want to configure use rate 1 instead:; set fd.Which to 1;; Once you've set up an operation, this command executes it:; SetStage fd 1;; All variables are then reset, and you can perform another operation.;;; ==============; Advanced Usage; ==============;; Assertions; ----------; The instructions above are enough to handle most situations, but internally; Fundament is doing much more than just setting values. When you perform one; of the operations above, you're actually creating an "assertion" which is; recorded with a tag (by default, the base name of the file it came from) and; a priority (default 0). One use rate, GMST or ini setting can have any number; of assertions, but each tag is unique; if a new assertion is received with; the same tag as an existing one, the old one is replaced. To determine the; "canonical" value of a setting, Fundament runs through the list and picks; the assertion with the highest priority. If two or more are tied, the most; recent one is used.;; It might seem like overkill, but other mods can make assertions in their; scripts, either by being dependent on Fundament and calling its internal; functions, or through this same configuration system using RunScriptLine; commands. Other mods also have access to Fundament's records about what each; setting should be. This allows situational changes to be made during gameplay; without causing confusion about the base value of a setting. This facilitates; compatibility and eliminates potential bugs.;; Multipliers; -----------; In addition to assertions, Fundament keeps a list of multipliers for each; setting. These are also tagged, but have no priority. When determining a; setting's canonical value, every multiplier is applied to the leading; assertion.;; Configuration Switches; ----------------------; By setting additional variables, most features of the Fundament API can be; accessed within the configuration system.;; To set a multiplier instead of making an assertion -; set fd.Mult to 1;; To remove an assertion with the current tag (see below for changing tags) -; set fd.Rem to 1;; To update Fundament's records without actually setting the value in-game; (outside of user configuration, this is usually preferred) -; set fd.DoNotAssert to 1;; The flags above work together in any combination. For instance, setting Mult; and Rem will remove a multiplier. There is one other flag which works only in; specific combinations.;; To place the current canonical value of a setting in fd.Value:; set fd.Get to 1;; To place the current leading assertion for a setting into fd.Value:; set fd.Get to -1;; To place the current total multiplier for a setting into fd.Value:; set fd.Get to -1; set fd.Mult to 1;; If fd.Get is non-zero, the Rem and DoNotAssert flags are meaningless. The; Mult flag is only checked if fd.Get is negative.;; Changing Tag & Priority; -----------------------; Whenever the config loader starts to process a file, it sets the values of; fd.Tag and fd.Priority. The tag is set to the file's base name (e.g. for; Fundament.ini, the tag is "Fundament") and the priority is set to zero.; These can be changed by setting them directly, but unlike other config values; they are NOT reset after each operation. Any change will persist until the; end of the file. This is true even if you use the File operation to load; another config file: the current tag and priority are stored, defaults are; set for the new file, and after it finishes the original file's context is; restored before continuing.;; To change the tag for subsequent operations in this file:; set fd.Tag to sv_Construct "New Tag";; To change the priority for subsequent operations in this file:; set fd.Priority to 1.61803;; Note: negative priorities are invalid, and assertions made with a negative; priority are discarded. Likewise, an empty string is not a valid tag.;; External Operations; -------------------; A series of RunScriptLine commands can set up and perform any Fundament; config operation. (Otherwise the Get flag would be mostly useless!) When; interfacing with Fundament in this way, it is essential to explicitly set; fd.Tag and fd.Priority while preparing your operation, and always set up and; perform an operation within a single script frame.;; Debug/Message Options; ---------------------; NOTE: If you want debug output for the configuration process, these settings; should be moved to the top of the file. If you don't need it until the game; is running, they can be left at the end.;; Various messages can be sent to the console, to ConScribe (Fundament.log),; and to obse.log. For each you set a threshold, and any messages with a debug; level BELOW that threshold will be sent there. Messages with a debug level of; at least 1 are prefixed with "Fundament:" and the tag for their debug level.; (Messages sent to ConScribe have only the level-specific prefix.);; Debug levels are:; -1 = "New Game" and "Game Loaded" notifications. More useful than you think!; 0 = Notifies when a configuration file is loaded through Fundament.; 1 = "ERROR" - notifies when function calls fail to complete.; 2 = "DEBUG" - gives various messages tracking internal calculations.; 3 = "TRACE" - shows entry and exit for most function calls.; 4 = "VERBOSE" - additional tracking messages inside loops.;; The settings and their defaults are:; set fd.debug to 0; set fd.debugConScribe to 0; set fd.DebugOBSE to -1
ScN nGCDfnGetAbilitiesarray_var AVint indexarray_var eachbegin _Function {AV} while (index < 33) let AV[index]["Mod"] := 0 let index += 1 Loop foreach each <- GetActiveEffectCodes if eval !(IsNthActiveEffectApplied each["key"]) CONTINUE endif if eval !((GetSpellType (GetNthAEMagicItem each["key"])) == 4) CONTINUE endif let index := GetNthAEAV each["key"] if eval !(index) if eval !(MagicEffectUsesAttribute each["value"]) CONTINUE endif elseif (index > 32) || (index == 11) CONTINUE endif let AV[index]["Mod"] += GetNthAEMagnitude each["key"] Loopend