www.filefront.com/4381646/Starsiege-Tools-v3/That has a bmp -> pbmp converter.
As for a tutorial, I don't know if I can make one. I only know probably about half of the gui stuff in Starsiege. There are still a lot of menu objects and list I don't know how to setup or make functional from scratch. But you do need to know some of the basics for gui editing.
GuiLoad();
GuiSave();
NewObject(ObjectName, GuiObject, PosX, PosY, Width, Height); // See older post to get the list of guiobjects
AddtoSet(<Menu>Gui, GuiObjectName); // Gui objects need to be in the menu gui group
Ingame tools
ClientTree(); // To quickly navigate through your gui object/group list
GuiEdit(); // To select gui objects with the cursor and move them around easily.
I perfer to only use ClientTree(); because it allows finer control over what you are doing as opposed to trying to find gui objects by clicking around. (This becomes apparent when trying to modify scroll controls and controls)
The properties on gui objects are strait forward. Console command to initiate a function when clicked. (Only used for short embedded scripts as there is a 80 character limit on that field)
The variable field just looks for a variable to assign to that object. Using a variable on something like a text object or text box will show that variable on that object. Assigning a variable to a text box object allows a user to modify the variable. (You don't need a "$" when assigning variables to gui objects
The master server fields in the options menu in the mobile Starsiege client are just text box objects using the follow variables.
Inet::Master1
Inet::Master2
Inet::Master3
Inet::Master4
Inet::Master5
and when someone clicks the Ok button it exports the Inet::Master*
variables to a file then executes that file to update the master server list.
One thing you will want to use is Simgui::Control. This basically functions like a SimGroup. You put a bunch of gui objects in it and if you hide that control it hides everything inside it. If you move that control everything in it will move with it.
function ExitOptions::onAction()
{
Eval($Client::Name);
Eval($Client::SquadName);
Export("$Inet::Master*", "MasterServers.cs");
Export("$Client::*", "playerPrefs.cs");
Exec("MasterServers.cs");
}
using
function ExitOptions::onAction(){}assigns a function to the gui object. When I click the button its doing an action so it then runs a script. Gui menus use scripts too. They can also do the same functions when you assign proper tags but I have no idea how 99% of those work.
You can also run scripts by using
function MenuNameGui::onOpen(){} to run a script when a gui is loaded or
function MenuNameGui::onClose(){} to run a script when a gui is closed.
Some additional gui functions.
Control::getActive();
Control::getText();
Control::getValue();
Control::getVisible();
Control::performClick();
Control::setActive();
Control::setText();
Control::setValue();
Control::setVisible();(These will only work if your gui object is named or has a control set)
I use
Control::setVisible(); a lot to hide and shows sub menus when I click certain buttons.
Some text list functions. (These will only work on text list objects. i.e. METextList)
TextList::AddLine();
TextList::Clear();Something else I just recently started using is the Simgui::Slider. Assigning a variable to that slider allows me to change a integer variable by moving the slider. You can adjust the min and max of the slider. The updated RearView uses a slider for the camera fov. All I did was assign the
EasyCameraFOV variable to the slider and when I move the slider it adjusts the variable and the camera in real time.
If you want to make a custom gui menu you just need to find the proper gui objects to use and use scripting. To go further than that you need to import new bitmaps and use 1 frame smacker videos for menu backgrounds. (Don't try to convert a menu background to a pbmp it will look terrible)
Some effective gui objects.
Simgui::HudManager // Used in play.gui. Contains all the hud objects and renders the map. By default it re-sizes to cover the entire Simgui canvas. Uses FocusCamera();
Simgui::TSControl // Used in Editor.gui. Only renders the map. Uses PostAction();
To attach Simgui::TSControl to objects in a map use.
PostAction(TSControlObjectName, "Attach", MapObjectID);There is no limit to how many of Simgui::TSControl you can have in a gui. You can even attach each one to a different camera. You can add more EditCameras by using
NewObject(Camera1, SimCameraEdit);
SetObjectID(Camera1, RandomInt(9500,10000));
(By default the edit camera has a id of 655. Because scripts don't function properly with objects that have the same ID's we must change the id.)
then we can attach one of the Simgui::TSControl's by using
PostAction(TSControlName, "Attach", Camera1);(By Default the camera is created at 0 0 0. We can adjust the position and rotation of the camera)
SetPosition(Camera1, X, Y, Z, RotZ, RotX);