EQInterface Forums

EQInterface Forums (http://www.eqinterface.com/forums/index.php)
-   Released (http://www.eqinterface.com/forums/forumdisplay.php?f=5)
-   -   D3PDA UI Thread (http://www.eqinterface.com/forums/showthread.php?t=22290)

shillingworth 07-29-2022 05:32 PM

D3PDA UI Thread
Since returning I kept procrastinating on creating an actual thread for the UI but here it is.

I am the original and current developer of D3PDA and actively play with it as my UI. In the past at some point between raids and work, I just didn't have time to keep it updated. Then I took about 10 years off from EQ, loaded story so I'll spare ya on that one.

My intent is to keep updating the UI with new features, refinement of it's existing features, and maintain what's become the iconic look of it. I am a very technical guy so the way I write and develop the UI reflects that heavily. I like to try out random weird ideas that seem like they might be possible, like the label stacking to produce text outlines (same idea could also create drop-shadows, glows, and similar effects).

Installing D3PDA is simple. Unzip the folder into your "EverQuest/uifiles". Optionally you may want to delete the "generator" folder if you want to shave 500kB off the install size, to me that's insignificant.

Inside the UI folder you'll notice a very different structure from your typical UI. There are folders for various windows as well the the window's EQUI xml files. In those folders are xml files used for those windows, logically arranged into a structure resembling what's in the window. For example the spell_window folder contains one file for each possible spell gem and one more for the book/casting gauge since they are visibly one piece. Even the individual stats get their own xml due to the complexity of setting up the text to appear like that.

Inside the EQUI.xml you'll find absolute confusion... or it seems at first glance. I figured out from testing that EQ will load those Include elements in bottom to top order. So they are arranged with default ui reference at the bottom (to avoid breaking on updates) and all my custom stuff going upward from it in the order it is required. Textures, animations, templates near the bottom with windows that use those near the top. Any additions you may want to make later should be added to the top of the list.

Some of the XML, like the chat window are copies of the default with a couple of small changes to make it play well with my templates. Others are the windows I have replaced which resemble more of a scene graph than your typical EQUI xml, that is they simply set up the scene for a given window with the actual elements elsewhere in their respective files.

The UI folder also contains a VSCode workspace that you can load to do any edits or just to look through it with the same view I have when I work on it. The only extra step would be to open the VSCode terminal and punch in 'tail -f UIErrors.txt' in the everquest folder to attach the log reader. If you change any of the files in the generator, like maybe change the color of a gauge or something, just hit F5 to build the changes. In the case of a group member's gauge set, this would clone the changes into the other gauges. It's not very well written, very quick and dirty but it gets the job done. Likely to get better as I need better features.

Feel free to post any bugs you find, suggestions you may have, or questions here. I make it a point to check in whenever I'm bored or waiting for something.

Draca 08-17-2022 10:34 PM

Spell bar
Heya , love the UI. I play on Agnarr and we only use 8 spell slots. Amy way you might be able to make the spell bar resizable or an alternate spell bar only showing 8 buttons?

shillingworth 08-18-2022 10:13 AM

That's actually one of the things I've been working on figuring out. Ideally I want it to auto-size based on how many spells you have unlocked. I'll produce an alternate file as a patch for the cast spell window for progression servers in the meantime. Check back later on today or tomorrow. No promises though, in the process of stopping smoking so time I can focus on tech stuff comes and goes.

shillingworth 08-18-2022 01:50 PM

Update has been submitted. You can now choose in the EQUI.xml how many spell gems you want. If I can figure out how to make a Screen element auto-fit it's contents, that would be automatic based on the loaded character.

I feel like this UI sytem just encourages dirty hacks. Not as in hacker pwning a gibson but hacks as in utilizing features for things they obviously were not intended to do.

Unfortunately there is one nasty side effect of this. The drag handles to move the window around only exist to the left of the top most slot and the left of the book slot. Because the entire center is being drawn with a psuedo-tiling hack to approximate the look of the static artwork I had created previously.

Draca 08-18-2022 02:43 PM

Man thanks sooo much! Beautiful UI!

Draca 08-21-2022 09:34 PM

aggro added to targets
Have you considered adding the aggro percentage to the targets ?

shillingworth 08-22-2022 01:18 AM

Originally Posted by Draca
Have you considered adding the aggro percentage to the targets ?

Yes. Will be replacing those gauges with ones drawn to that size instead of scaling to that size as I am now. When I do that was planning to also patch in support for those agro percentages. Not an easy one to place with such tight spacing though, can't change the color of that text, the game just overrides it with red. Same red we all recognize as HP. That ext target window as it stands is just a quick and dirty approach to it but it's the first step in incremental design, to just get it working roughly as desired then polish it to a shine.

I appreciate the interaction here. It's nice to have another perspective on what bits need work. Helps inform the next iteration of the design.

Draca 08-23-2022 12:21 AM

Heres how i have it set up now , i have a few changes . The select bar is only a mail sign and the eq button has no store button, i have a smaller and more compact abilities , bandolier and the music player is like a timer. the compass i use the HUD one on the downloads section just easier to see, and i have a different window im trying for pet , and a map thats slim lined.

Id love to see the spell buff windows turn into something like the spell bar with spell name and the same style , but in reverse to work on the right side.
Same with the ability window , kinda make those come down the right side of the screen in the same style as the rest.
Anyway , Wonderfully done.


Draca 08-23-2022 12:27 AM

aggro percentage
Could you offset the aggro percentage so it shows up on the greyish blue area of the target bar?
Being red it would show up nicely. maybe?

shillingworth 08-23-2022 12:39 AM

Nice, I like that you figured out how to mod in just parts of windows with my wild file layout. Still not sure how I'm going to do the buff bars. While I do like the idea of a vertical bar reversed layout of the cast window, was one of the ideas I was kicking around in my head. In the past I used one that was horizontal across the top of the screen, there's even remnants of it in the texture file. Thinking I'll just rework that to be more dynamic since the game has what's needed to do that now, in the past we didn't have LayoutBox elements or anything beyond AutoStretch to size things dynamically.

For combat abilities my plan was to produce something like the cast spell window but mirrored so that it could visually interlock with it but at the same time I suspect that may just be confusing and difficult to do rapid clicking. In either case I really dislike the default one that it's using now, it's huge for no good reason, same with the bandolier and merc windows.

Currently however playing with the Layout elements to figure out how containers automatically size to their contents to reproduce that all over the place. Like with the cast spell window and then with buff bars, since those are things that need to adjust as players get more abilities. I really dislike telling non-coders to go into a code file to change a line, no matter how clear the instructions are. I have a strict self-rule against using resize handles on things that don't have a full border to grab, click-ability just flies right out the window without that border.

shillingworth 08-23-2022 01:14 AM

Also addressed that EQ button as well as it's cascade menu. That will be in the next update. Dropped their sizes down to 24x24 per button, made it resizeable and on a TileLayoutBox so that they will arrange vertical or horizontal as desired. For the cascade menu got rid of the button template, so it looks more like a typical cascade menu instead of seemingly random things having button backgrounds (it really, really bothered me).

Draca 08-23-2022 02:18 AM

look forward to seeing the updates

shillingworth 08-23-2022 02:26 AM

Welp putting it down for tonight, just breaking it in circles at this point.

Was focusing on the spell window for establishing a working theory of operation. The gems need to be pushed 18 pixels to the right to uncover the drag handles at the top-left and bottom-left corners of the window. Otherwise players will not be able to move the window at all. Once it's moved 18 pixels to the right it needs to auto-size when gems are not available, this one I kind of have a vague idea how to accomplish but so far each attempt just yields an empty element that is 29 pixels tall (the height of a gem's row).

One thing I suspect might work but didn't test yet. The way I do the outlines is to drop 10 labels into a LayoutBox, 9 for the black outline and 1 for the white text. Instead of putting the label's ScreenID in the Label element, I put it in the LayoutBox element. As a result if no spell is memmed, those labels dynamically get removed from the UI by the game, and added back in when a spell is memmed. Not all ScreenIDs behave like this though so that'st he ultimate limit of this technique. I may be able to utilize it to make the layout strategy ignore the non-present gems by means of, their labels will be removed. Really depends if the layout strategy is truly dynamic or requires /loadskin to recalculate.

shillingworth 08-23-2022 05:44 PM

Well I kind of have it figured out. Currently I have the following configuration:

Spell0, this template is used to generate all 14 (via my lil' C# program), ignore the commented out label, excluded it for testing purposes.
<SpellGem item="CSPW_Spell0"> <ScreenID>CSPW_Spell0</ScreenID> <SpellIconOffsetX>2</SpellIconOffsetX> <SpellIconOffsetY>4</SpellIconOffsetY> <SpellIconSizeX>23</SpellIconSizeX> <SpellIconSizeY>20</SpellIconSizeY> <Size> <CX>177</CX> <CY>29</CY> </Size> <SpellGemDrawTemplate> <Holder>D3PDA_IWnd_GemHolder</Holder> <Background>D3PDA_IWnd_GemBackground</Background> </SpellGemDrawTemplate> </SpellGem> <!-- Spell Layout --> <LayoutBox item="Spell0"> <Layout>CSW_Spell0Layout</Layout> <Size> <CX>177</CX> <CY>29</CY> </Size> <Pieces>CSPW_Spell0</Pieces> <!--<Pieces>Spell0LabelDisplay</Pieces>--> </LayoutBox>

The CastSpellWnd screen element and the TileLayoutBox that houses the gems:
<LayoutVertical item="CSW_Layout"> <ResizeHorizontal>false</ResizeHorizontal> <ResizeVertical>true</ResizeVertical> </LayoutVertical> <TileLayoutBox item="SpellLayout"> <Layout>CSW_Layout</Layout> <Style_Transparent>false</Style_Transparent> <Style_Sizable>false</Style_Sizable> <MinHSize>198</MinHSize> <MaxHSize>198</MaxHSize> <MinVSize>261</MinVSize> <MaxVSize>435</MaxVSize> <LeftAnchorOffset>18</LeftAnchorOffset> <Size> <CX>177</CX> <CY>435</CY> </Size> <PaddingLeft>18</PaddingLeft> <Spacing>0</Spacing> <SecondarySpacing>0</SecondarySpacing> <Pieces>Spell0</Pieces> <Pieces>Spell1</Pieces> <Pieces>Spell2</Pieces> <Pieces>Spell3</Pieces> <Pieces>Spell4</Pieces> <Pieces>Spell5</Pieces> <Pieces>Spell6</Pieces> <Pieces>Spell7</Pieces> <Pieces>Spell8</Pieces> <Pieces>Spell9</Pieces> <Pieces>Spell10</Pieces> <Pieces>Spell11</Pieces> <Pieces>Spell12</Pieces> <Pieces>Spell13</Pieces> </TileLayoutBox> <Screen item="CastSpellWnd"> <TooltipReference>Allows you to cast your memorized spells</TooltipReference> <DrawTemplate>WDT_IWnd_Outer</DrawTemplate> <Layout>CSW_Layout</Layout> <Style_Border>true</Style_Border> <Style_Sizable>false</Style_Sizable> <Style_Transparent>false</Style_Transparent> <Style_Titlebar>false</Style_Titlebar> <Style_Closebox>false</Style_Closebox> <Style_Minimizebox>false</Style_Minimizebox> <MinHSize>198</MinHSize> <MaxHSize>198</MaxHSize> <MinVSize>261</MinVSize> <MaxVSize>435</MaxVSize> <Location> <X>0</X> <Y>435</Y> </Location> <Size> <CX>198</CX> <CY>435</CY> </Size> <!-- CY = (1 + gem_count) * 29 8 gems = 261 9 gems = 290 10 gems = 319 11 gems = 348 12 gems = 377 13 gems = 406 14 gems = 435 --> <Pieces>LayoutBox:IWnd_Template_Inner</Pieces> <Pieces>TileLayoutBox:SpellLayout</Pieces> <Pieces>SpellBook</Pieces> </Screen>

Note that IWnd_Template_Inner has UseInVerticalLayout set to false, so that it's not included in the layout calculations. That element is the one with the tiling border edge since DrawBackgroundMode only lets you toggle alpha blending, all it's other mode flags are no longer functional (at least not on my machine).

What happens with all that is that it will automatically resize to the available spell gems on your character. However the SpellBook element gets drawn at the very bottom of the window despite having nearly identical setup to the gems as far as layout is concerned. As in where the bottom would be if you had all 14 gems available. If I move the SpellBook element up into the SpellLayout element, it will render all empty elements at their size, as the UI currently does if you pick a cast spell window that has more gems than your character.

Draca 08-23-2022 08:40 PM

i don't remember which one but one of the uis in here has a spell bar that can be resized and the book stays anchored at the bottom , let me see if i can find it.
EDIT: I couldnt find this.

All times are GMT -5. The time now is 06:45 PM.

vBulletin Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.