Quote:
Consider the consequences of combining them though. If the textures are all defined in EQUI_Animations then people can't install your mod along with other mods (especially custom cursors) that must modify EQUI_Animations. Or your mod will need to be updated whenever EQUI_Animations is updated.
|
What makes you think I'm loading them in EQUI_Animations? There's nothing that requires that all animations be defined there, as far as I can tell. That would be contrary to the entire point of restructuring the mod, as you rightly say. The idea is to modify (actually you replace the Default UI files) as few of the default files as possible, as that's what generates the biggest problems when a patch breaks your UI - rolling the changes from the Default UI into the mod.
Instead, what I am doing is defining a new EQUI.xml file in my mod's directory:
Quote:
<?xml version = "1.0"?>
<XML ID="EQInterfaceDefinitionLanguage">
<Composite>
<Include>../default/EQUI.xml</Include>
<Include>EQUI_tessilUI.xml</Include>
</Composite>
<Schema xmlns="EverQuestData" xmlns:dt="EverQuestDataTypes"/>
</XML>
|
The
EQUI_tessilUI.xml file contains the new animation definitions which are global to the mod (i.e. those that are common to the player, target, and group windows).
Quote:
If you put the textures all in the group window but use them in the player window as well, people won't be able to mix and match. Using your player window without also using your group window won't be possible.
|
That's true. But that's not what I'm doing. And if the SIDL interface actually honored inheritance properly, you wouldn't really be able to do that anyway, since in your example the player window shouldn't be a child of the group window, and wouldn't have access to local definitions in the group window. But, from what I can understand, a lot of stuff ends up global, so so much for scope. =P
You can see what I did in the snippet below:
Quote:
<?xml version = "1.0"?>
<XML ID="EQInterfaceDefinitionLanguage">
<Schema xmlns="EverQuestData" xmlns:dt="EverQuestDataTypes"/>
<TextureInfo item="custom_window_pieces01.tga">
<Size>
<CX>256</CX>
<CY>256</CY>
</Size>
</TextureInfo>
...remainder snipped
|
I placed all the common interface elements that I added or changed into a file called
custom_window_pieces01.tga, which should be a "unique" name. It's doubtful that any future UI patch by Sony will collide with it (although an enterprising UI modder may have chosen the same name for a component of their own mod). However, even that being the case, changing the name of the file, and the references within the XML files is a moment's work with a good programmer's editor able to search and replace across multiple files (I like
jEdit - it's able to do exactly that, and with the appropriate plugins, it understands XML syntax just fine).
Below the portion I snipped are the
Ui2DAnimation elements that are common to the three windows. Elements that are unique to each window are defined in the window's respective XML file, but they still reference the same
custom_window_pieces01.tga. It's a 256x256 TGA, and there was plenty of room. Even if someone wanted only one or two of the windows I modded (all you'd have to do to "un-mod" a window would be to delete that window's XML file from the mod's directory). Removing a window from the mod won't damage the functionality of the other windows.
Quote:
There are other ways to save texture memory too. For instance, I figure I saved half a megabyte by editing EQUI_Animations to remove the class animations (which are usually shown in the inventory window). The objective improvement, even on a very old machine that can barely run EQ, was almost nil.
|
Yeah, that's what it comes down to. As elegant as the path I took was (at least,
I think it's elegant), it seems that the net impact to the game's performance is swamped by other considerations over which we, as UI tweaker/designers, don't have control over (such as a pathetic rendering engine).
At any rate, source code is worth 1,000 words. Or at least 29K Bytes... ;=)
I've submitted this mod to EQ Interface:
tessilUI; anyone who's interested in the details only needs to refer to the XML files. I can't claim what I've done is innovative, I just really pieced together other people's work and ideas into something that suits what I was looking for.