<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.quasar-rce.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Luxen</id>
	<title>Quasar-RCE - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.quasar-rce.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Luxen"/>
	<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php/Special:Contributions/Luxen"/>
	<updated>2026-04-07T09:27:32Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=121</id>
		<title>Vendetta/neoloader</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=121"/>
		<updated>2025-08-18T03:52:49Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* For users */ Added ModDB link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Vendetta-Neobanner.jpg]]&lt;br /&gt;
==  ==&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Neoloader Pre-execution Library Management Engine (NPLME) is a toolkit for loading and managing mods in Vendetta Online and improving functional usage between them.&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== For users ==&lt;br /&gt;
Neoloader is an advanced mod loader for Vendetta Online that sits on top of the existing mod loader. The goal of the Neoloader is to allow in-game management of Vendetta Online&#039;s plugins as much as the game engine can allow, and to facilitate a standard through which plugins can communicate with each other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features:&#039;&#039;&#039;&lt;br /&gt;
* Load plugins in order of dependencies and registration, instead of alphabetically&lt;br /&gt;
* Minimize risk of game crashes during the loading stage by safety-netting the loading process&lt;br /&gt;
* Provide management of plugins in-game&lt;br /&gt;
* Easy installation and removal of the system, and a guided recovery system in case of failure&lt;br /&gt;
* An extensive API to promote mod intercommunication and extensibility&lt;br /&gt;
&lt;br /&gt;
Neoloader can be downloaded from the following locations:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Location&lt;br /&gt;
! Version&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://www.nexusmods.com/vendettaonline/mods/3 NexusMods]&#039;&#039;&#039;&lt;br /&gt;
| 6.3.0 (LME 3.12.0)&lt;br /&gt;
| This is the preferred location for stable versions of Neoloader&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://voupr.spenced.com/plugin.php?name=neoloader VOUPR]&#039;&#039;&#039;&lt;br /&gt;
| 6.3.0 (LME 3.12.0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://www.moddb.com/mods/neoloader ModDB]&#039;&#039;&#039;&lt;br /&gt;
| 6.3.0 (LME 3.12.0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://github.com/LuxenDM/Neoloader Github]&#039;&#039;&#039;&lt;br /&gt;
| 7.0.0 (LME 3.12.0)&lt;br /&gt;
| This is a development version and may not be functional or complete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The current version with public support is 6.3.0 providing LME API 3.12.0; the minimum version that will be supported is 6.1.1 providing LME API 3.11.0&lt;br /&gt;
&lt;br /&gt;
Neoloader comes bundled with a few utilities used to interact with the software and manage its settings. These include&lt;br /&gt;
* The [[vendetta/neoloader/neomgr|lightweight management interface, neomgr]]&lt;br /&gt;
* The [[vendetta/neoloader/neonotif|notification control system, neonotif]]&lt;br /&gt;
* A [[vendetta/neoloader/recovery|recovery console]] for plugin errors&lt;br /&gt;
&lt;br /&gt;
To manage non-LME mods, use a tool such as [https://www.nexusmods.com/vendettaonline/mods/2 Neopatcher] to convert mods to a hybrid model capable of being seen and managed by Neoloader.&lt;br /&gt;
&lt;br /&gt;
== For modders ==&lt;br /&gt;
* [[vendetta/overview|Developer&#039;s overview]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/design|Creating or converting a plugin for the LME]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/registration|INI registration details]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/API|LME API for developers]] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/API/update_state&amp;diff=120</id>
		<title>Vendetta/API/update state</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/API/update_state&amp;diff=120"/>
		<updated>2025-08-03T19:57:14Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Other notes */ note on name editing a plugin - perfectly fine if used for language edits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Definition ===&lt;br /&gt;
lib.update_state (string id, string version, table state_data) :: nil&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
Allows editing of a plugin&#039;s state data post-registration&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
# string id: name of the mod to be activated&lt;br /&gt;
# string version: version of the mod to be activated&lt;br /&gt;
# table state_data: settings to adjust in table format. see below.&lt;br /&gt;
&lt;br /&gt;
=== Returns ===&lt;br /&gt;
# nil&lt;br /&gt;
&lt;br /&gt;
=== Other notes ===&lt;br /&gt;
* Added in LME 3.11.0&lt;br /&gt;
&lt;br /&gt;
valid state data entries:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;complete&#039;&#039;&#039; || Allows the plugin to trigger its own failure state and prevent any dependent plugins from running if they haven&#039;t already.  &lt;br /&gt;
This cannot unload code that&#039;s already running. Use in hybrid mods to disable themselves easily.  &lt;br /&gt;
Plugins cannot mark themselves as ‘complete’; this value can only be `false` or not exist.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;name&#039;&#039;&#039; || Allows the plugin to change its registered display name, intended for multilingual language support&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;link&#039;&#039;&#039; || Allows the plugin to change the ‘link’ read from its INI file (or set one, if no link was originally provided).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_name&#039;&#039;&#039; || Same as `name`.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_link&#039;&#039;&#039; || Same as `link`.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;err_details&#039;&#039;&#039; || If the plugin is marking itself as incomplete to indicate a self-caught error, this string is added to the LME log display.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/API/get_state&amp;diff=119</id>
		<title>Vendetta/API/get state</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/API/get_state&amp;diff=119"/>
		<updated>2025-07-21T20:17:01Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Returns */ LME 3.12.x behavior adds statistical reporting of memory and launch time values&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Definition ===&lt;br /&gt;
lib.get_state (id, version) :: mod_state_table&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
Retrieves the state information of the selected mod&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
# string id: name of the mod to be activated&lt;br /&gt;
# string version: version of the mod to be activated&lt;br /&gt;
&lt;br /&gt;
=== Returns ===&lt;br /&gt;
# table mod_state: A table describing the mod&#039;s current state within the Neoloader registry&lt;br /&gt;
table definition:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Key !! Description&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;load&#039;&#039;&#039; || String `&amp;quot;YES&amp;quot;` or `&amp;quot;NO&amp;quot;` - Indicates whether the mod is set to be loaded when Neoloader starts.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;complete&#039;&#039;&#039; || Boolean - Indicates whether the mod completed successfully.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;dependencies_met&#039;&#039;&#039; || Boolean - Determines whether all dependencies declared by the mod are satisfied.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;load_position&#039;&#039;&#039; || Number - The order in which the mod was loaded compared to all registered mods.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;errors&#039;&#039;&#039; || Table - List of logs associated with this mod.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;latest&#039;&#039;&#039; || String - The latest version of this mod.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;versions&#039;&#039;&#039; || Table - Contains all versions of this mod present in Neoloader.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_id&#039;&#039;&#039; || String - The mod&#039;s unique ID.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_version&#039;&#039;&#039; || String - The current version of the mod.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_type&#039;&#039;&#039; || String - Descriptor of the mod, set by the author in the registration file.  &lt;br /&gt;
(Not used by Neoloader, intended for managers.)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_name&#039;&#039;&#039; || String - The public name of the mod.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_author&#039;&#039;&#039; || String - The author of this mod.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_link&#039;&#039;&#039; || String - A hyperlink to this mod&#039;s home page.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_folder&#039;&#039;&#039; || String - The file path to the mod&#039;s folder.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_ini_file&#039;&#039;&#039; || String - The file path to the mod&#039;s INI file.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_frozen&#039;&#039;&#039; || String `&amp;quot;YES&amp;quot;` or `&amp;quot;NO&amp;quot;` - Determines whether this mod&#039;s dependents can execute.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;plugin_dependencies&#039;&#039;&#039; || Table - A copy of this plugin&#039;s dependency list.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;stats&#039;&#039;&#039; || Table - contains statistical values related to load-time footprint and time taken to load.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Other notes ===&lt;br /&gt;
* Added in LME 2.x (Neoloader indev)&lt;br /&gt;
* Some of these details are not neccesary for Neoloader itself, and are intended to be used by potential mod management front-ends.&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/API/get_path&amp;diff=118</id>
		<title>Vendetta/API/get path</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/API/get_path&amp;diff=118"/>
		<updated>2025-07-21T20:14:39Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Added LME 3.12.x behavior of get_path&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Definition ===&lt;br /&gt;
lib.get_path (id, version) :: file_path_pointer&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
Retrieves the path value of the function that called this function, or if an ID/version pair are provided, returns the path to the installed mod&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
# string id: name of the mod to be retrieved&lt;br /&gt;
# string version: version of the mod to be retrieved&lt;br /&gt;
&lt;br /&gt;
=== Returns ===&lt;br /&gt;
If called with no arguments (or invalid arguments)&lt;br /&gt;
* string file_path: The path to the folder of the file that called this function&lt;br /&gt;
OR, if string id/version are provided:&lt;br /&gt;
* string file_path: The path to the mod&#039;s folder; example: &amp;quot;plugins/Neomanager/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== Other notes ===&lt;br /&gt;
* Added in LME 3.1.x&lt;br /&gt;
* Updated in LME 3.12.0: Now can return the path to the file that executed this function&lt;br /&gt;
* (with an ID/Version pair) This path is based on the location of the mod&#039;s INI registration file&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=117</id>
		<title>Vendetta/neoloader</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=117"/>
		<updated>2025-07-14T05:09:36Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* For users */ updated version and support information for new release v6.3.0&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Vendetta-Neobanner.jpg]]&lt;br /&gt;
==  ==&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Neoloader Pre-execution Library Management Engine (NPLME) is a toolkit for loading and managing mods in Vendetta Online and improving functional usage between them.&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== For users ==&lt;br /&gt;
Neoloader is an advanced mod loader for Vendetta Online that sits on top of the existing mod loader. The goal of the Neoloader is to allow in-game management of Vendetta Online&#039;s plugins as much as the game engine can allow, and to facilitate a standard through which plugins can communicate with each other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features:&#039;&#039;&#039;&lt;br /&gt;
* Load plugins in order of dependencies and registration, instead of alphabetically&lt;br /&gt;
* Minimize risk of game crashes during the loading stage by safety-netting the loading process&lt;br /&gt;
* Provide management of plugins in-game&lt;br /&gt;
* Easy installation and removal of the system, and a guided recovery system in case of failure&lt;br /&gt;
* An extensive API to promote mod intercommunication and extensibility&lt;br /&gt;
&lt;br /&gt;
Neoloader can be downloaded from the following locations:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Location&lt;br /&gt;
! Version&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://www.nexusmods.com/vendettaonline/mods/3 NexusMods]&#039;&#039;&#039;&lt;br /&gt;
| 6.3.0 (LME 3.12.0)&lt;br /&gt;
| This is the preferred location for stable versions of Neoloader&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://voupr.spenced.com/plugin.php?name=neoloader VOUPR]&#039;&#039;&#039;&lt;br /&gt;
| 6.3.0 (LME 3.12.0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://github.com/LuxenDM/Neoloader Github]&#039;&#039;&#039;&lt;br /&gt;
| 7.0.0 (LME 3.12.0)&lt;br /&gt;
| This is a development version and may not be functional or complete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The current version with public support is 6.3.0 providing LME API 3.12.0; the minimum version that will be supported is 6.1.1 providing LME API 3.11.0&lt;br /&gt;
&lt;br /&gt;
Neoloader comes bundled with a few utilities used to interact with the software and manage its settings. These include&lt;br /&gt;
* The [[vendetta/neoloader/neomgr|lightweight management interface, neomgr]]&lt;br /&gt;
* The [[vendetta/neoloader/neonotif|notification control system, neonotif]]&lt;br /&gt;
* A [[vendetta/neoloader/recovery|recovery console]] for plugin errors&lt;br /&gt;
&lt;br /&gt;
To manage non-LME mods, use a tool such as [https://www.nexusmods.com/vendettaonline/mods/2 Neopatcher] to convert mods to a hybrid model capable of being seen and managed by Neoloader.&lt;br /&gt;
&lt;br /&gt;
== For modders ==&lt;br /&gt;
* [[vendetta/overview|Developer&#039;s overview]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/design|Creating or converting a plugin for the LME]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/registration|INI registration details]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/API|LME API for developers]] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/API/get_latest&amp;diff=108</id>
		<title>Vendetta/API/get latest</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/API/get_latest&amp;diff=108"/>
		<updated>2025-06-11T03:23:09Z</updated>

		<summary type="html">&lt;p&gt;Luxen: reformatted wording and better clarified behavior of function and its min/max filtering&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Definition ===&lt;br /&gt;
lib.get_latest (id, [min, max]) :: mod_version&lt;br /&gt;
&lt;br /&gt;
=== Description ===&lt;br /&gt;
Retrieves the latest version of an enabled mod, or the latest within a range of versions that is installed&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
# string id: name of the mod to look up&lt;br /&gt;
# (optional) string min: minimum version to limit the range to&lt;br /&gt;
# (optional) string max: maximum version to limit the range to&lt;br /&gt;
&lt;br /&gt;
=== Returns ===&lt;br /&gt;
# string mod_version: the latest version of the installed mod, or the latest installed within the provided range. If no version satisfies the provided range, returns &amp;quot;?&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Other notes ===&lt;br /&gt;
* Added in LME 3.x.x&lt;br /&gt;
** Changed in 3.8.x: Added support for min/max version filtering&lt;br /&gt;
* Other API functions, when given mod version &amp;quot;0&amp;quot;, use this function to resolve the appropriate version.&lt;br /&gt;
* This function prioritizes the latest active version. If none are active, then retrieves latest installed version.&lt;br /&gt;
* Both min and max must be provided for version range filtering to apply.&lt;br /&gt;
* Unlike most LME functions, &amp;quot;0&amp;quot; is not treated as a placeholder for &amp;quot;latest&amp;quot; within the min/max filter (this function does not call itself).&lt;br /&gt;
** To filter from a minimum version without defining a real maximum, first call lib.get_latest(id) to obtain the latest available, to get the current latest, then pass that as max&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=107</id>
		<title>Vendetta/helium/api</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=107"/>
		<updated>2025-06-05T20:50:18Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Async functions */ fixed tween value link text&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All API functions for the Helium library are listed below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utility functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Provides functions for operating on iup objects, but don&#039;t create iup objects themselves.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/map_dialog|map_dialog]] || Similar to iup&#039;s :map(), but recursively activates all map_cb() functions in every child iup object. Many helium objects require this to render correctly.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/index_container|index_container]] || Iterates over an iup tree and returns the lua table equivilant. Intended for debugging use only.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_prepend|iup_prepend]] || Intended to behave like iup.Append(), but the child is put before instead of after other children&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_insert|iup_insert]] || Intended to behave like iup.Append(), but the child can be inserted at an arbitrary location&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/is_iup|is_iup]] || Behaves similarly to iup.IsValid(), but only checks if the object is an iup element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/get_mouse_abs_pos|get_mouse_abs_pos]] || Retrieves the pixel coordinates of the mouse position. Used internally to place subdialogs.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_size|scale_size]] || Using the known scaling value of Font.Default, applies a consistant scale to the provided value&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_2x|scale_2x]] || A preset function wrapper around scale_size to provide an iup size attribute&#039;s expected format.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iter_nums_from_string|iter_nums_from_string]] || A function to split numbers from a non-numerically delimited string, returned as a table. When used with an iup size attribute, returns the values {x, y}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Async functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These are asynchronous variants of the utility functions&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.map_dialog|async map_dialog]] || asynchronous method to map a dialog and execute all embedded map_cb. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.index_container|async index_container]] || asynchronous method to index an iup container, getting a table representation on callback&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.prepend|async prepend]] || asynchronous method to add an element to the top of an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.insert|async insert]] || asynchronous method to insert an element in an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.tween_value|tween value]] || Tween from one value to another over time with ease-in-out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Primitive objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These provide preset singular iup objects for building basic interface objects with more easily.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/clearframe|clearframe]] || A frame preset with no image and no border; should be visually invisible.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/solidframe|solidframe]] || A frame preset with a thin border.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/borderframe|borderframe]] || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/highlite_panel|highlite_panel]] || An image used internally for &#039;highlite on mouse hover&#039; behavior.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/page_rule|page rule]] || Inserts a border into the frame similar to an html page rule&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/progressbar|progressbar]] || A set of basic preset values for an iup.progressbar&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hslider|hslider]] || A horizontal scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vslider|vslider]] || A vertical scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/cyclebutton|cyclebutton]] || A button that changes its contents every press, cycling through indexed options.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Constructed objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Constructs are functions that create multiple iup objects contained within a frame parent.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hexpandbox|hexpandbox]] || A frame-style object that operates like a horizontal &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vexpandbox|vexpandbox]] || A frame-style object that operates like a vertical &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vscroll|vscroll]] || A frame-style object that allows its contents to be scrolled vertically. This does NOT rely on a &#039;control&#039; list or iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hscroll|hscroll]] || A frame-style object that allows its contents to be scrolled horizontally. This does NOT rely on an iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ascroll|ascroll]] || A freely controlled viewport area.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hbuttonlist|hbuttonlist]] || A frame containing a horizontal list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vbuttonlist|vbuttonlist]] || A frame containing a vertical list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || This hides an invisible button over the child element, providing on-click functionality to non-clickable objects and frames&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || Like a coverbutton, but all attributes are passed to the core button object for more advanced control&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/select_text|select_text]] || A preset of coverbutton over a label element&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/link_text|link_text]] || A preset of select_text that mimics a hyperlink to open a webpage&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ticker|ticker]] || Two buttons and a field for inputting and editing a numeric entry&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/slide_toggle|slide_toggle]] || A &amp;quot;toggle&amp;quot; object that mimics the popular mobile switch style&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/multi_button|multi_button]] || A three-button setup; two to navigate left and right through options, and a central button to activate the displayed item&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/bg_frame|bg_frame]] || Acts like a background element handler&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/shrink_label|shrink_label]] || A text element that automatically handles word-wrapping functionality&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset dialogs ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Presets are full dialogs worth of items, with completely custom behaviors and purpose-built uses.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/subdialog|subdialog]] || Creates a modal-style dialog that can be positioned on the screen (defaults to center).&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/context_menu|context_menu]] || Creates a preset of the subdialog that mimics the behavior of a single-layer context menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/alert_dialog|alert box]] || Creates a very simple subdialog at center screen to show the user a single message.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/choice_dialog|choice box]] || Creates a very simple subdialog for prompting the user to make a selection of two options.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/list_dialog|list box]] || Creates a very simple subdialog for prompting the user to make a selection from a list.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/reader_dialog|reader]] || Creates a large subdialog for displaying a large amount of text in a multiline element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/input_dialog|input box]] || Creates a very simple subdialog for prompting the user to enter a string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Drag-and-drop functionality ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy drag and drop functionality.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_item|drag_item]] || Creates a transparent field above the target object. this has a drag behavior associated with it. Intended to be paired with a drag_target object.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_target|drag_target]] || Creates a transparent field above the target objects. this has a drop behavior associated with it. Intended to be paired with a drag_item object.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Color and paint submodule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy methods to select both RGB and indexed ship colors.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | The paint module is currently not implemented; these are features targeting helium v1.1.0&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_panel|paint_panel]] || Creates a single color thumbnail for ship paint colors.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_panel|color_panel]] || Creates a single color thumbnail for RGB color selection.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_select|paint_select]] || A full palette list for user selection. Each vertical column lists a general color, with indexes from light to dark.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_select|color_select]] || Contains RGB color finding controls.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_picker|color_picker]] || A custom dialog that allows the user to select from a palette list, recent selections, or use a color finder.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset widgets ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | End-result items used for single-function purpose that don&#039;t fit in other categories are kept in the widgets table.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | The widgets table is currently not implemented; these are features targeting helium v1.1.0&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widget.clock|clock]] || A preset clock widget with timezone selection and 12/24 hour display.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.stopwatch|stopwatch]] || A preset stopwatch widget. action returns either _start or _stop, &amp;lt;time in ms&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.numpad|numpad]] || A preset number pad entry widget.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_text|marquee_text]] || A preset label display that scrolls its contents. Uses multiple labels to give the semblance of continuous scrolling&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_obj|marquee_obj]] || A preset display that scrolls its contents. Must be provided with a generator to duplicate displayed contents.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/scale_size&amp;diff=106</id>
		<title>Vendetta/helium/api/scale size</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/scale_size&amp;diff=106"/>
		<updated>2025-06-05T20:47:19Z</updated>

		<summary type="html">&lt;p&gt;Luxen: created helium.util.scale_size&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Using the font default size, which is based on the user&#039;s vertical screen height, this function lets a number be scaled up when provided with the original value on the development system.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
helium.util.scale_size(value_to_change, base_size) -&amp;gt; changed_value&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
value_to_change: type number: The value that needs to be scaled up&lt;br /&gt;
base_size: type number: This is the Font.Default value on the development system. If not provided, 24 is the default.&lt;br /&gt;
&lt;br /&gt;
=== Returns ===&lt;br /&gt;
changed_value: type number: the output value after scaling.&lt;br /&gt;
&lt;br /&gt;
=== Notes ===&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/get_mouse_abs_pos&amp;diff=105</id>
		<title>Vendetta/helium/api/get mouse abs pos</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/get_mouse_abs_pos&amp;diff=105"/>
		<updated>2025-06-05T18:44:39Z</updated>

		<summary type="html">&lt;p&gt;Luxen: created get_mouse_abs_pos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Obtains the pixel coordinates of the user&#039;s mouse within the game&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
helium.util.get_mouse_abs_pos(offset_x, offset_y) -&amp;gt; pos_x, pos_y&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
offset_x: type number: optional offset from actual mouse x position&lt;br /&gt;
offset_y: type number: optional offset from actual mouse y position&lt;br /&gt;
&lt;br /&gt;
=== Returns ===&lt;br /&gt;
pos_x: type number: x coordinate of mouse (+ x_offset if provided)&lt;br /&gt;
pos_y: type number: y coordinate of mouse (+ y_offset if provided)&lt;br /&gt;
&lt;br /&gt;
=== Notes === &lt;br /&gt;
(Not yet implemented): This function will use the last user touch/control press as the mouse coordinates on mobile/VR&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/is_iup&amp;diff=104</id>
		<title>Vendetta/helium/api/is iup</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/is_iup&amp;diff=104"/>
		<updated>2025-06-05T18:38:48Z</updated>

		<summary type="html">&lt;p&gt;Luxen: created helium.util.is_iup&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tests if an element is an iup object. Does not check if the element is a VALID iup object, however. Instead, use iup.IsValid().&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
helium.util.is_iup(ihandle) -&amp;gt; iup_flag&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
ihandle: type *iup_object: Provide any iup userdata&lt;br /&gt;
&lt;br /&gt;
=== Returns ===&lt;br /&gt;
iup_flag: type boolean: true if the item is an iup userdata, false if it is not&lt;br /&gt;
&lt;br /&gt;
=== Notes === &lt;br /&gt;
This function was copied from Draugath before iup.IsValid was discovered, and is kept for posterity.&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/iup_insert&amp;diff=103</id>
		<title>Vendetta/helium/api/iup insert</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/iup_insert&amp;diff=103"/>
		<updated>2025-06-05T18:14:08Z</updated>

		<summary type="html">&lt;p&gt;Luxen: created helium.util.insert&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Intended to behave like iup.Append(), but the child is put within an arbitrary location instead of after other children.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
helium.util.iup_insert(root_ihandle, child_ihandle, position) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
root_ihandle: type *iup_object: dialog or other iup element item to add the child into.&lt;br /&gt;
child_ihandle: type *iup_object: iup element item to be inserted at top of the root object&#039;s stack.&lt;br /&gt;
position: type number: index of target placement of the child.&lt;br /&gt;
&lt;br /&gt;
=== Notes === &lt;br /&gt;
* In order to insert elements, this function iterates and detaches all existing items before adding the new element, and then re-attaches all the other elements in order. As such, extremely large iup structures may be expensive to insert items into; if inserting elements into a long list of items, consider using the asynchronous version of this function to retain client functionality.&lt;br /&gt;
* Similar to table.insert, positive numbers index from the start of the iup children list, while negative numbers index from the end of the list. If an item is out of bounds, it is inserted at the relevant end of the list.&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=102</id>
		<title>Vendetta/helium/api</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=102"/>
		<updated>2025-06-05T18:10:46Z</updated>

		<summary type="html">&lt;p&gt;Luxen: noted paint and widgets modules for being unimplemented currently&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All API functions for the Helium library are listed below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utility functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Provides functions for operating on iup objects, but don&#039;t create iup objects themselves.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/map_dialog|map_dialog]] || Similar to iup&#039;s :map(), but recursively activates all map_cb() functions in every child iup object. Many helium objects require this to render correctly.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/index_container|index_container]] || Iterates over an iup tree and returns the lua table equivilant. Intended for debugging use only.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_prepend|iup_prepend]] || Intended to behave like iup.Append(), but the child is put before instead of after other children&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_insert|iup_insert]] || Intended to behave like iup.Append(), but the child can be inserted at an arbitrary location&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/is_iup|is_iup]] || Behaves similarly to iup.IsValid(), but only checks if the object is an iup element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/get_mouse_abs_pos|get_mouse_abs_pos]] || Retrieves the pixel coordinates of the mouse position. Used internally to place subdialogs.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_size|scale_size]] || Using the known scaling value of Font.Default, applies a consistant scale to the provided value&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_2x|scale_2x]] || A preset function wrapper around scale_size to provide an iup size attribute&#039;s expected format.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iter_nums_from_string|iter_nums_from_string]] || A function to split numbers from a non-numerically delimited string, returned as a table. When used with an iup size attribute, returns the values {x, y}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Async functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These are asynchronous variants of the utility functions&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.map_dialog|async map_dialog]] || asynchronous method to map a dialog and execute all embedded map_cb. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.index_container|async index_container]] || asynchronous method to index an iup container, getting a table representation on callback&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.prepend|async prepend]] || asynchronous method to add an element to the top of an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.insert|async insert]] || asynchronous method to insert an element in an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.tween_value]] || Tween from one value to another over time with ease-in-out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Primitive objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These provide preset singular iup objects for building basic interface objects with more easily.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/clearframe|clearframe]] || A frame preset with no image and no border; should be visually invisible.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/solidframe|solidframe]] || A frame preset with a thin border.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/borderframe|borderframe]] || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/highlite_panel|highlite_panel]] || An image used internally for &#039;highlite on mouse hover&#039; behavior.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/page_rule|page rule]] || Inserts a border into the frame similar to an html page rule&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/progressbar|progressbar]] || A set of basic preset values for an iup.progressbar&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hslider|hslider]] || A horizontal scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vslider|vslider]] || A vertical scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/cyclebutton|cyclebutton]] || A button that changes its contents every press, cycling through indexed options.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Constructed objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Constructs are functions that create multiple iup objects contained within a frame parent.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hexpandbox|hexpandbox]] || A frame-style object that operates like a horizontal &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vexpandbox|vexpandbox]] || A frame-style object that operates like a vertical &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vscroll|vscroll]] || A frame-style object that allows its contents to be scrolled vertically. This does NOT rely on a &#039;control&#039; list or iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hscroll|hscroll]] || A frame-style object that allows its contents to be scrolled horizontally. This does NOT rely on an iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ascroll|ascroll]] || A freely controlled viewport area.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hbuttonlist|hbuttonlist]] || A frame containing a horizontal list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vbuttonlist|vbuttonlist]] || A frame containing a vertical list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || This hides an invisible button over the child element, providing on-click functionality to non-clickable objects and frames&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || Like a coverbutton, but all attributes are passed to the core button object for more advanced control&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/select_text|select_text]] || A preset of coverbutton over a label element&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/link_text|link_text]] || A preset of select_text that mimics a hyperlink to open a webpage&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ticker|ticker]] || Two buttons and a field for inputting and editing a numeric entry&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/slide_toggle|slide_toggle]] || A &amp;quot;toggle&amp;quot; object that mimics the popular mobile switch style&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/multi_button|multi_button]] || A three-button setup; two to navigate left and right through options, and a central button to activate the displayed item&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/bg_frame|bg_frame]] || Acts like a background element handler&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/shrink_label|shrink_label]] || A text element that automatically handles word-wrapping functionality&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset dialogs ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Presets are full dialogs worth of items, with completely custom behaviors and purpose-built uses.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/subdialog|subdialog]] || Creates a modal-style dialog that can be positioned on the screen (defaults to center).&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/context_menu|context_menu]] || Creates a preset of the subdialog that mimics the behavior of a single-layer context menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/alert_dialog|alert box]] || Creates a very simple subdialog at center screen to show the user a single message.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/choice_dialog|choice box]] || Creates a very simple subdialog for prompting the user to make a selection of two options.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/list_dialog|list box]] || Creates a very simple subdialog for prompting the user to make a selection from a list.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/reader_dialog|reader]] || Creates a large subdialog for displaying a large amount of text in a multiline element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/input_dialog|input box]] || Creates a very simple subdialog for prompting the user to enter a string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Drag-and-drop functionality ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy drag and drop functionality.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_item|drag_item]] || Creates a transparent field above the target object. this has a drag behavior associated with it. Intended to be paired with a drag_target object.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_target|drag_target]] || Creates a transparent field above the target objects. this has a drop behavior associated with it. Intended to be paired with a drag_item object.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Color and paint submodule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy methods to select both RGB and indexed ship colors.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | The paint module is currently not implemented; these are features targeting helium v1.1.0&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_panel|paint_panel]] || Creates a single color thumbnail for ship paint colors.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_panel|color_panel]] || Creates a single color thumbnail for RGB color selection.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_select|paint_select]] || A full palette list for user selection. Each vertical column lists a general color, with indexes from light to dark.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_select|color_select]] || Contains RGB color finding controls.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_picker|color_picker]] || A custom dialog that allows the user to select from a palette list, recent selections, or use a color finder.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset widgets ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | End-result items used for single-function purpose that don&#039;t fit in other categories are kept in the widgets table.&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | The widgets table is currently not implemented; these are features targeting helium v1.1.0&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widget.clock|clock]] || A preset clock widget with timezone selection and 12/24 hour display.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.stopwatch|stopwatch]] || A preset stopwatch widget. action returns either _start or _stop, &amp;lt;time in ms&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.numpad|numpad]] || A preset number pad entry widget.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_text|marquee_text]] || A preset label display that scrolls its contents. Uses multiple labels to give the semblance of continuous scrolling&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_obj|marquee_obj]] || A preset display that scrolls its contents. Must be provided with a generator to duplicate displayed contents.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=101</id>
		<title>Vendetta/helium/api</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=101"/>
		<updated>2025-06-05T00:52:51Z</updated>

		<summary type="html">&lt;p&gt;Luxen: partially updated to cover v1.0.0 release API&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All API functions for the Helium library are listed below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utility functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Provides functions for operating on iup objects, but don&#039;t create iup objects themselves.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/map_dialog|map_dialog]] || Similar to iup&#039;s :map(), but recursively activates all map_cb() functions in every child iup object. Many helium objects require this to render correctly.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/index_container|index_container]] || Iterates over an iup tree and returns the lua table equivilant. Intended for debugging use only.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_prepend|iup_prepend]] || Intended to behave like iup.Append(), but the child is put before instead of after other children&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_insert|iup_insert]] || Intended to behave like iup.Append(), but the child can be inserted at an arbitrary location&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/is_iup|is_iup]] || Behaves similarly to iup.IsValid(), but only checks if the object is an iup element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/get_mouse_abs_pos|get_mouse_abs_pos]] || Retrieves the pixel coordinates of the mouse position. Used internally to place subdialogs.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_size|scale_size]] || Using the known scaling value of Font.Default, applies a consistant scale to the provided value&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_2x|scale_2x]] || A preset function wrapper around scale_size to provide an iup size attribute&#039;s expected format.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iter_nums_from_string|iter_nums_from_string]] || A function to split numbers from a non-numerically delimited string, returned as a table. When used with an iup size attribute, returns the values {x, y}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Async functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These are asynchronous variants of the utility functions&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.map_dialog|async map_dialog]] || asynchronous method to map a dialog and execute all embedded map_cb. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.index_container|async index_container]] || asynchronous method to index an iup container, getting a table representation on callback&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.prepend|async prepend]] || asynchronous method to add an element to the top of an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.insert|async insert]] || asynchronous method to insert an element in an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.tween_value]] || Tween from one value to another over time with ease-in-out&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Primitive objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These provide preset singular iup objects for building basic interface objects with more easily.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/clearframe|clearframe]] || A frame preset with no image and no border; should be visually invisible.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/solidframe|solidframe]] || A frame preset with a thin border.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/borderframe|borderframe]] || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/highlite_panel|highlite_panel]] || An image used internally for &#039;highlite on mouse hover&#039; behavior.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/page_rule|page rule]] || Inserts a border into the frame similar to an html page rule&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/progressbar|progressbar]] || A set of basic preset values for an iup.progressbar&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hslider|hslider]] || A horizontal scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vslider|vslider]] || A vertical scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/cyclebutton|cyclebutton]] || A button that changes its contents every press, cycling through indexed options.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Constructed objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Constructs are functions that create multiple iup objects contained within a frame parent.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hexpandbox|hexpandbox]] || A frame-style object that operates like a horizontal &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vexpandbox|vexpandbox]] || A frame-style object that operates like a vertical &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vscroll|vscroll]] || A frame-style object that allows its contents to be scrolled vertically. This does NOT rely on a &#039;control&#039; list or iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hscroll|hscroll]] || A frame-style object that allows its contents to be scrolled horizontally. This does NOT rely on an iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ascroll|ascroll]] || A freely controlled viewport area.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hbuttonlist|hbuttonlist]] || A frame containing a horizontal list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vbuttonlist|vbuttonlist]] || A frame containing a vertical list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || This hides an invisible button over the child element, providing on-click functionality to non-clickable objects and frames&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || Like a coverbutton, but all attributes are passed to the core button object for more advanced control&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/select_text|select_text]] || A preset of coverbutton over a label element&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/link_text|link_text]] || A preset of select_text that mimics a hyperlink to open a webpage&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ticker|ticker]] || Two buttons and a field for inputting and editing a numeric entry&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/slide_toggle|slide_toggle]] || A &amp;quot;toggle&amp;quot; object that mimics the popular mobile switch style&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/multi_button|multi_button]] || A three-button setup; two to navigate left and right through options, and a central button to activate the displayed item&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/bg_frame|bg_frame]] || Acts like a background element handler&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/shrink_label|shrink_label]] || A text element that automatically handles word-wrapping functionality&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset dialogs ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Presets are full dialogs worth of items, with completely custom behaviors and purpose-built uses.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/subdialog|subdialog]] || Creates a modal-style dialog that can be positioned on the screen (defaults to center).&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/context_menu|context_menu]] || Creates a preset of the subdialog that mimics the behavior of a single-layer context menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/alert_dialog|alert box]] || Creates a very simple subdialog at center screen to show the user a single message.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/choice_dialog|choice box]] || Creates a very simple subdialog for prompting the user to make a selection of two options.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/list_dialog|list box]] || Creates a very simple subdialog for prompting the user to make a selection from a list.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/reader_dialog|reader]] || Creates a large subdialog for displaying a large amount of text in a multiline element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/input_dialog|input box]] || Creates a very simple subdialog for prompting the user to enter a string.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Drag-and-drop functionality ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy drag and drop functionality.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_item|drag_item]] || Creates a transparent field above the target object. this has a drag behavior associated with it. Intended to be paired with a drag_target object.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_target|drag_target]] || Creates a transparent field above the target objects. this has a drop behavior associated with it. Intended to be paired with a drag_item object.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Color and paint submodule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy methods to select both RGB and indexed ship colors.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_panel|paint_panel]] || Creates a single color thumbnail for ship paint colors.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_panel|color_panel]] || Creates a single color thumbnail for RGB color selection.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_select|paint_select]] || A full palette list for user selection. Each vertical column lists a general color, with indexes from light to dark.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_select|color_select]] || Contains RGB color finding controls.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_picker|color_picker]] || A custom dialog that allows the user to select from a palette list, recent selections, or use a color finder.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset widgets ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | End-result items used for single-function purpose that don&#039;t fit in other categories are kept in the widgets table.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widget.clock|clock]] || A preset clock widget with timezone selection and 12/24 hour display.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.stopwatch|stopwatch]] || A preset stopwatch widget. action returns either _start or _stop, &amp;lt;time in ms&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.numpad|numpad]] || A preset number pad entry widget.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_text|marquee_text]] || A preset label display that scrolls its contents. Uses multiple labels to give the semblance of continuous scrolling&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_obj|marquee_obj]] || A preset display that scrolls its contents. Must be provided with a generator to duplicate displayed contents.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=100</id>
		<title>Vendetta/neoloader</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=100"/>
		<updated>2025-05-13T01:32:37Z</updated>

		<summary type="html">&lt;p&gt;Luxen: updated versions listed with recent maintenance update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Vendetta-Neobanner.jpg]]&lt;br /&gt;
==  ==&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Neoloader Pre-execution Library Management Engine (NPLME) is a toolkit for loading and managing mods in Vendetta Online and improving functional usage between them.&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== For users ==&lt;br /&gt;
Neoloader is an advanced mod loader for Vendetta Online that sits on top of the existing mod loader. The goal of the Neoloader is to allow in-game management of Vendetta Online&#039;s plugins as much as the game engine can allow, and to facilitate a standard through which plugins can communicate with each other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features:&#039;&#039;&#039;&lt;br /&gt;
* Load plugins in order of dependencies and registration, instead of alphabetically&lt;br /&gt;
* Minimize risk of game crashes during the loading stage by safety-netting the loading process&lt;br /&gt;
* Provide management of plugins in-game&lt;br /&gt;
* Easy installation and removal of the system, and a guided recovery system in case of failure&lt;br /&gt;
* An extensive API to promote mod intercommunication and extensibility&lt;br /&gt;
&lt;br /&gt;
Neoloader can be downloaded from the following locations:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Location&lt;br /&gt;
! Version&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://www.nexusmods.com/vendettaonline/mods/3 NexusMods]&#039;&#039;&#039;&lt;br /&gt;
| 6.2.0 (LME 3.11.0)&lt;br /&gt;
| This is the preferred location for stable versions of Neoloader&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://voupr.spenced.com/plugin.php?name=neoloader VOUPR]&#039;&#039;&#039;&lt;br /&gt;
| 6.2.0 (LME 3.11.0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://github.com/LuxenDM/Neoloader Github]&#039;&#039;&#039;&lt;br /&gt;
| 6.2.0 (LME 3.11.0)&lt;br /&gt;
| Development versions may be available here&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The current version with public support is 6.2.0 providing LME API 3.11.0; the minimum version that will be supported is 6.1.1 providing LME API 3.11.0&lt;br /&gt;
&lt;br /&gt;
Neoloader comes bundled with a few utilities used to interact with the software and manage its settings. These include&lt;br /&gt;
* The [[vendetta/neoloader/neomgr|lightweight management interface, neomgr]]&lt;br /&gt;
* The [[vendetta/neoloader/neonotif|notification control system, neonotif]]&lt;br /&gt;
* A [[vendetta/neoloader/recovery|recovery console]] for plugin errors&lt;br /&gt;
&lt;br /&gt;
To manage non-LME mods, use a tool such as [https://www.nexusmods.com/vendettaonline/mods/2 Neopatcher] to convert mods to a hybrid model capable of being seen and managed by Neoloader.&lt;br /&gt;
&lt;br /&gt;
== For modders ==&lt;br /&gt;
* [[vendetta/overview|Developer&#039;s overview]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/design|Creating or converting a plugin for the LME]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/registration|INI registration details]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/API|LME API for developers]] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Fate/instruct_API&amp;diff=99</id>
		<title>Fate/instruct API</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Fate/instruct_API&amp;diff=99"/>
		<updated>2025-04-17T03:40:17Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* What is the instruct file */ added link to Nexus, because figuring out file sharing is too annoying to do locally&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is the instruct file ==&lt;br /&gt;
Every FPX mod requires a patch.json file in its root directory, which defines the mod and contains the instructions on how to apply it. It does follow [https://www.json.org/json-en.html normal JSON formatting standards]. This json file is the &#039;instruct&#039; file, as it literally instructs the Fate Patcher in how to apply files. An &amp;quot;empty&amp;quot; mod to use as a starting template can be downloaded [https://www.nexusmods.com/fate/mods/21?tab=files from the optional files section on the NexusMods mirror].&lt;br /&gt;
&lt;br /&gt;
== General data ==&lt;br /&gt;
The instruct file will generally start with the following information. Only the bold entries are required; the rest are optional, but will be useful for users managing their mods with the GUI front-end eventually distributed with FPX. Unless otherwise mentioned, assume all elements are strings.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;name&#039;&#039;&#039; || Name of your mod&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;version&#039;&#039;&#039; || Version of your mod. Supports advanced versioning*&lt;br /&gt;
|-&lt;br /&gt;
| author || Primary mod author or team name&lt;br /&gt;
|-&lt;br /&gt;
| web || URL to be opened if the user is checking for updates&lt;br /&gt;
|-&lt;br /&gt;
| description || Describe the mod in a sentence or two&lt;br /&gt;
|-&lt;br /&gt;
| contributors || List of individual contributors/authors, if multiple.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Following these informational elements, you provide the actual &#039;instructive&#039; content that defines how your mod is set up. This content includes one or more of six possible &#039;operations&#039;. Below lists each possible operation. Where a ellipses (…) occurs in the script file, is where something (can) continue/repeat in the given sequence.&lt;br /&gt;
&lt;br /&gt;
=== Index operations ===&lt;br /&gt;
Index operations are key/value pairs that &amp;quot;index&amp;quot; a file under a given name, making it patchable. Most OG *.dat files are indexed by default.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;quot;index&amp;quot;: {&lt;br /&gt;
  &amp;quot;INDEX_NAME&amp;quot;: &amp;quot;Path/to/file in the FATE game directory&amp;quot;,&lt;br /&gt;
  ...repeat for every index being added&lt;br /&gt;
},&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Copy operations ===&lt;br /&gt;
Given a folder destination and a series of files, the Copy operation copies those files into the destination. This is used to provide assets which are referenced by patch data.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;quot;copy&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;folder&amp;quot;: &amp;quot;Path/to/file in the FATE game directory&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      &amp;quot;path/to/file from your mod folder, to your asset being deployed&amp;quot;,&lt;br /&gt;
      ...repeat per asset being deployed to the destination&lt;br /&gt;
    ],&lt;br /&gt;
  },&lt;br /&gt;
  ...repeat the {} per destination folder&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Patch operations ===&lt;br /&gt;
Given a valid index, the Patch operation adds new file contents to the end of the original indexed file, in effect adding new content to the game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;quot;patch&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;container&amp;quot;: &amp;quot;valid index name&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      &amp;quot;path/to/file from your mod folder, to your text file containing the data to append&amp;quot;,&lt;br /&gt;
      ...&lt;br /&gt;
    ],&lt;br /&gt;
  },&lt;br /&gt;
  ...repeat the {} per index being patched&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sequence operations ===&lt;br /&gt;
Sequence operations are similar to a copy operation, but allows the file name to be sequentially generated at deployment. This will mostly only be used when adding new music to the game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;quot;sequence&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;folder&amp;quot;: &amp;quot;Path/to/file in the FATE game directory&amp;quot;,&lt;br /&gt;
    &amp;quot;file&amp;quot;: &amp;quot;destination file name&amp;quot;,&lt;br /&gt;
    &amp;quot;content&amp;quot;: [&lt;br /&gt;
      &amp;quot;path/to/file from your mod folder, to your asset being deployed&amp;quot;,&lt;br /&gt;
      ...&lt;br /&gt;
    ],&lt;br /&gt;
  },&lt;br /&gt;
  ...repeat the {} per destination folder and/or file&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filter operations ===&lt;br /&gt;
The most powerful yet complex operation, Filters are when you attach a lua file to a given index. This is executed at the end of mod deployment. Refer to the filter script lua API.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;quot;script&amp;quot;: [&lt;br /&gt;
  {&lt;br /&gt;
    &amp;quot;container&amp;quot;: &amp;quot;valid index&amp;quot;,&lt;br /&gt;
    &amp;quot;file&amp;quot;: &amp;quot;path/to/file.lua from your mod directory&amp;quot;,&lt;br /&gt;
  },&lt;br /&gt;
  ...repeat {} per index and/or filter script to apply&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;note&#039;&#039;: Filter scripts may execute lua direclty, but they are limited within a sandbox for security purposes. They can only write directly to the file they are operating on, and can only see your game and your mod files only.&lt;br /&gt;
&lt;br /&gt;
=== Override operations ===&lt;br /&gt;
Override operations tell FPX to NOT grab the master copy of a file during the patch process. This is useful if you have overwritten a file that is usually indexed and exists within the base game.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line&amp;gt;&lt;br /&gt;
&amp;quot;override&amp;quot;: [&lt;br /&gt;
  &amp;quot;valid index name&amp;quot;,&lt;br /&gt;
  ...repeat for every overridden indexes&lt;br /&gt;
],&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example instruct file ==&lt;br /&gt;
This is part of the instruct file for the Dungeonology expansion, a mod that adds multiple assets across the entire game.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;json&amp;quot; line&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
	&amp;quot;name&amp;quot;: &amp;quot;Dungeonology Expansion&amp;quot;,&lt;br /&gt;
	&amp;quot;version&amp;quot;: &amp;quot;1.0.0&amp;quot;,&lt;br /&gt;
	&amp;quot;author&amp;quot;: &amp;quot;Luxen De&#039;Mark&amp;quot;,&lt;br /&gt;
	&amp;quot;web&amp;quot;: &amp;quot;https://www.nexusmods.com/fate/mods/20&amp;quot;,&lt;br /&gt;
	&amp;quot;description&amp;quot;: &amp;quot;A massive dungeon expansion to FATE&amp;quot;,&lt;br /&gt;
	&amp;quot;index&amp;quot;: {&lt;br /&gt;
		&amp;quot;TEMPLATES_MASTER&amp;quot;: &amp;quot;TEMPLATES\\manifest.dat&amp;quot;,&lt;br /&gt;
	},&lt;br /&gt;
	&amp;quot;sequence&amp;quot;: [&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;folder&amp;quot;: &amp;quot;MUSIC&amp;quot;,&lt;br /&gt;
			&amp;quot;file&amp;quot;: &amp;quot;dungeon?.ogg&amp;quot;,&lt;br /&gt;
			&amp;quot;content&amp;quot;: [&lt;br /&gt;
				&amp;quot;Music\\imposing.ogg&amp;quot;,&lt;br /&gt;
				&amp;quot;Music\\unsettled house.ogg&amp;quot;,&lt;br /&gt;
				&amp;quot;Music\\Fog under the second street light.ogg&amp;quot;,&lt;br /&gt;
				&amp;quot;Music\\Aquarinonu.ogg&amp;quot;,&lt;br /&gt;
				&amp;quot;Music\\Apocalypse.ogg&amp;quot;,&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;folder&amp;quot;: &amp;quot;MUSIC&amp;quot;,&lt;br /&gt;
			&amp;quot;file&amp;quot;: &amp;quot;town?.ogg&amp;quot;,&lt;br /&gt;
			&amp;quot;content&amp;quot;: [&lt;br /&gt;
				&amp;quot;Music\\Green-fields.ogg&amp;quot;,&lt;br /&gt;
				&amp;quot;Music\\Pho Magic.ogg&amp;quot;,&lt;br /&gt;
				&amp;quot;Music\\Wild waters in the woods.ogg&amp;quot;,&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;copy&amp;quot;: [&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;folder&amp;quot;: &amp;quot;SOUNDS&amp;quot;,&lt;br /&gt;
			&amp;quot;content&amp;quot;: [&lt;br /&gt;
				&amp;quot;Props\\ice_crystal\\crystal_ting.wav&amp;quot;,&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;folder&amp;quot;: &amp;quot;PROPS&amp;quot;,&lt;br /&gt;
			&amp;quot;content&amp;quot;: [&lt;br /&gt;
				&amp;quot;Props\\lush_leaf\\lushleaf_obj.MDL&amp;quot;,&lt;br /&gt;
				&amp;quot;Props\\lush_leaf\\lushleaf_alpha.png&amp;quot;,&lt;br /&gt;
				&amp;quot;Props\\lush_leaf\\lushleaf_color.png&amp;quot;,&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;folder&amp;quot;: &amp;quot;ICONS&amp;quot;,&lt;br /&gt;
			&amp;quot;content&amp;quot;: [&lt;br /&gt;
				&amp;quot;Items\\Windlass\\windlass_alpha.png&amp;quot;,&lt;br /&gt;
				&amp;quot;Items\\Windlass\\windlass_color.png&amp;quot;,&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;folder&amp;quot;: &amp;quot;ITEMS&amp;quot;,&lt;br /&gt;
			&amp;quot;content&amp;quot;: [&lt;br /&gt;
				&amp;quot;Items\\Windlass\\windlass_obj.mdl&amp;quot;,&lt;br /&gt;
				&amp;quot;Items\\Windlass\\windlass_obj_color.png&amp;quot;,&lt;br /&gt;
				&amp;quot;Items\\Windlass\\windlass_obj_ref.png&amp;quot;,&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
	],&lt;br /&gt;
	&amp;quot;patch&amp;quot;: [&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;container&amp;quot;: &amp;quot;ITEMS_US&amp;quot;,&lt;br /&gt;
			&amp;quot;content&amp;quot;: [&lt;br /&gt;
				&amp;quot;Items\\Spellbooks\\spellbook_items.txt&amp;quot;,&lt;br /&gt;
				&amp;quot;Items\\Gems\\Amber.txt&amp;quot;,&lt;br /&gt;
				&amp;quot;Items\\Compass\\compass_item.txt&amp;quot;,&lt;br /&gt;
				&amp;quot;Items\\Totem Rod\\totem_rod.txt&amp;quot;,&lt;br /&gt;
				&amp;quot;Items\\Bamboo Rod\\bamboo_rod.txt&amp;quot;,&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
		{&lt;br /&gt;
			&amp;quot;container&amp;quot;: &amp;quot;TEMPLATES_MASTER&amp;quot;,&lt;br /&gt;
			&amp;quot;content&amp;quot;: [&lt;br /&gt;
				&amp;quot;Dungeons\\manifest_patch.txt&amp;quot;,&lt;br /&gt;
			],&lt;br /&gt;
		},&lt;br /&gt;
	],&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
* File paths must use a double-backslash. A single backslash is used as an [https://en.wikipedia.org/wiki/Escape_character escape character] in lua, which FPX is written in.&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=98</id>
		<title>Firefly/ff engine</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=98"/>
		<updated>2025-04-06T17:28:32Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Added a few actions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Firefly engine =&lt;br /&gt;
[[image:ff_engine_icon.png|left|Firefly engine]] The Firefly Engine object is the base of the entire Firefly system. It is the object that actually takes all of your various nodes and other Firefly objects and renders the 3d scene to the frame. You must have at least one in your project&#039;s frame in order for anything 3d to appear when you run it. The size and placement of the engine within your game&#039;s frame determines where in the frame the 3d scene is rendered.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
todo: &lt;br /&gt;
* show examples to the right or underneath each sub-section as necessary?&lt;br /&gt;
* Better define what each individual option does, and specify what &#039;index&#039; it is if set through an action&lt;br /&gt;
&lt;br /&gt;
=== Start engine at start ===&lt;br /&gt;
This is a toggle that controls whether the Firefly engine itself will initialize immediately when the frame starts. If you have to configure certain engine settings, or manipulate the engine such as resizing the engine frame, then this should be toggled off, and use an action to trigger the engine to start when you are ready.&lt;br /&gt;
&lt;br /&gt;
=== Device Driver ===&lt;br /&gt;
Allows you to select the rendering pipeline Firefly will run with. The available options and limitations of each are labeled below:&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Index&lt;br /&gt;
! Driver &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Software || A very primitive rendering pipeline on the CPU with no support for shaders, lighting, and does not render any vertices outside of the camera&#039;s field of view. Available as a last-available-option renderer.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Software2 || A performance-poor rendering pipeline on the CPU with no support for shaders or lighting. Use only if DirectX or OpennGL are not available.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Direct3D8|| Does not load at all - possibly because Irrlicht (the 3d engine firefly is based on) dropped support for this pipeline?&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Direct3D9 || Uses the DirectX standard pipeline for rendering on the GPU. Does not support the engine&#039;s lighting, but supports HLSL shaders and has good performance.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || OpenGL || Uses the OpenGL standard pipeline for rendering on the GPU. Shaders do not have correct vertex information (Needs verification) but supports engine lighting and has good performance.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Anti Alias ===&lt;br /&gt;
Controls how much anti-aliasing the engine uses globally. Antialiasing is a software technique for diminishing jagged edges that occur on objects not aligned with the pixels of a display - stairstep-like lines that should be smooth. These jagged edges occur because the monitor doesn&#039;t have a high enough resolution to represent a smooth line. Antialiasing reduces the prominence of these jagged edges by surrounding the stairsteps with intermediate shades of color. Although this reduces the jagged appearance of the lines, it also makes them blurry. You can decide whether the effect is off, x2, x4, x6 or x8.&lt;br /&gt;
&lt;br /&gt;
=== Background color ===&lt;br /&gt;
This RGB selection controls the color for empty space regions in the final rendered image of the 3D environment.&lt;br /&gt;
&lt;br /&gt;
=== Ambient Light Color ===&lt;br /&gt;
This RGB selection controls the global light source color. Set to full white to make everything in the scene fully lit. This is ignored in DirectX mode, where light sources are not functional.&lt;br /&gt;
&lt;br /&gt;
=== Render speed ===&lt;br /&gt;
This percentage controls (effectively) the balance between the fusion engine and the firefly engine. If Fusion is running at 60fps, setting this to 50 will make Firefly run at 30fps. Firefly can &amp;quot;eat&amp;quot; control input when used with certain other objects on screen during a frame update, so adjusting this to near-zero or setting to completely zero when off screen can help minimize or prevent this issue.&lt;br /&gt;
&lt;br /&gt;
=== Travel Distance ===&lt;br /&gt;
...to do.&lt;br /&gt;
&lt;br /&gt;
=== Fog color ===&lt;br /&gt;
Materials that have fog rendering enabled will fade out based on the object distance and the fog start/end values. This is the color they will fade out to.&lt;br /&gt;
&lt;br /&gt;
=== Fog start distance ===&lt;br /&gt;
this controls how many units of space before world fog starts to be rendered on supported materials.&lt;br /&gt;
&lt;br /&gt;
=== Fog end distance ===&lt;br /&gt;
This controls how many units of space before world fog is rendered at 100% opacity on supported materials.&lt;br /&gt;
&lt;br /&gt;
=== Cast Shadows toggle ===&lt;br /&gt;
...to do. Requires OpenGL and in-engine lighting nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shadow color ===&lt;br /&gt;
This RGB selection controls the color of the shadows that are rendered.&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
&lt;br /&gt;
=== Start Engine ===&lt;br /&gt;
Start the rendering engine with its current settings.&lt;br /&gt;
&lt;br /&gt;
=== Stop Engine ===&lt;br /&gt;
Stop the rendering engine so you can change settings.&lt;br /&gt;
&lt;br /&gt;
=== Set Engine Resolution ===&lt;br /&gt;
Sets the internal resolution of the rendering engine. &lt;br /&gt;
* This should be set to match the size of the object, or certain rendering functionality may behave incorrectly (example: drawing 3d lines)&lt;br /&gt;
* This action has no effect if the engine is running (verify)&lt;br /&gt;
&lt;br /&gt;
=== Engine Setup ===&lt;br /&gt;
These options control the rendering pipeline and cannot be used while the engine is running.&lt;br /&gt;
&lt;br /&gt;
==== Device Driver ====&lt;br /&gt;
Sets the rendering pipeline to be used by the firefly object. If using the &#039;set&#039; dialog option instead of a predefined selection, index starts at zero. See &amp;quot;Device Driver&amp;quot; properties above (todo: bookmark links to scroll page for user)&lt;br /&gt;
&lt;br /&gt;
==== Anti Alias ====&lt;br /&gt;
Sets the global anti-aliasing level to be used by the engine. If using the &#039;set&#039; dialog option instead of a predefined selection, index starts at zero.&lt;br /&gt;
&lt;br /&gt;
* Set Engine Background Color&lt;br /&gt;
* Set Engine Fog Color&lt;br /&gt;
* Set Fog Start Distance&lt;br /&gt;
* Set Fog End Distance&lt;br /&gt;
* Load Resource Package&lt;br /&gt;
* Collisions&lt;br /&gt;
** Set required travel distance&lt;br /&gt;
** Manually detect collisions&lt;br /&gt;
** Scene collisions&lt;br /&gt;
* On Draw&lt;br /&gt;
** Render to texture&lt;br /&gt;
** Draw 3D Line&lt;br /&gt;
** Draw 3D Triangle&lt;br /&gt;
** Draw 3D Box&lt;br /&gt;
** Draw Pixel&lt;br /&gt;
** Draw Texture&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
list - show conditions and define what triggers them&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
list - show expressions and what they define&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
details on functionality and limitations&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=97</id>
		<title>Firefly/ff engine</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=97"/>
		<updated>2025-03-27T00:06:32Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Device Driver */ Added action selection index to table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Firefly engine =&lt;br /&gt;
[[image:ff_engine_icon.png|left|Firefly engine]] The Firefly Engine object is the base of the entire Firefly system. It is the object that actually takes all of your various nodes and other Firefly objects and renders the 3d scene to the frame. You must have at least one in your project&#039;s frame in order for anything 3d to appear when you run it. The size and placement of the engine within your game&#039;s frame determines where in the frame the 3d scene is rendered.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
todo: &lt;br /&gt;
* show examples to the right or underneath each sub-section as necessary?&lt;br /&gt;
* Better define what each individual option does, and specify what &#039;index&#039; it is if set through an action&lt;br /&gt;
&lt;br /&gt;
=== Start engine at start ===&lt;br /&gt;
This is a toggle that controls whether the Firefly engine itself will initialize immediately when the frame starts. If you have to configure certain engine settings, or manipulate the engine such as resizing the engine frame, then this should be toggled off, and use an action to trigger the engine to start when you are ready.&lt;br /&gt;
&lt;br /&gt;
=== Device Driver ===&lt;br /&gt;
Allows you to select the rendering pipeline Firefly will run with. The available options and limitations of each are labeled below:&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Index&lt;br /&gt;
! Driver &lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 || Software || A very primitive rendering pipeline on the CPU with no support for shaders, lighting, and does not render any vertices outside of the camera&#039;s field of view. Available as a last-available-option renderer.&lt;br /&gt;
|-&lt;br /&gt;
| 1 || Software2 || A performance-poor rendering pipeline on the CPU with no support for shaders or lighting. Use only if DirectX or OpennGL are not available.&lt;br /&gt;
|-&lt;br /&gt;
| 2 || Direct3D8|| Does not load at all - possibly because Irrlicht (the 3d engine firefly is based on) dropped support for this pipeline?&lt;br /&gt;
|-&lt;br /&gt;
| 3 || Direct3D9 || Uses the DirectX standard pipeline for rendering on the GPU. Does not support the engine&#039;s lighting, but supports HLSL shaders and has good performance.&lt;br /&gt;
|-&lt;br /&gt;
| 4 || OpenGL || Uses the OpenGL standard pipeline for rendering on the GPU. Shaders do not have correct vertex information (Needs verification) but supports engine lighting and has good performance.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Anti Alias ===&lt;br /&gt;
Controls how much anti-aliasing the engine uses globally. Antialiasing is a software technique for diminishing jagged edges that occur on objects not aligned with the pixels of a display - stairstep-like lines that should be smooth. These jagged edges occur because the monitor doesn&#039;t have a high enough resolution to represent a smooth line. Antialiasing reduces the prominence of these jagged edges by surrounding the stairsteps with intermediate shades of color. Although this reduces the jagged appearance of the lines, it also makes them blurry. You can decide whether the effect is off, x2, x4, x6 or x8.&lt;br /&gt;
&lt;br /&gt;
=== Background color ===&lt;br /&gt;
This RGB selection controls the color for empty space regions in the final rendered image of the 3D environment.&lt;br /&gt;
&lt;br /&gt;
=== Ambient Light Color ===&lt;br /&gt;
This RGB selection controls the global light source color. Set to full white to make everything in the scene fully lit. This is ignored in DirectX mode, where light sources are not functional.&lt;br /&gt;
&lt;br /&gt;
=== Render speed ===&lt;br /&gt;
This percentage controls (effectively) the balance between the fusion engine and the firefly engine. If Fusion is running at 60fps, setting this to 50 will make Firefly run at 30fps. Firefly can &amp;quot;eat&amp;quot; control input when used with certain other objects on screen during a frame update, so adjusting this to near-zero or setting to completely zero when off screen can help minimize or prevent this issue.&lt;br /&gt;
&lt;br /&gt;
=== Travel Distance ===&lt;br /&gt;
...to do.&lt;br /&gt;
&lt;br /&gt;
=== Fog color ===&lt;br /&gt;
Materials that have fog rendering enabled will fade out based on the object distance and the fog start/end values. This is the color they will fade out to.&lt;br /&gt;
&lt;br /&gt;
=== Fog start distance ===&lt;br /&gt;
this controls how many units of space before world fog starts to be rendered on supported materials.&lt;br /&gt;
&lt;br /&gt;
=== Fog end distance ===&lt;br /&gt;
This controls how many units of space before world fog is rendered at 100% opacity on supported materials.&lt;br /&gt;
&lt;br /&gt;
=== Cast Shadows toggle ===&lt;br /&gt;
...to do. Requires OpenGL and in-engine lighting nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shadow color ===&lt;br /&gt;
This RGB selection controls the color of the shadows that are rendered.&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
* Start Engine&lt;br /&gt;
* Stop Engine&lt;br /&gt;
* Set Engine Resolution&lt;br /&gt;
* Engine Setup&lt;br /&gt;
** Device Driver&lt;br /&gt;
** Anti Aliasing&lt;br /&gt;
* Set Engine Background Color&lt;br /&gt;
* Set Engine Fog Color&lt;br /&gt;
* Set Fog Start Distance&lt;br /&gt;
* Set Fog End Distance&lt;br /&gt;
* Load Resource Package&lt;br /&gt;
* Collisions&lt;br /&gt;
** Set required travel distance&lt;br /&gt;
** Manually detect collisions&lt;br /&gt;
** Scene collisions&lt;br /&gt;
* On Draw&lt;br /&gt;
** Render to texture&lt;br /&gt;
** Draw 3D Line&lt;br /&gt;
** Draw 3D Triangle&lt;br /&gt;
** Draw 3D Box&lt;br /&gt;
** Draw Pixel&lt;br /&gt;
** Draw Texture&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
list - show conditions and define what triggers them&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
list - show expressions and what they define&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
details on functionality and limitations&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=96</id>
		<title>Firefly/ff engine</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=96"/>
		<updated>2025-03-27T00:05:13Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Properties */ Reformatted page to use subsections instead of lists (can now be navigated), and added additional information present in the outdated clickteam online documentation.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Firefly engine =&lt;br /&gt;
[[image:ff_engine_icon.png|left|Firefly engine]] The Firefly Engine object is the base of the entire Firefly system. It is the object that actually takes all of your various nodes and other Firefly objects and renders the 3d scene to the frame. You must have at least one in your project&#039;s frame in order for anything 3d to appear when you run it. The size and placement of the engine within your game&#039;s frame determines where in the frame the 3d scene is rendered.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
todo: &lt;br /&gt;
* show examples to the right or underneath each sub-section as necessary?&lt;br /&gt;
* Better define what each individual option does, and specify what &#039;index&#039; it is if set through an action&lt;br /&gt;
&lt;br /&gt;
=== Start engine at start ===&lt;br /&gt;
This is a toggle that controls whether the Firefly engine itself will initialize immediately when the frame starts. If you have to configure certain engine settings, or manipulate the engine such as resizing the engine frame, then this should be toggled off, and use an action to trigger the engine to start when you are ready.&lt;br /&gt;
&lt;br /&gt;
=== Device Driver ===&lt;br /&gt;
Allows you to select the rendering pipeline Firefly will run with. The available options and limitations of each are labeled below:&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Driver || Description&lt;br /&gt;
|-&lt;br /&gt;
| Software || A very primitive rendering pipeline on the CPU with no support for shaders, lighting, and does not render any vertices outside of the camera&#039;s field of view. Available as a last-available-option renderer.&lt;br /&gt;
|-&lt;br /&gt;
| Software2 || A performance-poor rendering pipeline on the CPU with no support for shaders or lighting. Use only if DirectX or OpennGL are not available.&lt;br /&gt;
|-&lt;br /&gt;
| Direct3D8|| Does not load at all - possibly because Irrlicht (the 3d engine firefly is based on) dropped support for this pipeline?&lt;br /&gt;
|-&lt;br /&gt;
| Direct3D9 || Uses the DirectX standard pipeline for rendering on the GPU. Does not support the engine&#039;s lighting, but supports HLSL shaders and has good performance.&lt;br /&gt;
|-&lt;br /&gt;
| OpenGL || Uses the OpenGL standard pipeline for rendering on the GPU. Shaders do not have correct vertex information (Needs verification) but supports engine lighting and has good performance.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Anti Alias ===&lt;br /&gt;
Controls how much anti-aliasing the engine uses globally. Antialiasing is a software technique for diminishing jagged edges that occur on objects not aligned with the pixels of a display - stairstep-like lines that should be smooth. These jagged edges occur because the monitor doesn&#039;t have a high enough resolution to represent a smooth line. Antialiasing reduces the prominence of these jagged edges by surrounding the stairsteps with intermediate shades of color. Although this reduces the jagged appearance of the lines, it also makes them blurry. You can decide whether the effect is off, x2, x4, x6 or x8.&lt;br /&gt;
&lt;br /&gt;
=== Background color ===&lt;br /&gt;
This RGB selection controls the color for empty space regions in the final rendered image of the 3D environment.&lt;br /&gt;
&lt;br /&gt;
=== Ambient Light Color ===&lt;br /&gt;
This RGB selection controls the global light source color. Set to full white to make everything in the scene fully lit. This is ignored in DirectX mode, where light sources are not functional.&lt;br /&gt;
&lt;br /&gt;
=== Render speed ===&lt;br /&gt;
This percentage controls (effectively) the balance between the fusion engine and the firefly engine. If Fusion is running at 60fps, setting this to 50 will make Firefly run at 30fps. Firefly can &amp;quot;eat&amp;quot; control input when used with certain other objects on screen during a frame update, so adjusting this to near-zero or setting to completely zero when off screen can help minimize or prevent this issue.&lt;br /&gt;
&lt;br /&gt;
=== Travel Distance ===&lt;br /&gt;
...to do.&lt;br /&gt;
&lt;br /&gt;
=== Fog color ===&lt;br /&gt;
Materials that have fog rendering enabled will fade out based on the object distance and the fog start/end values. This is the color they will fade out to.&lt;br /&gt;
&lt;br /&gt;
=== Fog start distance ===&lt;br /&gt;
this controls how many units of space before world fog starts to be rendered on supported materials.&lt;br /&gt;
&lt;br /&gt;
=== Fog end distance ===&lt;br /&gt;
This controls how many units of space before world fog is rendered at 100% opacity on supported materials.&lt;br /&gt;
&lt;br /&gt;
=== Cast Shadows toggle ===&lt;br /&gt;
...to do. Requires OpenGL and in-engine lighting nodes.&lt;br /&gt;
&lt;br /&gt;
=== Shadow color ===&lt;br /&gt;
This RGB selection controls the color of the shadows that are rendered.&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
* Start Engine&lt;br /&gt;
* Stop Engine&lt;br /&gt;
* Set Engine Resolution&lt;br /&gt;
* Engine Setup&lt;br /&gt;
** Device Driver&lt;br /&gt;
** Anti Aliasing&lt;br /&gt;
* Set Engine Background Color&lt;br /&gt;
* Set Engine Fog Color&lt;br /&gt;
* Set Fog Start Distance&lt;br /&gt;
* Set Fog End Distance&lt;br /&gt;
* Load Resource Package&lt;br /&gt;
* Collisions&lt;br /&gt;
** Set required travel distance&lt;br /&gt;
** Manually detect collisions&lt;br /&gt;
** Scene collisions&lt;br /&gt;
* On Draw&lt;br /&gt;
** Render to texture&lt;br /&gt;
** Draw 3D Line&lt;br /&gt;
** Draw 3D Triangle&lt;br /&gt;
** Draw 3D Box&lt;br /&gt;
** Draw Pixel&lt;br /&gt;
** Draw Texture&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
list - show conditions and define what triggers them&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
list - show expressions and what they define&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
details on functionality and limitations&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=95</id>
		<title>Firefly/ff engine</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=95"/>
		<updated>2025-03-26T22:37:54Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Actions */ Just grabbed a bunch of actions from the clickteam online &amp;#039;help&amp;#039; document as placeholders&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Firefly engine =&lt;br /&gt;
[[image:ff_engine_icon.png|left|Firefly engine]] The Firefly Engine object is the base of the entire Firefly system. It is the object that actually takes all of your various nodes and other Firefly objects and renders the 3d scene to the frame. You must have at least one in your project&#039;s frame in order for anything 3d to appear when you run it. The size and placement of the engine within your game&#039;s frame determines where in the frame the 3d scene is rendered.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
* &amp;quot;Start engine at start&amp;quot;: This is a toggle that controls whether the Firefly engine itself will initialize immediately when the frame starts. If you have to configure certain engine settings, or manipulate the engine such as resizing the engine frame, then this should be toggled off, and use an action to trigger the engine to start when you are ready.&lt;br /&gt;
* Device Driver: Allows you to select the rendering pipeline FIrefly will run with. The available options and limitations of each are labeled below:&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Driver || Description&lt;br /&gt;
|-&lt;br /&gt;
| Software || A very primitive rendering pipeline with no support for shaders, lighting, and does not render any vertices outside of the camera&#039;s field of view. Available as a last-available-option renderer.&lt;br /&gt;
|-&lt;br /&gt;
| Software2 || A performance-poor rendering pipeline with no support for shaders or lighting. Use only if DirectX or OpennGL are not available.&lt;br /&gt;
|-&lt;br /&gt;
| Direct3D8|| Does not load at all - possibly because Irrlicht (the 3d engine firefly is based on) dropped support for this pipeline?&lt;br /&gt;
|-&lt;br /&gt;
| Direct3D9 || Uses the DirectX standard pipeline for rendering. Does not support the engine&#039;s lighting, but supports HLSL shaders and has good performance.&lt;br /&gt;
|-&lt;br /&gt;
| OpenGL || Uses the OpenGL standard pipeline for rendering. Shaders do not have correct vertex information (Needs verification) but supports engine lighting and has good performance.&lt;br /&gt;
|}&lt;br /&gt;
* Anti Alias: Controls how much anti-aliasing the engine uses globally.&lt;br /&gt;
* Background color: This RGB selection controls the color for regions in the rendered 3d environment that have no objects.&lt;br /&gt;
* Ambient Light Color: This RGB selection controls the global light source color. Set to full white to make everything in the scene fully lit.&lt;br /&gt;
* Render speed: This percentage controls (effectively) the balance between the fusion engine and the firefly engine. If Fusion is running at 60fps, setting this to 50 will make Firefly run at 30fps. Firefly can &amp;quot;eat&amp;quot; control input when used with certain other objects on screen during a frame update, so adjusting this to near-zero or setting to completely zero when off screen can help minimize or prevent this issue.&lt;br /&gt;
* Travel Distance: ...to do.&lt;br /&gt;
* Fog color: ...to do.&lt;br /&gt;
* Fog start distance: this controls how many units of space before world fog starts to be rendered&lt;br /&gt;
* Fog end distance: This controls how many units of space before world fog is rendered at 100% opacity.&lt;br /&gt;
* Cast Shadows toggle: ...to do. Requires OpenGL and in-engine lighting.&lt;br /&gt;
* Shadow color: This RGB selection controls the color of the shadows that are rendered.&lt;br /&gt;
&lt;br /&gt;
To do: show examples to the right side of this area? Maybe place these in a table to achieve that effect?&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
* Start Engine&lt;br /&gt;
* Stop Engine&lt;br /&gt;
* Set Engine Resolution&lt;br /&gt;
* Engine Setup&lt;br /&gt;
** Device Driver&lt;br /&gt;
** Anti Aliasing&lt;br /&gt;
* Set Engine Background Color&lt;br /&gt;
* Set Engine Fog Color&lt;br /&gt;
* Set Fog Start Distance&lt;br /&gt;
* Set Fog End Distance&lt;br /&gt;
* Load Resource Package&lt;br /&gt;
* Collisions&lt;br /&gt;
** Set required travel distance&lt;br /&gt;
** Manually detect collisions&lt;br /&gt;
** Scene collisions&lt;br /&gt;
* On Draw&lt;br /&gt;
** Render to texture&lt;br /&gt;
** Draw 3D Line&lt;br /&gt;
** Draw 3D Triangle&lt;br /&gt;
** Draw 3D Box&lt;br /&gt;
** Draw Pixel&lt;br /&gt;
** Draw Texture&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
list - show conditions and define what triggers them&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
list - show expressions and what they define&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
details on functionality and limitations&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=91</id>
		<title>Firefly/ff engine</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=91"/>
		<updated>2025-03-24T01:35:43Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Properties */ Added the engine properties. might reformat this later.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Firefly engine =&lt;br /&gt;
[[image:ff_engine_icon.png|left|Firefly engine]] The Firefly Engine object is the base of the entire Firefly system. It is the object that actually takes all of your various nodes and other Firefly objects and renders the 3d scene to the frame. You must have at least one in your project&#039;s frame in order for anything 3d to appear when you run it. The size and placement of the engine within your game&#039;s frame determines where in the frame the 3d scene is rendered.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
* &amp;quot;Start engine at start&amp;quot;: This is a toggle that controls whether the Firefly engine itself will initialize immediately when the frame starts. If you have to configure certain engine settings, or manipulate the engine such as resizing the engine frame, then this should be toggled off, and use an action to trigger the engine to start when you are ready.&lt;br /&gt;
* Device Driver: Allows you to select the rendering pipeline FIrefly will run with. The available options and limitations of each are labeled below:&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Driver || Description&lt;br /&gt;
|-&lt;br /&gt;
| Software || A very primitive rendering pipeline with no support for shaders, lighting, and does not render any vertices outside of the camera&#039;s field of view. Available as a last-available-option renderer.&lt;br /&gt;
|-&lt;br /&gt;
| Software2 || A performance-poor rendering pipeline with no support for shaders or lighting. Use only if DirectX or OpennGL are not available.&lt;br /&gt;
|-&lt;br /&gt;
| Direct3D8|| Does not load at all - possibly because Irrlicht (the 3d engine firefly is based on) dropped support for this pipeline?&lt;br /&gt;
|-&lt;br /&gt;
| Direct3D9 || Uses the DirectX standard pipeline for rendering. Does not support the engine&#039;s lighting, but supports HLSL shaders and has good performance.&lt;br /&gt;
|-&lt;br /&gt;
| OpenGL || Uses the OpenGL standard pipeline for rendering. Shaders do not have correct vertex information (Needs verification) but supports engine lighting and has good performance.&lt;br /&gt;
|}&lt;br /&gt;
* Anti Alias: Controls how much anti-aliasing the engine uses globally.&lt;br /&gt;
* Background color: This RGB selection controls the color for regions in the rendered 3d environment that have no objects.&lt;br /&gt;
* Ambient Light Color: This RGB selection controls the global light source color. Set to full white to make everything in the scene fully lit.&lt;br /&gt;
* Render speed: This percentage controls (effectively) the balance between the fusion engine and the firefly engine. If Fusion is running at 60fps, setting this to 50 will make Firefly run at 30fps. Firefly can &amp;quot;eat&amp;quot; control input when used with certain other objects on screen during a frame update, so adjusting this to near-zero or setting to completely zero when off screen can help minimize or prevent this issue.&lt;br /&gt;
* Travel Distance: ...to do.&lt;br /&gt;
* Fog color: ...to do.&lt;br /&gt;
* Fog start distance: this controls how many units of space before world fog starts to be rendered&lt;br /&gt;
* Fog end distance: This controls how many units of space before world fog is rendered at 100% opacity.&lt;br /&gt;
* Cast Shadows toggle: ...to do. Requires OpenGL and in-engine lighting.&lt;br /&gt;
* Shadow color: This RGB selection controls the color of the shadows that are rendered.&lt;br /&gt;
&lt;br /&gt;
To do: show examples to the right side of this area? Maybe place these in a table to achieve that effect?&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
list - show actions and define their effects, with descriptions for arguments when needed&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
list - show conditions and define what triggers them&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
list - show expressions and what they define&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
details on functionality and limitations&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=90</id>
		<title>Firefly/ff engine</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=90"/>
		<updated>2025-03-23T19:59:37Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Firefly engine */ removed &amp;#039;thumb&amp;#039; notation to fix size&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Firefly engine =&lt;br /&gt;
[[image:ff_engine_icon.png|left|Firefly engine]] The Firefly Engine object is the base of the entire Firefly system. It is the object that actually takes all of your various nodes and other Firefly objects and renders the 3d scene to the frame. You must have at least one in your project&#039;s frame in order for anything 3d to appear when you run it. The size and placement of the engine within your game&#039;s frame determines where in the frame the 3d scene is rendered.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
list - show properties and explain their behaviors&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
list - show actions and define their effects, with descriptions for arguments when needed&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
list - show conditions and define what triggers them&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
list - show expressions and what they define&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
details on functionality and limitations&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=89</id>
		<title>Firefly/ff engine</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=89"/>
		<updated>2025-03-23T19:58:47Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Firefly engine */ changed icon file name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Firefly engine =&lt;br /&gt;
[[image:ff_engine_icon.png|thumb|left|Firefly engine]] The Firefly Engine object is the base of the entire Firefly system. It is the object that actually takes all of your various nodes and other Firefly objects and renders the 3d scene to the frame. You must have at least one in your project&#039;s frame in order for anything 3d to appear when you run it. The size and placement of the engine within your game&#039;s frame determines where in the frame the 3d scene is rendered.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
list - show properties and explain their behaviors&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
list - show actions and define their effects, with descriptions for arguments when needed&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
list - show conditions and define what triggers them&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
list - show expressions and what they define&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
details on functionality and limitations&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=File:Ff_engine_icon.png&amp;diff=88</id>
		<title>File:Ff engine icon.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=File:Ff_engine_icon.png&amp;diff=88"/>
		<updated>2025-03-23T19:58:14Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Base icon for firefly engine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Base icon for firefly engine&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=87</id>
		<title>Firefly/ff engine</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_engine&amp;diff=87"/>
		<updated>2025-03-23T19:46:39Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Placeholder page for base firefly engine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Firefly engine =&lt;br /&gt;
[[image:ff_engine.jpg|thumb|left|Firefly engine]] The Firefly Engine object is the base of the entire Firefly system. It is the object that actually takes all of your various nodes and other Firefly objects and renders the 3d scene to the frame. You must have at least one in your project&#039;s frame in order for anything 3d to appear when you run it. The size and placement of the engine within your game&#039;s frame determines where in the frame the 3d scene is rendered.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Properties ==&lt;br /&gt;
list - show properties and explain their behaviors&lt;br /&gt;
&lt;br /&gt;
== Actions ==&lt;br /&gt;
list - show actions and define their effects, with descriptions for arguments when needed&lt;br /&gt;
&lt;br /&gt;
== Conditions ==&lt;br /&gt;
list - show conditions and define what triggers them&lt;br /&gt;
&lt;br /&gt;
== Expressions ==&lt;br /&gt;
list - show expressions and what they define&lt;br /&gt;
&lt;br /&gt;
== Additional notes ==&lt;br /&gt;
details on functionality and limitations&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly/ff_ray&amp;diff=86</id>
		<title>Firefly/ff ray</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly/ff_ray&amp;diff=86"/>
		<updated>2025-03-23T19:29:35Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Added placeholder page for the raycasting node&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The node described on this page is not available in the publicly released version of Firefly, and has only been teased on the clickteam community discord for an upcoming release of Firefly. This page is only a placeholder until the object&#039;s details are publicly available.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
A/C/Es of this object are not known at this time, although it has been mentioned that the raycasting features of the camera node would be moved over to this object for simplicity.&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly&amp;diff=85</id>
		<title>Firefly</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly&amp;diff=85"/>
		<updated>2025-03-23T19:25:27Z</updated>

		<summary type="html">&lt;p&gt;Luxen: filled out the object documentation list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefly is a set of extensions for Clickteam&#039;s Fusion game engine that lets you design 3D games and apps, based on the [https://en.wikipedia.org/wiki/Irrlicht_Engine Irrlicht Engine].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: left; font-size:94%; width:100%;&amp;quot;&amp;gt; &amp;lt;!-- Contains everything --&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between; width: 100%;&amp;quot;&amp;gt; &amp;lt;!-- First row --&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Left side first box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Using Firefly&amp;lt;/div&amp;gt;&lt;br /&gt;
			These short tutorials cover the minimal basics of using individual objects. &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_start|Start here]] - Learn the basics on how to add firefly to an empty project &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_modelload|Loading a model]] - Get a model into your 3d world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_movement|Moving objects]] - Make objects move within your world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_collisions|Object collision basics]] - Making objects collide together &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_raycasting|What is raycasting]] - Make objects see each other &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_animations|Animating an object]] - Make an object do things &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_oncall|Creating and managing objects]] - Handling object creation at runtime &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Right side first box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Documentation&amp;lt;/div&amp;gt;&lt;br /&gt;
			These pages fully document every object and their A/C/Es. &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_engine|Firefly engine]] - The core system for Firefly &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_camera|Firefly camera]] - The camera serves as a window into the 3d world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_material|Firefly material cache]] - The material cache stores the textures used by Firefly &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_static|Firefly static node]] - The static object is used to load most 3d meshes that construct your world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_2dtext|Firefly 2D Text]] - Creates a string object on top of your engine&#039;s viewport &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_image|Firefly image]] - Creates an image to display on top of your engine&#039;s viewport &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_movement|Firefly Movement object]] - This helps with handling object movement of other firefly nodes &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_dummy|Firefly Dummy node]] - This is an empty, representative-less node with many uses &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_light|Firefly Light]] - Places a light source within your scene &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_particle|Firefly Particle System]] - Helps with creating and managing particle effects &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_text|Firefly Text node]] - Inserts a string inside of the 3d world itself &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_skybox|Firefly Skybox]] - Creates a skybox/sphere within your 3d world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_water|Firefly Water object]] - Assists with creating a water surface &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_terrain|Firefly Terrain node]] - Creates and manages terrain in your worldspace with a working LOD algorithm &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_billboard|Firefly Billboard node]] - Adds a 2d sprite within your 3d environment &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_primitive|Firefly Primitive node]] - Adds an object from a preset list of basic elements to your scene &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_static|Firefly static mesh node]] - Adds a 3d mesh into your scene &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_animated|Firefly animated mesh node]] - Adds a 3d mesh with animation controls to your scene &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_ray|Firefly raycasting node]] - A node to help with raycasting (in future versions) &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of first row --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between; width: 100%;&amp;quot;&amp;gt; &amp;lt;!-- Second row --&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Left side second box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Tutorials&amp;lt;/div&amp;gt;&lt;br /&gt;
			These are full tutorials you can follow to create a game. &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Beginner) [[firefly/tutorial_chocobreak|Chocobreak]] - The classic chocobreak tutorial in 3D &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Beginner) [[firefly/tutorial_dueltanks|Dueling tanks]] - A simple tutorial for a basic tank fighting game &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Intermediate) [[firefly/tutorial_fps|First Person Shooter tutorial]] - How to create a first-person shooter &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Intermediate) [[firefly/tutorial_tprog|Third person exploration tutorial]] - How to create a third-person adventure &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Right side second box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Community Extras&amp;lt;/div&amp;gt;&lt;br /&gt;
			[[firefly/bugtracker|Firefly Bug Tracker]] - Tracks all known bugs with the public version of Firefly (and if they&#039;ve been fixed in upcoming releases) &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/useful_tutorials|Additional tutorials]] - Tutorials not found on this site, including some for general modeling and software use. &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of second row --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- Done --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly&amp;diff=84</id>
		<title>Firefly</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly&amp;diff=84"/>
		<updated>2025-03-23T19:07:10Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Adding an on-call page to the firefly basics section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefly is a set of extensions for Clickteam&#039;s Fusion game engine that lets you design 3D games and apps, based on the [https://en.wikipedia.org/wiki/Irrlicht_Engine Irrlicht Engine].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: left; font-size:94%; width:100%;&amp;quot;&amp;gt; &amp;lt;!-- Contains everything --&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between; width: 100%;&amp;quot;&amp;gt; &amp;lt;!-- First row --&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Left side first box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Using Firefly&amp;lt;/div&amp;gt;&lt;br /&gt;
			These short tutorials cover the minimal basics of using individual objects. &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_start|Start here]] - Learn the basics on how to add firefly to an empty project &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_modelload|Loading a model]] - Get a model into your 3d world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_movement|Moving objects]] - Make objects move within your world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_collisions|Object collision basics]] - Making objects collide together &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_raycasting|What is raycasting]] - Make objects see each other &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_animations|Animating an object]] - Make an object do things &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_oncall|Creating and managing objects]] - Handling object creation at runtime &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Right side first box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Documentation&amp;lt;/div&amp;gt;&lt;br /&gt;
			These pages fully document every object and their A/C/Es. &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_engine|Firefly engine]] - The core system for Firefly&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_camera|Firefly camera]] - The camera serves as a window into the 3d world&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_material|Firefly material cache]] - The material cache stores the textures used by Firefly&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_static|Firefly static object]] - The static object is used to load most 3d meshes that construct your world&amp;lt;br /&amp;gt;&lt;br /&gt;
			...More to come&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of first row --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between; width: 100%;&amp;quot;&amp;gt; &amp;lt;!-- Second row --&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Left side second box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Tutorials&amp;lt;/div&amp;gt;&lt;br /&gt;
			These are full tutorials you can follow to create a game. &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Beginner) [[firefly/tutorial_chocobreak|Chocobreak]] - The classic chocobreak tutorial in 3D &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Beginner) [[firefly/tutorial_dueltanks|Dueling tanks]] - A simple tutorial for a basic tank fighting game &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Intermediate) [[firefly/tutorial_fps|First Person Shooter tutorial]] - How to create a first-person shooter &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Intermediate) [[firefly/tutorial_tprog|Third person exploration tutorial]] - How to create a third-person adventure &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Right side second box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Community Extras&amp;lt;/div&amp;gt;&lt;br /&gt;
			[[firefly/bugtracker|Firefly Bug Tracker]] - Tracks all known bugs with the public version of Firefly (and if they&#039;ve been fixed in upcoming releases) &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/useful_tutorials|Additional tutorials]] - Tutorials not found on this site, including some for general modeling and software use. &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of second row --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- Done --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly&amp;diff=83</id>
		<title>Firefly</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly&amp;diff=83"/>
		<updated>2025-03-23T19:05:50Z</updated>

		<summary type="html">&lt;p&gt;Luxen: removed brackets from irrlicht wiki link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefly is a set of extensions for Clickteam&#039;s Fusion game engine that lets you design 3D games and apps, based on the [https://en.wikipedia.org/wiki/Irrlicht_Engine Irrlicht Engine].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: left; font-size:94%; width:100%;&amp;quot;&amp;gt; &amp;lt;!-- Contains everything --&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between; width: 100%;&amp;quot;&amp;gt; &amp;lt;!-- First row --&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Left side first box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Using Firefly&amp;lt;/div&amp;gt;&lt;br /&gt;
			These short tutorials cover the minimal basics of using individual objects. &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_start|Start here]] - Learn the basics on how to add firefly to an empty project &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_modelload|Loading a model]] - Get a model into your 3d world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_movement|Moving objects]] - Make objects move within your world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_collisions|Object collision basics]] - Making objects collide together &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_raycasting|What is raycasting]] - Make objects see each other &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_animations|Animating an object]] - Make an object do things &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Right side first box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Documentation&amp;lt;/div&amp;gt;&lt;br /&gt;
			These pages fully document every object and their A/C/Es. &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_engine|Firefly engine]] - The core system for Firefly&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_camera|Firefly camera]] - The camera serves as a window into the 3d world&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_material|Firefly material cache]] - The material cache stores the textures used by Firefly&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_static|Firefly static object]] - The static object is used to load most 3d meshes that construct your world&amp;lt;br /&amp;gt;&lt;br /&gt;
			...More to come&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of first row --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between; width: 100%;&amp;quot;&amp;gt; &amp;lt;!-- Second row --&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Left side second box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Tutorials&amp;lt;/div&amp;gt;&lt;br /&gt;
			These are full tutorials you can follow to create a game. &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Beginner) [[firefly/tutorial_chocobreak|Chocobreak]] - The classic chocobreak tutorial in 3D &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Beginner) [[firefly/tutorial_dueltanks|Dueling tanks]] - A simple tutorial for a basic tank fighting game &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Intermediate) [[firefly/tutorial_fps|First Person Shooter tutorial]] - How to create a first-person shooter &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Intermediate) [[firefly/tutorial_tprog|Third person exploration tutorial]] - How to create a third-person adventure &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Right side second box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Community Extras&amp;lt;/div&amp;gt;&lt;br /&gt;
			[[firefly/bugtracker|Firefly Bug Tracker]] - Tracks all known bugs with the public version of Firefly (and if they&#039;ve been fixed in upcoming releases) &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/useful_tutorials|Additional tutorials]] - Tutorials not found on this site, including some for general modeling and software use. &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of second row --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- Done --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Firefly&amp;diff=82</id>
		<title>Firefly</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Firefly&amp;diff=82"/>
		<updated>2025-03-23T18:28:48Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Created firefly front page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Firefly is a set of extensions for Clickteam&#039;s Fusion game engine that lets you design 3D games and apps, based on the [[https://en.wikipedia.org/wiki/Irrlicht_Engine Irrlicht Engine]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align: left; font-size:94%; width:100%;&amp;quot;&amp;gt; &amp;lt;!-- Contains everything --&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between; width: 100%;&amp;quot;&amp;gt; &amp;lt;!-- First row --&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Left side first box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Using Firefly&amp;lt;/div&amp;gt;&lt;br /&gt;
			These short tutorials cover the minimal basics of using individual objects. &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_start|Start here]] - Learn the basics on how to add firefly to an empty project &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_modelload|Loading a model]] - Get a model into your 3d world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_movement|Moving objects]] - Make objects move within your world &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_collisions|Object collision basics]] - Making objects collide together &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_raycasting|What is raycasting]] - Make objects see each other &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/basics_animations|Animating an object]] - Make an object do things &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Right side first box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Documentation&amp;lt;/div&amp;gt;&lt;br /&gt;
			These pages fully document every object and their A/C/Es. &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_engine|Firefly engine]] - The core system for Firefly&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_camera|Firefly camera]] - The camera serves as a window into the 3d world&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_material|Firefly material cache]] - The material cache stores the textures used by Firefly&amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/ff_static|Firefly static object]] - The static object is used to load most 3d meshes that construct your world&amp;lt;br /&amp;gt;&lt;br /&gt;
			...More to come&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of first row --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;display: flex; justify-content: space-between; width: 100%;&amp;quot;&amp;gt; &amp;lt;!-- Second row --&amp;gt;&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Left side second box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Tutorials&amp;lt;/div&amp;gt;&lt;br /&gt;
			These are full tutorials you can follow to create a game. &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Beginner) [[firefly/tutorial_chocobreak|Chocobreak]] - The classic chocobreak tutorial in 3D &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Beginner) [[firefly/tutorial_dueltanks|Dueling tanks]] - A simple tutorial for a basic tank fighting game &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Intermediate) [[firefly/tutorial_fps|First Person Shooter tutorial]] - How to create a first-person shooter &amp;lt;br /&amp;gt;&lt;br /&gt;
			(Intermediate) [[firefly/tutorial_tprog|Third person exploration tutorial]] - How to create a third-person adventure &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;div style=&amp;quot;width: 49%;&amp;quot;&amp;gt; &amp;lt;!-- Right side second box --&amp;gt;&lt;br /&gt;
		&amp;lt;div style=&amp;quot;border: solid #aaa 1px; margin-bottom:1em; background: #EDFEFE; padding: 4px; spacing: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;div style=&amp;quot;font-size:115%;border-bottom:1px dotted gray;&amp;quot;&amp;gt;Community Extras&amp;lt;/div&amp;gt;&lt;br /&gt;
			[[firefly/bugtracker|Firefly Bug Tracker]] - Tracks all known bugs with the public version of Firefly (and if they&#039;ve been fixed in upcoming releases) &amp;lt;br /&amp;gt;&lt;br /&gt;
			[[firefly/useful_tutorials|Additional tutorials]] - Tutorials not found on this site, including some for general modeling and software use. &amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- End of second row --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt; &amp;lt;!-- Done --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/iup_prepend&amp;diff=81</id>
		<title>Vendetta/helium/api/iup prepend</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/iup_prepend&amp;diff=81"/>
		<updated>2025-03-15T17:14:26Z</updated>

		<summary type="html">&lt;p&gt;Luxen: created helium&amp;#039;s iup_prepend page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Intended to behave like iup.Append(), but the child is put before instead of after other children.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
helium.util.iup_prepend(root_ihandle, child_ihandle) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
root_ihandle: type *iup_object: dialog or other iup element item to add the child into.&lt;br /&gt;
child_ihandle: type *iup_object: iup element item to be inserted at top of the root object&#039;s stack.&lt;br /&gt;
&lt;br /&gt;
=== Notes === &lt;br /&gt;
In order to insert elements, this function iterates and detaches all existing items before adding the new element, and then re-attaches all the other elements in order. As such, extremely large iup structures may be expensive to insert items into; if inserting elements into a long list of items, consider using the asynchronous version of this function to retain client functionality.&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/map_dialog&amp;diff=80</id>
		<title>Vendetta/helium/api/map dialog</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api/map_dialog&amp;diff=80"/>
		<updated>2025-03-15T17:03:22Z</updated>

		<summary type="html">&lt;p&gt;Luxen: created helium&amp;#039;s map_dialog page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Similar to iup&#039;s :map(), but recursively activates all map_cb() functions in every child iup object. Many helium objects require this to render correctly.&lt;br /&gt;
&lt;br /&gt;
=== Definition ===&lt;br /&gt;
helium.util.map_dialog(ihandle) -&amp;gt; nil&lt;br /&gt;
&lt;br /&gt;
=== Arguments ===&lt;br /&gt;
ihandle: type *iup_object: dialog or other iup element item to be mapped. All children in the entire iup tree will be iterated over and all map_cb found will be executed.&lt;br /&gt;
&lt;br /&gt;
=== Notes === &lt;br /&gt;
The reason most helium objects require this variant of iup.map() is due to the resizable nature of many of the elements. The code to manage the appropriate size of these elements is triggered within map_cb, which is only called on the root dialog when using standard iup.map().&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=79</id>
		<title>Vendetta/neoloader</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=79"/>
		<updated>2025-03-15T16:21:04Z</updated>

		<summary type="html">&lt;p&gt;Luxen: base links for included utilities&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Vendetta-Neobanner.jpg]]&lt;br /&gt;
==  ==&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Neoloader Pre-execution Library Management Engine (NPLME) is a toolkit for loading and managing mods in Vendetta Online and improving functional usage between them.&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== For users ==&lt;br /&gt;
Neoloader is an advanced mod loader for Vendetta Online that sits on top of the existing mod loader. The goal of the Neoloader is to allow in-game management of Vendetta Online&#039;s plugins as much as the game engine can allow, and to facilitate a standard through which plugins can communicate with each other.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Features:&#039;&#039;&#039;&lt;br /&gt;
* Load plugins in order of dependencies and registration, instead of alphabetically&lt;br /&gt;
* Minimize risk of game crashes during the loading stage by safety-netting the loading process&lt;br /&gt;
* Provide management of plugins in-game&lt;br /&gt;
* Easy installation and removal of the system, and a guided recovery system in case of failure&lt;br /&gt;
* An extensive API to promote mod intercommunication and extensibility&lt;br /&gt;
&lt;br /&gt;
Neoloader can be downloaded from the following locations:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Location&lt;br /&gt;
! Version&lt;br /&gt;
! Notes&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://www.nexusmods.com/vendettaonline/mods/3 NexusMods]&#039;&#039;&#039;&lt;br /&gt;
| 6.1.1 (LME 3.11.0)&lt;br /&gt;
| This is the preferred location for stable versions of Neoloader&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://voupr.spenced.com/plugin.php?name=neoloader VOUPR]&#039;&#039;&#039;&lt;br /&gt;
| 6.1.1 (LME 3.11.0)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;[https://github.com/LuxenDM/Neoloader Github]&#039;&#039;&#039;&lt;br /&gt;
| 6.1.1 (LME 3.11.0)&lt;br /&gt;
| Development versions may be available here&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Neoloader comes bundled with a few utilities used to interact with the software and manage its settings. These include&lt;br /&gt;
* The [[vendetta/neoloader/neomgr|lightweight management interface, neomgr]]&lt;br /&gt;
* The [[vendetta/neoloader/neonotif|notification control system, neonotif]]&lt;br /&gt;
* A [[vendetta/neoloader/recovery|recovery console]] for plugin errors&lt;br /&gt;
&lt;br /&gt;
To manage non-LME mods, use a tool such as [https://www.nexusmods.com/vendettaonline/mods/2 Neopatcher] to convert mods to a hybrid model capable of being seen and managed by Neoloader.&lt;br /&gt;
&lt;br /&gt;
== For modders ==&lt;br /&gt;
* [[vendetta/overview|Developer&#039;s overview]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/design|Creating or converting a plugin for the LME]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/registration|INI registration details]] &amp;lt;br /&amp;gt;&lt;br /&gt;
* [[vendetta/API|LME API for developers]] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/babel&amp;diff=78</id>
		<title>Vendetta/babel</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/babel&amp;diff=78"/>
		<updated>2025-03-14T02:51:00Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Updated links to repositories containing Babel library&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Babel is a lightweight library that helps plugins provide easy dictionary-based translation to their interfaces&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
If a mod provides a table of translations for a provided language and references each line by key, it can provide a language selection for the user. If the requested language module is not available for the given plugin, or if babel is not present, it falls back to the default language contained within the plugin. In this way, Babel is an optional feature for users, but a powerful benefit to multi-lingual players.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can download this application at the following locations&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NexusMods&#039;&#039;&#039; || [https://www.nexusmods.com/vendettaonline/mods/11 v1.1.1]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VOUPR&#039;&#039;&#039; || [https://voupr.spenced.com/plugin.php?name=babel v1.1.1]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Github&#039;&#039;&#039; || [https://github.com/LuxenDM/Babel v1.2.0] (in-development)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For users ==&lt;br /&gt;
Babel can be installed like any LME plugin. By default, it internally only supports EN, ES, FR, and PT languages. These languages can be easily expanded with additional addons. Plugins must also support the language being used, but this can likewise be expanded easily.&lt;br /&gt;
&lt;br /&gt;
Once added to your game, verify it is enabled. The first time it is ever run, it will try to default to the user&#039;s selected game locale, or use english. To select another language to use in Babel and all supported plugins, open the configuration interface with the command /babel, or by using the config option in your LME manager; the language options will be visible in a drop-down.&lt;br /&gt;
&lt;br /&gt;
== For modders ==&lt;br /&gt;
&lt;br /&gt;
=== Using Babel ===&lt;br /&gt;
Babel provides a small API that provides simplified table translation to any plugin, and only minimal setup is required in a plugin&#039;s code to access this functionality. While Babel **could** be listed as a hard dependency in a plugin&#039;s declaration file, the documentation on this page will assume Babel is being listed as an **optional** feature. The actual API is listed at the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
* First, construct the placeholder functions and requirements to use if Babel is not yet loaded or is not on the user&#039;s system:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local babel, lang_key&lt;br /&gt;
local bstr = function(id, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Next, add the function to update the local babel values when Babel is loaded:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local babel_func = function()&lt;br /&gt;
	babel = lib.get_class(&amp;quot;babel&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
	lang_key = babel.register(&amp;lt;your plugins path&amp;gt; .. &amp;quot;lang/&amp;quot;, {&#039;en&#039;, &#039;es&#039;, &#039;fr&#039;, &#039;pt&#039;}) --&amp;lt;or whatever list of languages you directly support&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	bstr = function(id, val)&lt;br /&gt;
		return babel.fetch(lang_key, id, val)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--&amp;lt;optional, but add this to your public-facing LME class table to let others add new languages to your plugin&amp;gt;&lt;br /&gt;
	public.add_translation = function(path, lang_code)&lt;br /&gt;
		babel.add_new_lang(lang_key, path, lang_code)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--or whatever you do to update your class table. This will re-trigger it, but now bstr() will pass translated strings&lt;br /&gt;
	update_class()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--actually add this to the queue for when Babel is loaded. Will load immediately if Babel loaded already! Will NEVER load if Babel is not loaded.&lt;br /&gt;
lib.require({{name = &amp;quot;babel&amp;quot;, version = &amp;quot;0&amp;quot;}}, babel_func)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once those two are set up, you simply call bstr(index, string) when accessing any and all strings (or at least the parts you want translated).&lt;br /&gt;
Since bstr() will always pass the default value until Babel is loaded, make sure your plugin loads strings or generates interface elements only after Babel has been given the chance to load, or add additional functionality to update interfaces post-creation.&lt;br /&gt;
&lt;br /&gt;
==== Babel Terminology ====&lt;br /&gt;
Internally, Babel uses a few terms when referencing parts of translations. These aren&#039;t specifically important to know or use Babel, but referencing them as such can help improve readability when sharing code.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;,&lt;br /&gt;
| Shelf || A shelf is an individual plugin&#039;s &#039;space&#039; where all translations are stored.&lt;br /&gt;
|-&lt;br /&gt;
| Book || A book is a single translation provided for a shelf. For instance, one &#039;book&#039; would provide &#039;english&#039; as a language for a particular shelf.&lt;br /&gt;
|-&lt;br /&gt;
| Tower || The tower is the container of all individual shelves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Language table ===&lt;br /&gt;
Language tables are INI files, and should be named as &amp;lt;language_code&amp;gt;.ini. For instance, per the [https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes ISO 639 two-letter set-1 standard], a table that represents the english language would be &#039;en&#039;, so &#039;en.ini&#039;, where spanish would be &#039;es&#039;, so &#039;es.ini&#039;. All primary supported languages should be put in the same folder and loaded when using the register function. While standard languages should follow the ISO 639 standard for consistancy, non-standard languages (such as &#039;pirate speak&#039;, &#039;klingon&#039;, &#039;elvish&#039;, or some other unusual language) are up to the community to support.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line=&amp;quot;yes&amp;quot;&amp;gt;&lt;br /&gt;
[babel]&lt;br /&gt;
0=&amp;lt;language long name&amp;gt;&lt;br /&gt;
flag=&amp;lt;path/to/language&#039;s/flag.png&amp;gt;&lt;br /&gt;
1=translated line 1&lt;br /&gt;
2=translated line 2&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Key 0 is used by Babel to display the language that this file represents in the primary interface - you only need to include this if you are adding additional language support to Babel, not adding a translation to your own plugin.&lt;br /&gt;
* flag is likewise an optional key only used for languages being added to Babel itself, and is used for the visual language selector. If a flag option is not present, a placeholder is used instead.&lt;br /&gt;
* All numemric key indexes contain actual translated lines, and should be a complete numeric series from 1 till the last entry. While Babel will not fail to obtain numbers that are not in a series, it will prevent pre-caching for users who select that option.&lt;br /&gt;
&lt;br /&gt;
=== Modding usage (as a hybrid plugin) ===&lt;br /&gt;
Babel, as documented in the example above, should be easily converted to work in a hybrid plugin. All elements that require an LME to be present can be stuck inside the standard check for LME existence. If they are never run, then the function &#039;bstr&#039; would never be updated to do anything except pass along the default entry. The [[vendetta/babel/hybrid_example|example file provided here]] can be a starting point for developing hybrid plugins with Babel support.&lt;br /&gt;
&lt;br /&gt;
=== Modding API ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function || Input arguments || Output values || Description&lt;br /&gt;
|-&lt;br /&gt;
| add_translation || babel.add_translation(string file_path, string lang_code) || returns nil || Registers a new language to be used with Babel&#039;s interface and language selector.&lt;br /&gt;
|-&lt;br /&gt;
| register_custom_lang || babel.register_custom_lang(string file_path, string lang_code) || returns nil || v1.0.x name of the &#039;add_translation&#039; function. This keyword will be deprecated eventually.&lt;br /&gt;
|-&lt;br /&gt;
| add_new_lang || babel.add_new_lang(*type shelf_reference, string file_path, string language_code || return boolean status || Registers an additional translation &#039;book&#039; to an existing &#039;shelf&#039;, providing new translations. Usually used as a way for mods using Babel to allow external additions to their supported languages&lt;br /&gt;
|-&lt;br /&gt;
| register || babel.register(string folder_path, table language_code_list) || return *type shelf_reference || Creates a new shelf and preloads it with translation &#039;books&#039; provided by the language code list.&lt;br /&gt;
|- &lt;br /&gt;
| fetch || babel.fetch(*type shelf_reference, number string_id, string default_text) || return string output_text || Looks up and provides the translation for the provided line number.&lt;br /&gt;
|- &lt;br /&gt;
| get_user_lang || babel.get_user_lang (nil) || return string user_locale || Returns the language code the user has selected. If no locale is set by the user, the game locale will be passed.&lt;br /&gt;
|- &lt;br /&gt;
| get_langs_on_shelf || babel.get_langs_on_shelf (*type shelf_reference) || return table existing_language_codes || Returns the language codes supported by the provided shelf reference. If the shelf reference is nil, Babel&#039;s own language support is provided instead.&lt;br /&gt;
|- &lt;br /&gt;
| get_lang_flag || babel.get_lang_flag (string lang_code) || return string file_path || Returns a country or language flag image file associated with the provided language, if one exists.&lt;br /&gt;
|- &lt;br /&gt;
| get_config || babel.get_config (string option_to_retrieve) || return string option_current_value || Gets the current configuration setting for the specified value&lt;br /&gt;
|- &lt;br /&gt;
| set_config || babel.set_config (string option_to_modify, string new_value) || return nil || Writes the new configuration value. Some changes may require the interface to reload.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/babel&amp;diff=77</id>
		<title>Vendetta/babel</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/babel&amp;diff=77"/>
		<updated>2025-03-14T02:42:13Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Finished Babel documentation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Babel is a lightweight library that helps plugins provide easy dictionary-based translation to their interfaces&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
If a mod provides a table of translations for a provided language and references each line by key, it can provide a language selection for the user. If the requested language module is not available for the given plugin, or if babel is not present, it falls back to the default language contained within the plugin. In this way, Babel is an optional feature for users, but a powerful benefit to multi-lingual players.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can download this application at the following locations&lt;br /&gt;
&#039;&#039;&#039;These links are incorrect, and will be updated shortly!!!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NexusMods&#039;&#039;&#039; || [https://www.nexusmods.com/Vendetta/mods/5 v1.1.0]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VOUPR&#039;&#039;&#039; || [http://voupr.spenced.com/plugin=?babel v1.1.0]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Github&#039;&#039;&#039; || [https://github.com/LuxenDM/Babel v1.1.0] (in-development)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For users ==&lt;br /&gt;
Babel can be installed like any LME plugin. By default, it internally only supports EN, ES, FR, and PT languages. These languages can be easily expanded with additional addons. Plugins must also support the language being used, but this can likewise be expanded easily.&lt;br /&gt;
&lt;br /&gt;
Once added to your game, verify it is enabled. The first time it is ever run, it will try to default to the user&#039;s selected game locale, or use english. To select another language to use in Babel and all supported plugins, open the configuration interface with the command /babel, or by using the config option in your LME manager; the language options will be visible in a drop-down.&lt;br /&gt;
&lt;br /&gt;
== For modders ==&lt;br /&gt;
&lt;br /&gt;
=== Using Babel ===&lt;br /&gt;
Babel provides a small API that provides simplified table translation to any plugin, and only minimal setup is required in a plugin&#039;s code to access this functionality. While Babel **could** be listed as a hard dependency in a plugin&#039;s declaration file, the documentation on this page will assume Babel is being listed as an **optional** feature. The actual API is listed at the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
* First, construct the placeholder functions and requirements to use if Babel is not yet loaded or is not on the user&#039;s system:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local babel, lang_key&lt;br /&gt;
local bstr = function(id, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Next, add the function to update the local babel values when Babel is loaded:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot;&amp;gt;&lt;br /&gt;
local babel_func = function()&lt;br /&gt;
	babel = lib.get_class(&amp;quot;babel&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
	lang_key = babel.register(&amp;lt;your plugins path&amp;gt; .. &amp;quot;lang/&amp;quot;, {&#039;en&#039;, &#039;es&#039;, &#039;fr&#039;, &#039;pt&#039;}) --&amp;lt;or whatever list of languages you directly support&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	bstr = function(id, val)&lt;br /&gt;
		return babel.fetch(lang_key, id, val)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--&amp;lt;optional, but add this to your public-facing LME class table to let others add new languages to your plugin&amp;gt;&lt;br /&gt;
	public.add_translation = function(path, lang_code)&lt;br /&gt;
		babel.add_new_lang(lang_key, path, lang_code)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--or whatever you do to update your class table. This will re-trigger it, but now bstr() will pass translated strings&lt;br /&gt;
	update_class()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--actually add this to the queue for when Babel is loaded. Will load immediately if Babel loaded already! Will NEVER load if Babel is not loaded.&lt;br /&gt;
lib.require({{name = &amp;quot;babel&amp;quot;, version = &amp;quot;0&amp;quot;}}, babel_func)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once those two are set up, you simply call bstr(index, string) when accessing any and all strings (or at least the parts you want translated).&lt;br /&gt;
Since bstr() will always pass the default value until Babel is loaded, make sure your plugin loads strings or generates interface elements only after Babel has been given the chance to load, or add additional functionality to update interfaces post-creation.&lt;br /&gt;
&lt;br /&gt;
==== Babel Terminology ====&lt;br /&gt;
Internally, Babel uses a few terms when referencing parts of translations. These aren&#039;t specifically important to know or use Babel, but referencing them as such can help improve readability when sharing code.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;1&amp;quot;,&lt;br /&gt;
| Shelf || A shelf is an individual plugin&#039;s &#039;space&#039; where all translations are stored.&lt;br /&gt;
|-&lt;br /&gt;
| Book || A book is a single translation provided for a shelf. For instance, one &#039;book&#039; would provide &#039;english&#039; as a language for a particular shelf.&lt;br /&gt;
|-&lt;br /&gt;
| Tower || The tower is the container of all individual shelves.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Language table ===&lt;br /&gt;
Language tables are INI files, and should be named as &amp;lt;language_code&amp;gt;.ini. For instance, per the [https://en.wikipedia.org/wiki/List_of_ISO_639_language_codes ISO 639 two-letter set-1 standard], a table that represents the english language would be &#039;en&#039;, so &#039;en.ini&#039;, where spanish would be &#039;es&#039;, so &#039;es.ini&#039;. All primary supported languages should be put in the same folder and loaded when using the register function. While standard languages should follow the ISO 639 standard for consistancy, non-standard languages (such as &#039;pirate speak&#039;, &#039;klingon&#039;, &#039;elvish&#039;, or some other unusual language) are up to the community to support.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot; line=&amp;quot;yes&amp;quot;&amp;gt;&lt;br /&gt;
[babel]&lt;br /&gt;
0=&amp;lt;language long name&amp;gt;&lt;br /&gt;
flag=&amp;lt;path/to/language&#039;s/flag.png&amp;gt;&lt;br /&gt;
1=translated line 1&lt;br /&gt;
2=translated line 2&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Key 0 is used by Babel to display the language that this file represents in the primary interface - you only need to include this if you are adding additional language support to Babel, not adding a translation to your own plugin.&lt;br /&gt;
* flag is likewise an optional key only used for languages being added to Babel itself, and is used for the visual language selector. If a flag option is not present, a placeholder is used instead.&lt;br /&gt;
* All numemric key indexes contain actual translated lines, and should be a complete numeric series from 1 till the last entry. While Babel will not fail to obtain numbers that are not in a series, it will prevent pre-caching for users who select that option.&lt;br /&gt;
&lt;br /&gt;
=== Modding usage (as a hybrid plugin) ===&lt;br /&gt;
Babel, as documented in the example above, should be easily converted to work in a hybrid plugin. All elements that require an LME to be present can be stuck inside the standard check for LME existence. If they are never run, then the function &#039;bstr&#039; would never be updated to do anything except pass along the default entry. The [[vendetta/babel/hybrid_example|example file provided here]] can be a starting point for developing hybrid plugins with Babel support.&lt;br /&gt;
&lt;br /&gt;
=== Modding API ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function || Input arguments || Output values || Description&lt;br /&gt;
|-&lt;br /&gt;
| add_translation || babel.add_translation(string file_path, string lang_code) || returns nil || Registers a new language to be used with Babel&#039;s interface and language selector.&lt;br /&gt;
|-&lt;br /&gt;
| register_custom_lang || babel.register_custom_lang(string file_path, string lang_code) || returns nil || v1.0.x name of the &#039;add_translation&#039; function. This keyword will be deprecated eventually.&lt;br /&gt;
|-&lt;br /&gt;
| add_new_lang || babel.add_new_lang(*type shelf_reference, string file_path, string language_code || return boolean status || Registers an additional translation &#039;book&#039; to an existing &#039;shelf&#039;, providing new translations. Usually used as a way for mods using Babel to allow external additions to their supported languages&lt;br /&gt;
|-&lt;br /&gt;
| register || babel.register(string folder_path, table language_code_list) || return *type shelf_reference || Creates a new shelf and preloads it with translation &#039;books&#039; provided by the language code list.&lt;br /&gt;
|- &lt;br /&gt;
| fetch || babel.fetch(*type shelf_reference, number string_id, string default_text) || return string output_text || Looks up and provides the translation for the provided line number.&lt;br /&gt;
|- &lt;br /&gt;
| get_user_lang || babel.get_user_lang (nil) || return string user_locale || Returns the language code the user has selected. If no locale is set by the user, the game locale will be passed.&lt;br /&gt;
|- &lt;br /&gt;
| get_langs_on_shelf || babel.get_langs_on_shelf (*type shelf_reference) || return table existing_language_codes || Returns the language codes supported by the provided shelf reference. If the shelf reference is nil, Babel&#039;s own language support is provided instead.&lt;br /&gt;
|- &lt;br /&gt;
| get_lang_flag || babel.get_lang_flag (string lang_code) || return string file_path || Returns a country or language flag image file associated with the provided language, if one exists.&lt;br /&gt;
|- &lt;br /&gt;
| get_config || babel.get_config (string option_to_retrieve) || return string option_current_value || Gets the current configuration setting for the specified value&lt;br /&gt;
|- &lt;br /&gt;
| set_config || babel.set_config (string option_to_modify, string new_value) || return nil || Writes the new configuration value. Some changes may require the interface to reload.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/babel/hybrid_example&amp;diff=76</id>
		<title>Vendetta/babel/hybrid example</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/babel/hybrid_example&amp;diff=76"/>
		<updated>2025-03-14T02:13:52Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Created example hybrid + babel plugin&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is an example of how a hybrid plugin can be designed to optionally support the Babel library.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;lua&amp;quot; line=&amp;quot;yes&amp;quot;&amp;gt;&lt;br /&gt;
--[[&lt;br /&gt;
[modreg]&lt;br /&gt;
id=bhybridtest&lt;br /&gt;
version=1.0.0&lt;br /&gt;
name=Babel hybrid example &lt;br /&gt;
author=Luxen&lt;br /&gt;
]]--&lt;br /&gt;
&lt;br /&gt;
--public class table to contain entry points to other LME plugins&lt;br /&gt;
local public = {}&lt;br /&gt;
&lt;br /&gt;
--function called to edit functions and strings, and push table to LME&lt;br /&gt;
local update_public&lt;br /&gt;
&lt;br /&gt;
--babel values for plugin&lt;br /&gt;
local babel, lang_key&lt;br /&gt;
local bstr = function(id, val)&lt;br /&gt;
	return val&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--LME check and execution&lt;br /&gt;
if type(lib) == &amp;quot;table&amp;quot; and lib[0] == &amp;quot;LME&amp;quot; then&lt;br /&gt;
	--register plugin to LME&lt;br /&gt;
	local plugin_path = &amp;quot;plugins/test/&amp;quot;&lt;br /&gt;
	local plugin_main = plugin_path .. &amp;quot;main.lua&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	lib.register(plugin_main)&lt;br /&gt;
	&lt;br /&gt;
	--halt execution if plugin is disabled in LME&lt;br /&gt;
	if not lib.is_ready(plugin_main) then&lt;br /&gt;
		return --the plugin is disabled, stop here&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--create and/or update plugin&#039;s common content description&lt;br /&gt;
	update_class = function()&lt;br /&gt;
		local class = {&lt;br /&gt;
			CCD1 = true,&lt;br /&gt;
			smart_config = {&lt;br /&gt;
				title = &amp;quot;Babel hybrid example&amp;quot;,&lt;br /&gt;
				action = function() end,&lt;br /&gt;
				description_label = {&lt;br /&gt;
					type = &amp;quot;text&amp;quot;,&lt;br /&gt;
					display = bstr(1, &amp;quot;This is an example hybrid plugin demonstrating Babel usage&amp;quot;),&lt;br /&gt;
				},&lt;br /&gt;
				&amp;quot;description_label&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
			description = bstr(1, &amp;quot;This is an example hybrid plugin demonstrating Babel usage&amp;quot;),&lt;br /&gt;
			commands = {},&lt;br /&gt;
			manifest = {&lt;br /&gt;
				&amp;quot;plugins/dummy/main.lua&amp;quot;,&lt;br /&gt;
				&amp;quot;plugins/dummy/lang/en.ini&amp;quot;,&lt;br /&gt;
				&amp;quot;plugins/dummy/lang/es.ini&amp;quot;,&lt;br /&gt;
				&amp;quot;plugins/dummy/lang/fr.ini&amp;quot;,&lt;br /&gt;
				&amp;quot;plugins/dummy/lang/pt.ini&amp;quot;,&lt;br /&gt;
			},&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		for k, v in pairs(class) do&lt;br /&gt;
			public[k] = v&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		lib.set_class(&amp;quot;bhybridtest&amp;quot;, &amp;quot;1.0.0&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	--update Babel functionality now&lt;br /&gt;
	local babel_func = function()&lt;br /&gt;
		babel = lib.get_class(&amp;quot;babel&amp;quot;, &amp;quot;0&amp;quot;)&lt;br /&gt;
		lang_key = babel.register(plugin_path .. &amp;quot;lang/&amp;quot;, {&#039;en&#039;, &#039;es&#039;, &#039;fr&#039;, &#039;pt&#039;})&lt;br /&gt;
		&lt;br /&gt;
		bstr = function(id, val)&lt;br /&gt;
			return babel.fetch(lang_key, id, val)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		public.add_translation = function(path, lang_code)&lt;br /&gt;
			babel.add_new_lang(lang_key, path, lang_code)&lt;br /&gt;
		end&lt;br /&gt;
		&lt;br /&gt;
		update_public()&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	lib.require({{name = &amp;quot;babel&amp;quot;, version = &amp;quot;0&amp;quot;}}, babel_func)&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
		Any LME-specific code here&lt;br /&gt;
	]]--&lt;br /&gt;
	&lt;br /&gt;
	--OR call this at the end of the plugin inside its own LME check&lt;br /&gt;
	lib.set_class(&amp;quot;bhybridtest&amp;quot;, &amp;quot;1.0.0&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--[[&lt;br /&gt;
	Your plugin here&lt;br /&gt;
]]--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/babel&amp;diff=75</id>
		<title>Vendetta/babel</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/babel&amp;diff=75"/>
		<updated>2025-03-13T00:14:06Z</updated>

		<summary type="html">&lt;p&gt;Luxen: updated to include current v1.2.0 api, work in progress&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Babel is a lightweight library that helps plugins provide easy dictionary-based translation to their interfaces&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
If a mod provides a table of translations for a provided language and references each line by key, it can provide a language selection for the user. If the requested language module is not available for the given plugin, or if babel is not present, it falls back to the default language contained within the plugin. In this way, Babel is an optional feature for users, but a powerful benefit to multi-lingual players.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can download this application at the following locations&lt;br /&gt;
&#039;&#039;&#039;These links are incorrect, and will be updated shortly!!!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NexusMods&#039;&#039;&#039; || [https://www.nexusmods.com/Vendetta/mods/5 v1.1.0]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VOUPR&#039;&#039;&#039; || [http://voupr.spenced.com/plugin=?babel v1.1.0]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Github&#039;&#039;&#039; || [https://github.com/LuxenDM/Babel v1.1.0] (in-development)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For users ==&lt;br /&gt;
Babel can be installed like any LME plugin. By default, it internally only supports EN, ES, FR, and PT languages. These languages can be easily expanded with additional addons. Plugins must also support the language being used, but this can likewise be expanded easily.&lt;br /&gt;
&lt;br /&gt;
Once added to your game, verify it is enabled. The first time it is ever run, it will try to default to the user&#039;s selected game locale, or use english. To select another language to use in Babel and all supported plugins, open the configuration interface with the command /babel, or by using the config option in your LME manager; the language options will be visible in a drop-down.&lt;br /&gt;
&lt;br /&gt;
== Modding usage ==&lt;br /&gt;
&amp;lt;usage&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modding API ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Function || Input arguments || Output values || Description&lt;br /&gt;
|-&lt;br /&gt;
| add_translation || babel.add_translation(string file_path, string lang_code) || returns nil || Registers a new language to be used with Babel&#039;s interface and language selector.&lt;br /&gt;
|-&lt;br /&gt;
| register_custom_lang || babel.register_custom_lang(string file_path, string lang_code) || returns nil || v1.0.x name of the &#039;add_translation&#039; function. This keyword will be deprecated eventually.&lt;br /&gt;
|-&lt;br /&gt;
| add_new_lang || babel.add_new_lang(*type shelf_reference, string file_path, string language_code || return boolean status || Registers an additional translation &#039;book&#039; to an existing &#039;shelf&#039;, providing new translations. Usually used as a way for mods using Babel to allow external additions to their supported languages&lt;br /&gt;
|-&lt;br /&gt;
| register || babel.register(string folder_path, table language_code_list) || return *type shelf_reference || Creates a new shelf and preloads it with translation &#039;books&#039; provided by the language code list.&lt;br /&gt;
|- &lt;br /&gt;
| fetch || babel.fetch(*type shelf_reference, number string_id, string default_text) || return string output_text || Looks up and provides the translation for the provided line number.&lt;br /&gt;
|- &lt;br /&gt;
| get_user_lang || babel.get_user_lang (nil) || return string user_locale || Returns the language code the user has selected. If no locale is set by the user, the game locale will be passed.&lt;br /&gt;
|- &lt;br /&gt;
| get_langs_on_shelf || babel.get_langs_on_shelf (*type shelf_reference) || return table existing_language_codes || Returns the language codes supported by the provided shelf reference. If the shelf reference is nil, Babel&#039;s own language support is provided instead.&lt;br /&gt;
|- &lt;br /&gt;
| get_lang_flag || babel.get_lang_flag (string lang_code) || return string file_path || Returns a country or language flag image file associated with the provided language, if one exists.&lt;br /&gt;
|- &lt;br /&gt;
| get_config || babel.get_config (string option_to_retrieve) || return string option_current_value || Gets the current configuration setting for the specified value&lt;br /&gt;
|- &lt;br /&gt;
| set_config || babel.set_config (string option_to_modify, string new_value) || return nil || Writes the new configuration value. Some changes may require the interface to reload.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/babel&amp;diff=74</id>
		<title>Vendetta/babel</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/babel&amp;diff=74"/>
		<updated>2025-03-07T16:49:18Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Created Babel page. links and api are placeholder.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Babel is a lightweight library that helps plugins provide easy dictionary-based translation to their interfaces&#039;&#039;&#039; &amp;lt;br /&amp;gt;&lt;br /&gt;
If a mod provides a table of translations for a provided language and references each line by key, it can provide a language selection for the user. If the requested language module is not available for the given plugin, or if babel is not present, it falls back to the default language contained within the plugin. In this way, Babel is an optional feature for users, but a powerful benefit to multi-lingual players.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can download this application at the following locations&lt;br /&gt;
&#039;&#039;&#039;These links are incorrect, and will be updated shortly!!!&#039;&#039;&#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| &#039;&#039;&#039;NexusMods&#039;&#039;&#039; || [https://www.nexusmods.com/Vendetta/mods/5 v1.1.0]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;VOUPR&#039;&#039;&#039; || [http://voupr.spenced.com/plugin=?babel v1.1.0]&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Github&#039;&#039;&#039; || [https://github.com/LuxenDM/Babel v1.1.0] (in-development)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== For users ==&lt;br /&gt;
Babel can be installed like any normal plugin. By default, it internally only supports EN, ES, FR, and PT languages. These languages can be easily expanded with additional addons. Plugins must also support the language being used, but this can likewise be expanded easily.&lt;br /&gt;
&lt;br /&gt;
Once added to your game, verify it is enabled. The first time it is ever run, it will try to default to the user&#039;s selected game locale, or use english. To select another language to use in Babel and all supported plugins, open the configuration interface with the command /babel, or by using the config option in your LME manager; the language options will be visible in a drop-down.&lt;br /&gt;
&lt;br /&gt;
== For modders ==&lt;br /&gt;
Babel API and example usage goes here&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=73</id>
		<title>Vendetta/helium/api</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=73"/>
		<updated>2025-03-06T17:41:24Z</updated>

		<summary type="html">&lt;p&gt;Luxen: /* Constructed objects */ ascroll is adaptive, nscroll is exposed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All API functions for the Helium library are listed below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utility functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Provides functions for operating on iup objects, but don&#039;t create iup objects themselves.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/map_dialog|map_dialog]] || Similar to iup&#039;s :map(), but recursively activates all map_cb() functions in every child iup object. Many helium objects require this to render correctly.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/trigger_on_show|trigger_on_show]] || overrides the default show_cb behavior of a dialog to also call a specific child&#039;s show_cb function.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/index_container|index_container]] || Iterates over an iup tree and returns the lua table equivilant. Intended for debugging use only.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_prepend|iup_prepend]] || Intended to behave like iup.Append(), but the child is put before instead of after other children&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_insert|iup_insert]] || Intended to behave like iup.Append(), but the child can be inserted at an arbitrary location&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/is_iup|is_iup]] || Behaves similarly to iup.IsValid(), but only checks if the object is an iup element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/get_mouse_abs_pos|get_mouse_abs_pos]] || Retrieves the pixel coordinates of the mouse position. Used internally to place subdialogs.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_size|scale_size]] || Using the known scaling value of Font.Default, applies a consistant scale to the provided value&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_2x|scale_2x]] || A preset function wrapper around scale_size to provide an iup size attribute&#039;s expected format.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iter_nums_from_string|iter_nums_from_string]] || A function to split numbers from a non-numerically delimited string, returned as a table. When used with an iup size attribute, returns the values {x, y}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Async functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These are asynchronous variants of the utility functions&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.map_dialog|async map_dialog]] || asynchronous method to map a dialog and execute all embedded map_cb. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.index_container|async index_container]] || asynchronous method to index an iup container, getting a table representation on callback&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.prepend|async prepend]] || asynchronous method to add an element to the top of an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.insert|async insert]] || asynchronous method to insert an element in an iup struc. triggers callback on complete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Primitive objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These provide preset singular iup objects for building basic interface objects with more easily.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/clearframe|clearframe]] || A frame preset with no image and no border; should be visually invisible.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/solidframe|solidframe]] || A frame preset with a thin border.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/borderframe|borderframe]] || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/highlite_panel|highlite_panel]] || An image used internally for &#039;highlite on mouse hover&#039; behavior.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/progressbar|progressbar]] || A set of basic preset values for an iup.progressbar&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hslider|hslider]] || A horizontal scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vslider|vslider]] || A vertical scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/cyclebutton|cyclebutton]] || A button that changes its contents every press, cycling through indexed options.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Constructed objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Constructs are functions that create multiple iup objects contained within a frame parent.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hexpandbox|hexpandbox]] || A frame-style object that operates like a horizontal &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vexpandbox|vexpandbox]] || A frame-style object that operates like a vertical &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vscroll|vscroll]] || A frame-style object that allows its contents to be scrolled vertically. This does NOT rely on a &#039;control&#039; list or iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hscroll|hscroll]] || A frame-style object that allows its contents to be scrolled horizontally. This does NOT rely on an iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ascroll|ascroll]] || A frame style object that adaptively shows or hides vertical and horizontal scroll bars as needed&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ascroll|nscroll]] || A frame style object that exposes scrolling mechanics as functions but provides no scrolling elements natively and is instead controlled by the caller to set the scrolling target.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hbuttonlist|hbuttonlist]] || A frame containing a horizontal list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vbuttonlist|vbuttonlist]] || A frame containing a vertical list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || This hides an invisible button over the child element, providing on-click functionality to non-clickable objects and frames&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/select_text|select_text]] || A preset of coverbutton over a label element&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/link_text|link_text]] || A preset of select_text that mimics a hyperlink to open a webpage&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ticker|ticker]] || Two buttons and a field for inputting and editing a numeric entry&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/slide_toggle|slide_toggle]] || A &amp;quot;toggle&amp;quot; object that mimics the popular mobile switch style&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/multi_button|multi_button]] || A three-button setup; two to navigate left and right through options, and a central button to activate the displayed item&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/radio_collect|radio_collect]] || A collection of linked toggle options that may be duplicate of existing iup.radio behavior, may be deprecated&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/bg_frame|bg_frame]] || Acts like a background element handler&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset dialogs ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Presets are full dialogs worth of items, with completely custom behaviors and purpose-built uses.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/subdialog|subdialog]] || Creates a modal-style dialog that can be positioned on the screen (defaults to center).&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/context_menu|context_menu]] || Creates a preset of the subdialog that mimics the behavior of a single-layer context menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/alert|alert]] || Creates a very simple subdialog at center screen to show the user a single message.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/reader|reader]] || Creates a large subdialog for displaying a large amount of text in a multiline element.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Drag-and-drop functionality ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy drag and drop functionality.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_item|drag_item]] || Creates a transparent field above the target object. this has a drag behavior associated with it. Intended to be paired with a drag_target object.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_target|drag_target]] || Creates a transparent field above the target objects. this has a drop behavior associated with it. Intended to be paired with a drag_item object.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Color and paint submodule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy methods to select both RGB and indexed ship colors.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_panel|paint_panel]] || Creates a single color thumbnail for ship paint colors.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_panel|color_panel]] || Creates a single color thumbnail for RGB color selection.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_select|paint_select]] || A full palette list for user selection. Each vertical column lists a general color, with indexes from light to dark.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_select|color_select]] || Contains RGB color finding controls.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_picker|color_picker]] || A custom dialog that allows the user to select from a palette list, recent selections, or use a color finder.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset widgets ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | End-result items used for single-function purpose that don&#039;t fit in other categories are kept in the widgets table.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widget.clock|clock]] || A preset clock widget with timezone selection and 12/24 hour display.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.stopwatch|stopwatch]] || A preset stopwatch widget. action returns either _start or _stop, &amp;lt;time in ms&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.numpad|numpad]] || A preset number pad entry widget.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_text|marquee_text]] || A preset label display that scrolls its contents. Uses multiple labels to give the semblance of continuous scrolling&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_obj|marquee_obj]] || A preset display that scrolls its contents. Must be provided with a generator to duplicate displayed contents.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=72</id>
		<title>Vendetta/helium/api</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=72"/>
		<updated>2025-03-06T17:37:11Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Seperated individual tables for navigation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All API functions for the Helium library are listed below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Utility functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Provides functions for operating on iup objects, but don&#039;t create iup objects themselves.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/map_dialog|map_dialog]] || Similar to iup&#039;s :map(), but recursively activates all map_cb() functions in every child iup object. Many helium objects require this to render correctly.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/trigger_on_show|trigger_on_show]] || overrides the default show_cb behavior of a dialog to also call a specific child&#039;s show_cb function.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/index_container|index_container]] || Iterates over an iup tree and returns the lua table equivilant. Intended for debugging use only.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_prepend|iup_prepend]] || Intended to behave like iup.Append(), but the child is put before instead of after other children&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_insert|iup_insert]] || Intended to behave like iup.Append(), but the child can be inserted at an arbitrary location&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/is_iup|is_iup]] || Behaves similarly to iup.IsValid(), but only checks if the object is an iup element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/get_mouse_abs_pos|get_mouse_abs_pos]] || Retrieves the pixel coordinates of the mouse position. Used internally to place subdialogs.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_size|scale_size]] || Using the known scaling value of Font.Default, applies a consistant scale to the provided value&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_2x|scale_2x]] || A preset function wrapper around scale_size to provide an iup size attribute&#039;s expected format.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iter_nums_from_string|iter_nums_from_string]] || A function to split numbers from a non-numerically delimited string, returned as a table. When used with an iup size attribute, returns the values {x, y}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Async functions ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These are asynchronous variants of the utility functions&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.map_dialog|async map_dialog]] || asynchronous method to map a dialog and execute all embedded map_cb. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.index_container|async index_container]] || asynchronous method to index an iup container, getting a table representation on callback&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.prepend|async prepend]] || asynchronous method to add an element to the top of an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.insert|async insert]] || asynchronous method to insert an element in an iup struc. triggers callback on complete&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Primitive objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These provide preset singular iup objects for building basic interface objects with more easily.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/clearframe|clearframe]] || A frame preset with no image and no border; should be visually invisible.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/solidframe|solidframe]] || A frame preset with a thin border.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/borderframe|borderframe]] || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/highlite_panel|highlite_panel]] || An image used internally for &#039;highlite on mouse hover&#039; behavior.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/progressbar|progressbar]] || A set of basic preset values for an iup.progressbar&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hslider|hslider]] || A horizontal scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vslider|vslider]] || A vertical scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/cyclebutton|cyclebutton]] || A button that changes its contents every press, cycling through indexed options.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Constructed objects ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Constructs are functions that create multiple iup objects contained within a frame parent.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hexpandbox|hexpandbox]] || A frame-style object that operates like a horizontal &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vexpandbox|vexpandbox]] || A frame-style object that operates like a vertical &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vscroll|vscroll]] || A frame-style object that allows its contents to be scrolled vertically. This does NOT rely on a &#039;control&#039; list or iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hscroll|hscroll]] || A frame-style object that allows its contents to be scrolled horizontally. This does NOT rely on an iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ascroll|ascroll]] || A frame style object that exposes scrolling mechanics as functions but provides no scrolling elements natively. The preset vscroll/hscroll provide their own scroll bars and can be scrolled directly, but aren&#039;t set up to scroll both directions. This &#039;adaptive&#039; scrolling panel is instead controlled by the caller to set the scrolling target.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hbuttonlist|hbuttonlist]] || A frame containing a horizontal list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vbuttonlist|vbuttonlist]] || A frame containing a vertical list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || This hides an invisible button over the child element, providing on-click functionality to non-clickable objects and frames&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/select_text|select_text]] || A preset of coverbutton over a label element&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/link_text|link_text]] || A preset of select_text that mimics a hyperlink to open a webpage&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ticker|ticker]] || Two buttons and a field for inputting and editing a numeric entry&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/slide_toggle|slide_toggle]] || A &amp;quot;toggle&amp;quot; object that mimics the popular mobile switch style&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/multi_button|multi_button]] || A three-button setup; two to navigate left and right through options, and a central button to activate the displayed item&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/radio_collect|radio_collect]] || A collection of linked toggle options that may be duplicate of existing iup.radio behavior, may be deprecated&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/bg_frame|bg_frame]] || Acts like a background element handler&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset dialogs ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Presets are full dialogs worth of items, with completely custom behaviors and purpose-built uses.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/subdialog|subdialog]] || Creates a modal-style dialog that can be positioned on the screen (defaults to center).&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/context_menu|context_menu]] || Creates a preset of the subdialog that mimics the behavior of a single-layer context menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/alert|alert]] || Creates a very simple subdialog at center screen to show the user a single message.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/reader|reader]] || Creates a large subdialog for displaying a large amount of text in a multiline element.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Drag-and-drop functionality ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy drag and drop functionality.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_item|drag_item]] || Creates a transparent field above the target object. this has a drag behavior associated with it. Intended to be paired with a drag_target object.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_target|drag_target]] || Creates a transparent field above the target objects. this has a drop behavior associated with it. Intended to be paired with a drag_item object.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Color and paint submodule ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy methods to select both RGB and indexed ship colors.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_panel|paint_panel]] || Creates a single color thumbnail for ship paint colors.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_panel|color_panel]] || Creates a single color thumbnail for RGB color selection.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_select|paint_select]] || A full palette list for user selection. Each vertical column lists a general color, with indexes from light to dark.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_select|color_select]] || Contains RGB color finding controls.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_picker|color_picker]] || A custom dialog that allows the user to select from a palette list, recent selections, or use a color finder.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Preset widgets ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | End-result items used for single-function purpose that don&#039;t fit in other categories are kept in the widgets table.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widget.clock|clock]] || A preset clock widget with timezone selection and 12/24 hour display.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.stopwatch|stopwatch]] || A preset stopwatch widget. action returns either _start or _stop, &amp;lt;time in ms&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.numpad|numpad]] || A preset number pad entry widget.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_text|marquee_text]] || A preset label display that scrolls its contents. Uses multiple labels to give the semblance of continuous scrolling&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_obj|marquee_obj]] || A preset display that scrolls its contents. Must be provided with a generator to duplicate displayed contents.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=71</id>
		<title>Vendetta/helium/api</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=71"/>
		<updated>2025-03-06T17:27:45Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Added async functions to table&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All API functions for the Helium library are listed below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Utility functions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Provides functions for operating on iup objects, but don&#039;t create iup objects themselves.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/map_dialog|map_dialog]] || Similar to iup&#039;s :map(), but recursively activates all map_cb() functions in every child iup object. Many helium objects require this to render correctly.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/trigger_on_show|trigger_on_show]] || overrides the default show_cb behavior of a dialog to also call a specific child&#039;s show_cb function.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/index_container|index_container]] || Iterates over an iup tree and returns the lua table equivilant. Intended for debugging use only.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_prepend|iup_prepend]] || Intended to behave like iup.Append(), but the child is put before instead of after other children&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_insert|iup_insert]] || Intended to behave like iup.Append(), but the child can be inserted at an arbitrary location&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/is_iup|is_iup]] || Behaves similarly to iup.IsValid(), but only checks if the object is an iup element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/get_mouse_abs_pos|get_mouse_abs_pos]] || Retrieves the pixel coordinates of the mouse position. Used internally to place subdialogs.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_size|scale_size]] || Using the known scaling value of Font.Default, applies a consistant scale to the provided value&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_2x|scale_2x]] || A preset function wrapper around scale_size to provide an iup size attribute&#039;s expected format.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iter_nums_from_string|iter_nums_from_string]] || A function to split numbers from a non-numerically delimited string, returned as a table. When used with an iup size attribute, returns the values {x, y}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Async functions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These are asynchronous variants of the utility functions&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.map_dialog|async map_dialog]] || asynchronous method to map a dialog and execute all embedded map_cb. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.index_container|async index_container]] || asynchronous method to index an iup container, getting a table representation on callback&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.prepend|async prepend]] || asynchronous method to add an element to the top of an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/async.insert|async insert]] || asynchronous method to insert an element in an iup struc. triggers callback on complete&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Primitive objects&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These provide preset singular iup objects for building basic interface objects with more easily.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/clearframe|clearframe]] || A frame preset with no image and no border; should be visually invisible.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/solidframe|solidframe]] || A frame preset with a thin border.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/borderframe|borderframe]] || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/highlite_panel|highlite_panel]] || An image used internally for &#039;highlite on mouse hover&#039; behavior.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/progressbar|progressbar]] || A set of basic preset values for an iup.progressbar&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hslider|hslider]] || A horizontal scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vslider|vslider]] || A vertical scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/cyclebutton|cyclebutton]] || A button that changes its contents every press, cycling through indexed options.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Constructed objects&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Constructs are functions that create multiple iup objects contained within a frame parent.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hexpandbox|hexpandbox]] || A frame-style object that operates like a horizontal &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vexpandbox|vexpandbox]] || A frame-style object that operates like a vertical &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vscroll|vscroll]] || A frame-style object that allows its contents to be scrolled vertically. This does NOT rely on a &#039;control&#039; list or iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hscroll|hscroll]] || A frame-style object that allows its contents to be scrolled horizontally. This does NOT rely on an iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ascroll|ascroll]] || A frame style object that exposes scrolling mechanics as functions but provides no scrolling elements natively. The preset vscroll/hscroll provide their own scroll bars and can be scrolled directly, but aren&#039;t set up to scroll both directions. This &#039;adaptive&#039; scrolling panel is instead controlled by the caller to set the scrolling target.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hbuttonlist|hbuttonlist]] || A frame containing a horizontal list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vbuttonlist|vbuttonlist]] || A frame containing a vertical list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || This hides an invisible button over the child element, providing on-click functionality to non-clickable objects and frames&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/select_text|select_text]] || A preset of coverbutton over a label element&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/link_text|link_text]] || A preset of select_text that mimics a hyperlink to open a webpage&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ticker|ticker]] || Two buttons and a field for inputting and editing a numeric entry&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/slide_toggle|slide_toggle]] || A &amp;quot;toggle&amp;quot; object that mimics the popular mobile switch style&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/multi_button|multi_button]] || A three-button setup; two to navigate left and right through options, and a central button to activate the displayed item&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/radio_collect|radio_collect]] || A collection of linked toggle options that may be duplicate of existing iup.radio behavior, may be deprecated&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/bg_frame|bg_frame]] || Acts like a background element handler&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Preset Dialogs&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Presets are full dialogs worth of items, with completely custom behaviors and purpose-built uses.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/subdialog|subdialog]] || Creates a modal-style dialog that can be positioned on the screen (defaults to center).&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/context_menu|context_menu]] || Creates a preset of the subdialog that mimics the behavior of a single-layer context menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/alert|alert]] || Creates a very simple subdialog at center screen to show the user a single message.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/reader|reader]] || Creates a large subdialog for displaying a large amount of text in a multiline element.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Drag-and-drop functionality&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy drag and drop functionality.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_item|drag_item]] || Creates a transparent field above the target object. this has a drag behavior associated with it. Intended to be paired with a drag_target object.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_target|drag_target]] || Creates a transparent field above the target objects. this has a drop behavior associated with it. Intended to be paired with a drag_item object.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Color and paint submodule&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy methods to select both RGB and indexed ship colors.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_panel|paint_panel]] || Creates a single color thumbnail for ship paint colors.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_panel|color_panel]] || Creates a single color thumbnail for RGB color selection.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_select|paint_select]] || A full palette list for user selection. Each vertical column lists a general color, with indexes from light to dark.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_select|color_select]] || Contains RGB color finding controls.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_picker|color_picker]] || A custom dialog that allows the user to select from a palette list, recent selections, or use a color finder.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Preset widgets&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | End-result items used for single-function purpose that don&#039;t fit in other categories are kept in the widgets table.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widget.clock|clock]] || A preset clock widget with timezone selection and 12/24 hour display.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.stopwatch|stopwatch]] || A preset stopwatch widget. action returns either _start or _stop, &amp;lt;time in ms&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.numpad|numpad]] || A preset number pad entry widget.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_text|marquee_text]] || A preset label display that scrolls its contents. Uses multiple labels to give the semblance of continuous scrolling&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_obj|marquee_obj]] || A preset display that scrolls its contents. Must be provided with a generator to duplicate displayed contents.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium&amp;diff=70</id>
		<title>Vendetta/helium</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium&amp;diff=70"/>
		<updated>2025-03-06T17:23:40Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Created helium start page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Helium is an interface control and generation library for use in Vendetta Online. It is a distributable library, intended to be included with other plugins as a sub-module and loaded via the LME provider. On its own, this library will not do anything, but can greatly assist in the construction of interfaces used in other plugins.&lt;br /&gt;
&lt;br /&gt;
Some of the features Helium provides include:&lt;br /&gt;
&lt;br /&gt;
* Scrolling frames, without the use of a control list or iup.matrix element&lt;br /&gt;
* iup.map() wrapper which calls all defined map_cb elements in the dialog tree&lt;br /&gt;
* prepend and insert iup elements into existing iup trees&lt;br /&gt;
* simple scaling functions to keep interfaces consistent across multiple resolutions&lt;br /&gt;
* preset primitive elements for easier access&lt;br /&gt;
* common gui elements such as a spin dial, multi-select button, mobile-style toggle switches, and simple color access dialog&lt;br /&gt;
* basic asynchronous editions of certain utility functions&lt;br /&gt;
&lt;br /&gt;
[[vendetta/helium/api|See the API here]]&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=69</id>
		<title>Vendetta/helium/api</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/helium/api&amp;diff=69"/>
		<updated>2025-03-06T17:21:10Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Created API table for helium&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;All API functions for the Helium library are listed below.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Utility functions&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Provides functions for operating on iup objects, but don&#039;t create iup objects themselves.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/map_dialog|map_dialog]] || Similar to iup&#039;s :map(), but recursively activates all map_cb() functions in every child iup object. Many helium objects require this to render correctly.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/trigger_on_show|trigger_on_show]] || overrides the default show_cb behavior of a dialog to also call a specific child&#039;s show_cb function.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/index_container|index_container]] || Iterates over an iup tree and returns the lua table equivilant. Intended for debugging use only.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_prepend|iup_prepend]] || Intended to behave like iup.Append(), but the child is put before instead of after other children&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iup_insert|iup_insert]] || Intended to behave like iup.Append(), but the child can be inserted at an arbitrary location&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/is_iup|is_iup]] || Behaves similarly to iup.IsValid(), but only checks if the object is an iup element.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/get_mouse_abs_pos|get_mouse_abs_pos]] || Retrieves the pixel coordinates of the mouse position. Used internally to place subdialogs.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_size|scale_size]] || Using the known scaling value of Font.Default, applies a consistant scale to the provided value&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/scale_2x|scale_2x]] || A preset function wrapper around scale_size to provide an iup size attribute&#039;s expected format.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/iter_nums_from_string|iter_nums_from_string]] || A function to split numbers from a non-numerically delimited string, returned as a table. When used with an iup size attribute, returns the values {x, y}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Primitive objects&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | These provide preset singular iup objects for building basic interface objects with more easily.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/clearframe|clearframe]] || A frame preset with no image and no border; should be visually invisible.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/solidframe|solidframe]] || A frame preset with a thin border.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/borderframe|borderframe]] || Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/highlite_panel|highlite_panel]] || An image used internally for &#039;highlite on mouse hover&#039; behavior.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/progressbar|progressbar]] || A set of basic preset values for an iup.progressbar&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hslider|hslider]] || A horizontal scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vslider|vslider]] || A vertical scroll bar object&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/cyclebutton|cyclebutton]] || A button that changes its contents every press, cycling through indexed options.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Constructed objects&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Constructs are functions that create multiple iup objects contained within a frame parent.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hexpandbox|hexpandbox]] || A frame-style object that operates like a horizontal &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vexpandbox|vexpandbox]] || A frame-style object that operates like a vertical &#039;drawer&#039;; when open, the contents are seen. when closed, the contents are hidden.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vscroll|vscroll]] || A frame-style object that allows its contents to be scrolled vertically. This does NOT rely on a &#039;control&#039; list or iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hscroll|hscroll]] || A frame-style object that allows its contents to be scrolled horizontally. This does NOT rely on an iup.matrix&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ascroll|ascroll]] || A frame style object that exposes scrolling mechanics as functions but provides no scrolling elements natively. The preset vscroll/hscroll provide their own scroll bars and can be scrolled directly, but aren&#039;t set up to scroll both directions. This &#039;adaptive&#039; scrolling panel is instead controlled by the caller to set the scrolling target.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/hbuttonlist|hbuttonlist]] || A frame containing a horizontal list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/vbuttonlist|vbuttonlist]] || A frame containing a vertical list of buttons, intended for use as a tab row&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/coverbutton|coverbutton]] || This hides an invisible button over the child element, providing on-click functionality to non-clickable objects and frames&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/select_text|select_text]] || A preset of coverbutton over a label element&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/link_text|link_text]] || A preset of select_text that mimics a hyperlink to open a webpage&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/ticker|ticker]] || Two buttons and a field for inputting and editing a numeric entry&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/slide_toggle|slide_toggle]] || A &amp;quot;toggle&amp;quot; object that mimics the popular mobile switch style&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/multi_button|multi_button]] || A three-button setup; two to navigate left and right through options, and a central button to activate the displayed item&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/radio_collect|radio_collect]] || A collection of linked toggle options that may be duplicate of existing iup.radio behavior, may be deprecated&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/bg_frame|bg_frame]] || Acts like a background element handler&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Preset Dialogs&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Presets are full dialogs worth of items, with completely custom behaviors and purpose-built uses.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/subdialog|subdialog]] || Creates a modal-style dialog that can be positioned on the screen (defaults to center).&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/context_menu|context_menu]] || Creates a preset of the subdialog that mimics the behavior of a single-layer context menu.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/alert|alert]] || Creates a very simple subdialog at center screen to show the user a single message.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/reader|reader]] || Creates a large subdialog for displaying a large amount of text in a multiline element.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Drag-and-drop functionality&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy drag and drop functionality.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_item|drag_item]] || Creates a transparent field above the target object. this has a drag behavior associated with it. Intended to be paired with a drag_target object.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/drag_target|drag_target]] || Creates a transparent field above the target objects. this has a drop behavior associated with it. Intended to be paired with a drag_item object.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Color and paint submodule&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | Helium provides these to create easy methods to select both RGB and indexed ship colors.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_panel|paint_panel]] || Creates a single color thumbnail for ship paint colors.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_panel|color_panel]] || Creates a single color thumbnail for RGB color selection.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/paint_select|paint_select]] || A full palette list for user selection. Each vertical column lists a general color, with indexes from light to dark.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_select|color_select]] || Contains RGB color finding controls.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/color_picker|color_picker]] || A custom dialog that allows the user to select from a palette list, recent selections, or use a color finder.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | &#039;&#039;&#039;Preset widgets&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#f2f2f2;&amp;quot; | End-result items used for single-function purpose that don&#039;t fit in other categories are kept in the widgets table.&lt;br /&gt;
|-&lt;br /&gt;
! Function !! Description&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widget.clock|clock]] || A preset clock widget with timezone selection and 12/24 hour display.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.stopwatch|stopwatch]] || A preset stopwatch widget. action returns either _start or _stop, &amp;lt;time in ms&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.numpad|numpad]] || A preset number pad entry widget.&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_text|marquee_text]] || A preset label display that scrolls its contents. Uses multiple labels to give the semblance of continuous scrolling&lt;br /&gt;
|-&lt;br /&gt;
| [[vendetta/helium/api/widgets.marquee_obj|marquee_obj]] || A preset display that scrolls its contents. Must be provided with a generator to duplicate displayed contents.&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/overview&amp;diff=12</id>
		<title>Vendetta/overview</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/overview&amp;diff=12"/>
		<updated>2025-03-01T20:08:51Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Imported overview page from wiki.js instance. needs to be edited, as some details have significantly changed since this was first written.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Neoloader provides a number of benefits to the Vendetta Online modding environment. These include:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
a system that introduces dependency-based load ordering&lt;br /&gt;
in-game toolset for enabling and disabling mods loaded through Neoloader&lt;br /&gt;
an API that promotes inter-mod communication and expandability, including with Neoloader itself&lt;br /&gt;
Currently, no alternative exists for Vendetta Online. Plugins could be (and historically have been) designed for the ASCII-betical plugin loader. Neoloader doesn&#039;t replace this, but runs before it using built-in game mechanics to provide its extended functionality without need for exploits.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
LME and NPLME (Neoloader):&lt;br /&gt;
&lt;br /&gt;
It is important for plugin developers to note that Neoloader itself is an implementation of a &amp;quot;Library Management Engine&amp;quot;. The public-facing API could be seen as LME, where how that API is implemented is Neoloader. This distinction is important in the event that a new tool supercedes Neoloader in the future while providing the same features. For a game like Vendetta Online, which is undergoing active development to this day, this distinction helps future-proof plugins as the game changes. Indeed, as long as the API itself remains untouched, how that API is implemented should not matter.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Startup Process:&lt;br /&gt;
&lt;br /&gt;
Neoloader loads itself as Vendetta Online&#039;s interface, using the if= option in config.ini. As such, it will always be the first plugin to be loaded. Neoloader first sets up basic functionality and builds the API in the public &amp;quot;lib&amp;quot; table, before entering &amp;quot;Init&amp;quot;, or loader phase. This is the phase that handles loading and executing existing compatible mods. This Init process is described in the image below.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A flowchart representing Neoloader&#039;s initialization procedures, designed before version 6.x.x; it mostly holds accurate.&lt;br /&gt;
When sorting mods into their dependent orders, it is important to note a few exceptions to this rule due to how the process works. When a plugin is registered in Neoloader, it is given a &amp;quot;Load State&amp;quot; which determines whether the plugin should be allowed to load or not, and under what circumstances.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Possible Load States for plugins:&lt;br /&gt;
NO&lt;br /&gt;
 	This plugin will not load&lt;br /&gt;
 &lt;br /&gt;
YES&lt;br /&gt;
 	This plugin will load using normal rules&lt;br /&gt;
 &lt;br /&gt;
FORCE&lt;br /&gt;
 	This plugin will load even if its dependencies are not met&lt;br /&gt;
 &lt;br /&gt;
AUTH&lt;br /&gt;
 	This plugin will be given Neoloader&#039;s auth key when it loads&lt;br /&gt;
 &lt;br /&gt;
Normally, the YES/NO load states will be the only ones available; the FORCE and AUTH load states are intended for plugin developers to use.&lt;br /&gt;
&lt;br /&gt;
Once the Init phase is complete, it assigns a few events and commands, before completing. At this point, the standard client takes back over and begins the normal mod loading procedure.&lt;br /&gt;
&lt;br /&gt;
Checking for Neoloader&#039;s existence:&lt;br /&gt;
&lt;br /&gt;
Before executing any LME functions, mods should check for the existence of Neoloader. This can be done with two various bits of code.&lt;br /&gt;
&lt;br /&gt;
The first option is to check for the public boolean &amp;quot;NEO_EXISTS&amp;quot;. When Neoloader starts, it assigns this boolean value. However, this is not the preferred method for checking for Neoloader&#039;s existence; your plugin would become reliant on Neoloader specifically. The API is designed to be &#039;generic&#039; - that is, an alternative resource could provide the same API. As such, the preferred method is to check for both &#039;lib&#039; and &#039;lib[0]&#039;, as defined below:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
if (type(lib) == &amp;quot;table&amp;quot;) and (lib[0] == &amp;quot;LME&amp;quot;)) then&lt;br /&gt;
    --LME API functions here&lt;br /&gt;
end&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
You can explore how this used in some of the plugins located in the examples folder provided with this documentation (todo). The Design page also describes how to set up specific files to make your plugin ready for management through Neoloader.&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=11</id>
		<title>Vendetta/neoloader</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=Vendetta/neoloader&amp;diff=11"/>
		<updated>2025-03-01T14:59:01Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Landing page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Neoloader Pre-execution Library Management Engine (NPLME) is a toolkit for managing mods in Vendetta Online and improving function usage between them.&lt;br /&gt;
&lt;br /&gt;
This is the Modder&#039;s Documentation for Neoloader.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[vendetta/overview|Overview]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[vendetta/design|Creating or converting a plugin for the LME]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[vendetta/registration|INI registration details]] &amp;lt;br /&amp;gt;&lt;br /&gt;
[[vendetta/API|LME API for developers]] &amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
	<entry>
		<id>https://wiki.quasar-rce.com/index.php?title=File:Vendetta-Neobanner.jpg&amp;diff=10</id>
		<title>File:Vendetta-Neobanner.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.quasar-rce.com/index.php?title=File:Vendetta-Neobanner.jpg&amp;diff=10"/>
		<updated>2025-03-01T14:53:00Z</updated>

		<summary type="html">&lt;p&gt;Luxen: Neoloader banner image&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Summary ==&lt;br /&gt;
Neoloader banner image&lt;/div&gt;</summary>
		<author><name>Luxen</name></author>
	</entry>
</feed>