About HUD edit
-
Zyos, it’ll be need to be coded anyway(what controls should do). Not me I think, someone else.
Now, crashing(3db). Someone gets a float value rather than a pointer at it. At least it’s working in navmap rendering proc(i cut the code out there).
Buttons are fine, created in “Status HUD” context, left one activates cruise, right one turns off lights(except for docking ones), vice versa. On minimizing hud both disappears for a moment. Nothing updates on loading games, leaving bases, changing ships etc. Just a concept.
-
oO Exellent! Finally Arts coming to reality
Shoot screen from inside cockpit please!
-
HeIIoween, http://i.imgur.com/xhuX9Rp.jpg
Forgotten to mention I don’t how to free a control yet. #MemoryLeak
-
Psst, wanna navmap?
Concept proof. Just calling [edx+$34] which probably means Draw for any control so almost nothing to discuss. I’ve used here button for navstars and static for others. Total the end.
Had to make almost hundred recompilation because everything inside is completely relative. Radiation sign click change stars Z axis, but ones fly towards the center of the screen. Different model sizes did put another problem to match stuff on the screen etc and so on. DALib either Engine/RenderComp/x86math should have some helpers for handling that kind of stuff, but they’re all dword ptr +0xblahblah. For now, only hardcoding.
-
Experimental reference .
IHud = interface ['{45F1E847-B5D0-421E-8E51-E45A3B64A648}'] procedure Draw(const Sender:IControl);stdcall; procedure Update(const Sender:IControl);stdcall; procedure Execute(const Sender:IControl);stdcall; procedure Terminate(const Sender:IControl);stdcall; end;
Low-level and simple. IControl is a simple pointer(class reference, parent at +0x04, next control on same level at +0x08, first child at +0x0C, name (ANSI) at +0x18 and its length at +0x14 etc.)
Draw - sender is one of topmost controls. Its usually contain a traverser for drawing childs and its possible by its visibility to detect when to hide new hud(cinematic cameras/planet/base). Small list:
HUD_ContactList, HUD_Core, HUD_CruiseProgress, HUD_DamageIndicator, HUD_Maneuvers, HUD_Status,HUD_Target, HUD_Waypoint, NN_MainButton, NN_Pause
Update - sender is one of topmost controls. Originally depends on +0x6C first bit which chooses between call dword ptr [this+0x2C] and call dword ptr [this+0x30]. Looks like a background work.
Execute - sender is button/text. OnClick event. For text click must be +0x35C byte/bit set.
Terminate - sender is any control. Freelancer handles everything automatically and destroys all new /child controls once parent destructor has been executed(closing NavMap, Inventory and others). Better check all new stuff for matching and reset all class.
In dacom.ini first must be HudFacility. It exports:
function _IHudFacility:IHudFacility;stdcall;
The interface hooks code and simply calls methods in the manner “for i to count”.
IHudFacility = interface ['{F99B8A4F-99F7-4DA6-91EC-74DD3286464A}'] function AddHud(const Hud:IHud):Boolean;stdcall; end;
HudTest implements the useless window with keeping in mind original hardcoded behavior, but escape drops cruise anyway.(idk how to make hotkeys). Manhattan Planet must be selected only. Animation not, but flashing text speed seems to be relying on fps lol.
I know unit is in delphi, bad, but leave news if somebody will decide to attack freelancer so all could use a shared lib for multihud support. No need to multiply implementations, need the only single one.This may serve as a reference.
Blackjack & animation
But status makes its flicker on minimizing -
Delithor wrote:
I hope this was not given up. I have absolutely no idea how to edit anything other than simple stuff. What you are/were doing is amazing. Is it possible to get the angled windows you have in a few pictures?I might complete most regarding hud, but it’s all about priorities, they control me, even when FL stays #1 for me. Curved elements were never completed, but did attach anyway.
Yeah, I’m living out of the time, 8 months is like 8 days for me
-
its looking pretty good so far
-
The fact is it can’t be completed anyway in standard edit-some-values-in-memory approach. Need a custom drawing directly through Direct3D to get curved text and then implement fixed screen interaction.
(Or A-Z a-z 3db letters with a good amount 3d math to build and place lines of text)
Eventually, we would just end with no-hud hack and drawing everything by ourselves. Sugar dream.
-
Don’t how 'bout you, but i’ve made FINAL breaking change. And the change is removed “Facility” suffix, so it is now just Hud.dll that exports _IHud void.
To be consistent i’ve recompilied HudStatus/HudTarget/HudWeapongGroups that are used in Adv Hud Mod. And included HudShip.dll to activate/deactivate cloak/lights. The currently shipped hud.ini (that should be placed in EXE) contains settings and descriptions for HudShip (thus customizable a little).
And rewrting pascal units as well (do not treat classes as pascal’s ones, those are abstract, pure pointer from the game). Thus any method exposed in IDE from TObject are ILLEGAL to use. Will going to redo MultiUniverse in plain pascal from now, with much better readbility and better sections/lists/columns/rows names & defines so everything should become much easier to read and configurate.