Forums » Community Projects

HUD iup hierarchy

Aug 29, 2007 Syylk link
Hi all,

For a small project I was working on, I'd love to know the actual hierachical structure of the HUD object, i.e. how the various boxes are named, where are positioned by default, and how they are iup.Append'ed relative to each other.

I know I can extract the info by examining each element, the relationship with parent, children and siblings, etc. But if someone has already done this tedious work, or the devs want to publish the HUD layout, I'd be extremely grateful.

Thanks in advance.
Aug 29, 2007 Scuba Steve 9.0 link
A paste of the HUD table in alphabetical order, with descriptive comments:

[EDIT] Of course, this might not be what you're looking for. Most of the time I have to resort to detailed examination relevant to the project I'm working on.

["addoncolumn1"] = userdata: 07D32D40, --First column for addon icons
["addoncolumn2"] = userdata: 07DA4138, --Second column for addon icons
["addonframe"] = userdata: 072C96F8, --The container of the addon icons
["addonlist"] = { --Table containing specific icons that go into addoncolumns
     ["2"] = {
          ["container"] = userdata: 06608568,
          ["highlight"] = userdata: 069F8528,
          ["icon"] = userdata: 070C0508,
          ["qtext"] = userdata: 074D68B8,
     },
     ["3"] = {
          ["container"] = userdata: 080E87E8,
          ["highlight"] = userdata: 07E49B70,
          ["icon"] = userdata: 06C5FE00,
          ["qtext"] = userdata: 0808FE80,
     },
     ["4"] = {
          ["container"] = userdata: 07C37EE8,
          ["highlight"] = userdata: 0722CBB0,
          ["icon"] = userdata: 06850E08,
          ["qtext"] = userdata: 07413470,
     },
},
["alladdonicons"] = { --Same as above, I think.
     ["1"] = {
          ["container"] = userdata: 06608568,
          ["highlight"] = userdata: 069F8528,
          ["icon"] = userdata: 070C0508,
          ["qtext"] = userdata: 074D68B8,
     },
     ["2"] -- Already printed.
     ["3"] -- Already printed.
     ["4"] -- Already printed.
     ["5"] = {
          ["container"] = userdata: 06AC3428,
          ["highlight"] = userdata: 06A59648,
          ["icon"] = userdata: 071235D0,
          ["qtext"] = userdata: 070A67E0,
     },
     ["6"] = {
          ["container"] = userdata: 06596D18,
          ["highlight"] = userdata: 075F8350,
          ["icon"] = userdata: 06829CC8,
          ["qtext"] = userdata: 02F151B8,
     },
},
["alladdonlist"] = userdata: 0653A7E0, --List of all addons, not sure what it contains.
["allcargoicons"] = { --Contains the cargo icons, as well as addon icons. Even though there is twenty, doesn't mean I'm carrying twenty items.
     ["1"] -- Already printed.
     ["2"] -- Already printed.
     ["3"] -- Already printed.
     ["4"] -- Already printed.
     ["5"] -- Already printed.
     ["6"] -- Already printed.
     ["7"] = {
          ["container"] = userdata: 030F72A8,
          ["icon"] = userdata: 08402C88,
          ["qtext"] = userdata: 069ABDA0,
     },
     ["8"] = {
          ["container"] = userdata: 069AF950,
          ["icon"] = userdata: 06BFECB8,
          ["qtext"] = userdata: 07244E08,
     },
     ["9"] = {
          ["container"] = userdata: 08039030,
          ["icon"] = userdata: 073D4660,
          ["qtext"] = userdata: 0731C6D0,
     },
     ["10"] = {
          ["container"] = userdata: 07A0E108,
          ["icon"] = userdata: 07313BC0,
          ["qtext"] = userdata: 06DD3DE0,
     },
     ["11"] = {
          ["container"] = userdata: 07EF3490,
          ["icon"] = userdata: 07779148,
          ["qtext"] = userdata: 0695CD38,
     },
     ["12"] = {
          ["container"] = userdata: 08489040,
          ["icon"] = userdata: 0700ADB8,
          ["qtext"] = userdata: 06DCD0F0,
     },
     ["13"] = {
          ["container"] = userdata: 08000638,
          ["icon"] = userdata: 08125CF8,
          ["qtext"] = userdata: 07E10240,
     },
     ["14"] = {
          ["container"] = userdata: 072D9F58,
          ["icon"] = userdata: 06FCF1A8,
          ["qtext"] = userdata: 08B3BC20,
     },
     ["15"] = {
          ["container"] = userdata: 0670BDE8,
          ["icon"] = userdata: 06FCAC68,
          ["qtext"] = userdata: 02FDDA30,
     },
     ["16"] = {
          ["container"] = userdata: 0735C8C0,
          ["icon"] = userdata: 03041050,
          ["qtext"] = userdata: 07156848,
     },
     ["17"] = {
          ["container"] = userdata: 074F0150,
          ["icon"] = userdata: 07EACBC8,
          ["qtext"] = userdata: 06BE9AE8,
     },
     ["18"] = {
          ["container"] = userdata: 03060F08,
          ["icon"] = userdata: 071660F8,
          ["qtext"] = userdata: 070EF500,
     },
     ["19"] = {
          ["container"] = userdata: 069141D0,
          ["icon"] = userdata: 0912F070,
          ["qtext"] = userdata: 06EEBF88,
     },
     ["20"] = {
          ["container"] = userdata: 0804DD50,
          ["icon"] = userdata: 0721B2E8,
          ["qtext"] = userdata: 075AB550,
     },
},
["blood_flash"] = userdata: 07687660, --That annoying red flash when you get hit
["cancel_chat"] = function: 0767EB08, --When you hit escape to stop chat entry, I think this is called
["cargocolumn1"] = userdata: 068DE150, --Cargo column
["cargocolumn2"] = userdata: 066E2EE8, --Second cargo column
["cargoframe"] = userdata: 066F7660, --Frame that holds cargo columns
["cboxlayer"] = userdata: 069F1D08, --The layer the chatbox is chilling in(It's a zbox)
["ChangeAddonElement"] = function: 07BF1EA0, --Beats me.
["ChangeFlightMode"] = function: 0895FF28, --Switches flight modes. Maybe only affects HUD
["ChangeShipInfo"] = function: 0691C9E0, --Who knows? Probably changes some info about your ship.
["chatcontainer"] = { --Holds the general chatlog. To modify chatlog lines, update the proper field in _generalchatlog(It's a global.) and then do HUD.chatcontainer.chattext.value = table.concat(_generalchatlog, "\n"). This is working code.
     ["chatentry"] = userdata: 02AA1200, --The element you enter chat into
     ["chattext"] = userdata: 07182040, --The element that holds the chatlog itself
     ["chattitle"] = userdata: 076E35A8, --The prompt before the chatentry box
     ["log"] = { --The log! I think it's just a mirror of the global _generalchatlog
          --Removed most of it, since it's huge. Indices range from 1 to 101. Example structure below.
          [1] = "\127FFFFFFWelcome to Vendetta Online.",
          [2] = "\127ADADADThis is an example of the general chat log",
          ["updated"] = false,
     },
     ["reset"] = function: 075C8A68, --Resets the chat, somehow. Dunno.
     ["update_cb"] = function: 068C1A80, --Wish I knew.
     ["vbox"] = userdata: 06679AD0, --Contains the whole thing
},
["chatframe"] = userdata: 065136A8, --Contains the chat container. Container container, you might say.
["continuecoursemsgprinted"] = false, --True if the message "you need to blah to continue this course" prints to the HUD
["CreateChatArea"] = function: 07752F38, --Not sure about these Create functions, but I'd wager they return iup userdata after creating what they say they create.
["CreateGroupArea"] = function: 06F92528,
["CreateGroupList"] = function: 08E20B00,
["CreateIconAreas"] = function: 06724F08,
["CreateLicenseWatchArea"] = function: 08DBD918,
["CreateMissionTimerArea"] = function: 08A28C30,
["CreateSelfInfo"] = function: 06C19118,
["CreateTargetArea"] = function: 07274760,
["curdamage"] = { --Holds the current damage values for that green wireframe on the right.
     ["1"] = 0,
     ["2"] = 0,
     ["3"] = 0,
     ["4"] = 0,
     ["5"] = 0,
     ["6"] = 0,
},
["currentshowmode"] = all, --Should everything show? Dunno about valid values. Needs testing.
["damage_direction"] = { --Damage directional indicators for when you get hit.
     ["3"] = userdata: 06901408,
     ["4"] = userdata: 0761AD20,
     ["5"] = userdata: 079B2118,
     ["6"] = userdata: 02DCBBF0,
},
["destarrow"] = 0, --No clue.
["Destroy"] = function: 03108978, --HU-MANS. It destroys stuff. However, destroying stuff sometimes leads to despair. Despair leads to fear. Fear leads to...oh fuck it.
["DestroyGroupList"] = function: 07753070, --HU-MANS
["distancebar"] = userdata: 06F6C070, --The distance bar
["distancetext"] = userdata: 074166E8, --The text on the distance bar
["dlg"] = userdata: 07C41108, --The whole shebang. Everything in the HUD is a child of this guy.
["energybar"] = userdata: 064D8320, --Your energy bar
["firstcargolist"] = userdata: 06884A88, --Probably the first cargo list. The one you have before you expand stuff
["group_list_visible"] = false, --Is the group thing to the right visible?
["groupinfo"] = userdata: 071E5820, --That group thing that's not visible.
["groupinfoframe"] = userdata: 08551F58, --Frame to hold the group thing
["help_text"] = userdata: 08B60E00, --Press F1 for help.
["HideGroupList"] = function: 081814B0, --Hides the group thing to the right.
["HideHUD"] = function: 065629A0, --Hides the HUD
["HideMost"] = function: 0800C8F8, --HideMost is called for cinematics where you end up with merely the chatscreen
["hitby_text"] = userdata: 06E3A788, --Who the hell scratched my paint?
["hud_toggled_off"] = false, --Is the HUD toggled off?
["hudtype"] = ship, --What type of HUD do we have? Ship? Turret? Landborne tank?
["invclosed"] = true, --Is the inventory(expanded cargo?) close?
["IsVisible"] = true, --Can you see what I did here?
["jumpindicator"] = { --The jump indicator bar and associated bits
     ["distance3000m"] = userdata: 0683C3C8,
     ["distance_all"] = userdata: 08682A08,
     ["distancebar"] = userdata: 06834380,
},
["layer3_other1"] = userdata: 06E4A230, --Various layers of the HUD.
["layer3_other2"] = userdata: 0675BB80,
["layers"] = {
     ["1"] = userdata: 0748A170,
     ["2"] = userdata: 06CA4D28,
     ["3"] = userdata: 085707E8,
     ["4"] = userdata: 0725AA68,
     ["5"] = userdata: 06848D00,
     ["6"] = userdata: 08112870,
     ["7"] = userdata: 08D18CF0,
     ["8"] = userdata: 0764ED20,
     ["9"] = userdata: 06E179F8,
     ["10"] = userdata: 07687660,
     ["11"] = userdata: 069F1D08,
     ["all"] = YES,
},
["leadoff_arrow"] = userdata: 0804C4B0, --That thing you aim for.
["leftbar"] = userdata: 06F568C8, --The bar on the left(Don't ask me)
["leftflightassistindicator"] = userdata: 07DA4BE8, --Flight assist indicator.
["lefttext"] = userdata: 0807DA38, --Text on the left(who knows?)
["licensewatch_percenttext"] = userdata: 0828FB30, --Following ones watch the licenses so they don't commit crimes.
["licensewatch_progress"] = userdata: 06EE9688,
["licensewatchframe"] = userdata: 08288160,
["licensewatchlabel"] = userdata: 0882E6B8,
["locationtext"] = userdata: 0754EBE0, --Are we there yet?
["logoff_text"] = userdata: 08DC7960, --This is where the logoff countdown text goes
["Make"] = function: 071FEB50, --Probably makes something. Only Ghandi knows though.
["maxspeed"] = 65, --This is as fast as you can go. Modifying this value will not modify reality, suckah.
["missionlogcontainer"] = { --Contains the mission log. See chat log for more detailed description. I think this is mostly phased out now.
     ["chatentry"] = userdata: 0762FCF0,
     ["chattext"] = userdata: 07C80EC0,
     ["chattitle"] = userdata: 07DA95A8,
     ["log"] -- Already printed.
     ["reset"] = function: 08A4BB68,
     ["update_cb"] = function: 068C1A80,
     ["vbox"] = userdata: 08407A60,
},
["missiontimer"] = userdata: 07542480, --Mission timer stuff
["missiontimerframe"] = userdata: 07C7E758,
["missionupdateindicator"] = userdata: 072A9CA8, --Indicates a mission update
["missionupdateindicatorbutton"] = userdata: 06B766E0,
["morecargoindicator"] = userdata: 07A90F10, --Indicates if we have more cargo.
["morecargoindicator2"] = userdata: 06C0EF88,
["morethan4items"] = false, --Apparently I don't have five items.
["notify_text"] = userdata: 086B4F60, --Those big messages on your HUD? This is them.
["nummissiontimers"] = 0, --No mission timers active
["OnEvent"] = function: 06950C20, --Handles all the HUD events.
["prevtime"] = 3027645328, --Dunno. Looks like the output from os.time()
["PrintSecondaryMissionMsg"] = function: 02F8A4D8, --Prints that green stuff when you do mission objectives.
["PrintSecondaryMsg"] = function: 0671B410, --Same as above, but different.
["progressbars"] = { --Mining progressbars.
     ["container"] = userdata: 06CA1DD8,
     ["items"] = {
     },
},
["Reload"] = function: 06A230F0, --Probably reloads.
["RemoveAllWeaponProgress"] = function: 06C61A48, --Not sure
["ResetGroupList"] = function: 08076520, --Resets the group list
["restcargoframe"] = userdata: 06FF61F8, --The rest of the cargo frame
["rightbar"] = userdata: 06B3CC68, --The correct bar
["righttext"] = userdata: 06F8D768, --Text on the right
["scaninfo"] = userdata: 0829D9D8, --Info about scanned items. Asteroids, methinks
["secondarychatarea"] = userdata: 0829BB48, --PrintSecondaryChatMsg probably uses this.
["secondarychatarealines"] = {
},
["sectoralignmenttext"] = userdata: 08A83FD8, --Who owns this dump?
["selfcargo"] = userdata: 087A11E8, --This stuff is all yours
["selfcredits"] = userdata: 08918D58,
["selfhealth"] = userdata: 08CB8988,
["selfhealthimage"] = userdata: 087A7A68,
["selfhealthparts"] = { --That green wireframe itself.
     ["1"] = userdata: 08A3FD08,
     ["2"] = userdata: 07813A80,
     ["3"] = userdata: 081B6F00,
     ["4"] = userdata: 07CC4720,
     ["5"] = userdata: 07AA6D70,
     ["6"] = userdata: 077BE0E8,
     ["all"] = YES,
},
["selfinfo"] = userdata: 08135EA8,
["selfinfoframe"] = userdata: 08A194F8, --Holds your selfinfo stuffs
["selfmass"] = userdata: 08570320, --Fatty
["setenergy"] = function: 069D8D20, --Sets the DISPLAY of your energy. Does not modify reality.
["SetFlightPath"] = function: 06679CD8, --Not entirely sure
["SetLicenseWatch"] = function: 076D46B8, --Which license do you want to watch tonight?
["SetMode"] = function: 073B4928, --Sets some mode, not sure which one.
["SetSelfHealth"] = function: 0808E6A8, --Sets your health display, takes a decimal from 0 to 1
["setspeed"] = function: 0680EE90, --Not reality modifying
["SetTargetDistance"] = function: 07EA9408, --More display setting stuff
["SetTargetFaction"] = function: 08D4AC68,
["SetTargetHealth"] = function: 085A7660,
["SetTargetName"] = function: 07FFF0B0,
["setup_visible_elements"] = function: 06E79C10, --Sets up the visible elements. How? No idea.
["SetupAddons"] = function: 06B60A38, --See above, replace obvious.
["SetWeaponGroupHighlights"] = function: 0766C560, --Not sure what this does
["Show"] = function: 06B99D60, --Calling HUD:Show() shows the HUD
["ShowChat"] = function: 090DAA50, --Show the chatframe and whatnot
["ShowEverything"] = function: 07390998, --No, hide it.
["ShowGeneralChatEdit"] = function: 07F02880, --Shows the chatedit box
["ShowGroupList"] = function: 0726F448, --Shows the group list.
["showhelpstring"] = 0, --Should we show that F1 thing?
["ShowHUD"] = function: 06442678, --Shows the HUD, somehow better.
["ShowMissionIndicator"] = function: 0669FD20, --Shows the mission update indicator
["speedbar"] = userdata: 07455768, --It's fast liquor
["StartWeaponProgress"] = function: 073430C8, --Start mining progressbar
["StopWeaponProgress"] = function: 076FFE40, --Introduce new legislation
["targetdistance"] = userdata: 0800BC18, --This is the target info display for the upper-right bit
["targetframe"] = userdata: 0803D8A0,
["targethealth"] = userdata: 07F630B8,
["targetname"] = userdata: 06F2E788,
["targetnation"] = userdata: 066ACD00,
["targetshield"] = userdata: 06C5C9F0,
["targetshiptype"] = userdata: 06DC6D48,
["ToggleGroupList"] = function: 08294900, --Toggle whether or not the group list is shown or not
["update"] = function: 06CFA0E8, --Updates, but I don't know how or what.
["UpdateCargoInfo"] = function: 068FDEC0, --All these update what they say they do
["UpdateGroupList"] = function: 09066FD8,
["UpdateGroupMemberHealth"] = function: 082CBE68,
["UpdateGroupMemberInfo"] = function: 08295970,
["UpdateGroupOwner"] = function: 0817B0F0,
["UpdateHealthInfo"] = function: 07C5C8C8,
["UpdateHUDvisibility"] = function: 065A16E0,
["UpdateLicenseWatch"] = function: 089CB970,
["UpdateMissionTimers"] = function: 07EBBAE0,
["UpdateTargetInfo"] = function: 08417F10,
["updatetimer"] = Timer (08A7F910), --A timer keeping track of when to update things
["UpdateWeaponProgress"] = function: 07AC56B0,
["visibility"] = { --What should we show, and what shouldn't we show?
     ["addons"] = YES,
     ["cargo"] = YES,
     ["chat"] = YES,
     ["crosshair"] = YES,
     ["damagedir"] = YES,
     ["distance"] = YES,
     ["energy"] = YES,
     ["fa_indicator"] = true,
     ["fa_notification"] = true,
     ["groupinfo"] = YES,
     ["leadoff"] = YES,
     ["license"] = NO,
     ["missiontimers"] = YES,
     ["radar"] = YES,
     ["selfinfo"] = YES,
     ["speed"] = YES,
     ["targetdir"] = YES,
     ["targetinfo"] = YES,
},
["visible"] = YES, --Is the HUD visible?
["voteindicator"] = userdata: 068A0750, --Deals with /vote mute
["voteindicatorbutton"] = userdata: 07266620,
["watchedlicense"] = 2, --Which license are we watching?
Aug 30, 2007 Syylk link
Thank you very much, SS. No, it was not exactly what I was looking for, but it's very useful anyway and will make my work much easier, and for this I thank you deeply.

I was looking for the actual graphical layout of *layer and *frame objects, i.e. how the various containers are linked to each other in the final appearance of the HUD. Chatbox in upper left, targetframe in upper right, etc.
Sep 01, 2007 mr_spuck link
firemage made a script that walks down the widget tree and prints it out.

I never got around to actually try it but sounds like it could be useful to you ...it's on my laptop though which went belly up yesterday. So I don't have it anymore...
Sep 04, 2007 FiReMaGe link
Here is the iup dumper I wrote (an updated one from 5.0 -> 5.1):
http://www.systinus.com/vo/misc/iup_dump.lua

You'll probably want the bold text below too.

It's most practical to use it to dump the iup lua source to lua files but unfortunately there isn't access to io.open. However, you can use it to print to errors.log. I've made the function this way to make it simple to use it for displaying the dumped text in a variety of ways.

We could make iup.print() to help us print to errors.log:

function iup.print (u) iup.fprint(u, print) end
local but = iup.stationbutton{ title = "Close" }
iup.print(but)
-- you'll notice that iup.stationbutton added many attributes

If there was access to io.open:

-- pcall or xpcall would probably help here but it's too much to type
function iup.write(u, fn, o)
     local f = io.open(fn, o or 'w')
     if f then
          iup.fprint(u, function (a) f:write(a .. '\n') end)
          f:close()
     end
end

iup.write(PDASensorNearbyTab, "PDASensorNearbyTab.lua")

So you can guess that the f in fprint stands for function. You'll notice that it outputs the data in such a way that you could copy and paste into your source. Of course you'd also have to remove attributes such as matrix_data, callbacks, iuplua_object_table, and lua5_state_context.

Limitations:
iup.GetAttributes() doesn't escape strings so this dumper will mess up when you use it with an iup handle that has double quotes within any attribute.