File information
Created by
DavidJCobbUploaded by
DavidJCobbVirus scan
Mod articles
-
A development retrospective for NorthernUI
NorthernUI's been out for nearly three years now, and I guess I just want to write down some reflections on its development -- challenges I ran into, things I could've and should've done better, and the like. I don't want to use the term "post-mortem" because I don't want to permanently write off ever returning to maintain NorthernUI, but I suppose it'll be that general kind of write-up.
Scope and feature creep
This is absolutely the biggest and worst issue with NorthernUI. We're not dealing with Oblivion Reloaded levels of creep here, in any sense of the term, but NorthernUI does too many things at once and absolutely should've been multiple mods.
Having the gamepad support exist in the same DLL as everything else is definitely my biggest regret a... -
The "pref" system, introduced in NorthernUI 2.0.0, allows UI authors to implement user-configurable options without requiring users to edit files manually, and without having to hardcode the options into a DLL. Each such option -- a "UI pref" or simply "pref" -- is defined in a special XML file and can have its value changed at run-time using specific XML operators. In essence, Oblivion XML traits can be used as setters -- as "code," so to speak, rather than content.
I implemented this solely so I could add HUD options and whatnot without having to hardcode every single one of them; the system is totally unnecessary for any content authors who are using scripting. I'm documenting the system for the public because there are quite a few mods that inject content into the HUD, and ... -
NorthernUI adds the following script commands as of version 2.0.0:
Command Arguments
Gamepad index
A number indicating which of the four gamepads you wish to access: 0, 1, 2, or 3. For commands that read input state, the value -1 means "any gamepad;" for commands that modify input state (i.e. enabling or disabling keys), the value -1 means "every gamepad."
I don't know, offhand, what the logic is behind how XInput assigns gamepads to slots, e.g. what would happen if the player accidentally unplugged their gamepad and then plugged it back in. Most of the DLL's own code just grabs the first connected gamepad (i.e. "any gamepad"), so I'd recommend just using -1 for everything unless you're specifically trying to do some weird experimental multiplayer kind o... -
NOTE: With the release of NorthernUIAway, this article is outdated. However, information in here may still be useful to users who wish to use NorthernUI's DLL alongside other UI overhauls, such as DarNified UI.
Bare-minimum needed changes
The instructions below describe the bare-minimum changes needed to get gamepad support working in the vanilla menu files. Instructions may differ for other UI overhauls. You will, at a minimum, need to know basic XML to make the changes needed to enable all of the gamepad functionality.
The world map and local map
NorthernUI does not add full gamepad support to the maps unless a variable is set in the menu file; this is mainly for compatibility reasons. Most menus hide the gamepad map cursor anyway, so that ... -
Complete list of engine changes
General
Adds new traits, operators, selectors, and menus. See the relevant article.
Fixes a bug that affects all vanilla textboxes, where pressing the up or down arrow keys inserts invisible garbage characters into the text that you’re entering. These characters are retained when saving any text, may be visible in modded fonts, and may affect alphabetical sorting. Text already affected by this bug cannot retroactively have garbage text characters stripped out.
Disables texture filtering for the menu cursor. This addresses an unknown bug that severely breaks texture filtering for all other menu assets whenever the cursor receives texture filtering. The effect of this is that all assets look cleaner, particularly high-resolution assets that are downscaled and ... -
I tried to build the mod so that nothing it does is a major obstacle to compatibility. However, there are still compatibility problems I can't account for at this time, where fonts and Oblivion's program code are concerned. Worse is that while I can anticipate problems, I can't be sure which problems will actually happen, because I only own the game in English.
Translating the text
The English version of Oblivion uses Windows-1252 encoding (commonly called "ANSI"). The same encoding should be used or at least usable for languages with the same alphabets (e.g. French, German, Spanish). When editing text files, make sure you're using the right encoding; multi-byte encodings like UTF-8 may handle some symbols inconsistently.
All of NorthernUI's menus use strings ... -
Menus, tile types, traits, operators, and parse-time tokens all have numeric IDs existing in a common space.
All new IDs
41C menu XXNHUDDebugMenu
41D menu XXNHUDClockMenu
41E menu XXNOptionsMenu
41F menu XXNControlsMenu
1600 trait xxnFontPath
1601 selector NorthernUI
1602 selector descendant
1603 trait xxnKeepNiProperties
1604 trait xxnNiScale
1605 operator xxnOpSine
1606 operator xxnOpCosine
1607 operator xxnOpTangent
1608 operator xxnOpAtan2
1609 operator xxnOpStringEq
160A operator xxnOpStringAppend
160B operator xxnOpBinaryAnd
160C operator xxnOpBinaryOr
160D selector xxnStrings
160E operator xxnOpSetIfZero
160F select...