PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [tool] Elex Resource Manager



Baltram
14.01.2018, 01:21
[Deutscher Text hier] (https://forum.worldofplayers.de/forum/threads/1512504-tool-Elex-Resource-Manager?p=25706522&viewfull=1#post25706522)

Elex Resource Manager makes it possible to unpack and modify much of the game data of Elex including textures, sounds, music, speech, dialogs, quests, templates and sectors.


https://upload.worldofplayers.de/files11/elexresman.png
(436KB) (http://www.baltr.de/elexresman_1_1_0.zip)
Download (https://upload.worldofplayers.de/files11/elexresman_1_1_0.zip)


------
Elex Resource Manager v1.1 by Baltram <baltram-lielb@web.de> (February 19th 2018)
------

This tool makes it possible to access and modify the game data of Elex, which
is contained in the .pak archives under ELEX\data\packed.
Supported file types and actions:

Elex PAK volume : (un)pack .pak <--> [folder]
Elex document : convert .hdr <--> .hdrdoc
Elex image : convert .eleximg <--> .dds
Elex sound : convert .elexsnd <--> .mp3 or --> .wav
Elex dialog : convert .elexdlg <--> .mp3 or --> .wav
Elex template : convert .elextpl <--> .elextpldoc
Elex world : convert .elexwrl <--> .elexwrldoc
Elex sector : convert .elexsec <--> .elexsecdoc
Sector modifi-
cation file : process .elexsecmod

You can use any text editor to view and edit .hdrdoc, .elextpldoc,
.elexwrldoc, .elexsecdoc and .elexsecmod files.

Below are short instructions on how to perform the conversions.
(For non-interactive use of this tool, see the list of command line parameters
at the end of this document.)

Unpacking Elex volumes (.pak)

Drag the .pak file onto elexresman.exe. A folder will be created (in the same
place as the .pak) containing the volume's contents.

Packing Elex volumes (.pak)

Drag a folder onto elexresman.exe and enter the archive generation of
your choice (1-9). A .pak volume will be created (in the same place as the
folder) containing the folder's contents.
The archive generation determines the order in which Elex loads the archives.

Note that no subfolder may contain resources of more than one type
(e.g. .eleximg, .elexsnd).

Converting Elex documents (.hdr) to .hdrdoc

Drag the .hdr file onto elexresman.exe.
To convert all .hdr files in a folder (and subfolders) drag that folder
onto the 'elexresman_hdr' batch script.

Tip: You can delete the 'Timestamp' attribute of entries in a .hdrdoc file in
order to have the entries' time stamps updated upon conversion to .hrd.

Converting Elex documents (.hdrdoc) to .hdr

Drag the .hdrdoc file onto elexresman.exe.
To convert all .hdrdoc files in a folder (and subfolders) drag that folder
onto the 'elexresman_hdrdoc' batch script.

Converting Elex images (.eleximg) to .dds

Drag the .eleximg file onto elexresman.exe.
To convert all .eleximg files in a folder (and subfolders) drag that folder
onto the 'elexresman_eleximg' batch script.

Note: Some .dds files use BC7 texture compression which many image editors
cannot handle. To uncompress such a .dds file or a whole folder, drag it onto
the batch script 'convert_BC7_to_B8G8R8A8' in the 'dds' folder.
To see the utilized texture compression of a .dds file, you can drag it onto
the batch script 'show_format'.
These batch scripts require the programs texdiag.exe and texconv.exe to be
present in the 'dds' folder. You can download them here:
https://github.com/Microsoft/DirectXTex/releases

Converting DDS images to Elex images (.eleximg)

Drag the .dds file onto elexresman.exe.
To convert all .dds files in a folder (and subfolders) drag that folder
onto the 'elexresman_dds' batch script.

Tip: If you are unsure about texture compression, use DXT1 for opaque textures
and DXT3/5 for textures with hard/soft transparency.

Converting Elex sounds (.elexsnd) to .wav or .mp3

Drag the .elexsnd file onto elexresman.exe.
To convert all .elexsnd files in a folder (and subfolders) drag that folder
onto the 'elexresman_elexsnd' batch script.

Note: Original .elexsnd files are converted to .wav while custom ones are
converted to .mp3.

Converting MP3 sounds to Elex sounds (.elexsnd)

Drag the .mp3 file onto elexresman.exe.
To convert all .mp3 files in a folder (and subfolders) drag that folder
onto the 'elexresman_mp3' batch script.

Converting Elex dialogs (.elexdlg) to .wav or .mp3

Drag the .elexdlg file onto elexresman.exe.
To convert all .elexdlg files in a folder (and subfolders) drag that folder
onto the 'elexresman_elexdlg' batch script.

Note: Original .elexdlg files are converted to .wav while custom ones are
converted to .mp3.

Injecting MP3 sounds into Elex dialogs (.elexdlg)

This requires an existing .elexdlg file to be present in the same folder and
with the same name as the .mp3 file.

Drag the .mp3 file onto elexresman.exe.
To convert all .mp3 files in a folder (and subfolders) drag that folder
onto the 'elexresman_mp3' batch script.

Converting Elex templates (.elextpl) to .elextpldoc

Drag the .elextpl file onto elexresman.exe.
To convert all .elextpl files in a folder (and subfolders) drag that folder
onto the 'elexresman_elextpl' batch script.

Converting Elex template documents (.elextpldoc) to .elextpl

Drag the .elextpldoc file onto elexresman.exe.
To convert all .elextpldoc files in a folder (and subfolders) drag that folder
onto the 'elexresman_elextpldoc' batch script.

Note: When cloning an Elex template, you need to modify both GUIDs in order to
ensure uniqueness.

Converting Elex worlds (.elexwrl) to .elexwrldoc

Drag the .elexwrl onto elexresman.exe.
To convert all .elexwrl files in a folder (and subfolders) drag that folder
onto the 'elexresman_elexwrl' batch script.

Converting Elex world documents (.elexwrldoc) to .elexwrl

Drag the .elexwrldoc file onto elexresman.exe.
To convert all .elexwrldoc files in a folder (and subfolders) drag that folder
onto the 'elexresman_elexwrldoc' batch script.

Converting Elex sectors (.elexsec) to .elexsecdoc

Drag the .elexsec file onto elexresman.exe.
To convert all .elexsec files in a folder (and subfolders) drag that folder
onto the 'elexresman_elexsec' batch script.

Converting Elex sector documents (.elexsecdoc) to .elexsec

Drag the .elexsecdoc file onto elexresman.exe.
To convert all .elexsecdoc files in a folder (and subfolders) drag that folder
onto the 'elexresman_elexsecdoc' batch script.

Note: When cloning an entity in a sector, you need to modify its GUID in order
to ensure uniqueness.

Also note: To change the position or rotation of an entity you can insert the
attributes 'NewPos' (vector) and/or 'NewRot' (euler angles: Yaw, Pitch, Roll)
just before the 'MatrixLocal' attribute. Example:
NewPos = (vec -276210.9 42547 -236502.8);
NewRot = (euler 0 1.570796 0);

Processing Elex sector modification files (.elexsecmod)

Drag the .elexsecmod file onto elexresman.exe.
The program opens and modifies all sector documents (.elexsecdoc) in the
same folder as the .elexsecmod file. It also opens and reads template
document files in that folder to obtain the property set data as specified in
the .elexsecmod file. Property sets in the sectors are replaced by those from
the templates.

.elexsecmod files are text documents that contain one or multiple lines. Each
line starts with the GUID or the name of a template (the name must be in
quotes). The rest of the line consists of a list of property set names
separated by spaces. Example of a two-line .elexsecmod file:

"It_Po_Healing_Small" gCItemConsumable_PS gCInteraction_PS
{4A09B19E-4A4D-40E8-8929-055D53EC1BB6} gCNPC_PS

Command line parameters:

--non-interactive - Disables prompts
(such as pressing the enter key)
--generation [number in range 0-9] - Specifies the generation when creating
.pak volumes

Usage:

elexresman.exe <file or folder> <parameters>

Source code:

https://github.com/Baltram/rmtools/blob/master/mimicry/source/MimicryApp/elexresman.cpp


[source code] (https://github.com/Baltram/rmtools/blob/master/mimicry/source/MimicryApp/elexresman.cpp)

To test your modifications it will be helpful to unlock the DebugKeys by running this batch script (https://upload.worldofplayers.de/files10/EnableElexDebugKeys.bat) in your ELEX\system folder. This allows for the following:


Key combinationAction
Ctrl + KBeam player forward
Ctrl + FControl NPC in focus
Ctrl + HToggle HUD
Ctrl + HomeToggle fixed camera
Ctrl + InsertToggle free fly camera
Ctrl + PageUpTeleport player to camera
Alt + KKill NPC/monster in focus
Alt + TToggle autowalk
Alt + GToggle global illumination
Alt + HOpen the "Genome Debug Menu" containing various statistics
F2Toggle fullscreen
F3Toggle wireframe render mode
F6Toggle slow motion
F7
or Ctrl + F8Revive/heal player
F8Toggle fast day-night cycle
F12Exit game
PauseFreeze time
Left Ctrl und Alt keys!

Baltram
14.01.2018, 01:22
[English text here] (https://forum.worldofplayers.de/forum/threads/1512504-tool-Elex-Resource-Manager?p=25706521&viewfull=1#post25706521)

Der Elex Resource Manager ermöglicht das Entpacken und Bearbeiten eines Großteils der Spieldaten von Elex, einschließlich Texturen, Sounds, Musik, Sprachausgabe, Dialoge, Quests, Templates und Sektoren.


https://upload.worldofplayers.de/files11/elexresman.png
(436KB) (http://www.baltr.de/elexresman_1_1_0.zip)
Download (https://upload.worldofplayers.de/files11/elexresman_1_1_0.zip)


------
Elex Resource Manager v1.1 by Baltram <baltram-lielb@web.de> (19. Februar 2018)
------

Dieses Tool ermöglicht das Öffnen und Bearbeiten der Spieldaten von Elex,
die in den .pak-Archiven unter ELEX\data\packed enthalten sind.
Unterstützte Dateitypen und Aktionen:

Elex-PAK-Archiv : (Ent)packen .pak <--> [Ordner]
Elex-Dokument : Umwandeln .hdr <--> .hdrdoc
Elex-Bild : Umwandeln .eleximg <--> .dds
Elex-Ton : Umwandeln .elexsnd <--> .mp3 oder --> .wav
Elex-Dialog : Umwandeln .elexdlg <--> .mp3 oder --> .wav
Elex-Template : Umwandeln .elextpl <--> .elextpldoc
Elex-Welt : Umwandeln .elexwrl <--> .elexwrldoc
Elex-Sektor : Umwandeln .elexsec <--> .elexsecdoc
Sektor-Modi-
fikationsdatei : Verarbeiten .elexsecmod

Dateien vom Typ .hdrdoc, .elextpldoc, .elexwrldoc, .elexsecdoc oder
.elexsecmod können im Texteditor betrachtet und bearbeitet werden.

Es folgen Kurzanleitungen zu den verschiedenen Umwandlungen.
(Für die nicht-interaktive Benutzung des Tools stehen einige
Kommandozeilenparameter zur Verfügung, die am Ende dieses Dokuments
aufgelistet sind.)

Elex-Archive entpacken (.pak)

Ziehe die .pak-Datei auf die elexresman.exe. Es wird (am selben Ort wie die
.pak) ein Ordner erstellt, der den Inhalt der .pak enthält.

Elex-Archive erstellen (.pak)

Ziehe einen Ordner auf die elexresman.exe und gib die gewünschte Generation
(1-9) ein. Es wird ein .pak-Archiv mit dem Inhalt des Ordners erstellt (am
selben Ort wie der Ordner).
Die Generation bestimmt die Reihenfolge, in der Elex Archive lädt.

Wichtig: Kein Unterordner darf mehr als eine Art von Resourcen enthalten
(z.B. .eleximg, .elexsnd).

Elex-Dokumente (.hdr) ins .hdrdoc-Format umwandeln

Ziehe die .hdr-Datei auf die elexresman.exe.
Um sämtliche .hdr-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_hdr'.

Tipp: Das 'Timestamp'-Attribut von Einträgen in einer .hdrdoc-Datei kann
gelöscht werden. Das bewirkt, dass die ensprechenden Zeitstempel bei der
Umwandlung zu .hdr aktualisiert werden.

Elex-Dokumente (.hdrdoc) ins .hdr-Format umwandeln

Ziehe die .hdrdoc-Datei auf die elexresman.exe.
Um sämtliche .hdrdoc-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_hdrdoc'.

Elex-Bilder (.eleximg) ins .dds-Format umwandeln

Ziehe die .eleximg-Datei auf die elexresman.exe.
Um sämtliche .eleximg-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_eleximg'.

Hinweis: Einige .dds-Dateien verwenden die BC7 Texturkompression die von
vielen Bildbearbeitungsprogrammen nicht unterstüzt wird. Um so eine .dds Datei
oder einen ganzen Ordner davon zu dekomprimieren, ziehe die Datei bzw. den
Ordner auf das Batch-Skript 'convert_BC7_to_B8G8R8A8' im Ordner 'dds'.
Um zu sehen, welche Art von Kompression eine .dds-Datei verwendet, ziehe sie
auf das Batch-Skript 'show_format'.
Hierzu müssen die beiden Programme texdiag.exe und texconv.exe im Ordner 'dds'
vorhanden sein. Sie stehen hier zum Download bereit:
https://github.com/Microsoft/DirectXTex/releases

.dds-Dateien in Elex-Bilder (.eleximg) umwandeln

Ziehe die .dds-Datei auf die elexresman.exe.
Um sämtliche .dds-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_dds'.

Tipp: DXT1 ist ein geeigneter Kompressionsalgorithmus für Texturen ohne
Transparenz. Für Texturen mit harter bzw. weicher Transparenz eignen sich
DXT3 bzw. DXT5.

Elex-Sounds (.elexsnd) ins .wav oder .mp3-Format umwandeln

Ziehe die .elexsnd-Datei auf die elexresman.exe.
Um sämtliche .elexsnd-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_elexsnd'.

Hinweis: Originale .elexsnd-Dateien werden nach .wav umgewandelt, modifizierte
hingegen nach .mp3.

.mp3-Dateien in Elex-Sounds (.elexsnd) umwandeln

Ziehe die .mp3-Datei auf die elexresman.exe.
Um sämtliche .mp3-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_mp3'.

Elex-Dialoge (.elexdlg) ins .wav oder .mp3-Format umwandeln

Ziehe die .elexdlg-Datei auf die elexresman.exe.
Um sämtliche .elexdlg-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_elexdlg'.

Hinweis: Originale .elexdlg-Dateien werden nach .wav umgewandelt, modifizierte
hingegen nach .mp3.

.mp3-Dateien in Elex-Dialoge (.elexdlg) injizieren

Hierzu muss eine .elexdlg-Datei mit dem selben Namen im selben Ordner wie die
.mp3-Datei vorhanden sein.

Ziehe die .mp3-Datei auf die elexresman.exe.
Um sämtliche .mp3-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_mp3'.

Elex-Templates (.elextpl) ins .elextpldoc-Format umwandeln

Ziehe die .elextpl-Datei auf die elexresman.exe.
Um sämtliche .elextpl-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_elextpl'.

Elex-Template-Dokumente (.elextpldoc) ins .elextpl-Format umwandeln

Ziehe die .elextpldoc-Datei auf die elexresman.exe.
Um sämtliche .elextpldoc-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_elextpldoc'.

Hinweis: Beim Klonen eines Elex-Templates müssen beide GUIDs verändert werden,
um Eindeutigkeit zu gewährleisten.

Elex-Welten (.elexwrl) ins .elexwrldoc-Format umwandeln

Ziehe die .elexwrl-Datei auf die elexresman.exe.
Um sämtliche .elexwrl-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_elexwrl'.

Elex-Welt-Dokumente (.elexwrldoc) ins .elexwrl-Format umwandeln

Ziehe die .elexwrldoc-Datei auf die elexresman.exe.
Um sämtliche .elexwrldoc-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_elexwrldoc'.

Elex-Sektoren (.elexsec) ins .elexsecdoc-Format umwandeln

Ziehe die .elexsec-Datei auf die elexresman.exe.
Um sämtliche .elexsec-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_elexsec'.

Elex-Sektor-Dokumente (.elexsecdoc) ins .elexsec-Format umwandeln

Ziehe die .elexsecdoc-Datei auf die elexresman.exe.
Um sämtliche .elexsecdoc-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_elexsecdoc'.

Hinweis: Beim Klonen einer Entity in einem Sektor muss die GUID verändert
werden, um Eindeutigkeit zu gewährleisten.

Weiterer Hinweis: Um die Position oder Rotation einer Entity zu verändern,
können die Attribute 'NewPos' (Vektor) und/oder 'NewRot' (Euler-Winkel: Yaw,
Pitch, Roll) direkt vor dem 'MatrixLocal'-Attribut eingefügt werden. Beispiel:
NewPos = (vec -276210.9 42547 -236502.8);
NewRot = (euler 0 1.570796 0);

Elex Sektor-Modifikatoren (.elexsecmod) anwenden

Ziehe die .elexsecmod-Datei auf die elexresman.exe.
Das Programm verändert alle Sektor-Dokumente (.elexsecdoc) im selben Ordner
wie die .elexsecmod-Datei. Um an die PropertySet-Daten zu kommen, die in der
.elexsecmod-Datei angegeben sind, liest es die .elextpldoc-Dateien in diesem
Ordner aus. Die PropertySets der Sektoren werden ersetzt durch die
PropertySets der Templates.

.elexsecmod-Dateien sind Textdateien, die aus einer oder mehreren Zeilen
bestehen. Jede Zeile beginnt mit der GUID oder dem Namen (in
Anführungszeichen) eines Templates. Der Rest der Zeile besteht aus einer Liste
von Namen von PropertySets, getrennt durch Leerzeichen.
Beispiel einer zweizeiligen .elexsecmod-Datei:

"It_Po_Healing_Small" gCItemConsumable_PS gCInteraction_PS
{4A09B19E-4A4D-40E8-8929-055D53EC1BB6} gCNPC_PS

Kommandozeilenparameter:

--non-interactive - Deaktiviert Aufforderungen zur Interaktion
(z.B. Drücken der Enter-Taste)
--generation [Zahl von 0 bis 9] - Bestimmt die Archiv-Generation beim
Erstellen von .pak-Dateien

Benutzung:

elexresman.exe <Datei oder Ordner> <Parameter>

Quellcode:

https://github.com/Baltram/rmtools/blob/master/mimicry/source/MimicryApp/elexresman.cpp


[Quellcode] (https://github.com/Baltram/rmtools/blob/master/mimicry/source/MimicryApp/elexresman.cpp)

Zum Testen von Modifikation ist es hilfreich, die DebugKeys freizuschalten, dazu muss dieses Batch-Skript (https://upload.worldofplayers.de/files10/EnableElexDebugKeys.bat) im Ordner ELEX\system ausgeführt werden. Dadurch wird folgendes möglich:


TastenkombinationAktion
Strg + KSpielfigur vorwärts beamen
Strg + FKontrolle über NPC im Fokus übernehmen
Strg + HUser Interface ein-/ausblenden
Strg + Pos1Kamerafixierung ein/aus
Strg + EinfgFreie Flugkamera ein/aus
Strg + BildAufSpieler zur Kameraposition teleportieren
Alt + KMonster/NPC im Fokus töten
Alt + TAutowalk ein/aus
Alt + GGlobale Beleuchtung ein/aus
Alt + HÖffnet das "Genome Debug Menu" mit diversen Statistiken zum Spiel
F2Umschalten Vollbild / Fenster (rahmenlos)
F3Wireframe-Rendermodus ein/aus
F6Zeitlupe ein/aus
F7
oder Strg + F8Spielfigur zurücksetzen (wiederbeleben, Leben auffüllen)
F8Schneller Tag-/Nachtwechsel an/aus
F12Spiel sofort beenden
PauseZeit anhalten
Linke Strg- und Alt-Tasten!

Imbaprofeeder
18.01.2018, 12:25
Thanks a lot! I was looking for the update, but the 0_5 version was the last one. Something is wrong with the forum indexing. Thanks again!

Baltram
19.02.2018, 17:58
Fixed a small bug that prevented parsing of the file w_weather.hdrdoc. The download links in the opening post are updated.

Redmatix
10.04.2018, 21:51
wie kann ich denn alle texturen auf einmal umwandeln?

Baltram
10.04.2018, 23:50
wie kann ich denn alle texturen auf einmal umwandeln?Du ziehst die c_1_na.pak auf die elexresman.exe und wählst den Ordner 0_na_img aus, so bekommst du alle Texturen im .eleximg-Format. Um daraus .dds-Dateien zu machen, siehe die Readme:
Elex-Bilder (.eleximg) ins .dds-Format umwandeln

Ziehe die .eleximg-Datei auf die elexresman.exe.
Um sämtliche .eleximg-Dateien in einem Ordner umzuwandeln, ziehe den Ordner
auf das Batch-Skript 'elexresman_eleximg'.

Hinweis: Einige .dds-Dateien verwenden die BC7 Texturkompression die von
vielen Bildbearbeitungsprogrammen nicht unterstüzt wird. Um so eine .dds Datei
oder einen ganzen Ordner davon zu dekomprimieren, ziehe die Datei bzw. den
Ordner auf das Batch-Skript 'convert_BC7_to_B8G8R8A8' im Ordner 'dds'.
Um zu sehen, welche Art von Kompression eine .dds-Datei verwendet, ziehe sie
auf das Batch-Skript 'show_format'.
Hierzu müssen die beiden Programme texdiag.exe und texconv.exe im Ordner 'dds'
vorhanden sein. Sie stehen hier zum Download bereit:
https://github.com/Microsoft/DirectXTex/releases

NicoDE
11.04.2018, 07:03
Guten Morgen,

hat sich mal jemand mit den Bilddaten der PS3- und/oder Xbox-Version von Risen 3 und/oder ELEX auseinandergesetzt?
Ein Übersetzungsprojekt kann zwar mit lianzifu die Texte lokalisieren, aber die Texturen der PS3- und Xbox-Version enthalten nicht alle notwendigen Zeichen...

Liebe Grüße,
Nico

Redmatix
11.04.2018, 15:09
Du ziehst die c_1_na.pak auf die elexresman.exe und wählst den Ordner 0_na_img aus, so bekommst du alle Texturen im .eleximg-Format. Um daraus .dds-Dateien zu machen, siehe die Readme:

ist mir schon klar aber wenn ich alle dateien reinziehe bekomme ich eine fehlermeldung und es wird nix umgewandelt.

Baltram
11.04.2018, 18:04
ist mir schon klar aber wenn ich alle dateien reinziehe bekomme ich eine fehlermeldung und es wird nix umgewandelt.Ziehe nicht alle .eleximg-Dateien, sondern den Ordner in dem sie liegen auf das Batchskript. So müsste es klappen!

STARK1LLER
20.06.2018, 02:26
Hi, thank you for this tool.
Unfortunately, I can't extract files from c_1_na.p00.
Elex Resource Manager says "Unsupported file type".
Game version is 1.0.2956.0.
And the toll works fine with the main file c_1_na.pak.
Most likely PB change something in file structure in the patch.
Any idea how to solve this?

NicoDE
20.06.2018, 07:33
Unfortunately, I can't extract files from c_1_na.p00.
You can use the QuickBMS (http://quickbms.com/) Risen script to extract the archive.
https://zenhax.com/viewtopic.php?p=27625#p27625

STARK1LLER
20.06.2018, 12:26
You can use the QuickBMS (http://quickbms.com/) Risen script to extract the archive.
https://zenhax.com/viewtopic.php?p=27625#p27625

Thank you. Never tried something like that before, trying to figure out.
It would be great if you'll provide such script, or at least some similar example with similar file structure description.

By the way, there are many files, which Elex Resource Manager refuses to convert. For example, I wanted to have a look at .elexcut files, but I can't. I assume, it has the similar file structure as other supported files. Could you give me a clue how to extract it properly?
When I played the game, some of cutscenes increase my in-game days amount. Would like to fix this:)

NicoDE
20.06.2018, 16:24
The Risen.bms script has been written by the author of QuickBMS. You can find the link in the thread or on the QuickBMS page.

STARK1LLER
20.06.2018, 18:42
It took a while to find it. And it'll take much more to understand it:)

It's strange. The script, which I find here: QuickBMS Risen (https://forum.worldofplayers.de/forum/threads/694172-Risen-Modding?highlight=QuickBMS) (a post 9 years old), сontain this line:
# thanks NicoDE https://zenhax.com/viewtopic.php?p=27625#p27625
And that's where you describe that elex pack. Some kind of mystery:)

I looked closely to that thread on zenhax, and understand that this might be a script I need. Author renewed it for Elex, but he kept an old name. That's solve one mystery.
Now for another. I tried that script, & it work, well, on a half:)
Most of the files was extracted wrong. I put here a screens with rusult.
p00 fail.rar (https://drive.google.com/open?id=1z19ytSX1LjwmNZt-JBvzunKZFTm3FOaE)
1 screen: Parent dir of result. Names of the folders here is seems to be correct.
Res Man just gives them more readeble names.
2) I am going to tpl folder. Here is what's inside.
3) Inside 0 folder.
4) Inside any folder next.

So most of the files are unreadeble .rom files. I try to rename it feed to Res Man with no success. Something is wrong. I hope someday someone will make working solution:)

NicoDE
21.06.2018, 09:49
Some kind of mystery:)
There's no mystery involved :)
Since the 90's I'm doing reverse engineering and file analysis for older games in my spare time (mostly to get them running on current Windows versions). Due to my relationship with the Gothic series, I always tried to help the community to create modifications for Piranha Bytes games. Well, after Risen 1 I put my focus on other projects :)


Most of the files was extracted wrong.
There is nothing wrong with it. That's how the files in the archive look like.
Baltram's Resource Manager knows the internal 'database' format and allows you resolve the entries to a more usable file structure.
You might have more luck with 1) extracting the PAK first and thereafter the P00 with QuickBMS 2) create a PAK with the Resource Manager 3) and unpack the PAK with the Resource Manager.
However, I never tried it, since I only cared about the binary string tables, which are single files and not stored in the 'database' format.

Or, you might convince someone to add Elex-P00 support to the Resource Manager :)

STARK1LLER
21.06.2018, 15:59
You might have more luck with 1) extracting the PAK first and thereafter the P00 with QuickBMS 2) create a PAK with the Resource Manager 3) and unpack the PAK with the Resource Manager.
This actually worked! Thank you:)
By the way, QuickBMS extracted folders with full names, like "documents", in the normal form. It seems it stored in pack in that form.
It's funny, but documents is all that I needed for now. Still, I could use templates later.

I wanted to ask one more thing. Is it safe to leave a comments "//" in unpacked files like .elextpldoc , .hdrdoc? It seems Res Man removes it when convert files back to binary, but I want to be sure it's safe:)

Baltram
22.06.2018, 12:00
I wanted to ask one more thing. Is it safe to leave a comments "//" in unpacked files like .elextpldoc , .hdrdoc? It seems Res Man removes it when convert files back to binary, but I want to be sure it's safe:)Yes, such comments are ignored by the Resource Manager.

STARK1LLER
24.06.2018, 00:59
By the way, fragment comment's, like " /* */ ", makes Res Man to hang.

Nuka.
25.05.2019, 18:43
Thank you for this wonderful tool.

matr0x
02.08.2019, 10:48
Thank you for this tool :) I used it to create an overhaul mod for Elex. It would not be possible without the work you have put into this. Greatly appreciated!

Jobesky
27.01.2020, 21:08
Is there a way to find out what every parameter does in class gCSkillsNPC_PS? Most are pretty obvious, but some like AttackAbility and ParadeAbility, I can't figure out. Also, level/experience calculation. How is that done? In Risen it seems it times the enemy's level by 10 and that's your experience, but not so here.

tombom81
27.01.2020, 22:36
Also, level/experience calculation. How is that done?Are you a coder? This is from my Savegame-modifier-mod (on Nexus):

void Calc_Lvl(HWND hWnd)
{
BYTE nLvl ;
DWORD deltaXP ;
float fLvl ;

fLvl = floor (-0.5 + (sqrt(1 + 4*experience/250))/2.0) ;
nLvl= (BYTE) fLvl ; nLvl++ ; // ++? dunno why
deltaXP= nLvl*500 ;
...
}

Jobesky
02.02.2020, 02:43
No, not a coder.

Is it indeed based on the level variable in the template? If I wanted to reduce XP gain from a monster, just lower their level?

tombom81
02.02.2020, 08:31
Is it indeed based on the level variable in the template? If I wanted to reduce XP gain from a monster, just lower their level?You need to try it out.

Maybe it's independent:
Crony Lvl 20, XP 50
Hybrid Lvl 50, XP 1000
Foresttroll Lvl 56, XP 200

(My previous post refers to the player's level, sorry.)

Jobesky
19.02.2020, 03:11
If I wanted to edit monsters and items, would I delve into c_1_na or m_1_c_1_na? The latter seems to have 3 template paks filled with the same templates 3 times.

Baltram
19.02.2020, 04:04
If I wanted to edit monsters and items, would I delve into c_1_na or m_1_c_1_na? The latter seems to have 3 template paks filled with the same templates 3 times.The former. Elex doesn't come with any archive named "m_1_c_1_na", so that file must have been (accidentally?) created by you or some other modder using Elex Resource Manager (which produces archives with the "m_" prefix).

Jobesky
19.02.2020, 22:19
Thanks. Please don't tell me I have to edit the sectors to change monsters and NPCs as well, like in Risen 3. :(

Baltram
19.02.2020, 22:34
Thanks. Please don't tell me I have to edit the sectors to change monsters and NPCs as well, like in Risen 3. :(Editing the templates might be enough in some cases, just try and see what happens.

In any case, modifying sectors is really comfortable in Elex (and Risen 3) since you can use .elexsecmod (or .r3secmod) files to carry changes in templates over to the sectors.

Jobesky
20.02.2020, 02:54
True, I was able to do it in Risen 3, but it's so tedious having to repack everything, especially if I just want to edit one thing. Still, it's better than not being able to edit anything at all.

Jobesky
23.02.2020, 20:06
I forgot to ask, if I edit monsters, items and NPCs, do I have to pack them in separate archives or can it be the same one?

Baltram
23.02.2020, 22:05
I forgot to ask, if I edit monsters, items and NPCs, do I have to pack them in separate archives or can it be the same one?It can and should be a single .pak archive. However within the archive, you need different subdirectories for different resource types (i.e. one folder for templates, one for sectors, one for textures, etc.).

Jobesky
24.02.2020, 01:13
>you need different subdirectories for different resource types (i.e. one folder for templates, one for sectors, one for textures, etc.).

Does the Resource Manager do that for me when I pack it up?

Baltram
24.02.2020, 01:43
>you need different subdirectories for different resource types (i.e. one folder for templates, one for sectors, one for textures, etc.).

Does the Resource Manager do that for me when I pack it up?No you need to provide the directory structure yourself. Just create a folder "MyMod" or whatever and in it a folder "Templates" for all the .elextpl files, a folder "Sectors" for all the .elexsec files and so on (actually, the folder names don't really matter). Then put the MyMod folder through Elex Resource Manager to obtain an archive named m_x_MyMod.pak containing all the resources.

Jobesky
26.02.2020, 17:48
:(

This is turning out to look more complicated than any of the Risen games. I was looking at some mods for ELEX just to see what they did and most of them that edited items also had sector files included. Do I need to make a secmod and put every item in the game (that I want to edit) in the secmod and then run it, like in Risen 3? I can't see why PB did it like this. Why does one need to edit sector files for items?

Baltram
27.02.2020, 16:50
:(

This is turning out to look more complicated than any of the Risen games. I was looking at some mods for ELEX just to see what they did and most of them that edited items also had sector files included. Do I need to make a secmod and put every item in the game (that I want to edit) in the secmod and then run it, like in Risen 3? I can't see why PB did it like this. Why does one need to edit sector files for items?I didn't do a lot of testing with item modifications but I would be surprised if there was a notable difference to Risen 3. What exactly is not working for you when editing item templates?

As for Piranha Bytes: Presumably their workflow is entirely different, as they have their own, much more powerful and better integrated tool sets.

Jobesky
27.02.2020, 17:41
I've not attempted any editing yet, but I was basing it off of mods I downloaded from the Nexus just to see what changes they made and how. Where Risen 1, 2, and 3 simply required editing the templates, the item overhaul mods I downloaded from the Nexus included Sector files with them for some reason, which I would love to know why.

Because of that, I was wondering if I had to include all my item changes and put each entry of each item I would change (which is a lot) into a secmod to affect all sectors... which would take a long time. Monsters, I understand, but I can't see why I would need to edit item sectors as well unless there was a particular item in the world I wanted a certain way. I just want to reduce/increase mercantile values for them among other things for a few of them. Can't see why those would need sector changes.

Baltram
27.02.2020, 18:09
I just want to reduce/increase mercantile values for them among other things for a few of them. Can't see why those would need sector changes.Me neither.

Jobesky
28.02.2020, 21:13
So I did my editing (which took all morning and most of afternoon!) and I found this when looting the beginning beasts: https://imgur.com/a/PNtOB2b

I did edit the monster fists -- the IT_Mf files (I assumed that those were what controlled certain monsters' damage), but why is it showing up in their loot? I also found something similar in the Biter Runt near the beginning, it had It_Mf_Snapper_claw or something like that.

I did include the It_Mf files in my .elexsecmod but I don't see how that could've done anything like this.

EDIT: As a test, I got a different Plaguerat_Tutorial.tpl, replaced it in my Template folder, and updated my sectors, and it's still doing it. Must be a sector file? Unless the beginning rat is not a plaguerat?

EDIT 2: Replaced my entire Sector folder and the beginning plaguerat still had those items. I did start a new game. What is going on?

EDIT 3: Replaced my Sector AND Template folders with Unofficial Update's folders (so none of my edited tweaks were there) and it STILL had those "items." Please help.

EDIT 4: The Plaguerat in the beginning had normal loot when I removed my mod completely.

Baltram
28.02.2020, 22:55
As a test I modified some values in the template It_Mf_MoleratClaw, but for me this didn't make it show up in the loot of the tutorial rat.

You should first find out which mod is causing this, by successively disabling mods until the problem disappears (you can disable a mod for example by changing the file extension of its archive from .pak to .pak.disabled).

If it is a file in your mod that is causing this, you can find out which one:
Delete some of the files in your mod and see if the problem still persists. If yes, repeat with the remaining files. Otherwise, restore the deleted files, delete all the other files and repeat. At some point only one file is left and that's the culprit. At that point you can apply the same procedure to the file's content (i.e. replace half of your changes with the original content and see if the problem still persists, etc.) in order to find out which line in the file causes the problem.


I did include the It_Mf files in my .elexsecmod but I don't see how that could've done anything like this.No sector contains these items, so including them in a .elexsecmod doesn't do anything.

Jobesky
28.02.2020, 23:05
The problem went away when I removed my mod which contains edited templates of all creatures and relevant sectors.

Jobesky
29.02.2020, 00:08
Well, knock on wood, but it seems to be fixed -- the culprit, as far as I can tell, was the EDA_Creatures sector file. I redid that and the creatures give loot as they should.

I wouldn't have thought of deleting files one by one, so as usual, Baltram, you are fantastic. Thank you.

Jobesky
04.03.2020, 17:04
Is there a way to find out which creature belongs to which template? I cannot find a template for Skex or Old Skex and PB has this annoying habit of making template names different from in-game names.

I cannot seriously imagine that there is no template for a creature in this game. I have to be missing it.

Baltram
04.03.2020, 18:03
Is there a way to find out which creature belongs to which template? I cannot find a template for Skex or Old Skex and PB has this annoying habit of making template names different from in-game names.

I cannot seriously imagine that there is no template for a creature in this game. I have to be missing it.According to Gamepedia (https://elex.gamepedia.com/Skex), a Skex is worth 120 XP. Based on this, the only matching template would be "Griffin".

Jobesky
05.03.2020, 02:10
EDIT: NVM

elButor
16.04.2020, 08:52
Hello Baltram and Thank you for the tool,

I have a question about Elex:
Is it possible to change or increase the "field of view" in this game with the tool?

Really I enjoy PB Games but it would be really nice to add a FOV slider option to their games $§p4


https://www.pcgamingwiki.com/wiki/Glossary:Field_of_view_(FOV)
(https://www.pcgamingwiki.com/wiki/Glossary:Field_of_view_(FOV))


(https://www.pcgamingwiki.com/wiki/Glossary:Field_of_view_(FOV))

Baltram
16.04.2020, 16:30
Is it possible to change or increase the "field of view" in this game with the tool?Probably yes.

Have a look at the file w_camera.hdr in the documents folder (in c_1_na.pak). If you convert it to .hdrdoc, you can open it in a text editor. It contains settings (including FOV) for numerous cameras, you would have to find out which ones you want to change. One candidate might be "cam_normal".

elButor
16.04.2020, 22:30
Thank you Baltram,

Your tool is really magic, i can now enjoy playing this game with a wide FOV (95 perfect for me)
Do you think it would be possible to do the same with Risen 3?

https://1.bp.blogspot.com/-6gb95sveyrc/XpjMl26QBxI/AAAAAAAAAYQ/3NXJJi7xkxExJ2PVgARcC-qwJlW0UsoDQCLcBGAsYHQ/s1600/20200416231517_1.jpg

https://1.bp.blogspot.com/-ZTjN9P_Tb7g/XpjMuLdsBuI/AAAAAAAAAYU/v8NRdJ6fM_U-OFCB_bDCbMNWLyR_xU5gACLcBGAsYHQ/s1600/20200416231521_1.jpg

Baltram
17.04.2020, 02:56
Glad it worked!

Risen 3 comes with a w_camera.hdr as well, so it's probably roughly the same procedure (https://forum.worldofplayers.de/forum/threads/1381917-tool-Risen-3-Resource-Manager).

elButor
17.04.2020, 13:09
Yes it works also,

I posted one screenshot of the opening scene on the Resource Manager thread of Risen 3.
The Original FOV in ELEX and Risen 3 is 60, change it to 90 and it's really cool.

:cool:

Thank You and §respekt!!!

InnerMoon
21.05.2020, 21:49
Hello everybody. I do have a question for Baltram or anyone who knows about it.

Is there a way to make the DoF effect stronger? If I recall correctly, the DoF was really strong when Elex came out, but right now it is more subtle. What file should I need to edit?

DarthNihilus
29.07.2020, 19:30
successfully made 5 new quests.
BUT
when i added two more, the resman packed it, but the game crashed and the resman COULDN"T unpack w_quests back to doc.it was crashing too.
so that was with 7 new quests,
then i deleted one, 6 new quests remained. it packs and unpacks ok and the game is going ok.

question - is this a resman fault or is it a limited number of quests possible??????
i can give the crashing hdrdoc if necessary for testing

tombom81
29.07.2020, 20:07
successfully made 5 new quests.Cool.:)

question - is this a resman fault or is it a limited number of quests possible??????I'd be surprised.


i can give the crashing hdrdoc if necessary for testingYeah, that will be necessary.

DarthNihilus
29.07.2020, 20:39
here is the 7 new questy crashy filey :)
https://bit.ly/30XfOcp

try to pack and then unpack


i deleted the one before the last and then it was behaving ok......

tombom81
29.07.2020, 23:02
oh well, seems to be a matter of tabs/blanks as indents.

a) line "DarthNihilus_AllCoolRecipes" { doesn't match the indents
b) trying with empty
class bTObjArray<struct gCQuest::gSDeliveryEntity>
class bTObjArray<class gCQuestActor>

in that quest the .hdr could be decompiled successfully. So the problem lies there.

(To tired to get that solved now - maybe use blanks only, no tabs.)

DarthNihilus
30.07.2020, 06:37
ah jesus lord thats too much perfection :)
ok thanks

btw the program is checking for files lying in the upper directory (the mod dir and not in it's dir like sector,template) but it's not reacting for the world file outside the world dir :) compiled twice with funny names untill noticed lol
-----------------
edit
:D:D:D:D
i found the problem LMAO
it's not the tab\space problem
it's an extra comma in the delivery actors hahahahahah

so it's a not-so-perfect syntax check :)

godagarah5000
04.08.2020, 10:25
this editor is cool as heck btw nice work. will we be able to decrypt saves in a similar manor in the future?

DarthNihilus
07.08.2020, 22:44
tombom81 have you tried to mess with radios in the game?
i mean is there some knowledge what we can/cannot do with them?
for now i just know that every radio in the game plays every "radio music" and "propaganda" from music files when switched on\off continuosly

tombom81
07.08.2020, 23:15
No, I didn't. But you may have a look at Interacts world sector files, where the Radios seem to be sub entities of "Obj_Int_TalkFP_Audiolog_AudioguideABE_01" for example.

In "Obj_Int_TalkFP_Audiolog_AudioguideABE_07" (IGN_Interacts)
class gCRadio_PS is combined with class bCString InfoName = "DIRKSI5_00042"; for example
so should not be too hard to change that.

DarthNihilus
08.08.2020, 11:06
what is the main req for elexdlg?
freq-24000
bitrate-192
joint stereo
https://forum.worldofplayers.de/forum/image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAUIAAAEVCAYAAACVJuzTAAAgAElEQVR4Ae2df4wdV3XHx z yaarYseNdxxT1B1RVq7agCroPe/ BtioKJbSFlD KWvJEVova4DYLqKD QBb58VTZFgs2laBIraBEG7YSdYKWZG2iAAUasmyRcNZFFqaEIJpf5Nkkju14faozd87MmfvuvJnxe543 s/f7pPHMu7/nzDmf d6Z573BrjtOEDbYAD4AH/DZBwIeCD2GAD AB8wE8fCBkIEPp58RH0uO7wAeMDACGUMGYD8AHvfQAgRBB4HwRQRVDG/UH4gceSIJl9lDb/ b/R2J98lMbe/jHa3L6Xgvd/O8n/4Ko6hmERXPAB EBzfKAPCCOwvW Fxn7vvbRp569SsHkbBZu2ULD5WgrGdtDYz/8WXXXThymIIQgYwvmb4/y4VrhW4gMZIDRA2/Ceh lnf/l1IfxeuWsrvefG7XToXdfTR9rX0y1v2EY7t2 lYGwLXfOqP6ANs49GihAwFONij0CDDzTDBzJBuOG9j9I1r5yk4Kot9JdvGqf/ 5dxWlucoLWjO nSEh P03c/voNumryeNmy lq551Zso JvvUKCn06nnbz iRTpHc3PZhpk5TkTHf2RNsbmeK920M/XQOaK43agsl48 i/N2f4O0p8d/iuaekl6Ievux 8V3QAE MCwfePR/T9M7539osSKxL dxmaL9ZYDwBF39 ttCJbj3zRN0kQH45Z209vVddOkrE3TpKzvpwtEJunR0gi7w668TU7aNPVW iqP z06TgHhHPP0MmnztDiUxo2fGKm3smedMljGEmdnD5CMF9 eyF0n3qGpqJ2ZgSyPHY6QzMp8CcXpejFQDnYDD5QzAcYdBfOveiEYb 8LPs6Qbjx9q/R5utfQb/ C9dR9zPjdPHhG jrnxinT39oBz38T P0zU9N0OkHbqALx8Zp7Us76X/mdtD2rVvp6lf8Nm1gVegEQn9IMWROPnSKZJ 0YeotHjf5SfoJCubPEB0/o5Rm/z5M3UHay2qf0wHC1LVx kAxJ0c7sFMRH3ABz5VWpC0nCMfe8c8UbNhK//C27XTxixO09o2ddPCvtlMQbKHNm7fSLW/eRj95cCedO3YDnV aoItHJuitrW0UXDNOm6b/4zJAyNPMSNWFylBUFzuEwMeGjdSRfF22nyNJ ctpT pa7YdAtqf0VhmAIcMvYKcigYoybj/R4NPHZe3lBuFNH6YNm7bQp2 foJeWdtLaf07Q5/9xBwXB1hCGf/uu7UTf2kUvPvQyenFpnC4uTdDfvW07BZu20tg7PpXh8BkQYUCk4CeAkxNP6vEzxPhZXFwnyTfQTJ7bkV OlJeWLtSfT7hOhWqV4ahx95 56nmvK2LEv65AoD58p6wMCwKypcpH23CB88x0UbN5Kn52NQPi1XbT40Rvo5jdcR39243UUBNfS37e30/MP7aKz/JyQQXjz9ZcNQns6HD6Li GSgEsDM4GYyo/VYz9nUuVjmJ6g7PbywBpN0ePnlP36Rl4Rp0QZ EkZH7hyIPzTT1KwcQvte/s2Wlsap3Nf2klPfWGCTh99GV38xi566 9so2DjVjr 2Qlae8hMjW9 3TYKfmacNr7r8yUVIYPJ9ZFnbgpcH4zU4jy/WJHps87Xx1nOpMsMoz3TTwLSrH6RXsa5URb UsQHBIK818dF6uoyTkW48a /Rpu3/yK9 peuo fvGaeXju6kl740QWePjtOFh3fR04u76L8 OU4XvzxOa0cn6OTHdtCO67bS1b/0mvIvS/j5Wgw1ufgMKJkGa3CJ qLwxYo5EZ2vj6Ute2 V4f7pMtqb/5F6S2y1ieeBGTdD 1rguw5GHJfzBxf4XGlF7OoEIVe8 vV/Ef585v1/NEGXvriDLi7tpBcfnKCzD47T WM76dLDO nSgxO09vlxesvkDto0toWuesvdfQKAYZH 8FtiVlK8twebTI9tyDAkRS2y4XS u49027o8189rL3lGmGqHp9XqdOJnl4Bgz7VM2Q32gX2G4AP9gNcvL8sXM0C4Shtmv0nXvOI1tHFsC82 ZZye 8w4rT04QZeOjdOlo O09oVx t4nxunmPeO04apr6ZrffGPOD6rL0T5rwEiHHeED8IGKflBt/pvcRv4vdq9sUbB5C/3ay7fS 27aTp989/X08ekd9O7f304/N741/J8n1/zGG2nD7CPRnQ7/xQ6BikCFDzTLBzIUIZ9EBLT3LtPY795Om8Z/Rf3RhS0UjF1PYy9/NV31pg9R8IHjgOAQ5D6Cp1nBg u1fq5XHxCeSP /4du/SRvf8a809raDNHbzR2jzLfdQ8P7/Vs87oAQRGOsnMHAt/bqW/UEIlaNA75djAAS43j75AEAI2AP28AHvfQAgRBB4HwQ KR cq1vpA4QAIUAIH/DeBwBCBIH3QQCV5FZJPtklBmG32yVssAF8AD7gow8AhLgB4AYIH/DeBwBCBIH3QeCjAsI5p5U/QAgQAoTwAe99ACBEEHgfBFBHaXXkoz0AQoAQIIQPeO8DACGCwPsg8FEB4ZzTKhggBAgBQviA9z5QGITH jh0jbLABfAA 0EQfyFPApUB46dIlwgYbwAfgA03yAQY3QAh44 YFH/DaB4YOwrW1NcIGG8AH4ANN8gGAEODGjQs 4L0PDB2EFy9eJGywAXwAPtAkHwAIAW7cuOAD3vvA0EH40ksvEbZ1ZoP7pykIAuc2ff86O1f4r5fxCxDC 8fMdX0A4fX9c9v5pA0aAEDeC9SB8hg7CCxcuELZ1ZoP7IkU4fV98be8TEN53gS6sHqQ9lmLcc3DVlHXk BXsO0ir7iSMvrid9BtN0X hTq3RwTwRf7pPT4jKRWo3aXT24x6Fe99DBVXefPeOR8cW LH1HbcTp6 w6e3xeAKHHF7/wDUuAkwXClA0taAjsLEjFwIvrWvWkzyCgaQu2 nvcTlQ /n7hAqVgLf30G4 Vl9jHGpu0hX18Y0xs1cybA0AIZ853ZoFSHxD2qjBLgYnKstrKrCdgm56mPdP30X3Te2h62ig9BmFvvUg V9hljGKw27PR4JE r23DcAGHTQZc3/qGD8Pz584RtndngiEyNj8TX9ohMjY cp9UDu8Op6O4Dq2G ydtNB1bP0/nVA7SbwbL7AK2yb6i2 taLyu0 cIQO7Db1j0T9TDv6dPmcHmOc32c89liT qtmDEF0TvDx2A9iuzbcJgBhwy9gJY6o4CX9JZA4T3JsQGhBwwKPlGWYybGzXgzC1RC0XEbAyXVjoAbTd CTjGkr7YXkp02c8AOE6u4HLNS wHzoIz507R9jWmQ2O3GpePtx6JL62R241U9Fbj/C5HqFb4 nkbtrNCo7V02Pn6NxjkSKM8wMK4nb61Iv63H3gsbjPxyJFaPp0t63Lp8cYXZN 48nMeyxRhHxO8PF1ZwOAEE59ZZ1a4LL7AD1WB1vXbTx1sAnGEP75wKH 9ZkXX3yRsMEGsQ8c3x89I9xPx vgG3UbTx1sgjEAhHHAwhlwA4MPeOsDQ58anz17lrDBBvAB ECTfAAgBLhx44IPeO8DQwfhCy 8QNhgA/gAfKBJPjB0EHKD2GAD AB8oGk MNS3xkSUuwhKXofIT6 nCnvAHvCBK cDzCyGdp6NS61iBxBeuQuWd6GQD9vDB8r7AECIRbtz74IIrPKBBZs1y2YAIUAIEMIHvPcBgBBB4H0QQL 01S71diesFEAKEACF8wHsfAAgRBN4HwZVQGGizWSoTIAQIAUL4gPc ABAiCLwPAqi3Zqm3K3G9AEKAsFYgbNr/RMB4m/G/Z/LgCRAChLUDITslPrDAsCxQ5H McF9FyuF/lgCYlQCTnZE/QRBg77Ed OKfOXNm4I3bKQK4ouUAQoCwUhCGFMQ/XlpAboIAIaBTCXTynpuMIt9WhF6SACcdWgAgBAiHDMIFausV5IIWdVbq aZQQAgW GsBKEIAcMgAFNgxCBX8FtoUBG1aqKG9BYQSDP7iAGcORVjDAB3FNHF4fVog7PJ3AaFSi 2FEMQLbV6TWOfr44CCsJzVZghXgW3UZtQen8dKp0WBwJjLqjx9ngLCHgwszph1lSNlOzV3kogWaSaldA OaWZSa/fKkDPZ1tIDcBDUIV1dXc1 cPPHEE2SX4/Njn9I 5jouWg4vSxoN5zS0Qii1OrTS7RJDr73AynGFOi0BWZe6DKuwDNdlEBq4mbJcXre5QO1Wi1oCuqhsAtMV 6rRVfgEQSjCEgRpCcIZixsXRy7CbopCJnHZyjqYCKWflZbYRN4aDmllAg3B2dpbuueeeTBgyBLnM/v37U2X4lADCRsNLprXD2BuIMVzMZim8OF2gGPUZwpABZuolEEyD0MDUAmPQona7ZSC70qF2p5Oenmdcm 15FeJLmphTsUsFqwY5BGEtCKy9UjwLJVCP4UjMLyE1Qg1BA54Kh5N1xxx0pCHJ9/gCEGcHmksbrO01DSoM1K92UMVNkhmCLWq2AWp0VNcWI6i50qNUzVU7nrXTa1Fnp35fYX0AowRCqvKk54 olw74dhJ3DnvQZdGoQn56YoyGynt2WkjN4CGoR8LMDTMJQ0FwQBQgBQASut3gQ4Zs/TYRtwBoLJ9JkBxgrSLsvpBpLmDbQGnRzzlLhDnQ5PwyUtmnYXfUbIKi8TYGnY9U6NFSRjpTj6AMcI ltAboI2CG0Y5kEQIAQIC4KwS92VTjz1Nc/0DPDM80GBqEyldZ4BYaISFegU9BiopozKL/WM0IJdKobsPJ5GywsTnafTUw3gS40t4AKhhuHevXspSwlKXT49TI0BRAuIRu2lVWG90mRqrOOzd1q7SH PxW2P1/LDfy5JUnm4dx3WzQD9FKIBjNXjo0KGeZ4KSL3s N4AQIGwsCCUYJEhDGMbPA VZIKs Nf3Vb5DDlyMKkuFLZTwnFHs2YS8wG2QPEAKCjYMgK1WXImxC0GKMw7OA3AQHAaDUBQgBwkaDUIJheOGF lppmAYHZIHuAECBsNAibFrQY7/AsIDfBQQAodQFCgLDRIJRgwN7Pv8vIABOYDbIHCAHCRoNwePoCLfluAbw1BgwbB0N2WmywwbB9IO8nY0 WVI/7oAqDaOKjmOT/y6/Ub0lFeD4AQgAPg4APe wBAiCDwPghGqUTQdz1UKUAIEAKE8AHvfQAgRBB4HwRQZfVQZaO8DgAhQAgQwge89wGAEEFQqyAY9s8m0 B5 isM kKc2AUKAMNdJ8pxomPnstPjAAsO0AEAIyNUKckWACRAOEwHNbmuQ/1onddkCACFACBA2mwVej15gNsgeIAQEGwdBVoxQhF6zL3XygwBQ6gKEAGHFIOQ1SaK1TXgdlIzFmfKmx wBhigVefxGYDbIHCL0DoVlMif9slWzpdYgr K0YL8qUWtmufJ8AodfsS538IACUugChlyBskVlaszyA8pRaVfmZIHQsvrQ4k0B/KlzMycRRan0T5zKeeoU7HXtZ6boMjquygMCM96urq7l/n5AXdLLL8VjZp/L8t2g5/PWZ2oNVLZeZGquVHqo2Bma0NKdSkGYJz6h8R9RdQGllqZRnPP0t2UeB5TyTYDNLcQZTUzSlF3A/OUdzi1JKA4yPZXEnrptewMnU0OWlDd5npesyOK7KAhqEs7OzpBd213l8LGsc79 /PwVMHitAmAJCc1VS3t3M5CtApaanGlIL1G61qBVo5ajz2UZROwK5EJyyrnGXFtoCRgaptKPbKNBHKRBK 2GnASZrsNfB0OZ0uZXmvgcfH1lrIczPx44VEUEZ1nHlEiQoVCOv cHw5FtCwE9C5YCh5rjWOuV A0DsQCpi61GXYtDq0ohZbNxDT0BLwqXqqfAJYyY8gqVSkUYtJm8X6yL4pZU6NQ3hlQGZxhoKpOTop0RZ Oo820OQGZZPJeQGiD0kAxkErcbqwu8/Iyxqa7xXEpC2gQatWnYdgPglyHPwChzyDkN7fhW9wIUgvyJjeBVi/o8sBo1xWgle1D6vXuS4PQBcEYigw6UXs6Bg0Ip3ryBJBSVn/Xx5yvv5t YoBKdewHsoANQhuGeRAECL0CoMAkDamVTkspQlZHWtXJMddN15OpcauzEj5gTtrhsua5ouQlU3Zuo0Qf Q5oah9NRUW9RyHGafnFCDEqrjIFYQFP83FG9ZEnDjRvUsNPHdp7p3EyPoQyjSzHwzgVCDcO9e/eSazqs6/EgoAi9AqLASN6kCuxMegIvF/ikbALGdrvl/ilMqDSlD3l2WLKPYYCQp789gGN26WmyUWpp2HFoJFDjN89JPqcn30OwxeqyX57EvD3VlnTsL8cCGmj2M avBQ4cOpV6M2GX4O38AQq9AKMpw0L0NykHbK1e/6NTYqC8BstkL0FJ5LlgqEBLpaa0B5MzMVHQT0G c8/KisTj7uxwMoI4LbGXTAEJAMPe3U8nUVsOqriAcNRgMCFMz6VEPaZ33XxZ6rvIAIUB4mSDUUKz OFsRjjrqAcKqr4ALbGXTAEKAECCsOnLR31AtUBZ6rvIAIUAIEA41LNFY1RZwga1sGkAIEAKEVUcu qulBfDWGDBsHAzZabHBBsP2AfeLweQZeFHliD 6AKg2Dqp5zo/8BAS 2wIgBOAAOPiA9z4AECIIvA8C39UQzr8bPtss8iwRU2MAE8CED6xbH4AihHOvW eG0sEzwKI ABAChAAhfMB7HwAIEQS1CoJh/2wC7eGnOEWe/QGEAGHtQMhOiQ8sMCwLAISAXK0gV R5DTstPrAAW6Dsf6dzled2AEKAECAEUxprARfYyqYBhIBg4yDIihGKsLHcGvrAy0LPVR4gBAgBwqGHJh qs0gIusJVNAwi9B2H6L03zMpuBrFVcY9tAEVaJmnr3VRZ6rvIAYY2DvchLg8HLKBD2WSxp8H6G 6NdNwiL/nVoLldkFbmc9sL1jGU9FFm3JKdOvZnSyNFpsK2urua POEFnexyACFASO1wCU8Goqw2x9AyS3IG0SLtxVa3y6rTpW5qVTtZDU9BOL4OKq0PmAcDYdF47wO1cHF4 gZ9ur08dXQzHQ7OABuHs7Czphd11Hh/LGsf79 9PAZMHwz6Vd8MvWg7/1zgO6OEqoLwLdPn5BjytlsDJNW4NSQWq8Fzt71Jf1 lSN4aaLq Pdb1oLHEdyUv2xUDIULIVG7uyhlV0PDcTrUgny3TqupKmYjcEoa0qs qo9Hj1OtNvuBKetRRoePOJy8l4XeehxuPxoYadgM4FQ8lzrXHM5gMIGwevBAiXD0Bpg2FkgixRfVEegy gGiYAyKd bFwGvp06XeAF4076Gn9VWq0MrPQvJyzjT yIgTK1FnFrH2EDIrDQXQUrAE053BXC6XC9pZDlQqWpK9NbhcZgyej1j068sLcp13eVMelwudR69Y/IxRYNQqz4Nw34Q5Dr8AQi9ByFDTgMqAloIJgaQztPHVh6D01mnS/wSpr1glU 1K2Xs9tMAFPDng9AGkv6edczh0C/PhRkuH1CQUnV6yhzlxzcHgaLuR/oV1Wf2Bp6ucrp915j8SrNBaMMwD4IAodcAFMAo8GiQ6WlpqAy1IpRjC2yF6qj 8kCo27OuVX1AyNAxi7 XA1dRwBUt5xf89Nm6QKhhuHfvXnJNh3U9bg K0AoyUR1 7DWYjCozqo7TI4XSbkcvVCzwhXbT9V11zAuUZNqdUZ77sqfGZUGYmtb2m1JquOhjDgf9XR/r0LOP 4HQ5MVT27iq3XZWuX7nETfm9YEGmn3MavDQoUOpFyN2Gf7OH4DQaxCKMmzW3laE/HyNn1n2Pq T6aaeTmoI6WMOh/R3abcHZOHLEmk7oEB13FMnVbbP80dnORmT9KXPI4xf7/9xga1sGhsRIAQIc382UDd1bIPQexp4bICy0HOVBwgBwcZBkKEMEHpMPuvUXWArmwYQAoQAoRVY NosC5SFnqs8QAgQAoTNinuM1rKAC2xl0wBCgBAgtAILX/20AF6WAIaNgyE7LTbYYNg kPdSsKhyxP81BlQbB9U850d s35adSWvF0AIwAFw8AHvfQAgRBB4HwRXUmmg7WaoToAQIAQI4QPe wBAiCDwPgig2pqh2q7kdQIIAUKAED7gvQ8AhAiCWgXBsH82gfbwUxz2gTw1CRAChLlOkudEw8xnp8UHF himBQBCQK5WkCsCTIBwmAhodltl/zudqzxbACAECAHCZrPA69G7wFY2rTEgfO1rX0tltyLKAmWa SYQitBr9qVOviz0XOUbBcLU2ed8YWgCcs2EXJHrBhDmBIBH2S6wlU1jczViasxgK/MBCLMgqNcM4TL296x69UoHCMtEw/ouWxZ6rvJsoXUDwscff5xuvPFGeuCBB8JpdBFl4V8ZG3z293oBL v6uEAoa4Xw2iU9a4xE6wbrtUUoXOwpWgtErTlSOn19c6b2Z6fBtrq6mrtQEy/oZJdbNyAUCN5222109uxZgDDzBZANPv3drDgnC7cnK8 Jcoyg0e5QpyWLCUX71HrGkifLfqbbDdsPy6fT4/76rF4nYOwB4ck5mluUmE0vwBSmysJIMfB0maxV6IqkS5/Yj8oCGoSzs7OkF3bXeXwsaxzv378/BUwee MVoQ1BPilMjbOUHYNPFlvvUnelQ61AgKXrcLk2LURA5QXag/aC9dxVQ9TU5XIpoMWAFJi6 pK8qL/LAWEqChlgerU3/j5Di6wABYT6mFcmnpsyKrJseqpffBmFBTTsBHQuGEqea41jHndjQMhTXp76Mvjk44Ig5wGEGmrp45VOK 1z60iizVhqEDCFZzzgGZC/wjDKz08t 71LX2V96vKIC9b5HEYpD8J5hNjVHJ6M0njKH/FOQi8En9aK8sulSHfvRWUCDUKs DcN EOQ6/GkMCHnKy1NfgWEWBPmkAMJ8mPTAjKEUKzgNNX2s27XTS37P7E/34T7OBKEFwRTYAMLR0eoK9myD0IZhHgQbB0K2pYYhA1GeCdp2BgjdANGqyglCmf6GSk2mseZZXjzljZ8/2uDrUqmpMffh6k nx32lz8cFQoZePPUNHYKfA8rzSrVneaigyEVjYJZNtx0P3yu3gAuEGoZ79 4l13RY1 NBN0YRioUFhlkQ5HIAYRocvQCUfA0zPo6A0W5TO54ac1mdJ88KdV3dnkBHQKrzdJpuU/V3OSDklyHy/E8cxd5ryIUvT2bIvF9RzxTLptt94HvlFtBAs49ZDR46dCj1YsQuw9/50zgQFrE0QCjwWZ97WxGGalAgHu17fkKjQchOxN9dZcumF3FIlLliFnCBrWwaDw4gzJh Zauo9QmXJp2vDcIrFmVouPYWKAs9V/lGgZBVXpmtSYGNsZa7uQCEtedTZQN0ga1sWmNACFCUA8V6txdAWBlnat9RWei5ygOEmBZbP5JuBnABwt rzqbIBusBWNg0gBAgBwspCFh3V2QJ8c82bSRUF5q47TlDA/ Q1KHf0vHLIb4ZCq/o6sf9ggw2G7QN5fgwQQjnm3tzynAj5uKk13QcAQoAQIIQPeO8DACGCwPsgaLqawfgHV QAIUAIEMIHvPcBgBBB4H0QQFENrqiabkOAECAECOED3vsAQIgg8D4Imq5mMP7BFS1ACBDWCoRl/s 5lAUIBgeB7zYECAHC2oGQnbLoh2HoexDj/Ae/EbC/8Y 482yJ/1kCYOY6SZ4TFclnsJX5ZIMw uOw8peyw vn oOzgwdRkfNCmXrbGSAE4CoBXFEQDBeELWq17L crb/XOziL2gzlBr OACFAuK5B2FnoUMu5cBUHj1pSILV8gR1YSblWp6OWOshYvzlst0WdTrJyYHvBbhPf6wRwgBAgXN8gXDE LTxkQpafG/RekSkCly5klU12qktuW9aIjcMq0PFwwS/KSdusEAt/HAhAChOsehKHyC1WhBqE ZjjZ3wVYdrr1PYScvaiVVSazbekD 1GDGCAECD0AYZdYyaWntUVh1accQ9A57e5TB/5WK38TAAOEcMxaOeawX5Z0VkRtGTjplyd6yttNQU3q8N5a zlUgNHUmI9T01 ZMnNfAcl60eF0OgambhvHAqJR7wFCgNATEHYphF3qpYgBlln6UyDmgNNKh1qypGhqXWhVvye9Re12K1p WtE/b8L9a B9ACEeshSOKIhieInQAbQjXupi6M ozUaNXZixiM wHty9AOITggCMO7ohiwzqC0Lwptl I9DtngFCuZ1P2ACFAWDtFyDAsszUl2DDOfjeP0eYBhABhrUAIWIwWCL7aHyAECAFC ID3PgAQIgi8DwJfVRDOO1HfACFACBDCB7z3AYAQQeB9EEAZJcrIV1sAhAAhQAgf8N4HAEIEgfdB4KsKw nknShggBAgBQviA9z4AECIIvA8CKKNEGflqC4AQIAQI4QPe wBAiCDwPgh8VUE470QJA4QAIUAIH/DeBwBCBIH3QQBllCgjX20BEAKEACF8wHsfAAgRBN4Hga8qCOedKGGAECAECOED3vsAQIgg8D4IoIwSZe SrLQBCgBAghA947wMAIYLA yDwVQXhvBMlDBAChAAhfMB7HwAIEQTeBwGUUaKMfLUFQAgQAoTwAe99ACBEEHgfBL6qIJx3ooQBQoAQI IQPeO8DACGCwPsggDJKlJGvtgAIAUKAED7gvQ8AhAgC74PAVxWE806UMEAIEAKE8AHvfQAgRBB4HwRQR oky8tUWACFACBCGPrBM8/sO09KpUUOBx7GP9kXb4aVT2dfn1BId3jdPy9qHl fjuvvml5O6Wem6Lrd3eIlOSZqrfc7LSu92aXne2PDU0mH3OKK2pdzyfMa59huvo3/dn7HZKVo6XPx6AoRy0bFPgsZLW9QFhArEjoA3io2DfB/tO3zYAqE B1Nmfpnby0pXfYUQ20emfFb7WelROzzeEKTcnwCa61hAknKnlmgpHJ89xqzxZvTP0IwBrvrjdH0z6OPX AGEf4/g6TfDzvHXwCSCiwOtRZ6bs/LxRPaxAYmWTCjwuFymeVDq3b85OoUMAAAcZSURBVNo24OlSNxXMNlhkPPae2xfgRG2oflglherIAkKcn vJ9BZA43Wo/J53bTcAr4 ptNymnz0eVyx1velz2 STfl2k BqTuq/cYIIwvbq9x/ASCr3bg4LKUS8o3dPDx8T4DmVC1RUrKUnAMx0Rh9bbNASuKhcvKNDhMZ4DmBrEeU5cSAETXMAJKVnrav 9NtmTxXGrftSmeQCfxk mxuAjHsQ3ta5cTG6kaQP16rf1VXbjDGllyu1 7p8za2AgjlQmCPqbEraDjIRNXF TrA h0nz7 4jTQQIliEsFNqSPuhBdbeAE4DIQsgWemp9mS6qvt3Ai8DhMvzMcjDZ4gxxPnc1LnrctJXCmTZQE/Gmz5vTo8V b7DxErdgDDDrtKv2gOEyhiJoaM7KvI8gqMGWnT9UwGq88seZ/lTFKjL8mytt1yiKnvzepQZj/dyp8YDglBefnAM9QOvLidl9ZjDGMw6jzgee0GoYzexGUDoUQC7AgRpOjCKHWu4RfbTAcnHpRShUUIy3c 0aQxi080pNxcEu00uZbrqC30pLKUgFgax03ZdT/Vntx WtdG5fATj9vFPZwS5nf5f2c8dr9S/1eM/XKVajXA5TY8BQOwiOc/yBg0ZNZcPAVmnz8yqodIBlHQvIpE0BmnWTSgE2CmQ1jmQ6zf3YbTjSwvZMnykIZ6XHfqHAGac52g/z0umsAJNxmvPjtPiRQgRJu1yqTHTO8Zj7jjfdv1HGLjvb5Szbx fZ5ZkxHTt2LMdHurTrjhMU8D9ZdzZJ58b4I9 xzzY bAPb1MkHkillmetS9M1s0XJl s4pyzDVSlWBz7Y7QNjHOLax8D3H8WDLZguArKlqI6 rS Fm y9A2MiLnH1BAWvYBj5Q3gcAQoCw2SoG1w/Xbwg ABAOwYi4A5e/A8NmsFmdfAAgBAihKOAD3vsAQIgg8D4I6qRMMJbRKGWAECAECOED3vsAQIgg8D4IoMJGo8LqZHeAECAE COED3vsAQIgg8D4I6qRMMJbRqNMrBkJuGB9YABaABZpigaH/X2NuEBtsAB ADzTNB/IUeeE/upDXEPJHI/1hd9gdPjC4DwCEeJaIZ4nwAe99ACBEEHgfBFBUgyuqptsQIAQIAUL4gPc ABAiCLwPgqarGYx/cEULEAKEACF8wHsfAAgrDoIHPvrHhA02KOoDUHuDq70iNgQIRwBC6n6HeLuwdgkbbNDjA IfDMsiQYwyg8MSIBwVCJf3EWGDDbJ8oPudcOYAyA0OuSI2BAhHAMKXLpwJAXDmzBnCBhvYPsA3SPYRKM JqIMigBAhHAEI6 wRAiJtA5k0wnCmcfQIgrDA2AcIKjc13Hr7L09kfhiA8ffo0YYMNbB8wIPwhQFhhbAKEFRobIAT0bOi5v gOE1U2J5fkhQAgQQpXWTJkDhADhuv 5QDg1fuFxTI1rBh XMhtVWgjCFx7H1LhCkQJFWKGx46nxCz8IQSiy3Kv9QpuCIIi3VmdF3fwWqB20qLNiFMFCO6CgvaDyq1c Ko7g2BoQ/AAgrjE2AsEJj w7ClU6LgqBNC7HNV6jT0rBTIGRgeghB9hGAsPobHkAYB2U1xg nxs9/30NFyNBL1F6stFY61IrhKCDkvQZmNdcmHlPFPmH3G4Lw e9DEVZ4HQDCCo3NDm9A L0QhM899xx5s63cTZNBmz7Xc84rdPdkQO3PsS0 R 1gkiYnJ nuFY9sY9nEgPB7AGGFsQkQVmjsGIQ/PRmC8NlnnyVvtuW7aDK4he7tOedlumtyku5aZlvcS7dEzw8n71r2xzaWTUIQ/vQkQFhhbAKEFRo7BuGZ7/oHwhByAjx1A0gBkkHIZWSvylmwWM83kBCEZ74LEFYYmwBhhcb2G4TP0vJdkxSkVCGrwYAS9acAeO8tFE zeRcseAVDgDhBW/0wYIBwFCE vhorw6aefJt 2R 5kGCY/n5m88xFlg3l6ZzBJdz5i7DL/zoCCyTvpEc/sFILw9CoUYYWxCRBWaOxYEfLfI1zepwDgHxB9uwGUOd8QhPgzXJX fhQgHAUIn/t2CMInn3ySsMEGtg EIHzu21CEFcYmQFihsWNFCBDiBtDnJggQ4hlhpXKYwVT1Fv6O8CffChXhj3/8Y8IGG9g EILwJ9 CIqwwPqEIKzR2rAifeQQgxE0g8yYYgvCZRwDCCmMTIKzQ2DEIn/xqCMLQ4bPWrEC63zZ68qsAYYWxCRBWaOwUCBmG2GCDPj7Aj1GqfnTja38A4QhAyA6ODTYo4gO gqnq8wYIKwZh1RcY/VX/Qgw2b57NAUKAENMv ID3PgAQIgi8DwIouOYpuGFfM4AQIAQI4QPe wBAiCDwPgiGrS7QXvMUJkAIEAKE8AHvfQAgRBB4HwRQcM1TcMO ZgAhQAgQwge894EYhHyADTaAD8AHfPWB/we8I zewtfPAwAAAABJRU5ErkJggg==
after a few tries only the above worked. was it the frequency? or the bitrate? the elexsnd conversion was w/o any warnings about unsupported file type..

LiveToWin
16.11.2020, 16:07
Hi!
Is there a way to convert en.str to an editable view?

tombom81
18.11.2020, 12:57
To view the contents I'd suggest to treat en.str as you would do with w_strings.bin. The required tool is here (will create *.csv files - not tested with en.str):

https://forum.worldofplayers.de/forum/threads/1513519-release-ELEX-string-table-un-packer-%28lianzifu%29?p=25725794&viewfull=1#post25725794

InKviZ
23.03.2021, 11:09
Hi guys. Who can help convert font textures, I would be very grateful for help. (Fonts in the format - rom.)
https://gofile.io/d/dk3rqV - Fonts

Asloner
23.03.2021, 13:41
Hi guys. Who can help convert font textures, I would be very grateful for help. (Fonts in the format - rom.)
https://gofile.io/d/dk3rqV - Fonts

Этот шрифт имеет внутриигровой формат elexfnt. Преобразовать в текстуры этот шрифт скорее сможет только тот человек, который знает, как создавался этот файл внутри студии на момент разработки игры. Либо очень умный программист.

This font has an in-game format elexfnt. Only a person who knows how this file was created inside the studio at the time of the game's development will be able to convert this font to textures. Or a very smart programmer.

Asloner
16.04.2021, 07:47
Ja, das geht, man muss für die Kopie allerdings eine neue GUID vergeben.
Außer der Position (in den beiden Matrizen) müssen auch die Attribute 'Extents' und 'Center' angepasst werden. Der Resource Manager tut das automatisch, wenn man ein Atribut 'NewPos = (vec <x> <y> <z>)' direkt vor den beiden Matrix-Attributen einfügt. (Eine neue Rotation ist auch möglich mittels 'NewRot = (euler <yaw> <pitch> <roll>)', siehe hier (https://forum.worldofplayers.de/forum/threads/1504839-%C3%84nderung-der-Position-und-Rotation-von-Entities-in-Sektoren-%28-elexsecdoc%29).)

Guten Tag. Ich habe eine kleine Frage, wie man im Spiel die GUID des gewünschten Objekts der Koordinate lernt, die geändert werden muss.
Original:
Здравствуйте. У меня небольшой вопросик, как в самой игре узнать GUID нужного мне предмета координаты, которого необходимо изменить.

wasted_
23.08.2021, 22:50
[german:]
Hallo, vielen Dank für diese Tool!

Jedoch habe ich folgenden Bug beobachtet:

Konvertiere ich /documents/w_ui.hdr zu .hdrdoc und diese dann wieder ohne weitere Modifikation der Datei zurück nach .hdr bricht die Umwandlung mit folgendem Fehler ab: Error: Parse error at line 8457.

Zeile 8457 und nachfolgende der unmodifizierten w_ui.hdrdoc sind im folgenden Screenshot abgebildet:
https://i.imgur.com/PjKWD3g.png

Gibt es Anregungen für einen Workaround?
Danke!

[english:]

I have observed following Bug/ strange behavior:

If i convert /documents/w_ui.hdr to .hdrdoc and the latter without any modification back to .hdr the conversion fails with Error: Parse error at line 8457.

Line 8457 anf following of the unmofified w_ui.hdrdoc are pictured in this screenshot:
https://i.imgur.com/PjKWD3g.png

Any hints for possible workarounds?
Thank you!

godagarah5000
01.03.2022, 22:11
any word if this will get an elex 2 version if its possible?

whispertante
05.03.2022, 02:01
I would be also interested in an update for Elex 2!
I am getting "Unsupported file type" when trying to unpack the pak's.

tombom81
05.03.2022, 11:38
Pak structure has changed a little bit but Baltram's source of the elexresman is free available (see resourceman thread). Or you need to wait for the handful of people (Baltram included) who can handle that code.

I managed to unzip the first compressed file (w_col_0_na_000d4a05.rom) manually from the ELEX 2 pak. Need to understand how to get the correct filename and others. Stay tuned.;) edit: ok, hash and file name in .csv file, use the hash to find the _[hash].rom file

Erstes entpacktes ELEX 2 DDS file (braucht man nicht entzippen, weil eh komprimiert):
https://upload.worldofplayers.de/files12/3256_w_img_0_na_0010af6c_rom.jpg

whispertante
05.03.2022, 13:27
Danke für die Rückmeldung, dann warte ich erstmal ab.
Um das selbst zu machen, bräuchte ich wahrscheinlich erstmal ne Woche, um mich da reinzufuchsen... :rolleyes:

tombom81
06.03.2022, 16:35
Wenn das mal reicht... "schlechte Neuigkeiten: Piraten", äh Piranha Bytes!
Sie haben doch mehr geändert, als uns lieb sein kann.

Entpacken der 127513 Dateien (headerless zip data) ist nicht mein Ziel, wenn auch weitere 19671 unkomprimiert sind. Vermutlich alles DDS Dateien, da könnte man theoretisch direkt austauschen. (Ein "popeliges" orangenes Hemd habe ich gefunden, könnte man texturieren, wenn man Lust und Könne hat...)

Nötigen Daten: Dateioffset, compressed und uncpr sized findet man hinter der "VOL"-Signatur in c_1_na.pak.

Nun zum Problem:
Gloria.elextpl, leider fehlt die aus ELEX (1) bekannte Signatur "6TP03s", habe nichts ähnliches gefunden.

w_camera.hdr, "Versions"byte hat sich von 1 nach 2 geändert. Wenn man das einfach zurück"patched" auf '1', gibt's ne Null pointer Ausnahme beim debuggen im Elexresman, Strafe muss sein.:eek:

(Wahrscheinlich werde ich mich erstmal wieder der direkten RAM-Manipulation zuwenden, zumal ich endlich dll-proxying zum Laufen bekommen habe mit ELEX (1). Kann ich endlich aufs Injecten von ImGUI verzichen.)

Habe hier die Weltsektor-csv, da kann man sehen, dass Björn am 13.1. d.J. getestet hat.;)
Hash|Name|Compiled Size|Raw File Time|Compiled File Time|
671942e0|ATE_Items|2716775|03.01.2022 - 11:04:04|27.01.2022 - 17:29:24|
190b07e8|CAR_Creatures|2781699|04.01.2022 - 15:39:57|14.01.2022 - 15:29:39|
afe46dfc|CAR_Items|11338762|14.01.2022 - 13:59:17|14.01.2022 - 15:29:39|
b30e860e|CAR_VFX|188246|12.01.2022 - 15:58:32|13.01.2022 - 17:40:12|
444bff8b|CAR_West_Nature|7934650|12.01.2022 - 16:01:43|13.01.2022 - 17:40:12|
05869c30|IGN_Creatures|1859005|13.01.2022 - 13:28:19|13.01.2022 - 17:40:13|
32c166f2|MAR_Creatures|627765|13.01.2022 - 13:25:48|13.01.2022 - 17:40:13|
aebd25c7|CAR_Interacts|8295474|12.01.2022 - 18:05:55|13.01.2022 - 17:40:13|
a989d5bc|Testlevel_Personal_BPankratz_1|1337812|08.10.2021 - 10:24:47|13.01.2022 - 17:40:13|

(Mal sehen, ob ich wenigsten ein sec file in eine doc konvertieren kann...)

edit2: .sec kannste auch knicken, es fehlt der 4-byte-Hash für "class gCSectorResource".
Oder sie haben ne neue hash-Formel (eigentlich unwahrscheinlich).

Heißt, im ersten Ansatz werde ich wieder den hexditor rauskramen müssen

whispertante
07.03.2022, 14:16
Sherlock... :D
Ich habe auch mal reingeschaut, aber da ich meinen HxD sonst nie auspacke, war das nicht so erfolgreich.. Oben in der Pak scheinen ja die "Sektoren" drin zu sein inkl. Speicheradresse. Die Sektoren finde ich auch weiter unten mithilfe der Adresse.

Aber so furchtbar viel kann sich eigentlich nicht geändert haben, ansonsten würde zum Beispiel diese Mod hier (https://www.nexusmods.com/elex2/mods/5) nicht mehr funktionieren. Die ist nämlich noch mit elexresman für Elex 1 gepackt worden und funktioniert einwandfrei, weil die Pfade offensichtlich noch dieselben sind.

tombom81
07.03.2022, 17:21
Aber so furchtbar viel kann sich eigentlich nicht geändert haben, Definiere "furchtbar viel".:D
Die mod kenne ich nicht, aber wenn es nur mp3 oder so ist, das fasst PB sicher nicht an. Wieso auch.

Ihre eigenen Strukturen/Properties sind natürlich im wesentlichen gleich; der Teufel liegt im Detail.
Wie ich schrieb, z.B. der fehlende SectorResource hash Wert; das macht die Sache mühsam.
Der elexresman checkt solche Werte; wenn die fehlen, gibt's den Fehler "unknown resource file", oder so.

whispertante
07.03.2022, 19:18
Definiere "furchtbar viel".:D
Damit wollte ich dir mit meinem laienhaften Verständnis sagen, dass du das bestimmt hinkriegst :P
Alles, was ich in dem Bereich mal gemacht habe, war für den New World Extractor, aber das war Python und am Ende war es nur ein Bitflag, das falsch gesetzt war... mit dem Hex Editor war's heute das erste Mal..

Aber ich verstehe jetzt, was du meinst, ich konnte auch nicht jede Adresse in der pak finden, gerade die "INFO_" Einträge scheinen zu fehlen.
Bspw. w_snd_0_de_b83bc32e.rom gibt es in c_1_de.pak, aber weder dort noch in der c_1_na.pak finde ich diese ID.

Wenn man wenigstens rauskriegen könnte, wie die Dateien heißen, dann könnte man zumindest anfangen zu modden...
Alles in allem schönes Rätselraten :) besser auf jeden Fall als das Hacking-Minispiel, danke ELEX!

tombom81
07.03.2022, 21:15
... mit dem Hex Editor war's heute das erste Mal..ok, aber mit DWord zum Beispiel kennst du dich aus?


Aber ich verstehe jetzt, was du meinst, ich konnte auch nicht jede Adresse in der pak finden, gerade die "INFO_" Einträge scheinen zu fehlen.INFOs ohne Ende im c_1_na.pak, wobei man zwischen den INFO command scripten und den INFO_ Sprachdateien unterscheiden muss.


Bspw. w_snd_0_de_b83bc32e.rom gibt es in c_1_de.pak, aber weder dort noch in der c_1_na.pak finde ich diese ID.Hinter "VOL " findest du ab 0x135DF24D6 den ersten "FILE"-Eintrag mit jeweils 17 DWords DWord0 ist 0, DW3 und 4 sind die 64 bit Adresse (HDW, LDW), weiter hinter folgen uncompressed und compressed size, wenn gleich groß ist die jeweilige Datei nicht komprimiert, andernfalls enthält das nächste DWord "ZLIB" (5A4C4942).

Die Dateiblöcke sind headerless zips, wenn du coder bist, hier ist code:
https://gist.github.com/apreiml/4257119
Habe ich ins miniz-Project integriert und entpacke mit der compilierten exe (das enthaltene sample3.c unterscheidet sich in 2 Zeilen vom gextract code; habe ich spät bemerkt§cry.)


Wenn man wenigstens rauskriegen könnte, wie die Dateien heißen, dann könnte man zumindest anfangen zu modden... Das ist tatsächlich das geringste der Probleme, imho, du musst nur den Hashwert [hash].rom in der entsprechenden csv-Datei finden.

Hier eine Zeile aus der tpl-csv:
916f4caa|Kle_Adv1_Quy|5794|18.05.2021 - 13:06:19|14.02.2022 - 10:42:38|

Dazu gehört 49722. 0_na_tpl/0/9/w_tpl_0_na_916f4caa.rom aus der c_1_na.pak
(Hinter der Dateinummer 49722 fängt der Pfadstring verhunzt an, hatte keinen Nerv auf type casting.)

Ich versuche mal, mein tool flexibler zu gestalten, so dass man auch andere als tpl entpacken/benennen kann, aber erstmal sind die (item) templates dran.

whispertante
07.03.2022, 22:08
Ahh okay, das muss ich mal in Ruhe zu Gemüte führen..
Aber nur kurz als Rückfrage: Welche csv meinst du?

tombom81
07.03.2022, 23:01
Ahh okay, das muss ich mal in Ruhe zu Gemüte führen..
Aber nur kurz als Rückfrage: Welche csv meinst du?Die in den paks, hier für die Kollisionsdateien:

2847. 0_na_col/0/f/w_col_0_na_ffca2fde.rom
2848. 0_na_col/w_col_0_na.csv <-----------------------------------------------
2849. 0_na_col/w_col_0_na.db
2850. 0_na_cut/0/0/w_cut_0_na_0070c664.rom

Bei dir ne _snd csv, wobei in snd sind die sfx, muss ich nochmal nachgucken

Wenn du erst mit ELEX Modden startest, ists im Moment natürlich deutlich schwieriger als bei ELEX (1), wo ja der elexresman klaglos arbeitet.

(Bei mir hakt es gerade beim hash-Vergleich; hoffentlich nur der übliche Dreher-Fehler?:dnuhr:)

Gute Nacht.

George
08.03.2022, 01:25
Habe heute Abend Unterstützung für das Lesen von Elex 2 Pak-Dateien in elexresman eingebaut: Github (https://github.com/georgeto/rmtools/commit/f7e69f408fdd5259cb525505bd007d49fe6d513c)

Ich hoffe das hilft euch bei euren Moddingbestrebungen weiter.
EDIT: Das Lesen der Dateinamen hatte ich extrem ineffizient implementiert, hier eine verbesserte Version, mit der es deutlich schneller geht.
51593

Asloner
08.03.2022, 02:35
Habe heute Abend Unterstützung für das Lesen von Elex 2 Pak-Dateien in elexresman eingebaut: Github (https://github.com/georgeto/rmtools/commit/f7e69f408fdd5259cb525505bd007d49fe6d513c)

Ich hoffe das hilft euch bei euren Moddingbestrebungen weiter.
51592
Большое спасибо. Буду сегодня проверять!

Danke schön. Ich werde es heute überprüfen!

whispertante
08.03.2022, 10:32
Danke, das hilft auf jeden Fall schon mal weiter!

DataSchmuck
08.03.2022, 22:39
Habe heute Abend Unterstützung für das Lesen von Elex 2 Pak-Dateien in elexresman eingebaut: Github (https://github.com/georgeto/rmtools/commit/f7e69f408fdd5259cb525505bd007d49fe6d513c)

Ich hoffe das hilft euch bei euren Moddingbestrebungen weiter.
EDIT: Das Lesen der Dateinamen hatte ich extrem ineffizient implementiert, hier eine verbesserte Version, mit der es deutlich schneller geht.
51593

Thank you!
With this I was able to unpack the entire c_1_na.pak

However, the only files I can convert are .elexsnd, and .elexwrl
All the rest result in "unsupported resource type" or, in the case of HDR files, "unknown hdr file version"

But at least audio mods are possible now!

George
09.03.2022, 01:53
Now the elex2resman should be able to convert most of the file formats.
However, .pak, .hdr and .elexwrl are read-only as of now, so folders, .hdrdoc and .elexwrldoc cannot yet be converted back to Elex 2's native file format.
51595

Source code: https://github.com/georgeto/rmtools/tree/elex2

tombom81
09.03.2022, 06:20
Very impressive! Lots of thanks!§wink

w_camera.hdrdoc: if you replace gCCameraTypeDialog by gCCameraEffectBase (as a test only) in the first line and remove that ResourceRevision = CE01; line your new exe version reaches line 4444.

Sangeki
09.03.2022, 07:15
If you remove all ResourceRevision lines it converts it back to .hdr but it doesn't work like that. You just end up with a black screen with HUD elements in-game.

TinyHatastrophe
09.03.2022, 12:10
Now the elex2resman should be able to convert most of the file formats.
However, .pak, .hdr and .elexwrl are read-only as of now, so folders, .hdrdoc and .elexwrldoc cannot yet be converted back to Elex 2's native file format.
51595

Source code: https://github.com/georgeto/rmtools/tree/elex2


Thanks a lot of your work! Sadly it seems there are still minor things to be fixed.

Sunglasses template is unpacked to *.r3tpl, which is then unrecognized when trying to translate then to *doc file with elex2resman, even after their manually changing extension to *.elextpl. Previous version of elex2resman you shared was creating correctly *.elextpl, which can be translated correctly to *.elextpldoc, and back to *.elextpl with newest elex2resman. But then we run to another problem: directory Moonglasses_0_1 (that contains Template/It_Sun_SenseLife.elextpl), when dragged onto newest elex2resman, is not asking for archive generation number and is creating *.pak file that is not loaded by Elex 2, probably because it does expect *.r3tpl. Dragging same directory onto elexresman works fine though, and creates m_x_Moonglasses_0_1.pak (where x is chosen generation number) that works with Elex 2 just fine.

tombom81
09.03.2022, 13:24
Could you give the headerbytes from that Sunglasses elextpl, please?

Don't want to extract 21 GB, did it seperately, header from "my" It_Sun_ItemSight.elextpl is

Offs 0 1 2 3 4 5 6 7 8 9 A B C D E F

0000 47 41 52 35 20 00 00 00 00 00 00 00 00 00 00 00 GAR5 ...........
0010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
0020 00 00 00 00 00 00 00 00 00 00 00 00 47 41 52 35 ............GAR5
0030 20 00 00 00 47 54 50 30 5B E6 39 1B A3 28 7C 2C ...GTP0[æ9.£(|,

I assume, elex2resman changed the offset (Word/DWord) at 0x0004? 0x0020 doesn't seem to fit.

TinyHatastrophe
09.03.2022, 18:08
Well the problem is that elex2resman in version 0.2 is not creating *.elextpl, but *.r3tpl.

My "It_Sun_ItemSight.r3tpl" exported with elex2resman 0.2:



Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000 52 33 52 46 0B 0B 00 00 00 00 00 00 00 00 00 00 R3RF............
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020 00 00 00 00 00 00 00 00 00 00 00 00 47 41 52 35 ............GAR5
00000030 20 00 00 00 47 54 50 30 5B E6 39 1B A3 28 7C 2C ...GTP0[æ9.£(|,


My "It_Sun_ItemSight.elextpl" exported with elex2resman 0.1.1:



Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

00000000 45 31 52 46 0B 0B 00 00 00 00 00 00 00 00 00 00 E1RF............
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000020 00 00 00 00 00 00 00 00 00 00 00 00 47 41 52 35 ............GAR5
00000030 20 00 00 00 47 54 50 30 5B E6 39 1B A3 28 7C 2C ...GTP0[æ9.£(|,


Both files exported from newest version of game on Steam.

George
09.03.2022, 18:56
Yes, version 0.2 was definitely broken. Should be fixed, elex2resman now creates elex2* files.
51597

tombom81
10.03.2022, 16:06
Big thanx to both of you!:gratz

edit: I managed to get the classData (which looked like so before: <02 00 00 00 47 45 43 32 ...
) from infos in w_info.hdr "translated":

"WEIDMANNI5_01769" {
Timestamp = (time 132125812510000000 "Tue Sep 10 09:27:31 2019");
class gCInfo {
Version = 2;
Properties {
class bCString Name = "WEIDMANNI5_01769";
int MainSortID = 1020;
unsigned int SortID = 20628;
class bCString Owner = "Lazar";
class eCEntityStringProxy Partner = "";
bool InfoGiven = False;
float LastExecutionTimestamp = -1;
class bCString Parent = "WEIDMANNI5_01767";
class gCQuestProxy Quest = "";
enum gEInfoCondType ConditionType = gEInfoCondType_General;
enum gEInfoType Type = gEInfoType_Info;
enum gEInfoGameModeType InfoGameModeType = gEInfoGameModeType_Normal;
int GoldCost = 0;
class eCScriptProxyScript GoldCostScript = "";
class eCTemplateEntityProxy GoldCostItem = {00000000-0000-0000-0000-000000000000};
class bTObjArray<class gCRequiredPerk> RequiredPerks = [
];
bool DialogPartnerAutoPositioningEnabled = True;
bool ClearChildren = True;
bool Permanent = False;
int CurrentInfoCommandIndex = 0;
bool InSwitch = False;
bool InfoIsRunnig = False;
int StartChapter = -1;
int EndChapter = -1;
int CommentGivenCmdIndex = 0;
bool CommentRewind = False;
bool CommentUseSmalltalkRanges = False;
bool CommentContinueSVMWanted = False;
bool CommentAbortsOnFight = False;
class eCEntityStringProxy SmalltalkPartner = "";
int SmalltalkGivenCmdIndex = -1;
bool SmalltalkRewind = False;
float SmalltalkInnerRange = 600;
bool SmalltalkInnerRangeTestWithLOS = True;
float SmalltalkOuterRange = 1200;
bool SmalltalkExitEndActiveOverlayRoutine = True;
bool SmalltalkPartnerExitEndActiveOverlayRoutine = True;
class bCString SmalltalkExitRoutineName = "";
class bCString SmalltalkPartnerExitRoutineName = "";
}
ClassData {
[class gCInfo, Version 2] {
InfoCommands {
class gCInfoCommandSay {
Version = 1;
Properties {
class bCString Speaker = "player";
class bCString Listener = "";
bool ThirdPartyListenerInDialogMode = True;
class gCInfoLocString Text = "INFO_WEIDMANNI5_00006447";
enum gEForcedDialogCam ForcedDialogCam = gEForcedDialogCam_None;
enum gEBodyMood ForcedDialogBodyMood = gEBodyMood_None;
enum gEFacialExpression ForcedDialogFacialExpression = gEFacialExpression_None;
}
ClassData {
}
}
class gCInfoCommandSay {
Version = 1;
Properties {
class bCString Speaker = "Lazar";
class bCString Listener = "";
bool ThirdPartyListenerInDialogMode = True;
class gCInfoLocString Text = "INFO_WEIDMANNI5_00006450";
enum gEForcedDialogCam ForcedDialogCam = gEForcedDialogCam_None;
enum gEBodyMood ForcedDialogBodyMood = gEBodyMood_None;
enum gEFacialExpression ForcedDialogFacialExpression = gEFacialExpression_None;
}
ClassData {
}
}
}
InfoConditions {
}
}
}
}
}Hope, I can upate my scripting mod soon.

But I'm too slow, really.§cry

whispertante
11.03.2022, 00:11
If anyone else is struggling to open some of the *.dds files:
It's compressed with BC5. You can still use the bat file /dds/convert_BC7_to_B8G8R8A8.bat in elexresman (see first post) to convert the image. To use it, you need to extend it at line 12ff.:



echo %%i | findstr /i BC7_UNORM > nul && set fmt=B8G8R8A8_UNORM
echo %%i | findstr /i BC7_UNORM_SRGB > nul && set fmt=B8G8R8A8_UNORM_SRGB
echo %%i | findstr /i BC5_UNORM > nul && set fmt=B8G8R8A8_UNORM
echo %%i | findstr /i BC5_SNORM > nul && set fmt=B8G8R8A8_UNORM
echo %%i | findstr /i BC5_UNORM_SRGB > nul && set fmt=B8G8R8A8_UNORM_SRGB

godagarah5000
11.03.2022, 22:33
Big thanx to both of you!:gratz

edit: I managed to get the classData (which looked like so before: <02 00 00 00 47 45 43 32 ...
) from infos in w_info.hdr "translated":

"WEIDMANNI5_01769" {
Timestamp = (time 132125812510000000 "Tue Sep 10 09:27:31 2019");
class gCInfo {
Version = 2;
Properties {
class bCString Name = "WEIDMANNI5_01769";
int MainSortID = 1020;
unsigned int SortID = 20628;
class bCString Owner = "Lazar";
class eCEntityStringProxy Partner = "";
bool InfoGiven = False;
float LastExecutionTimestamp = -1;
class bCString Parent = "WEIDMANNI5_01767";
class gCQuestProxy Quest = "";
enum gEInfoCondType ConditionType = gEInfoCondType_General;
enum gEInfoType Type = gEInfoType_Info;
enum gEInfoGameModeType InfoGameModeType = gEInfoGameModeType_Normal;
int GoldCost = 0;
class eCScriptProxyScript GoldCostScript = "";
class eCTemplateEntityProxy GoldCostItem = {00000000-0000-0000-0000-000000000000};
class bTObjArray<class gCRequiredPerk> RequiredPerks = [
];
bool DialogPartnerAutoPositioningEnabled = True;
bool ClearChildren = True;
bool Permanent = False;
int CurrentInfoCommandIndex = 0;
bool InSwitch = False;
bool InfoIsRunnig = False;
int StartChapter = -1;
int EndChapter = -1;
int CommentGivenCmdIndex = 0;
bool CommentRewind = False;
bool CommentUseSmalltalkRanges = False;
bool CommentContinueSVMWanted = False;
bool CommentAbortsOnFight = False;
class eCEntityStringProxy SmalltalkPartner = "";
int SmalltalkGivenCmdIndex = -1;
bool SmalltalkRewind = False;
float SmalltalkInnerRange = 600;
bool SmalltalkInnerRangeTestWithLOS = True;
float SmalltalkOuterRange = 1200;
bool SmalltalkExitEndActiveOverlayRoutine = True;
bool SmalltalkPartnerExitEndActiveOverlayRoutine = True;
class bCString SmalltalkExitRoutineName = "";
class bCString SmalltalkPartnerExitRoutineName = "";
}
ClassData {
[class gCInfo, Version 2] {
InfoCommands {
class gCInfoCommandSay {
Version = 1;
Properties {
class bCString Speaker = "player";
class bCString Listener = "";
bool ThirdPartyListenerInDialogMode = True;
class gCInfoLocString Text = "INFO_WEIDMANNI5_00006447";
enum gEForcedDialogCam ForcedDialogCam = gEForcedDialogCam_None;
enum gEBodyMood ForcedDialogBodyMood = gEBodyMood_None;
enum gEFacialExpression ForcedDialogFacialExpression = gEFacialExpression_None;
}
ClassData {
}
}
class gCInfoCommandSay {
Version = 1;
Properties {
class bCString Speaker = "Lazar";
class bCString Listener = "";
bool ThirdPartyListenerInDialogMode = True;
class gCInfoLocString Text = "INFO_WEIDMANNI5_00006450";
enum gEForcedDialogCam ForcedDialogCam = gEForcedDialogCam_None;
enum gEBodyMood ForcedDialogBodyMood = gEBodyMood_None;
enum gEFacialExpression ForcedDialogFacialExpression = gEFacialExpression_None;
}
ClassData {
}
}
}
InfoConditions {
}
}
}
}
}Hope, I can upate my scripting mod soon.

But I'm too slow, really.§cry
i should have maybe let uk right after i noticed the reply too xD

Das M.
13.03.2022, 08:53
Huge thanks for getting Elex 2 Modding on the road §herz

So, I've tried replacing the Alb Commander Armor with the looks of the Elexetor Armor but it seems I can't do it.
Or maybe it can't be done. There seems to be no Template whatsoever for the Elexetor armor (which makes sense if it's not a regular armor, I guess) so I don't know what to do.


Do you guys have any idea?

tombom81
15.03.2022, 14:42
Thanks!

For w_info.hdr you need to insert "NFO1" like so, after having reconverted from hdrdoc to hdr.
https://upload.worldofplayers.de/files12/ELEX2_w_info.hdr.jpg
(Didn't check if ELEX 2 accepts this so far.)

Skeroujvapluvit
16.03.2022, 17:25
Hi elex community, I have a simple question, how is the link made between a template item (in .elex2tpldoc file) or sector item (in .elex2secdoc file) and its translation (localisation string in .str files with id like ffd13a9c) ?

tombom81
16.03.2022, 18:44
Hi, I chose another example:

template
It_1h_Sword_Sky_01_Damaged.elex2tpl
fo_it_1h_sword_sky_01_damaged -> djb2 hash = 0xDD5BFF34 (34ff5bdd in de.str)

(fo means focus)

German strings.csv: dd5bff34|Beschädigte Sphärenklinge|

Skeroujvapluvit
16.03.2022, 21:07
Hi, I chose another example:

template
It_1h_Sword_Sky_01_Damaged.elex2tpl
fo_it_1h_sword_sky_01_damaged -> djb2 hash = 0xDD5BFF34 (34ff5bdd in de.str)

(fo means focus)

German strings.csv: dd5bff34|Beschädigte Sphärenklinge|

It's really strange


Here is my code (I am using nodejs):



const START_HASH_VALUE = 5381;


console.dir(djb2('fo_it_1h_sword_sky_01_normal').toString(16));
console.dir(djb2('fo_it_1h_sword_sky_01_damaged').toString(16));
console.dir(djb2('fo_it_1h_axe_mor_01_damaged').toString(16));
console.dir(djb2('fo_it_1h_axe_mor_02_damaged').toString(16));
console.dir(djb2('fo_it_1h_axe_mor_03_damaged').toString(16));
console.dir(djb2('fo_it_1h_axe_mor_04_damaged').toString(16));
console.dir(djb2('fo_it_1h_axe_mor_05_damaged').toString(16));


function reduceToHash(array) {
return array.reduce(function (prev, curr) {
return (prev << 5) + prev + curr;
}, START_HASH_VALUE);
}


function djb2(input) {
if (input && input.constructor && input.constructor.name === 'Array' && input.length) {
return reduceToHash(input);
} else if (input && typeof input === 'string' && input.length) {
return reduceToHash(input.split('').map(function (str) {
return str.charCodeAt(0);
}));
} else {
return new Error('Empty input.');
}
}




result (in the french csv file extracted) :

'107c3425a' => not found but found in 07c3425a
'dd5bff34' => found
'-145c1cb26' => not found
'2ebaa5db' => found
'-15cc8e924' => not found
'17b387dd' => found
'-73d00722' => not found

What I miss ???

EDIT : founded, its because my function dont manage signed to unsigned



function reduceToHash(array) {
return array.reduce(function (prev, curr) {
return (prev << 5) + prev + curr;
}, START_HASH_VALUE)>>>0;
}

whispertante
17.03.2022, 16:22
Hello everyone,
does someone know where the perks are specified? I only find some references in w_ui.hdr, e.g. this one gESkill_Perk_MonsterXP. But where is the script/Class?

Btw. I am trying to compile the elexresman.cpp and I am getting tons of errors with VS Code.... Oh Mann... §cry

tombom81
17.03.2022, 16:46
Hello everyone,
does someone know where the perks are specified? I only find some references in w_ui.hdr, e.g. this one gESkill_Perk_MonsterXP. But where is the script/Class?

For E1 one Perk was in the exe only (https://forum.worldofplayers.de/forum/threads/1574503-Modding-Skills-Perks?p=26711975&viewfull=1#post26711975). Dunno about E2.


Btw. I am trying to compile the elexresman.cpp and I am getting tons of errors with VS Code.... Oh Mann... §cryWorks like a charme for me after I patched it back to VS2013 for technical reasons. (Had to treat zlib seperately because of my deprecated "system".)
Tell the error message, maybe I can give some hints.

(Generally it should compile without problems under VS2019 with working git clone and nuget "connection".)

whispertante
17.03.2022, 17:11
Thanks for your answer!
Mhmm, okay that would explain it. I think if the perks were configurable, it would be in the hdr files and it's not there.

Here is my error log when I try to compile elexresman.cpp (elex2 branch). I cloned it from georgeto and put zlib in the root folder of my working space. At least, I am not getting errors regarding zlib.


[elexresman.cpp 2022-03-17 17:02:22.323],,In file included from ..\Mimicry\mi_array.h:135,
from ..\Mimicry\mi_include_array.h:7,
from ..\Mimicry.h:8,
from elexresman.cpp:2:
..\Mimicry\mi_array.inl: In function 'void g_zero(T&)':
..\Mimicry\mi_array.inl:22:65: error: type/value mismatch at argument 2 in template parameter list for 'template<class T, class U> struct array_internal::SZeroHelper'
22 | array_internal::SZeroHelper< T, mSTypeTagHelper< T >::msTag >::Zero( a_Dest );
| ^
..\Mimicry\mi_array.inl:22:65: note: expected a type, got 'mSTypeTagHelper<T>::msTag'
..\Mimicry\mi_array.inl: In member function 'MIBool mTArray<T>::operator!=(const mTArray<T>&) const':
..\Mimicry\mi_array.inl:117:36: error: expected ';' before '}' token
117 | return !( *this == a_arrOther )
| ^
| ;
118 | }
| ~
..\Mimicry\mi_array.inl: In member function 'T& mTArray<T>::CIterator::operator*() const':
..\Mimicry\mi_array.inl:629:25: error: 'm_uIndex' was not declared in this scope
629 | return m_pElements[ m_uIndex ];
| ^~~~~~~~
..\Mimicry\mi_array.inl: In member function 'T& mTArray<T>::CIterator::operator[](MIUInt) const':
..\Mimicry\mi_array.inl:641:25: error: 'm_uIndex' was not declared in this scope; did you mean 'a_uIndex'?
641 | return m_pElements[ m_uIndex + a_uIndex ];
| ^~~~~~~~
| a_uIndex
..\Mimicry\mi_array.inl: In member function 'mTArray<T>::CIterator& mTArray<T>::CIterator::operator++()':
..\Mimicry\mi_array.inl:655:7: error: 'm_uIndex' was not declared in this scope
655 | ++m_uIndex;
| ^~~~~~~~
..\Mimicry\mi_array.inl: In member function 'mTArray<T>::CIterator& mTArray<T>::CIterator::operator--()':
..\Mimicry\mi_array.inl:670:7: error: 'm_uIndex' was not declared in this scope
670 | --m_uIndex;
| ^~~~~~~~
..\Mimicry\mi_array.inl: In member function 'mTArray<T>::CIterator& mTArray<T>::CIterator::operator+=(MIInt)':
..\Mimicry\mi_array.inl:677:5: error: 'm_uIndex' was not declared in this scope
677 | m_uIndex += a_iCount;
| ^~~~~~~~
..\Mimicry\mi_array.inl: In member function 'mTArray<T>::CIterator& mTArray<T>::CIterator::operator-=(MIInt)':
..\Mimicry\mi_array.inl:684:5: error: 'm_uIndex' was not declared in this scope
684 | m_uIndex -= a_iCount;
| ^~~~~~~~
..\Mimicry\mi_array.inl: In member function 'MIBool mTArray<T>::CIterator::operator==(const mTArray<T>::CIterator&) const':
..\Mimicry\mi_array.inl:705:14: error: 'm_uIndex' was not declared in this scope
705 | return ( m_uIndex == a_itOther.m_uIndex ) && ( m_pElements == a_itOther.m_pElements );
| ^~~~~~~~
..\Mimicry\mi_array.inl: In member function 'MIBool mTArray<T>::CIterator::operator<(const mTArray<T>::CIterator&) const':
..\Mimicry\mi_array.inl:717:28: error: 'm_uIndex' was not declared in this scope
717 | return ( m_pElements + m_uIndex ) < ( a_itOther.m_pElements + a_itOther.m_uIndex );
| ^~~~~~~~
..\Mimicry\mi_array.inl: In member function 'MIBool mTArray<T>::CIterator::operator>(const mTArray<T>::CIterator&) const':
..\Mimicry\mi_array.inl:723:28: error: 'm_uIndex' was not declared in this scope
723 | return ( m_pElements + m_uIndex ) > ( a_itOther.m_pElements + a_itOther.m_uIndex );
| ^~~~~~~~
In file included from ..\Mimicry\mi_map.h:177,
from ..\Mimicry\mi_include_map.h:7,
from ..\Mimicry.h:9,
from elexresman.cpp:2:
..\Mimicry\mi_map.inl: In member function 'mTMap<K, T, C>& mTMap<K, T, C>::operator=(const mTMap<K, T, C>&)':
..\Mimicry\mi_map.inl:38:30: error: 'a_mapOther' was not declared in this scope
38 | mTMap< K, T, C > mapNew( a_mapOther );
| ^~~~~~~~~~
In file included from ..\Mimicry\mi_map.h:177,
from ..\Mimicry\mi_include_map.h:7,
from ..\Mimicry.h:9,
from elexresman.cpp:2:
..\Mimicry\mi_map.inl: In member function 'T& mTMap<K, T, C>::CIterator::operator*() const':
..\Mimicry\mi_map.inl:428:15: error: 'm_pBuckets' was not declared in this scope; did you mean 'm_arrBuckets'?
428 | return ( *m_pBuckets )[ m_uIndex ].m_Data;
| ^~~~~~~~~~
| m_arrBuckets
..\Mimicry\mi_map.inl:428:29: error: 'm_uIndex' was not declared in this scope
428 | return ( *m_pBuckets )[ m_uIndex ].m_Data;
| ^~~~~~~~
..\Mimicry\mi_map.inl: In constructor 'mTStringMap<T>::mTStringMap(MIUInt)':
..\Mimicry\mi_map.inl:607:5: error: class 'mTStringMap<T>' does not have any field named 'mTMap'
607 | mTMap( a_uMinCapacity )
| ^~~~~
..\Mimicry\mi_map.inl: In copy constructor 'mTStringMap<T>::mTStringMap(const mTStringMap<T>&)':
..\Mimicry\mi_map.inl:613:5: error: class 'mTStringMap<T>' does not have any field named 'mTMap'
613 | mTMap( a_mapSource )
| ^~~~~
..\Mimicry\mi_map.inl: In constructor 'mTNameMap<T>::mTNameMap(MIUInt)':
..\Mimicry\mi_map.inl:619:5: error: class 'mTNameMap<T>' does not have any field named 'mTMap'
619 | mTMap( a_uMinCapacity )
| ^~~~~
..\Mimicry\mi_map.inl: In copy constructor 'mTNameMap<T>::mTNameMap(const mTNameMap<T>&)':
..\Mimicry\mi_map.inl:625:5: error: class 'mTNameMap<T>' does not have any field named 'mTMap'
625 | mTMap( a_mapSource )
| ^~~~~
..\Mimicry\mi_map.inl: In constructor 'mTIDMap<T>::mTIDMap(MIUInt)':
..\Mimicry\mi_map.inl:631:5: error: class 'mTIDMap<T>' does not have any field named 'mTMap'
631 | mTMap( a_uMinCapacity )
| ^~~~~
..\Mimicry\mi_map.inl: In copy constructor 'mTIDMap<T>::mTIDMap(const mTIDMap<T>&)':
..\Mimicry\mi_map.inl:637:5: error: class 'mTIDMap<T>' does not have any field named 'mTMap'
637 | mTMap( a_mapSource )
| ^~~~~
In file included from ..\Mimicry\mi_ostream.h:49,
from ..\Mimicry\mi_include_streams.h:10,
from ..\Mimicry.h:11,
from elexresman.cpp:2:
..\Mimicry\mi_ostream.inl: At global scope:
..\Mimicry\mi_ostream.inl:207:77: error: specialization of 'mTOStream<M>& mTOStream<M>::operator<<(MILPCChar) [with mEStreamType M = mEStreamType_Formatted; MILPCChar = const char*]' after instantiation
207 | mCOStreamFormatted & mCOStreamFormatted::operator << ( MILPCChar a_pcSource )
| ^
elexresman.cpp: In function 'MIBool DdsToImg(mCIOStreamBinary&, const mCString&, MIBool&)':
elexresman.cpp:1330:11: warning: unused variable 'u32SkipMips' [-Wunused-variable]
1330 | MIU32 u32SkipMips = ( uMipMapCount && uWidth >= 128 ) ? ( uWidth == 128 ? 257 : 258 ) : 0;
| ^~~~~~~~~~~
elexresman.cpp: In function 'int main(int, char**)':
elexresman.cpp:1636:61: warning: unused variable 'bIsWavFile' [-Wunused-variable]
1636 | MIBool bIsResourceFile = MIFalse, bIsDdsFile = MIFalse, bIsWavFile = MIFalse;
| ^~~~~~~~~~
In file included from ..\Mimicry\mi_array.h:135,
from ..\Mimicry\mi_include_array.h:7,
from ..\Mimicry.h:8,
from elexresman.cpp:2:
..\Mimicry\mi_array.inl: In instantiation of 'void mTArray<T>::RemoveAt(MIUInt) [with T = {anonymous}::SFrame; MIUInt = unsigned int]':
elexresman.cpp:499:35: required from here
..\Mimicry\mi_array.inl:270:14: warning: comparison of unsigned expression in '>= 0' is always true [-Wtype-limits]
270 | if ( ( 0 <= a_uIndex ) && ( a_uIndex <= uLastIndex ) )
| ~~~~^~~~~~~~~~~~~
..\Mimicry\mi_array.inl: In instantiation of 'void mTArray<T>::RemoveAt(MIUInt) [with T = mCGenomeVolume::CDir; MIUInt = unsigned int]':
elexresman.cpp:1518:46: required from here
..\Mimicry\mi_array.inl:270:14: warning: comparison of unsigned expression in '>= 0' is always true [-Wtype-limits]
..\Mimicry\mi_array.inl: In instantiation of 'void mTArray<T>::RemoveAt(MIUInt) [with T = unsigned int; MIUInt = unsigned int]':
..\Mimicry\mi_array.inl:263:5: required from 'void mTArray<T>::Remove(const T&) [with T = unsigned int]'
..\Mimicry\mi_variant.inl:255:45: required from here
..\Mimicry\mi_array.inl:270:14: warning: comparison of unsigned expression in '>= 0' is always true [-Wtype-limits]
..\Mimicry\mi_array.inl: In instantiation of 'void g_zero(T&) [with T = bool]':
..\Mimicry\mi_map.inl:229:15: required from 'T& mTMap<K, T, C>::Add(MIU32, const K&) [with K = mCString; T = bool; C = mTStringKeyManager<mCString>; MIU32 = unsigned int]'
..\Mimicry\mi_map.inl:30:12: required from 'T& mTMap<K, T, C>::operator[](const K&) [with K = mCString; T = bool; C = mTStringKeyManager<mCString>]'
elexresman.cpp:920:104: required from here
..\Mimicry\mi_array.inl:22:68: warning: unused variable 'Zero' [-Wunused-variable]
22 | array_internal::SZeroHelper< T, mSTypeTagHelper< T >::msTag >::Zero( a_Dest );
| ^~~~
..\Mimicry\mi_array.inl: In instantiation of 'void g_zero(T&) [with T = mCVariant::SId]':
..\Mimicry\mi_map.inl:229:15: required from 'T& mTMap<K, T, C>::Add(MIU32, const K&) [with K = mCVariant::SId; T = mCVariant::SId; C = mTKeyManager<mCVariant::SId>; MIU32 = unsigned int]'
..\Mimicry\mi_map.inl:169:20: required from 'MIBool mTMap<K, T, C>::Shrink() [with K = mCVariant::SId; T = mCVariant::SId; C = mTKeyManager<mCVariant::SId>; MIBool = bool]'
..\Mimicry\mi_map.inl:133:21: required from 'void mTMap<K, T, C>::RemoveAt(const K&, T*, MIBool, MIBool*) [with K = mCVariant::SId; T = mCVariant::SId; C = mTKeyManager<mCVariant::SId>; MIBool = bool]'
..\Mimicry\mi_variant.inl:250:23: required from here
..\Mimicry\mi_array.inl:22:68: error: cannot convert 'mCVariant::SId' to 'int' in initialization
..\Mimicry\mi_array.inl:22:68: warning: unused variable 'Zero' [-Wunused-variable]




/Edit Which compiler do you use?

tombom81
17.03.2022, 18:39
/Edit Which compiler do you use?VS2013 (had to change <PlatformToolset>v120</PlatformToolset> like so in the .vcxproj files to get it work)

I remember having had a similar problem with .inl; got rid of it changing or switching a compiler option. Sadly I don't remember which it was.

(Your log is from compiling the mimicry static lib, isn't it?)

whispertante
17.03.2022, 21:23
Okay, I will try it with VS 2013, I think it's the compiler.



(Your log is from compiling the mimicry static lib, isn't it?)

No, just straight

g++ elexresman.cpp

LifaTo
22.03.2022, 18:06
Hello comrades. How can I do localization for mods? I understand that I need software to edit files with the extension .str ?

tombom81
22.03.2022, 18:54
Hello comrade,
was explained >here (https://forum.worldofplayers.de/forum/threads/1513519-release-ELEX-string-table-un-packer-%28lianzifu%29?p=26490028&viewfull=1#post26490028)< and maybe some post before.
(Former w_strings.bin was split up into en.str, de.str, etc.)

btw: with no map file you will get all strings in strings.csv, the other csv files left empty, more or less, except for a header line.

Skeroujvapluvit
24.03.2022, 22:13
Hi everyone

I am trying to convert maps dds file to png with detex-convert (used here for elex 1 : https://github.com/hhrhhr/LuaELEX)

When i run this command :


for f in *.dds ; do detex-convert -o RGB8 "$f" "./png/${f%.dds}.png" ; done

I have this error



detex-convert v0.1.2
detexLoadDDSFileWithMipmaps: Unsupported format in .dds file (fourCC = DX10, DX10 format = 91).


What i miss ?

EDIT :

Founded, just by change the convert_BC7_to_B8G8R8A8 script in elex resources manager and set the output format to PNG



...
if not exist png mkdir png
"%~dp0\texconv" -ft PNG -f %fmt% -o png %1

xenonisbad
25.03.2022, 01:22
To test your modifications it will be helpful to unlock the DebugKeys by running this batch script (https://upload.worldofplayers.de/files10/EnableElexDebugKeys.bat) in your ELEX\system folder.

Any chance to get that batch script updated as well?

Skeroujvapluvit
25.03.2022, 20:54
Hi everyone

Is it possible to extract game icons ? (maps icons and inventory icons)

LiveToWin
25.03.2022, 21:27
Hi
Elex I. The game breaks if I try to change INFO_IKENI7_00012015_English.elexdlg. With other modified .elexdlg the game works fine.
https://drive.google.com/file/d/1UkZ5RfjNGKDN2gJaMAnq_F317Bvz13IC/view?usp=sharing

tombom81
25.03.2022, 22:24
Hi
Elex I. The game breaks if I try to change INFO_IKENI7_00012015_English.elexdlg. With other modified .elexdlg the game works fine.
https://drive.google.com/file/d/1UkZ5RfjNGKDN2gJaMAnq_F317Bvz13IC/view?usp=sharingDidn't deal with .elexdlg so far, but maybe having GAR5 twice in your changed one might be an issue?:dnuhr: (in the original .elexdlg there's only one GAR5)

edit: see, when the original sound data is bigger than the injected one you may happen to have GAR5 twice.:D

LiveToWin
26.03.2022, 07:09
Didn't deal with .elexdlg so far, but maybe having GAR5 twice in your changed one might be an issue?:dnuhr: (in the original .elexdlg there's only one GAR5)
Hmm... If I use one modified .elexdlg (even the one I have attached in the archive), then the game works fine. If two or more, then the game freezes on the title screen. Very strange.
What is GAR5? mp3 compression algorithm?

tombom81
26.03.2022, 07:41
Hmm... If I use one modified .elexdlg (even the one I have attached in the archive), then the game works fine. If two or more, then the game freezes on the title screen. Very strange.
What is GAR5? mp3 compression algorithm?Nope, kinda signature, you can find it in .sec and .tpl files, too. But only once, afaics. ("G" for genome, probably.)

To track the problem down you might need to start elex 2 using a debugger, x64dbg or such.

LiveToWin
26.03.2022, 15:07
Nope, kinda signature, you can find it in .sec and .tpl files, too. But only once, afaics. ("G" for genome, probably.)

To track the problem down you might need to start elex 2 using a debugger, x64dbg or such.
Well, ОК.
Is there any information about what parameters the converted mp3 file should have? Bitrate, for example?

TinyHatastrophe
26.03.2022, 19:31
It look like elex2resman 0.2.1. still have some issues with file formats. I was trying to edit sector, I could unpack them, but I couldn't pack them back.

Dragging "ATE_Crater_NPCs.elex2sec" onto Elex2resman 0.2.1 -> ATE_Crater_NPCs.elex2secdoc
Dragging "ATE_Crater_NPCs.elex2secdoc" onto elex2resman 0.2.1:



Error: Unsupported file type: my_path\Sector\ATE_Crater_NPCs.elex2secdoc
Press ENTER to exit...

I tried to check what exactly is wrong in source code, but it seems that both master and elex2 branches are much older than 0.2.1

tombom81
26.03.2022, 20:11
You have to increase some version and revision numbers by one. We should give George some time to update the source code.

(I could send you my patched exe meanwhile but it's dead ugly.)

George
26.03.2022, 21:19
I tried to check what exactly is wrong in source code, but it seems that both master and elex2 branches are much older than 0.2.1
Sorry, I forgot to commit and push the changes made for 0.2.1. Now the source code of the elex2 branch should be in sync with 0.2.1.
I probably won't get to work on elex2resman in the near future, so it would be great if someone else takes over.

tombom81
26.03.2022, 23:07
Bedankt!:gratz - das sollte weitestgehend genügen.

Zu dem toDo in SndDlgToFsb(); offset -44 hat in ELEX (1) gepasst, richtig?

George
26.03.2022, 23:39
Bedankt!:gratz - das sollte weitestgehend genügen.

Zu dem toDo in SndDlgToFsb(); offset -44 hat in ELEX (1) gepasst, richtig?
Ja genau, das ist der Wert von Elex 1.

Redmatix
27.03.2022, 21:09
Yes, version 0.2 was definitely broken. Should be fixed, elex2resman now creates elex2* files.
51597

also bei mir wird ein trojaner festgestellt darum lad ich es erstmal nicht runter. aber mal dumm gefragt kann man Elex 2 keine texturen bearbeiten?

tombom81
27.03.2022, 22:11
Deine Entscheidung. 58 scanner finden keine Bedrohung:

https://upload.worldofplayers.de/files12/checked_0_von_58_scanner_detected_a_threat.jpg

tombom81
29.03.2022, 00:23
It look like elex2resman 0.2.1. still have some issues with file formats. I was trying to edit sector, I could unpack them, but I couldn't pack them back.

Dragging "ATE_Crater_NPCs.elex2sec" onto Elex2resman 0.2.1 -> ATE_Crater_NPCs.elex2secdoc
Dragging "ATE_Crater_NPCs.elex2secdoc" onto elex2resman 0.2.1:



I tried to check what exactly is wrong in source code, but it seems that both master and elex2 branches are much older than 0.2.1yeah, you're right, there's a typo in elexresman.cpp:

else if ( g_GetFileExt( strPath ).ToLower() == "elexs2ecdoc" )
should spell "elex2secdoc".

For those who don't like to compile the whole thing, you can easily patch the exe file using a hexeditor;
search for "elexs2ecdoc" and swap the two chars "s" and "2".
https://upload.worldofplayers.de/files12/swap_s_and_2.jpg

(Ignore the offsets, they are from the exe I compiled; will be different for the exe uploaded by George.)

Shifroval
31.03.2022, 23:32
Hello!

Is there any way to convert Elex 2 stringtable files to a readable format? The old lianzifu is not an option, since the game lacks loc.ini or it's hidden somewhere, but I unpacked all paks and it's not here. Can't find it in any of the game's folders either.
I'm making a mod that eliminates level scaling for the quest enemies and need to know the displayed names of npcs and monsters to identify them, because in sector files sometimes they are called by the names the developers called them internally. For example there are two people by the names Bru and Ted in Ignadon, but I haven't encountered them. There's also someone named Dabro in Ateris.

Level scaling should burn in hell, there's no place for it in a PB game.
Yes, every character template (and thus sector file with npcs in it) has two variables:
IsScalingWithPlayerLvl = True
LvlDifferenceToPlayer = 0
The first one enables the scaling, the second one adds or distracts levels manually on top of the original scaling.
For a more visual example watch this video. The quest robots become damage sponges and require tens of hits with one of the most powerful weapons + Jax has all melee skills and very high strength. In the video the person showcasing it uses critical hits on the downed enemies, but I got in touch with this person and he gave me his saves. Using normal strikes it takes ages to dispatch a single enemy, plus they hit really hard.

https://www.youtube.com/watch?v=ReH0LUEOjqU
When I disabled it, using the most powerful sword it took me 5 hits to kill them on ultra and almost 4 on normal. Pretty fair, I think.

TinyHatastrophe
01.04.2022, 08:40
It look like elex2resman 0.2.1. still have some issues with file formats. I was trying to edit sector, I could unpack them, but I couldn't pack them back.

Dragging "ATE_Crater_NPCs.elex2sec" onto Elex2resman 0.2.1 -> ATE_Crater_NPCs.elex2secdoc
Dragging "ATE_Crater_NPCs.elex2secdoc" onto elex2resman 0.2.1:



Error: Unsupported file type: my_path\Sector\ATE_Crater_NPCs.elex2secdoc
Press ENTER to exit...



yeah, you're right, there's a typo in elexresman.cpp:

else if ( g_GetFileExt( strPath ).ToLower() == "elexs2ecdoc" )
should spell "elex2secdoc".


I've fixed those two issues on my fork: https://github.com/TinyHatastrophe/rmtools/tree/elex2-0-2-2. Also simplified compilation under VS, elexmanres.cpp is now used as main file for executable by default. Changes are on separate branch for the time being, because I wanted to test all *.hdrdoc files before accepting pull request.

I would attach executable but it seems I don't know how / I don't have high permission to do so.




Is there any way to convert Elex 2 stringtable files to a readable format? The old lianzifu is not an option, since the game lacks loc.ini or it's hidden somewhere, but I unpacked all paks and it's not here. Can't find it in any of the game's folders either.

You can copy loc.ini from Elex 1 folder, it should be the same, but because we are missing IDs-to-internal names I doubt it will be much of a help. This file contains only information how to split text between *.csv files, it doesn't impact content of human readable output I think.



Level scaling should burn in hell, there's no place for it in a PB game.

Well, thanks to you I decided to check how my "Disable Level Scaling" mod is doing I just realized I published my Elex 2 mod for Elex 1 by accident. It doesn't work exactly like the mod you are trying to do though, I've disabled level scaling for everything I could find other than companions. And that means Changelings always have level 70...

Honestly I don't think the level scaling itself is a problem, but how it is implemented and how it works in relation to character progression. I think level scaling on quest enemies would be fine, if character damage was increased constantly. In reality pretty quickly I've reached a point where to increase my damage by 1% I needed several hours, but enemies were doubling their HP in the meantime. If they created some cap for enemies, or gave us a chance to constantly increase damage, it wouldn't be such a problem as it is now.


need to know the displayed names of npcs and monsters to identify them, because in sector files sometimes they are called by the names the developers called them internally. For example there are two people by the names Bru and Ted in Ignadon, but I haven't encountered them. There's also someone named Dabro in Ateris.


I think mapping ID->internal name can be problematic, we still don't have all IDs mapped to names for Elex 1, and there's big chance we will never have that. To my understanding game doesn't need to know how to map IDs to internal names, because it operates on internal names, and just calculates IDs based on internal names concatenated with prefixes and then check text attached to those IDs, so we won't find anything in game files. It would be awesome if we could find all possible prefixes and how IDs are calculated exactly.

When it comes to NPC, you can check if there is NPC name in ELEX2\data\raw\strings.csv after running lianzifu with empty loc.ini. If their name isn't there, you can be 99% sure they are named differently in-game than in files. Bru and Ted are there, and I can confirm this is how they are named in-game, because I met them. I don't remember Dabro, but his name is in string table, so most likely this is how he named in-game.

But anyway, I think the best way to check if NPC is part of the quest it to check documents/w_quest.hdrdoc. If NPC is listed there, it means it's connected to quest, and under Properties -> enum gEQuestType Type you can check if it's a quest about killing/dueling someone. I think even duels where we can choose dialogue option to provoke someone should be marked there as sub-quests for fight. You can also use internal names to guess what quest they are part of to find them in-game.

tombom81
01.04.2022, 09:20
Hello!

Is there any way to convert Elex 2 stringtable files to a readable format? The old lianzifu is not an option, since the game lacks loc.iniHello, dunno whether the missing loc.ini is an issue cause I didn't repack an E2 string.csv so far.

Getting that csv is possible using lianzifu. Try batch file from post linked <here (https://forum.worldofplayers.de/forum/threads/1513519-release-ELEX-string-table-un-packer-%28lianzifu%29?p=26490028&viewfull=1#post26490028)>.
From german strings.csv:

ID|German_Text|German_StageDir
fffa924e|Angreifender Schleimdrakon|
fff36886|Wenn du im richtigen Moment wegspringst, verursachen Explosionen keinen Schaden bei dir.
Drücke $(ActionInput_Move) + $(Action), um der Explosion auszuweichen.|
...


For example there are two people by the names Bru and Ted in Ignadon, but I haven't encountered them. They are in the worldwaitingroom (invisible). Dunno, when they'll become active and where.


There's also someone named Dabro in Ateris. Is here:
https://upload.worldofplayers.de/files12/Dabro.jpg


Level scaling should burn in hell, there's no place for it in a PB game.Haha, yes, happy modding!§wink


When I disabled it, using the most powerful sword it took me 5 hits to kill them on ultra and almost 4 on normal. Pretty fair, I think.Cool!:gratz

Shifroval
01.04.2022, 09:53
You can copy loc.ini from Elex 1 folder, it should be the same, but because we are missing IDs-to-internal names I doubt it will be much of a help. This file contains only information how to split text between *.csv files, it doesn't impact content of human readable output I think.

Well, thanks to you I decided to check how my "Disable Level Scaling" mod is doing I just realized I published my Elex 2 mod for Elex 1 by accident. It doesn't work exactly like the mod you are trying to do though, I've disabled level scaling for everything I could find other than companions. And that means Changelings always have level 70...

Honestly I don't think the level scaling itself is a problem, but how it is implemented and how it works in relation to character progression. I think level scaling on quest enemies would be fine, if character damage was increased constantly. In reality pretty quickly I've reached a point where to increase my damage by 1% I needed several hours, but enemies were doubling their HP in the meantime. If they created some cap for enemies, or gave us a chance to constantly increase damage, it wouldn't be such a problem as it is now.
Thanks for suggestion, but as you have already made such a mod, it seems my job here is done
https://c.tenor.com/pagVxAkHfWAAAAAC/my-job-here-is-done-bye.gif
My approach was to edit sectors and not templates, because scanning through all of them will take several days of work. I do not have any parsers and do not have any programming skills so I do everything manually. Right now I'm compiling a table consisting of all scaled enemies data, including hp, attack and level to see how much "damage" I'm doing by disabling scaling. But so far scaling is excessive, some enemies already have 1000+ hp and will be scaled even further.
I see your mod also affects templates, but generally it's not needed, sector files superseed templates. Unless I'm missing something here.
Anyway, great job! I'll start playing with your mod and see how it goes.

P.S Why is Changeling lv 70 bad? I still haven't advanced past chapter 2 (waiting for another patch, my hope is strong here) but I know it's something from the final parts of the game.


Hello, dunno whether the missing loc.ini is an issue cause I didn't repack an E2 string.csv so far.

Getting that csv is possible using lianzifu. Try batch file from post linked <here (https://forum.worldofplayers.de/forum/threads/1513519-release-ELEX-string-table-un-packer-%28lianzifu%29?p=26490028&viewfull=1#post26490028)>.
From german strings.csv:

ID|German_Text|German_StageDir
fffa924e|Angreifender Schleimdrakon|
fff36886|Wenn du im richtigen Moment wegspringst, verursachen Explosionen keinen Schaden bei dir.
Drücke $(ActionInput_Move) + $(Action), um der Explosion auszuweichen.|
...

I used the batch file for Elex 1 and lianzifu gives me the error that it's missing loc.ini
TinyHatastrophe told me to use loc.ini from Elex 1, but I don't have the game installed. My whole point was to disable scaling, and now it's not needed anymore.

tombom81
01.04.2022, 10:17
I see your mod also affects templates, but generally it's not needed, sector files superseed templates. Unless I'm missing something here.For some properties templates were required, at least for ELEX 1. Maybe that has changed with ELEX 2, but I wouldn't bet on it.

btw: when posting previously I didn't notice TinyHatastrophe had already answered to your request

Shifroval
01.04.2022, 10:24
For some properties templates were required, at least for ELEX 1. Maybe that has changed with ELEX 2, but I wouldn't bet on it.
My tests show that scaling applies to spawned quest monsters after I edit the corresponding sector only. Dunno if it's applied retroactively to the monsters that are near you when you load the game though. Judging by the respawnable nature of the world, templates are more likely used for entities spawned after the initial world load or after chapter change. Yes, there're respawn lists for each chapter, like in Gothic.

tombom81
01.04.2022, 11:08
btw, you wrote about "scanning sectors" (and modifying contained entities?) If so elexsecmod from Baltram could ease your life.:D

Search for it in the starting post (Sector modification file : process .elexsecmod).

(The overall process was described in the Risen 3 forum, though, iirc.)

(In case some patching is required for ELEX 2 I could lend a helping hand.)

Shifroval
01.04.2022, 11:42
btw, you wrote about "scanning sectors" (and modifying contained entities?) If so elexsecmod from Baltram could ease your life.:D

Search for it in the starting post (Sector modification file : process .elexsecmod).

(The overall process was described in the Risen 3 forum, though, iirc.)

(In case some patching is required for ELEX 2 I could lend a helping hand.)
But it still requires getting guids from templates or their names (according to the starting post). That's even more work. Unless I'm missing something again.
Modifying sector files requires me to search for 2 lines and modify them, I don't need anything more. Preferrably it should be done with the help of a parser with proper gui. I understand that secmod allows batch editing, but does it work with a random string in the sector?

tombom81
01.04.2022, 11:54
I understand that secmod allows batch editing, but does it work with a random string in the sector?Not to my knowledge. A (ELEX 1) secmod with this line
"Nightshadow" gCNPC_PS gCCombatSystem2_PS
will change those two gC... properties of all Nightshadows in Worldsec files (according to a modified Nightshadow tpl provided).

Shifroval
01.04.2022, 12:15
Not to my knowledge. A (ELEX 1) secmod with this line
"Nightshadow" gCNPC_PS gCCombatSystem2_PS
will change those two gC... properties of all Nightshadows in Worldsec files (according to a modified Nightshadow tpl provided).
That's what I'm talking about. First I need to convert and search sector files for names, then make a secmod file and hope it will work with the line it's clueless about (it's in class gCNPC_PS section though). Twice the work to do, since all quest npcs/monster names are unique. I've already isolated all sectors with enabled scaling long time ago, it was rather easy, just tedious. The hard part is to determine if the sector needs scaling disabled. Only tests will show if some late game quests are too easy. But for now I'm going to play with TinyHatastrophe's mod and modify it to test some specific quests.

TinyHatastrophe
01.04.2022, 14:05
I see your mod also affects templates, but generally it's not needed, sector files superseed templates. Unless I'm missing something here.


Yeah, I thought it works that way, but I saw in some other mods I'm working on that sometimes when there is a difference between Template and Sector, values from Template are overwriting values from Sector. Not sure how that works exactly, so just to be on the safe side, I decided to edit them both.



P.S Why is Changeling lv 70 bad? I still haven't advanced past chapter 2 (waiting for another patch, my hope is strong here) but I know it's something from the final parts of the game.

Because I've played Elex 2 for ~100h and I haven't reach 70 level, so without this mod Changelings were technically easier for me. Also, I've got best sword and all melee damage abilities in very first chapter, so after that I could only increase my damage with strength. And damage bonus from strength is kinda laughable, my character have maximum strength from attribute points and a lot of bonus strength from potions, and yet my bonus from strength is only 30 damage, which is less than 10% of my total melee damage.


My tests show that scaling applies to spawned quest monsters after I edit the corresponding sector only. Dunno if it's applied retroactively to the monsters that are near you when you load the game though. Judging by the respawnable nature of the world, templates are more likely used for entities spawned after the initial world load or after chapter change. Yes, there're respawn lists for each chapter, like in Gothic.

Based on tests I did enemies that are were already directly met (as in: seen by player) may stay in unmodded form after mod is installed. I changed species of Forest Trolls so they will be highlighted like living things, but on my save Forest Troll that I've already seen refused to be highlighted, with both Template and Sector modified, while it perfectly worked on Forest Troll different place. I tried teleporting and flying to the other side of the map and coming back, but that specific Forest Troll kept refusing to be highlighted. Scaling option may be different though, after all it is suppose to be dynamic so NPCs HP would increase with Jax level.


Not to my knowledge. A (ELEX 1) secmod with this line
"Nightshadow" gCNPC_PS gCCombatSystem2_PS
will change those two gC... properties of all Nightshadows in Worldsec files (according to a modified Nightshadow tpl provided).

That's quite interesting, can this be used to add new entries to sector? It would solve my problem with mods compatibility, I wanted to have several mods adding new items to Bastion (new recipes etc.), but:
* if they edit same sector, they overwrite each other sectors, removing each other changes to that sector
* if they edit different sectors, they keep overwriting each others World.elex2wrl, removing each other changes to that file

To make them compatible I was thinking about having one World.elex2wlr file that lists all sector files from all my mods that could be included in all of those mods, but that sounds very tedious and may not work, because it would mean we are listing sectors that may not be in game (because not all mods are installed).


Only tests will show if some late game quests are too easy. But for now I'm going to play with TinyHatastrophe's mod and modify it to test some specific quests.

Honestly I'm counting on feedback, because my mod disables something without deep understanding why it was enabled. Could be they added scalling because they didn't wanted casual players to be punished for focusing on main story only, but could be because they never had a plan which level those enemies should have, so stats they have now are only placeholders, not something planned by PB. To actually test it out I would need to spend 100+h testing this mod in different approaches, and even if I had time for that, I wouldn't had a patience. I mainly made this mod because I hated how spongy enemies were sometimes.

Shifroval
01.04.2022, 14:43
Because I've played Elex 2 for ~100h and I haven't reach 70 level, so without this mod Changelings were technically easier for me. Also, I've got best sword and all melee damage abilities in very first chapter, so after that I could only increase my damage with strength. And damage bonus from strength is kinda laughable, my character have maximum strength from attribute points and a lot of bonus strength from potions, and yet my bonus from strength is only 30 damage, which is less than 10% of my total melee damage.
That's one of the reasons I started with making a table of scaled enemies to see if I'm breaking something. I'll probably publish it in my google docs and make it public, it may prove useful in the future. Right now I need to finish pasting all the stats from templates. Also need to compare your sector list with mine in case I missed anything.
Btw, Changeling has 10120 hp, it's the highest hp value in the game so far. At least accross scaled enemies.
Speaking of strength, can abilities effects, perks, etc be modified or are they hardcoded?


Based on tests I did enemies that are were already directly met (as in: seen by player) may stay in unmodded form after mod is installed. I changed species of Forest Trolls so they will be highlighted like living things, but on my save Forest Troll that I've already seen refused to be highlighted, with both Template and Sector modified, while it perfectly worked on Forest Troll different place. I tried teleporting and flying to the other side of the map and coming back, but that specific Forest Troll kept refusing to be highlighted. Scaling option may be different though, after all it is suppose to be dynamic so NPCs HP would increase with Jax level.
Scaling works dynamically like the difficulty levels, it seems they are applied by same functions, it's easier to use already existing system, instead of making the new one from scratch. Unless PB coders think different. On a side note, negative scaling can nerf recieved exp, I tried setting -20 and got only 50xp instead of 200. So this system is doing more than hp scaling. Or I might just triggered a failsafe, when enemy's lvl can't be lower than 0.


Honestly I'm counting on feedback, because my mod disables something without deep understanding why it was enabled. Could be they added scalling because they didn't wanted casual players to be punished for focusing on main story only, but could be because they never had a plan which level those enemies should have, so stats they have now are only placeholders, not something planned by PB. To actually test it out I would need to spend 100+h testing this mod in different approaches, and even if I had time for that, I wouldn't had a patience. I mainly made this mod because I hated how spongy enemies were sometimes.
I'll be playing through the whole game with disabled scaling. My usual go-to style is pure melee with a bit of supporting magic, so no shotgun easy mode.
If I encounter something unusual, I'll write it down in my table. Can't say how long it will take, but my intention is to finish balancing this piece of crappy code just for the sake of my long-time love of PB.

tombom81
01.04.2022, 15:49
That's quite interesting, can this be used to add new entries to sector?New entries (propertySets) or new entities? New property sets are possible; think of adding a dialog to an oil barrel, "let's explode":D (see class gCDialog_PS in Obj_Int_SleepingBag_1 for example).

(There's an info for that barrel to be added to w_info.hdrdoc then, of course.)


It would solve my problem with mods compatibility, I wanted to have several mods adding new items to Bastion (new recipes etc.), but:
* if they edit same sector, they overwrite each other sectors, removing each other changes to that sector
* if they edit different sectors, they keep overwriting each others World.elex2wrl, removing each other changes to that file

To make them compatible I was thinking about having one World.elex2wlr file that lists all sector files from all my mods that could be included in all of those mods, but that sounds very tedious and may not work, because it would mean we are listing sectors that may not be in game (because not all mods are installed).
There was a discussion about a mod merger for ELEX 1 but I don't think this to have high prio.

Imho it's recommended to use own small world sec files (adding their names to World.elex2wrl required) kinda those _On and _Off sec files, like TAV_Fort_Story_StolenSetterSafe_Off.elex2secdoc which has "It_Wri_Letter_MOR_LetterSecretCodes" for example.

(You don't need to use that on/off feature, just make sure bool EnabledInGame is "True" for your new sector file.)

Modifying existing entities in vanilla sec files is another story, though. All things that have samegame relevant properties will require to start a new game to get them "active".

LiveToWin
06.04.2022, 16:18
Hello again!
Is there any way to convert BC1_UNORM_SRGB dds textures from Elex 1 (diffuse maps i guess) to B8G8R8A8? Converter in DDS folder still makes them all black. Another dds files converted fine.
Upd:
I changed part of the code in convert_BC7_to_B8G8R8A8.bat file and textures started to convert normally. :)
Code:
echo %%i | findstr /i BC7_UNORM > nul && set fmt=B8G8R8A8_UNORM
echo %%i | findstr /i BC7_UNORM_SRGB > nul && set fmt=B8G8R8A8_UNORM_SRGB
echo %%i | findstr /i BC5_UNORM > nul && set fmt=B8G8R8A8_UNORM
echo %%i | findstr /i BC5_SNORM > nul && set fmt=B8G8R8A8_UNORM
echo %%i | findstr /i BC1_UNORM_SRGB > nul && set fmt=B8G8R8A8_UNORM

godagarah5000
11.04.2022, 19:43
hows the documentation of the enum variables of elex 2 coming along? so far it looks like u guys are making great strides in the code so far nice work

George
11.04.2022, 21:21
hows the documentation of the enum variables of elex 2 coming along? so far it looks like u guys are making great strides in the code so far nice work
I have it lying around, just had to format it nicely:


enum gEDifficultyStamina {
gEDifficultyStamina_Easy = 0, // (default)
gEDifficultyStamina_Normal = 1,
gEDifficultyStamina_Hard = 2,
};

enum gEUISettingControllerSymbols {
gEUISettingControllerSymbols_Xbox = 0, // (default)
gEUISettingControllerSymbols_Dualshock = 1,
gEUISettingControllerSymbols_Count = 2,
};

enum gEPerkCategory {
gEPerkCategory_Invalid = 0, // (default)
gEPerkCategory_Intern = 1,
gEPerkCategory_Combat = 2,
gEPerkCategory_Survival = 3,
gEPerkCategory_Crafting = 4,
gEPerkCategory_Personality = 5,
gEPerkCategory_Magic = 6,
gEPerkCategory_Berserker = 7,
gEPerkCategory_Alb = 8,
gEPerkCategory_Morkon = 9,
gEPerkCategory_Outlaw = 10,
gEPerkCategory_Cleric = 11,
gEPerkCategory_Item = 12,
gEPerkCategory_Adjutor = 13,
gEPerkCategory_Jetpack = 14,
};

enum gEInfoQuestStatus {
gEInfoQuestStatus_Open = 0, // (default)
gEInfoQuestStatus_Overtime = 1,
gEInfoQuestStatus_Running = 2,
gEInfoQuestStatus_Success = 3,
gEInfoQuestStatus_Failed = 4,
gEInfoQuestStatus_Cancelled = 5,
gEInfoQuestStatus_Ready = 6,
gEInfoQuestStatus_Lost = 7,
gEInfoQuestStatus_Won = 8,
gEInfoQuestStatus_NotYetFinished = 9,
gEInfoQuestStatus_Finished = 10,
};

enum gECoverHeightTest {
gECoverHeightTest_Low = 0, // (default)
gECoverHeightTest_High = 1,
gECoverHeightTest_Extended = 2,
};

enum gERecipeCategory {
gERecipeCategory_Chemistry = 0,
gERecipeCategory_MagicalWeapons = 1,
gERecipeCategory_TechnicalWeapons = 2,
gERecipeCategory_Campfire = 3,
gERecipeCategory_MechanicalWeapons = 4,
gERecipeCategory_Stims = 5,
gERecipeCategory_BuildAmmo = 6,
gERecipeCategory_Cook = 7,
gERecipeCategory_Rings = 8,
gERecipeCategory_Amulets = 9,
gERecipeCategory_Blacksmith = 10,
gERecipeCategory_Gunsmith = 11,
gERecipeCategory_Socketry = 12,
};

enum gELockSecurityLevel {
gELockSecurityLevel_Easy = 0, // (default)
gELockSecurityLevel_Medium = 1,
gELockSecurityLevel_Hard = 2,
};

enum gEGridCost {
gEGridCost_None = 0, // (default)
gEGridCost_PreferStartAndDestinationRingArea = 1,
gEGridCost_PreferStartAndDestinationRingMax = 2,
gEGridCost_PreferStartAndDestinationRingMin = 3,
gEGridCost_PreferStartRing = 4,
gEGridCost_PreferDestinationRing = 5,
};

enum gECombatAniRaiseType {
gECombatAniRaiseType_Hold = 0, // (default)
gECombatAniRaiseType_Continue = 1,
};

enum eEShaderParticleRuntimeValueType {
eEShaderParticleRuntimeValueType_Invalid = -1,
eEShaderParticleRuntimeValueType_Float = 0, // (default)
eEShaderParticleRuntimeValueType_Vector2 = 1,
eEShaderParticleRuntimeValueType_Vector3 = 2,
eEShaderParticleRuntimeValueType_Color = 3,
eEShaderParticleRuntimeValueType_Int = 4,
eEShaderParticleRuntimeValueType_Bool = 5,
eEShaderParticleRuntimeValueType_Quaternion = 6,
eEShaderParticleRuntimeValueType_Matrix = 7,
eEShaderParticleRuntimeValueType_FloatCurve = 8,
eEShaderParticleRuntimeValueType_Vector2Curve = 9,
eEShaderParticleRuntimeValueType_Vector3Curve = 10,
eEShaderParticleRuntimeValueType_RotationCurve = 11,
eEShaderParticleRuntimeValueType_Gradiant = 12,
eEShaderParticleRuntimeValueType_Mesh = 13,
eEShaderParticleRuntimeValueType_Texture = 14,
eEShaderParticleRuntimeValueType_Entity = 15,
};

enum eEAlphaBlendShadowMode {
eEAlphaBlendShadowMode_Disabled = 0, // (default)
eEAlphaBlendShadowMode_AlphaTest = 1,
eEAlphaBlendShadowMode_Stochastic = 2,
};

enum gEPerkGroup {
gEPerkGroup_None = 0, // (default)
gEPerkGroup_Melee = 2,
gEPerkGroup_Ranged = 4,
gEPerkGroup_Protection = 8,
gEPerkGroup_Health = 16,
gEPerkGroup_Stamina = 32,
gEPerkGroup_Survival = 64,
gEPerkGroup_Metabolism = 128,
gEPerkGroup_Locksmith = 256,
gEPerkGroup_Thief = 512,
gEPerkGroup_Gunsmith = 1024,
gEPerkGroup_Chemistry = 2048,
gEPerkGroup_Computer = 4096,
gEPerkGroup_Mining = 8192,
gEPerkGroup_Trophy = 16384,
gEPerkGroup_Attributes = 32768,
gEPerkGroup_Learning = 65536,
gEPerkGroup_Social = 131072,
gEPerkGroup_Empathy = 262144,
gEPerkGroup_Magic = 524288,
gEPerkGroup_Item = 1048576,
gEPerkGroup_Adjutor = 2097152,
gEPerkGroup_Jetpack = 4194304,
gEPerkGroup_Stim = 8388608,
gEPerkGroup_Ammo = 16777216,
gEPerkGroup_BSK = 33554432,
gEPerkGroup_ALB = 67108864,
gEPerkGroup_MOR = 134217728,
gEPerkGroup_KLE = 268435456,
gEPerkGroup_OUT = 536870912,
gEPerkGroup_HeavyWeapons = 1073741824,
gEPerkGroup_All = 2147483646,
};

enum gEInteractionUseType {
gEInteractionUseType_None = 0, // (default)
gEInteractionUseType_Item = 1,
gEInteractionUseType_NPC = 2,
gEInteractionUseType_Button = 3,
gEInteractionUseType_Chest = 4,
gEInteractionUseType_Door = 5,
gEInteractionUseType_Bed = 6,
gEInteractionUseType_SitBench = 7,
gEInteractionUseType_Stand = 8,
gEInteractionUseType_StandEat = 9,
gEInteractionUseType_StandDrink = 10,
gEInteractionUseType_StandSmoke = 11,
gEInteractionUseType_StandHangaround = 12,
gEInteractionUseType_HammerWall = 13,
gEInteractionUseType_SitGround = 14,
gEInteractionUseType_TakeCrate = 15,
gEInteractionUseType_DropCrate = 16,
gEInteractionUseType_TakeJunk = 17,
gEInteractionUseType_DropJunk = 18,
gEInteractionUseType_TakeMushroom = 19,
gEInteractionUseType_DropMushroom = 20,
gEInteractionUseType_Book = 21,
gEInteractionUseType_Ladder = 22,
gEInteractionUseType_Teleport = 23,
gEInteractionUseType_Lean = 24,
gEInteractionUseType_Radio = 25,
gEInteractionUseType_Craft = 26,
gEInteractionUseType_Explosive = 27,
gEInteractionUseType_AmbientFP = 28,
gEInteractionUseType_AmbientImportantFP = 29,
gEInteractionUseType_Container = 30,
gEInteractionUseType_Campfire = 31,
gEInteractionUseType_Temp = 32,
gEInteractionUseType_ElexSource = 33,
gEInteractionUseType_Mining = 34,
gEInteractionUseType_PoleDance = 35,
gEInteractionUseType_AmbientHeadhunterFP = 36,
gEInteractionUseType_TalkFP = 37,
gEInteractionUseType_TakeStone = 38,
gEInteractionUseType_DropStone = 39,
gEInteractionUseType_TakeCrateAlb = 40,
gEInteractionUseType_DropCrateAlb = 41,
};

enum eEGfxFormat2 {
eEGfxFormat2_Unknown = 0,
eEGfxFormat2_R32G32B32A32_Float = 1,
eEGfxFormat2_R32G32B32A32_UInt = 2,
eEGfxFormat2_R32G32B32A32_SInt = 3,
eEGfxFormat2_R32G32B32_Float = 4,
eEGfxFormat2_R32G32B32_UInt = 5,
eEGfxFormat2_R32G32B32_SInt = 6,
eEGfxFormat2_R16G16B16A16_Float = 7,
eEGfxFormat2_R16G16B16A16_UNorm = 8,
eEGfxFormat2_R16G16B16A16_UInt = 9,
eEGfxFormat2_R16G16B16A16_SNorm = 10,
eEGfxFormat2_R16G16B16A16_SInt = 11,
eEGfxFormat2_R32G32_Float = 12,
eEGfxFormat2_R32G32_UInt = 13,
eEGfxFormat2_R32G32_SInt = 14,
eEGfxFormat2_R10G10B10A2_UNorm = 15,
eEGfxFormat2_R10G10B10A2_UInt = 16,
eEGfxFormat2_R11G11B10_Float = 17,
eEGfxFormat2_R8G8B8A8_UNorm = 18,
eEGfxFormat2_R8G8B8A8_UNorm_SRGB = 19,
eEGfxFormat2_R8G8B8A8_UInt = 20,
eEGfxFormat2_R8G8B8A8_SNorm = 21,
eEGfxFormat2_R8G8B8A8_SInt = 22,
eEGfxFormat2_R16G16_Float = 23,
eEGfxFormat2_R16G16_UNorm = 24,
eEGfxFormat2_R16G16_UInt = 25,
eEGfxFormat2_R16G16_SNorm = 26,
eEGfxFormat2_R16G16_SInt = 27,
eEGfxFormat2_D32_Float = 28,
eEGfxFormat2_R32_Float = 29,
eEGfxFormat2_R32_UInt = 30,
eEGfxFormat2_R32_SInt = 31,
eEGfxFormat2_D24_UNorm_S8_UInt = 32,
eEGfxFormat2_R8G8_UNorm = 33,
eEGfxFormat2_R8G8_UInt = 34,
eEGfxFormat2_R8G8_SNorm = 35,
eEGfxFormat2_R8G8_SInt = 36,
eEGfxFormat2_R16_Float = 37,
eEGfxFormat2_D16_UNorm = 38,
eEGfxFormat2_R16_UNorm = 39,
eEGfxFormat2_R16_UInt = 40,
eEGfxFormat2_R16_SNorm = 41,
eEGfxFormat2_R16_SInt = 42,
eEGfxFormat2_R8_UNorm = 43,
eEGfxFormat2_R8_UInt = 44,
eEGfxFormat2_R8_SNorm = 45,
eEGfxFormat2_R8_SInt = 46,
eEGfxFormat2_A8_UNorm = 47,
eEGfxFormat2_BC1_UNorm = 48,
eEGfxFormat2_BC1_UNorm_SRGB = 49,
eEGfxFormat2_BC2_UNorm = 50,
eEGfxFormat2_BC2_UNorm_SRGB = 51,
eEGfxFormat2_BC3_UNorm = 52,
eEGfxFormat2_BC3_UNorm_SRGB = 53,
eEGfxFormat2_BC4_UNorm = 54,
eEGfxFormat2_BC4_SNorm = 55,
eEGfxFormat2_BC5_UNorm = 56,
eEGfxFormat2_BC5_SNorm = 57,
eEGfxFormat2_B8G8R8A8_UNorm = 58, // (default)
eEGfxFormat2_B8G8R8X8_UNorm = 59,
eEGfxFormat2_B8G8R8A8_UNorm_SRGB = 60,
eEGfxFormat2_B8G8R8X8_UNorm_SRGB = 61,
eEGfxFormat2_BC6H_UF16 = 62,
eEGfxFormat2_BC6H_SF16 = 63,
eEGfxFormat2_BC7_UNorm = 64,
eEGfxFormat2_BC7_UNorm_SRGB = 65,
eEColorFormat_Unknown = 0,
eEColorFormat_A8R8G8B8 = 58,
eEColorFormat_X1R5G5B5 = 0,
eEColorFormat_A1R5G5B5 = 0,
eEColorFormat_A4R4G4B4 = 0,
eEColorFormat_R16F = 37,
eEColorFormat_G16R16F = 23,
eEColorFormat_A16B16G16R16F = 7,
eEColorFormat_R32F = 29,
eEColorFormat_G32R32F = 12,
eEColorFormat_A32B32G32R32F = 1,
eEColorFormat_X8R8G8B8 = 59,
eEColorFormat_DXT1 = 48,
eEColorFormat_DXT2 = 50,
eEColorFormat_DXT3 = 50,
eEColorFormat_DXT4 = 52,
eEColorFormat_DXT5 = 52,
eEColorFormat_A8 = 47,
};

enum gEQuestStatus {
gEQuestStatus_Open = 0, // (default)
gEQuestStatus_Running = 1,
gEQuestStatus_Success = 2,
gEQuestStatus_Failed = 3,
gEQuestStatus_Obsolete = 4,
gEQuestStatus_Cancelled = 5,
gEQuestStatus_Lost = 6,
gEQuestStatus_Won = 7,
};

enum gEFocusPriority {
gEFocusPriority_None = 0,
gEFocusPriority_Lowest = 1,
gEFocusPriority_Low = 2,
gEFocusPriority_Normal = 3, // (default)
gEFocusPriority_High = 4,
gEFocusPriority_Highest = 5,
};

enum gEStimType {
gEStimType_None = 0, // (default)
gEStimType_VisualPrimary = 1,
gEStimType_VisualSecondary = 2,
gEStimType_Visual = 3,
gEStimType_Audio = 4,
gEStimType_AudioVisual = 7,
};

enum gEQuestType {
gEQuestType_HasItems = 0, // (default)
gEQuestType_Report = 1,
gEQuestType_Kill = 2,
gEQuestType_Defeat = 3,
gEQuestType_DriveAway = 4,
gEQuestType_Arena = 5,
gEQuestType_BringNpc = 6,
gEQuestType_FollowNpc = 7,
gEQuestType_EnterArea = 8,
gEQuestType_Container = 10,
gEQuestType_Plunder = 11,
gEQuestType_Sparring = 12,
gEQuestType_Duel = 13,
};

enum gEMovementState {
gEMovementState_None = 0, // (default)
gEMovementState_Idle = 1,
gEMovementState_Walk = 2,
gEMovementState_Run = 3,
gEMovementState_Sprint = 4,
gEMovementState_Slide = 5,
gEMovementState_Jump = 6,
gEMovementState_Fall = 7,
gEMovementState_Climb = 8,
gEMovementState_Hang = 9,
gEMovementState_Fly = 10,
gEMovementState_FlyJetpack = 11,
gEMovementState_Custom = 12,
gEMovementState_Ragdoll = 13,
gEMovementState_Stumble = 14,
gEMovementState_Attack = 15,
gEMovementState_Counter = 16,
gEMovementState_Mounting = 17,
gEMovementState_Action = 18,
gEMovementState_Evade = 19,
gEMovementState_Ladder = 20,
};

enum gEProfession {
gEProfession_None = 0, // (default)
gEProfession_Hunter = 1,
gEProfession_Canteena = 2,
gEProfession_Collector = 3,
gEProfession_Landlord = 4,
gEProfession_Trader = 5,
gEProfession_Builder = 6,
gEProfession_Storeman = 7,
gEProfession_Smuggler = 8,
gEProfession_Fence = 9,
gEProfession_Provider = 10,
gEProfession_TravellingTrader = 11,
gEProfession_Researcher = 12,
gEProfession_TraderAndDistiller = 13,
gEProfession_Chef = 14,
gEProfession_WeaponsDealer = 15,
gEProfession_ArmourMaker = 16,
gEProfession_Alchemist = 17,
gEProfession_ElexOutput = 18,
gEProfession_Mercenary = 19,
};

enum gEAIMode {
gEAIMode_None = 0, // (default)
gEAIMode_Sender = 1,
gEAIMode_Routine = 2,
gEAIMode_Sleep = 3,
gEAIMode_GotoItem = 4,
gEAIMode_GotoBody = 5,
gEAIMode_Observe = 6,
gEAIMode_Talk = 7,
gEAIMode_Watch = 8,
gEAIMode_Avoid = 9,
gEAIMode_Threaten = 10,
gEAIMode_Receiver = 11,
gEAIMode_Attack = 12,
gEAIMode_HealPlayer = 13,
gEAIMode_Fear = 14,
gEAIMode_Down = 15,
gEAIMode_Dead = 16,
gEAIMode_GotoImportantTalk = 17,
gEAIMode_Interact = 18,
gEAIMode_Cheer = 19,
};

enum eEShaderParticlePointOnMeshMode {
eEShaderParticlePointOnMeshMode_Vertex = 0,
eEShaderParticlePointOnMeshMode_Surface = 1, // (default)
};

enum eEPhysicsShapeNavMeshBuild {
eEPhysicsShapeNavMeshBuild_Standard = 0, // (default)
eEPhysicsShapeNavMeshBuild_ForceEnabled = 1,
eEPhysicsShapeNavMeshBuild_ForceObstacle = 2,
eEPhysicsShapeNavMeshBuild_ForceDisabled = 3,
eEPhysicsShapeNavMeshBuild_NoPhysic_ForceEnabled = 4,
eEPhysicsShapeNavMeshBuild_NoPhysic_ForceObstacle = 5,
};

enum gEFocusKillMode {
gEFocusKillMode_None = 0, // (default)
gEFocusKillMode_Unconscious = 1,
gEFocusKillMode_Kill = 2,
};

enum gECombatState {
gECombatState_None = -1, // (default)
gECombatState_Raise = 0,
gECombatState_RaiseChanged = 1,
gECombatState_ReleasedRaise = 2,
gECombatState_RaiseNeedsRefresh = 3,
gECombatState_Hit = 4,
gECombatState_HitChanged = 5,
gECombatState_ChannelCast = 6,
gECombatState_Recover = 7,
gECombatState_Stumble = 8,
gECombatState_StumbleFall = 9,
gECombatState_ParryStumble = 10,
gECombatState_Evasion = 11,
gECombatState_Reload = 12,
gECombatState_ReloadInterrupted = 13,
gECombatState_DirtyHitWindow = 14,
gECombatState_StandUp = 15,
gECombatState_ImmuneToStumble = 16,
gECombatState_ImmuneToDamage = 17,
gECombatState_ImmuneToParry = 18,
gECombatState_DuringHitEvent = 19,
gECombatState_Parry = 20,
gECombatState_PerfectParry = 21,
gECombatState_EvasionMovement = 22,
gECombatState_Underground = 23,
gECombatState_ParadeRaise = 24,
gECombatState_ReactionPoint = 25,
gECombatState_NoHitEffect = 26,
};

enum gESearchSpaceGeometryType {
gESearchSpaceGeometryType_1D = 0,
gESearchSpaceGeometryType_2D = 1,
gESearchSpaceGeometryType_3D = 2, // (default)
};

enum eEWeatherZoneOverwrite {
eEWeatherZoneOverwrite_Overwrite = 0, // (default)
eEWeatherZoneOverwrite_Modulate = 1,
eEWeatherZoneOverwrite_Add = 2,
};

enum gEItemBombType {
gEItemBombType_GasBottle = 0,
gEItemBombType_BarrelOil = 1,
gEItemBombType_Mine = 2,
gEItemBombType_TNT = 3, // (default)
};

enum eSGameMapType {
eSGameMapType_None = 0, // (default)
eSGameMapType_Terrain = 1,
eSGameMapType_Building = 2,
eSGameMapType_Water = 3,
eSGameMapType_Lava = 4,
eSGameMapType_Street = 5,
};

enum eEShaderPassType {
eEShaderPassType_PreZ = 0,
eEShaderPassType_PreZ_ScreenDoor = 1,
eEShaderPassType_Forward_Plus = 2,
eEShaderPassType_Forward_Plus_ScreenDoor = 3,
eEShaderPassType_Highlight = 4,
eEShaderPassType_Shadows = 5,
eEShaderPassType_Shadows_ScreenDoor = 6,
eEShaderPassType_Distortion_Offset = 7,
eEShaderPassType_GBuffer = 8, // (default)
eEShaderPassType_GBuffer_ScreenDoor = 9,
eEShaderPassType_UI = 11,
eEShaderPassType_RayHit = 12,
eEShaderPassType_Editor_TerrainMaterials = 15,
eEShaderPassType_Editor_Preview = 16,
eEShaderPassType_Editor_Voxelize = 17,
eEShaderPassType_Debug_Depth = 18,
eEShaderPassType_Debug_Albedo = 19,
eEShaderPassType_Debug_Roughness = 20,
eEShaderPassType_Debug_Reflectance = 21,
eEShaderPassType_Debug_Metalness = 22,
eEShaderPassType_Debug_SubSurfaceColor = 23,
eEShaderPassType_Debug_AmbientOcclusion = 24,
eEShaderPassType_Debug_SpecularOcclusion = 25,
eEShaderPassType_Debug_WorldNormal = 26,
eEShaderPassType_Debug_Emissive = 27,
eEShaderPassType_Debug_ShadingModel = 28,
eEShaderPassType_Debug_PerPixelLightCount = 29,
eEShaderPassType_Debug_PerPixelProbeCount = 30,
eEShaderPassType_Debug_GI_Illumination = 31,
eEShaderPassType_Debug_GI_Debug = 32,
eEShaderPassType_Debug_FogSlice = 33,
eEShaderPassType_Debug_Shadows = 34,
eEShaderPassType_Debug_Shadows_SubSurface = 35,
eEShaderPassType_Debug_Overdraw_Alpha = 36,
eEShaderPassType_Debug_Texeldensity = 37,
eEShaderPassType_Debug_Reflections = 38,
eEShaderPassType_Debug_MaterialCalibration = 39,
eEShaderPassType_Debug_VertexColor = 40,
eEShaderPassType_Debug_MipLevel = 41,
eEShaderPassType_Debug_MipLevelMin = 42,
eEShaderPassType_Debug_MipLevelMax = 43,
eEShaderPassType_Debug_FrontFaceBackFace = 44,
};

enum gESpecies {
gESpecies_None = 0, // (default)
gESpecies_Human = 1,
gESpecies_Rootgoblin = 2,
gESpecies_Critter = 3,
gESpecies_Plaguerat = 4,
gESpecies_Bloodclaw = 5,
gESpecies_Crystalrat = 6,
gESpecies_Mutantrat = 7,
gESpecies_Caverat = 8,
gESpecies_Biter = 9,
gESpecies_Vulture = 10,
gESpecies_Screamer = 11,
gESpecies_Icebeak = 12,
gESpecies_Terrorbird = 13,
gESpecies_Ashbird = 14,
gESpecies_Spinehound = 15,
gESpecies_Jackal = 16,
gESpecies_Stonerunner = 17,
gESpecies_Iceclaw = 18,
gESpecies_Mutantwolf = 19,
gESpecies_Spikewolf = 20,
gESpecies_Icewolf = 21,
gESpecies_Tracker = 22,
gESpecies_Emberwolf = 23,
gESpecies_Riverlurker = 85,
gESpecies_Basilisk = 86,
gESpecies_Dragonlizard = 87,
gESpecies_Icelizard = 88,
gESpecies_Mutantlurker = 89,
gESpecies_Raptor = 24,
gESpecies_Desertdevil = 25,
gESpecies_Stoneclaw = 26,
gESpecies_Griffin = 27,
gESpecies_Slimelizard = 28,
gESpecies_Raptorid = 29,
gESpecies_Nightshadow = 30,
gESpecies_Stalker = 31,
gESpecies_Chimera = 32,
gESpecies_Icebeast = 33,
gESpecies_Mutantbeast = 34,
gESpecies_Cannonbeast = 35,
gESpecies_Stonebug = 36,
gESpecies_Ripper = 37,
gESpecies_Mantis = 38,
gESpecies_Iceroach = 39,
gESpecies_Mutantbug = 40,
gESpecies_Robotspider = 41,
gESpecies_Turretcrawler = 42,
gESpecies_SkyanoidCrawler = 43,
gESpecies_Patron = 44,
gESpecies_Slugbeast = 45,
gESpecies_Foresttroll = 46,
gESpecies_Saurian = 47,
gESpecies_Mountaintroll = 48,
gESpecies_Icetroll = 49,
gESpecies_Cyclops = 50,
gESpecies_Hybrid = 51,
gESpecies_BigBang = 52,
gESpecies_Colossusrobot = 53,
gESpecies_Dronerobot = 54,
gESpecies_Isopod = 55,
gESpecies_Thorntoad = 56,
gESpecies_Cavebird = 57,
gESpecies_Scorpion = 58,
gESpecies_Reaver = 59,
gESpecies_Warmachine = 60,
gESpecies_Parrot = 61,
gEspecies_Lostone = 62,
gEspecies_Sickone = 63,
gEspecies_Warpedone = 64,
gEspecies_Nightogre = 65,
gEspecies_Giant = 66,
gEspecies_Mutantogre = 67,
gEspecies_Brooddevil = 68,
gEspecies_Changeling = 69,
gEspecies_Collossusrobotrusty = 70,
gEspecies_Lackey = 71,
gEspecies_Behemoth = 72,
gEspecies_Stormdragon = 79,
gEspecies_Clawwasp = 73,
gEspecies_Rockgriffin = 74,
gEspecies_Harpy = 75,
gEspecies_Airmutant = 76,
gEspecies_Genestealer = 77,
gEspecies_Byakhee = 78,
gEspecies_Firefly = 80,
gEspecies_Ironbug = 81,
gEspecies_Dragonfly = 82,
gEspecies_Pterohawk = 83,
gEspecies_Scorpionfly = 84,
gEspecies_Sniperdrone = 90,
gEspecies_Kamikazedrone = 91,
gEspecies_Mountaingoat = 92,
gEspecies_Horngoat = 93,
gEspecies_Woolgoat = 94,
gEspecies_Grottobird = 95,
gEspecies_Snowbird = 96,
gEspecies_Plaguepheasant = 97,
gEspecies_Smallrat = 98,
gEspecies_Raven = 99,
gEspecies_Gull = 100,
gEspecies_Cleanbot = 101,
gEspecies_Summon = 102,
};

enum gEEffectLoopMode {
gEEffectLoopMode_Once = 0,
gEEffectLoopMode_Loop = 1, // (default)
gEEffectLoopMode_Repeat = 2,
};

enum gETrait {
gETrait_None = 0, // (default)
gETrait_Tough = 1,
gETrait_Rude = 2,
gETrait_ToughAndRude = 3,
};

enum gEComboPhaseState {
gEComboPhaseState_Unknown = 0, // (default)
gEComboPhaseState_BufferingPossible = 1,
gEComboPhaseState_Running = 2,
gEComboPhaseState_Ended = 3,
};

enum gEAttitudeTo {
gEAttitudeTo_Source = 0, // (default)
gEAttitudeTo_AdditionalEntity = 1,
};

enum eEInputDevice {
eEInputDevice_None = 0, // (default)
eEInputDevice_Keyboard = 2,
eEInputDevice_Mouse = 1,
eEInputDevice_Gamepad = 3,
};

enum eEVisibilityFunction {
eEVisibilityFunction_Neumann = 0,
eEVisibilityFunction_Kelemen = 1,
eEVisibilityFunction_Schlick = 2,
eEVisibilityFunction_GGX = 3, // (default)
};

enum eEInputElementType {
eEInputElementType_None = 0, // (default)
eEInputElementType_Button = 1,
eEInputElementType_Relative_Axis = 2,
eEInputElementType_Absolute_Axis = 3,
eEInputElementType_Trigger = 4,
};

enum eEGamepadThumbAxis {
eEGamepadThumbAxis_None = 0, // (default)
eEGamepadThumbAxis_Right_X = 1,
eEGamepadThumbAxis_Right_Y = 2,
eEGamepadThumbAxis_Left_X = 3,
eEGamepadThumbAxis_Left_Y = 4,
};

enum gEUIActionType {
gEUIActionType_None = 0, // (default)
gEUIActionType_Enter = 1,
gEUIActionType_Escape = 2,
gEUIActionType_Gamepad_X = 3,
gEUIActionType_Gamepad_Y = 4,
gEUIActionType_Gamepad_LB = 5,
gEUIActionType_Gamepad_RB = 6,
gEUIActionType_Gamepad_LT = 7,
gEUIActionType_Gamepad_RT = 8,
gEUIActionType_Gamepad_Menu = 9,
gEUIActionType_Gamepad_View = 10,
gEUIActionType_Left = 11,
gEUIActionType_Right = 12,
gEUIActionType_Up = 13,
gEUIActionType_Down = 14,
gEUIActionType_Home = 15,
gEUIActionType_End = 16,
gEUIActionType_PageUp = 17,
gEUIActionType_PageDown = 18,
gEUIActionType_QuickSlot0 = 19,
gEUIActionType_QuickSlot1 = 20,
gEUIActionType_QuickSlot2 = 21,
gEUIActionType_QuickSlot3 = 22,
gEUIActionType_QuickSlot4 = 23,
gEUIActionType_QuickSlot5 = 24,
gEUIActionType_QuickSlot6 = 25,
gEUIActionType_QuickSlot7 = 26,
gEUIActionType_QuickSlot8 = 27,
gEUIActionType_QuickSlot9 = 28,
gEUIActionType_Accept = 29,
gEUIActionType_Dismiss = 30,
gEUIActionType_SecLeft = 31,
gEUIActionType_SecRight = 32,
gEUIActionType_SecUp = 33,
gEUIActionType_SecDown = 34,
gEUIActionType_Gamepad_LS = 35,
gEUIActionType_Gamepad_RS = 36,
gEUIActionType_MapZoom = 37,
gEUIActionType_ScrollToggle = 38,
gEUIActionType_Count = 39,
};

enum gEUseTrajectoryMode {
gEUseTrajectoryMode_None = 1, // (default)
gEUseTrajectoryMode_Amount = 2,
gEUseTrajectoryMode_TranslationCtrl = 4,
gEUseTrajectoryMode_Translation = 8,
gEUseTrajectoryMode_TrajTurn = 64,
gEUseTrajectoryMode_FullCtrl = 16,
gEUseTrajectoryMode_Full = 32,
gEUseTrajectoryMode_Rotation = 128,
gEUseTrajectoryMode_TrajVertical = 256,
};

enum gEItemPriceType {
gEItemPriceType_None = 0, // (default)
gEItemPriceType_Sell = 1,
gEItemPriceType_Buy = 2,
gEItemPriceType_Inventory = 3,
};

enum gEEffectLink {
gEEffectLink_Independent = 0,
gEEffectLink_TargetEntity = 1, // (default)
gEEffectLink_TargetBone = 2,
gEEffectLink_NearestBone = 3,
};

enum eEShaderDecalBlendMode {
eEShaderDecalBlendMode_Normal = 0, // (default)
eEShaderDecalBlendMode_Detail = 1,
eEShaderDecalBlendMode_Emissive = 2,
eEShaderDecalBlendMode_Stain = 3,
eEShaderDecalBlendMode_Wetness = 4,
};

enum gECompareOperation {
gECompareOperation_Equal = 0, // (default)
gECompareOperation_NotEqual = 1,
gECompareOperation_Less = 2,
gECompareOperation_LessEqual = 3,
gECompareOperation_Greater = 4,
gECompareOperation_GreaterEqual = 5,
};

enum gELockDifficulty {
gELockDifficulty_CodeOnly = -1,
gELockDifficulty_Easy = 0, // (default)
gELockDifficulty_Medium = 1,
gELockDifficulty_Hard = 2,
};

enum gEItemStack {
gEItemStack_NormalOrControlledNPC = 0, // (default)
gEItemStack_PickPocket = 1,
gEItemStack_Trade = 2,
gEItemStack_Hidden = 3,
};

enum gECutsceneEvent {
gECutsceneEvent_RunScript = 0, // (default)
gECutsceneEvent_SetLookAtTarget = 1,
gECutsceneEvent_ShowPicture = 2,
gECutsceneEvent_StartEffect = 3,
gECutsceneEvent_StartOverlayImageEffect = 4,
gECutsceneEvent_StopOverlayImageEffect = 5,
gECutsceneEvent_StartParticle = 6,
gECutsceneEvent_StopMarker = 7,
gECutsceneEvent_StartMute = 8,
gECutsceneEvent_StopMute = 9,
gECutsceneEvent_SetOceanFrameTime = 10,
};

enum gEFocusNameType {
gEFocusNameType_Skeleton = 0,
gEFocusNameType_Entity = 1, // (default)
gEFocusNameType_Bone = 2,
gEFocusNameType_Disable = 3,
gEFocusNameType_Center = 4,
gEFocusNameType_Ladder = 5,
};

enum gEDesiredAction {
gEDesiredAction_None = 0, // (default)
gEDesiredAction_Light = 1,
gEDesiredAction_Heavy = 2,
gEDesiredAction_Dirty = 3,
gEDesiredAction_LightOpener = 4,
gEDesiredAction_HeavyOpener = 5,
gEDesiredAction_Pierce = 6,
gEDesiredAction_Fake = 7,
gEDesiredAction_Charge = 8,
gEDesiredAction_Counter = 9,
gEDesiredAction_Parry = 10,
gEDesiredAction_GroundToAir = 11,
gEDesiredAction_AirToGround = 12,
};

enum gEPerceptionMode {
gEPerceptionMode_Normal = 0, // (default)
gEPerceptionMode_Focus = 1,
gEPerceptionMode_PlayerPartyCrewOnly = 2,
};

enum gEWeaponModeType {
gEWeaponModeType_None = -1, // (default)
gEWeaponModeType_Single = 0,
gEWeaponModeType_Seeking = 1,
gEWeaponModeType_Scatter = 2,
gEWeaponModeType_LoopingSingle = 3,
gEWeaponModeType_Burst = 4,
gEWeaponModeType_MultiTarget = 5,
gEWeaponModeType_Charged = 6,
gEWeaponModeType_Hold = 7,
gEWeaponModeType_GrenadeTimer = 8,
gEWeaponModeType_GrenadeExplosion = 9,
gEWeaponModeType_GrenadeProximity = 10,
gEWeaponModeType_SingleExclusive = 11,
};

enum gEInteractionType {
gEInteractionType_Interact_NPC = 0, // (default)
gEInteractionType_Interact_Player = 1,
gEInteractionType_InventoryUse_Player = 2,
gEInteractionType_QuickUse_Player = 3,
gEInteractionType_Magic = 4,
};

enum gEStepSide {
gEStepSide_Left = 0, // (default)
gEStepSide_Right = 1,
};

enum gEInterpolationSpaceType {
gEInterpolationSpaceType_Absolute = 0,
gEInterpolationSpaceType_RelativeToBaseValue = 1, // (default)
gEInterpolationSpaceType_RelativeToStartValue = 2,
gEInterpolationSpaceType_RelativeToParent = 3,
};

enum gEArenaStatus {
gEArenaStatus_None = 0, // (default)
gEArenaStatus_Running = 1,
};

enum gECrimeSeverity {
gECrimeSeverity_None = 0, // (default)
gECrimeSeverity_LocalRefusal = 1,
gECrimeSeverity_GlobalRefusal = 2,
gECrimeSeverity_HeadHunter = 3,
};

enum eEVertexElementChannel {
eEVertexElementChannel_None = 0, // (default)
eEVertexElementChannel_Red = 1,
eEVertexElementChannel_Green = 2,
eEVertexElementChannel_Blue = 3,
eEVertexElementChannel_Alpha = 4,
eEVertexElementChannel_Red_OneMinus = 5,
eEVertexElementChannel_Green_OneMinus = 6,
eEVertexElementChannel_Blue_OneMinus = 7,
eEVertexElementChannel_Alpha_OneMinus = 8,
};

enum gEItemSwordType {
gEItemSwordType_Pirce = 0, // (default)
gEItemSwordType_Slash = 1,
gEItemSwordType_Sword = 2,
};

enum gEItemUseType {
gEItemUseType_None = 0, // (default)
gEItemUseType_1HSword = 1,
gEItemUseType_1HAxe = 2,
gEItemUseType_1HMace = 3,
gEItemUseType_2HSword = 4,
gEItemUseType_2HAxe = 5,
gEItemUseType_2HMace = 6,
gEItemUseType_MonsterHead = 8,
gEItemUseType_MonsterFist = 7,
gEItemUseType_BlasterLaser = 9,
gEItemUseType_RifleLaser = 10,
gEItemUseType_Shotgun = 11,
gEItemUseType_Speargun = 12,
gEItemUseType_Crossbow = 13,
gEItemUseType_SlugThrower = 14,
gEItemUseType_PlasmaCannon = 18,
gEItemUseType_FlakCannon = 17,
gEItemUseType_RocketThrower = 15,
gEItemUseType_GrenadeThrower = 16,
gEItemUseType_Bow = 19,
gEItemUseType_Quiver = 20,
gEItemUseType_Shield = 21,
gEItemUseType_Amulet = 22,
gEItemUseType_Ring = 23,
gEItemUseType_Body = 24,
gEItemUseType_Hat = 25,
gEItemUseType_Legs = 26,
gEItemUseType_Feet = 27,
gEItemUseType_Torch = 28,
gEItemUseType_CarryFront = 29,
gEItemUseType_MonstProjectil = 30,
gEItemUseType_Head = 31,
gEItemUseType_Jetpack = 32,
gEItemUseType_Plant = 34,
gEItemUseType_RawMeat = 35,
gEItemUseType_Booze = 36,
gEItemUseType_BlasterPlasma = 37,
gEItemUseType_RiflePlasma = 38,
gEItemUseType_SpellFist_Fire = 39,
gEItemUseType_SpellFist_Poison = 40,
gEItemUseType_SpellFist_Ice = 41,
gEItemUseType_SpellFist_Reality = 42,
gEItemUseType_PsiFist_Force = 43,
gEItemUseType_Trophy = 44,
gEItemUseType_Valueable = 45,
gEItemUseType_Key = 46,
gEItemUseType_Tool = 47,
gEItemUseType_Written = 48,
gEItemUseType_Food = 49,
gEItemUseType_Potion = 50,
gEItemUseType_PermPotion = 51,
gEItemUseType_Stim = 52,
gEItemUseType_Ammo = 53,
gEItemUseType_HandGrenade = 54,
gEItemUseType_Sunglasses = 55,
gEItemUseType_Spell = 56,
gEItemUseType_Power = 57,
gEItemUseType_Recipe = 58,
gEItemUseType_Adjutor = 59,
gEItemUseType_SpeciesDependent = 60,
gEItemUseType_Boulder = 61,
gEItemUseType_BodyAndLegs = 62,
gEItemUseType_FlareLight = 63,
gEItemUseType_SocketItem = 64,
gEItemUseType_CraftItem = 65,
gEItemUseType_LightDrone = 66,
gEItemUseType_SkillBonusCollection = 67,
gEItemUseType_Blueprint = 68,
gEItemUseType_FlameThrower = 0,
gEItemUseType_PsiFist_Mind = 0,
};

enum gESkillBonusApplication {
gESkillBonusApplication_PercentOnBase = 0, // (default)
gESkillBonusApplication_PercentOnModified = 1,
gESkillBonusApplication_Absolute = 2,
};

enum gEGuardStatus {
gEGuardStatus_Active = 0, // (default)
gEGuardStatus_FirstWarnGiven = 1,
gEGuardStatus_SecondWarnGiven = 2,
gEGuardStatus_Inactive = 3,
gEGuardStatus_Behind = 4,
gEGuardStatus_ImportantInfo = 5,
gEGuardStatus_Headhunter = 6,
};

enum gEItemHoldType {
gEItemHoldType_None = 0, // (default)
gEItemHoldType_Sword = 1,
gEItemHoldType_Ranged = 2,
gEItemHoldType_Misc = 3,
gEItemHoldType_CarryFront = 4,
gEItemHoldType_Spear = 5,
gEItemHoldType_MagicFist = 6,
gEItemHoldType_Shield = 7,
gEItemHoldType_HeavyWeapon = 8,
gEItemHoldType_Bow = 9,
gEItemHoldType_PSIFist = 10,
gEItemHoldType_2HSword = 11,
gEItemHoldType_Handgrenade = 12,
gEItemHoldType_2HWeapon = 13,
};

enum gEEffectTargetMode {
gEEffectTargetMode_Self = 0, // (default)
gEEffectTargetMode_Parent = 1,
gEEffectTargetMode_Script = 2,
};

enum gELeadingFoot {
gELeadingFoot_All = 2, // (default)
gELeadingFoot_Left = 0,
gELeadingFoot_Right = 1,
};

enum gEOtherType {
gEOtherType_Entity = 0, // (default)
gEOtherType_TemplateEntity = 1,
};

enum gEStumbleReason {
gEStumbleReason_Damage = 0, // (default)
gEStumbleReason_Block = 1,
gEStumbleReason_Parried = 2,
gEStumbleReason_AttackStop = 3,
gEStumbleReason_Pain = 4,
};

enum gEFlashFontType {
gEFlashFontType_Normal = 0, // (default)
gEFlashFontType_Fallback = 1,
gEFlashFontType_Indirect = 2,
};

enum eEAudioReverb {
eEAudioReverb_Off = 0,
eEAudioReverb_Generic = 1, // (default)
eEAudioReverb_PaddedCell = 2,
eEAudioReverb_Room = 3,
eEAudioReverb_BathRoom = 4,
eEAudioReverb_LivingRoom = 5,
eEAudioReverb_StoneRoom = 6,
eEAudioReverb_Auditorium = 7,
eEAudioReverb_ConcertHall = 8,
eEAudioReverb_Cave = 9,
eEAudioReverb_Arena = 10,
eEAudioReverb_Hangar = 11,
eEAudioReverb_CarpettedHallway = 12,
eEAudioReverb_Hallway = 13,
eEAudioReverb_StoneCorridor = 14,
eEAudioReverb_Alley = 15,
eEAudioReverb_Forest = 16,
eEAudioReverb_City = 17,
eEAudioReverb_Mountains = 18,
eEAudioReverb_Quarry = 19,
eEAudioReverb_Plain = 20,
eEAudioReverb_ParkingLot = 21,
eEAudioReverb_SewerPipe = 22,
eEAudioReverb_Underwater = 23,
};

enum gESkillModifyValue {
gESkillModifyValue_All = 2, // (default)
gESkillModifyValue_NonePermanentOnly = 0,
gESkillModifyValue_PermanentOnly = 1,
};

enum gECameraRuntimeWarmupEvent {
gECameraRuntimeWarmupEvent_None = 0, // (default)
gECameraRuntimeWarmupEvent_Jump = 1,
gECameraRuntimeWarmupEvent_Climb = 2,
gECameraRuntimeWarmupEvent_ClimbLow = 3,
gECameraRuntimeWarmupEvent_ClimbLowAuto = 4,
gECameraRuntimeWarmupEvent_ClimbObstacle = 5,
gECameraRuntimeWarmupEvent_ClimbObstacleAuto = 6,
gECameraRuntimeWarmupEvent_ClimbJump = 7,
gECameraRuntimeWarmupEvent_HangUpwards = 8,
gECameraRuntimeWarmupEvent_VaultJump = 9,
gECameraRuntimeWarmupEvent_Evade = 10,
gECameraRuntimeWarmupEvent_EvadeToSide = 11,
gECameraRuntimeWarmupEvent_JetpackStart = 12,
gECameraRuntimeWarmupEvent_JetpackDash = 13,
gECameraRuntimeWarmupEvent_Sprint = 14,
gECameraRuntimeWarmupEvent_MeleeTargetLockActivated = 15,
gECameraRuntimeWarmupEvent_MeleeTargetLockDeactivated = 16,
gECameraRuntimeWarmupEvent_MeleeTargetLockSwitched = 17,
gECameraRuntimeWarmupEvent_JetpackMeleeAttack = 18,
gECameraRuntimeWarmupEvent_AimAssistTargetSwitch = 19,
gECameraRuntimeWarmupEvent_StrafeSideTurn = 20,
gECameraRuntimeWarmupEvent_StrafeFrontTurn = 21,
};

enum bENoiseAmplitude {
bEAmplitude_RaisePersistenceByOctave = 0, // (default)
bEAmplitude_UseReciprocalFrequency = 1,
};

enum gEInfoGameModeType {
gEInfoGameModeType_Normal = 0, // (default)
gEInfoGameModeType_OwnerDown = 1,
};

enum eERandomTexFormat {
eERandomTexFormat_Random4 = 0, // (default)
eERandomTexFormat_Normalized3 = 1,
eERandomTexFormat_Normalized4 = 2,
eERandomTexFormat_Rotation2x2 = 3,
eERandomTexFormat_Rotation2x2Scale = 4,
eERandomTexFormat_CosSinScale = 5,
eERandomTexFormat_InterleavedPattern = 6,
};

enum gESocketType {
gESocketType_None = 0, // (default)
gESocketType_Red = 1,
gESocketType_Blue = 2,
gESocketType_Yellow = 3,
gESocketType_Green = 4,
gESocketType_White = 5,
gESocketType_Count = 6,
};

enum gECombatActionType {
gECombatActionType_None = 0, // (default)
gECombatActionType_LowStamina = 1,
gECombatActionType_Light = 2,
gECombatActionType_Dirty = 3,
gECombatActionType_Default = 4,
gECombatActionType_Heavy = 5,
gECombatActionType_Special = 6,
gECombatActionType_Evasion = 7,
gECombatActionType_RangedAttack = 8,
gECombatActionType_Parry = 9,
};

enum eEIFSizeMode {
eEIFSizeMode_Absolute = 0,
eEIFSizeMode_Relative = 1, // (default)
eEIFSizeMode_Screen = 2,
eEIFSizeMode_Viewport = 2,
};

enum eESwizzleComponent {
eESwizzleComponent_R = 0, // (default)
eESwizzleComponent_G = 1,
eESwizzleComponent_B = 2,
eESwizzleComponent_A = 3,
eESwizzleComponent_X = 0,
eESwizzleComponent_Y = 1,
eESwizzleComponent_Z = 2,
eESwizzleComponent_W = 3,
};

enum eEDlgAniType {
eEDlgAniType_Gesture = 0, // (default)
eEDlgAniType_Emotion = 1,
};

enum gEEffectScriptParamType {
gEEffectScriptParamType_UseParam = 0, // (default)
gEEffectScriptParamType_UseEffectCommandTime = 1,
gEEffectScriptParamType_UseTargetMatrix = 2,
};

enum gECameraRuntimeWarmupCurve {
gECameraRuntimeWarmupCurve_Sinus = 0, // (default)
gECameraRuntimeWarmupCurve_HalfSinus = 1,
gECameraRuntimeWarmupCurve_SinusOfPow = 2,
gECameraRuntimeWarmupCurve_Linear = 3,
};

enum eEMoverPlayBackMode {
eEMoverPlayBackMode_Forward = 0, // (default)
eEMoverPlayBackMode_Backward = 1,
eEMoverPlayBackMode_PingPong = 2,
};

enum eEAudioChannelGroup {
eEAudioChannelGroup_Master = 0, // (default)
eEAudioChannelGroup_Music_Game = 4,
eEAudioChannelGroup_Voice_Game_Occlusion = 12,
eEAudioChannelGroup_Voice_Game_NoOcclusion = 13,
eEAudioChannelGroup_Ambient_Game = 16,
eEAudioChannelGroup_FX_Game_Effect = 23,
eEAudioChannelGroup_FX_Game_SVM = 24,
eEAudioChannelGroup_FX_Astral = 19,
eEAudioChannelGroup_FX_Boom = 20,
eEAudioChannelGroup_UI_Game = 27,
eEAudioChannelGroup_Music_Duck = 2,
eEAudioChannelGroup_Ambient_Duck = 15,
eEAudioChannelGroup_FX_Duck = 21,
eEAudioChannelGroup_Voice = 12,
eEAudioChannelGroup_Voice_NoOcclusion = 13,
eEAudioChannelGroup_Music = 4,
eEAudioChannelGroup_FX = 22,
eEAudioChannelGroup_FX_Effect = 23,
eEAudioChannelGroup_FX_SVM = 24,
eEAudioChannelGroup_Ambient = 16,
eEAudioChannelGroup_GUI = 27,
};

enum gEEntityType {
gEEntityType_Game = 0, // (default)
gEEntityType_Temporary = 1,
};

enum gEUILanguageType {
gEUILanguageType_Text = 0, // (default)
gEUILanguageType_Voice = 1,
};

enum gEUIDialogResult {
gEUIDialogResult_None = 0, // (default)
gEUIDialogResult_OK = 1,
gEUIDialogResult_Cancel = 2,
gEUIDialogResult_Yes = 3,
gEUIDialogResult_No = 4,
gEUIDialogResult_Abort = 5,
gEUIDialogResult_Retry = 6,
gEUIDialogResult_Ignore = 7,
};

enum gECrime {
gECrime_None = 0, // (default)
gECrime_Murder = 1,
gECrime_Theft = 2,
gECrime_Brawl = 3,
};

enum gESlot {
gESlot_None = 0, // (default)
gESlot_RightHand = 1,
gESlot_LeftHand = 2,
gESlot_Right = 3,
gESlot_Left = 4,
gESlot_Amulet = 5,
gESlot_Ring = 6,
gESlot_EarRing = 7,
gESlot_Body = 8,
gESlot_Hat = 9,
gESlot_Legs = 10,
gESlot_Feet = 11,
gESlot_Head = 12,
gESlot_Jetpack = 13,
gESlot_Quiver = 14,
gESlot_Light = 15,
};

enum gECombatRole {
gECombatRole_TertiaryOpponent = 0, // (default)
gECombatRole_SecondaryOpponent = 1,
gECombatRole_PrimaryOpponent = 2,
};

enum eEScanCode {
eEScanCode_None = 0, // (default)
eEScanCode_Escape = 1,
eEScanCode_1 = 2,
eEScanCode_2 = 3,
eEScanCode_3 = 4,
eEScanCode_4 = 5,
eEScanCode_5 = 6,
eEScanCode_6 = 7,
eEScanCode_7 = 8,
eEScanCode_8 = 9,
eEScanCode_9 = 10,
eEScanCode_0 = 11,
eEScanCode_SZ = 12,
eEScanCode_Akut = 13,
eEScanCode_Backspace = 14,
eEScanCode_Tab = 15,
eEScanCode_Q = 16,
eEScanCode_W = 17,
eEScanCode_E = 18,
eEScanCode_R = 19,
eEScanCode_T = 20,
eEScanCode_Z = 21,
eEScanCode_U = 22,
eEScanCode_I = 23,
eEScanCode_O = 24,
eEScanCode_P = 25,
eEScanCode_UE = 26,
eEScanCode_Add = 27,
eEScanCode_Return = 28,
eEScanCode_Control_L = 29,
eEScanCode_A = 30,
eEScanCode_S = 31,
eEScanCode_D = 32,
eEScanCode_F = 33,
eEScanCode_G = 34,
eEScanCode_H = 35,
eEScanCode_J = 36,
eEScanCode_K = 37,
eEScanCode_L = 38,
eEScanCode_OE = 39,
eEScanCode_AE = 40,
eEScanCode_Circumflex = 41,
eEScanCode_Shift_L = 42,
eEScanCode_Crosshatch = 43,
eEScanCode_Y = 44,
eEScanCode_X = 45,
eEScanCode_C = 46,
eEScanCode_V = 47,
eEScanCode_B = 48,
eEScanCode_N = 49,
eEScanCode_M = 50,
eEScanCode_Comma = 51,
eEScanCode_Point = 52,
eEScanCode_Minus = 53,
eEScanCode_Shift_R = 54,
eEScanCode_Numpad_Mult = 55,
eEScanCode_Menu_L = 56,
eEScanCode_Space = 57,
eEScanCode_Capslock = 58,
eEScanCode_F1 = 59,
eEScanCode_F2 = 60,
eEScanCode_F3 = 61,
eEScanCode_F4 = 62,
eEScanCode_F5 = 63,
eEScanCode_F6 = 64,
eEScanCode_F7 = 65,
eEScanCode_F8 = 66,
eEScanCode_F9 = 67,
eEScanCode_F10 = 68,
eEScanCode_Pause = 69,
eEScanCode_Scrolllock = 70,
eEScanCode_Numpad_7 = 71,
eEScanCode_Numpad_8 = 72,
eEScanCode_Numpad_9 = 73,
eEScanCode_Numpad_Minus = 74,
eEScanCode_Numpad_4 = 75,
eEScanCode_Numpad_5 = 76,
eEScanCode_Numpad_6 = 77,
eEScanCode_Numpad_Plus = 78,
eEScanCode_Numpad_1 = 79,
eEScanCode_Numpad_2 = 80,
eEScanCode_Numpad_3 = 81,
eEScanCode_Numpad_0 = 82,
eEScanCode_Numpad_Decimal = 83,
eEScanCode_Smaller = 86,
eEScanCode_F11 = 87,
eEScanCode_F12 = 88,
eEScanCode_Numpad_Return = 284,
eEScanCode_Control_R = 285,
eEScanCode_Numpad_Divide = 309,
eEScanCode_Print = 311,
eEScanCode_Menu_R = 312,
eEScanCode_Numlock = 325,
eEScanCode_Break = 326,
eEScanCode_Home = 327,
eEScanCode_Cursor_Up = 328,
eEScanCode_Page_Up = 329,
eEScanCode_Cursor_Left = 331,
eEScanCode_Cursor_Right = 333,
eEScanCode_End = 335,
eEScanCode_Cursor_Down = 336,
eEScanCode_Page_Down = 337,
eEScanCode_Insert = 338,
eEScanCode_Delete = 339,
eEScanCode_Win_L = 347,
eEScanCode_Win_R = 348,
eEScanCode_Apps = 349,
};

enum gEUIMessageBoxButtons {
gEUIMessageBoxButtons_OK = 0, // (default)
gEUIMessageBoxButtons_OkCancel = 1,
gEUIMessageBoxButtons_YesNo = 2,
gEUIMessageBoxButtons_YesNoCancel = 3,
gEUIMessageBoxButtons_RetryCancel = 4,
gEUIMessageBoxButtons_AbortRetryIgnore = 5,
};

enum gECameraNoiseMethod {
gECameraNoiseMethod_PosX = 0, // (default)
gECameraNoiseMethod_PosY = 1,
gECameraNoiseMethod_PosZ = 2,
gECameraNoiseMethod_RotX = 3,
gECameraNoiseMethod_RotY = 4,
gECameraNoiseMethod_RotZ = 5,
gECameraNoiseMethod_CamPosX = 6,
gECameraNoiseMethod_CamPosY = 7,
gECameraNoiseMethod_CamPosZ = 8,
gECameraNoiseMethod_CamRotX = 9,
gECameraNoiseMethod_CamRotY = 10,
gECameraNoiseMethod_CamRotZ = 11,
};

enum eEShaderSamplerMode {
eEShaderSamplerMode_Wrap = 0, // (default)
eEShaderSamplerMode_Mirror = 1,
eEShaderSamplerMode_Clamp = 2,
};

enum gEPlayerRank {
gEPlayerRank_Commander = 0,
gEPlayerRank_None = 1, // (default)
gEPlayerRank_OutlawLow = 2,
gEPlayerRank_OutlawMid = 3,
gEPlayerRank_OutlawHigh = 4,
gEPlayerRank_BerserkLow = 5,
gEPlayerRank_BerserkMid = 6,
gEPlayerRank_BerserkHigh = 7,
gEPlayerRank_ClericLow = 8,
gEPlayerRank_ClericMid = 9,
gEPlayerRank_ClericHigh = 10,
gEPlayerRank_MorkonLow = 11,
gEPlayerRank_MorkonMid = 12,
gEPlayerRank_MorkonHigh = 13,
gEPlayerRank_AlbLow = 14,
gEPlayerRank_AlbMid = 15,
gEPlayerRank_AlbHigh = 16,
};

enum gEDoorStatus {
gEDoorStatus_Open = 0,
gEDoorStatus_Closed = 1, // (default)
};

enum gETutorialPrioCategory {
gETutorialPrioCategory_Melee = 0, // (default)
gETutorialPrioCategory_Ranged = 1,
gETutorialPrioCategory_Interacts = 2,
gETutorialPrioCategory_Player = 3,
gETutorialPrioCategory_UI = 4,
gETutorialPrioCategory_QuickTime = 5,
};

enum gEBodyMood {
gEBodyMood_Neutral = 0, // (default)
gEBodyMood_Klingon = 1,
gEBodyMood_Comedian = 2,
gEBodyMood_Smirgol = 3,
gEBodyMood_Badass = 4,
gEBodyMood_Mage = 5,
gEBodyMood_Shera = 6,
gEBodyMood_BadGirl = 7,
gEBodyMood_None = 255,
};

enum gEDifficultyPreset {
gEDifficultyPreset_Story = 0,
gEDifficultyPreset_Easy = 1,
gEDifficultyPreset_Normal = 2, // (default)
gEDifficultyPreset_Hard = 3,
gEDifficultyPreset_Ultra = 4,
};

enum gECameraModifierScriptInputValue {
gECameraModifierScriptInputValue_CameraPoperty = 0,
gECameraModifierScriptInputValue_ModifierPoperty = 1,
gECameraModifierScriptInputValue_LastActiveValue = 2, // (default)
};

enum eEWeatherZoneDamage {
eEWeatherZoneDamage_None = 0, // (default)
eEWeatherZoneDamage_Fire = 1,
eEWeatherZoneDamage_Ice = 2,
eEWeatherZoneDamage_Poison = 3,
eEWeatherZoneDamage_Radiation = 4,
};

enum gEItemOrientation {
gEItemOrientation_X = 0, // (default)
gEItemOrientation_Y = 1,
gEItemOrientation_Z = 2,
};

enum eEShaderParticleVariableType {
eEShaderParticleVariableType_Float = 0, // (default)
eEShaderParticleVariableType_Vector2 = 1,
eEShaderParticleVariableType_Vector3 = 2,
eEShaderParticleVariableType_Color = 3,
eEShaderParticleVariableType_Int = 4,
eEShaderParticleVariableType_Bool = 5,
eEShaderParticleVariableType_Quaternion = 6,
eEShaderParticleVariableType_Matrix = 7,
eEShaderParticleVariableType_FloatCurve = 8,
eEShaderParticleVariableType_Vector2Curve = 9,
eEShaderParticleVariableType_Vector3Curve = 10,
eEShaderParticleVariableType_RotationCurve = 11,
eEShaderParticleVariableType_Gradiant = 12,
eEShaderParticleVariableType_Mesh = 13,
eEShaderParticleVariableType_Texture1D = 14,
eEShaderParticleVariableType_Texture2D = 15,
eEShaderParticleVariableType_Texture3D = 16,
eEShaderParticleVariableType_Entity = 17,
eEShaderParticleVariableType_EventBuffer = 18,
};

enum gEUIPickPocketProbability {
gEUIPickPocketProbability_Lowest = 0, // (default)
gEUIPickPocketProbability_Low = 1,
gEUIPickPocketProbability_Medium = 2,
gEUIPickPocketProbability_High = 3,
};

enum gEEffectKillRange {
gEEffectKillRange_All = 0, // (default)
gEEffectKillRange_Range = 1,
};

enum gECombatAniOccasion {
gECombatAniOccasion_All = 2, // (default)
gECombatAniOccasion_Initial = 0,
gECombatAniOccasion_FollowUp = 1,
};

enum gECameraAutoFocusMode {
gECameraAutoFocusMode_FocalDistance = 0, // (default)
gECameraAutoFocusMode_FocalRatio = 1,
};

enum eEShaderParticleRibbonAlignment {
eEShaderParticleRibbonAlignment_Camera = 0, // (default)
eEShaderParticleRibbonAlignment_Binding = 1,
};

enum gENavMeshCoverActionTest {
gENavMeshCoverActionTest_Failed = 0, // (default)
gENavMeshCoverActionTest_Low = 1,
gENavMeshCoverActionTest_Side = 2,
gENavMeshCoverActionTest_LowAndSide = 3,
};

enum gEUIMenuPlatform {
gEUIMenuPlatform_All = -1, // (default)
gEUIMenuPlatform_Desktop_App = 1,
gEUIMenuPlatform_XOne = 4,
gEUIMenuPlatform_Orbis = 8,
gEUIMenuPlatform_Debug = 16,
gEUIMenuPlatform_Game = 32,
gEUIMenuPlatform_OfflineAchievements = 64,
gEUIMenuPlatform_Console = 396,
gEUIMenuPlatform_PC = 1,
};

enum gEGuild {
gEGuild_None = 0, // (default)
gEGuild_Berserker = 1,
gEGuild_Outlaw = 2,
gEGuild_Cleric = 3,
gEGuild_Separatist = 4,
gEGuild_Alb = 5,
gEGuild_Bandit = 6,
gEGuild_Refugee = 7,
gEGuild_Creature = 8,
gEGuild_Independent = 9,
gEGuild_Mutant = 10,
gEGuild_Morkon = 11,
gEGuild_Skyand = 12,
gEGuild_Skyanoid = 13,
gEGuild_Rebel = 14,
};

enum gEStumblePower {
gEStumblePower_None = 0, // (default)
gEStumblePower_Weak = 1,
gEStumblePower_Light = 2,
gEStumblePower_Medium = 3,
gEStumblePower_Heavy = 4,
gEStumblePower_Ultra = 5,
};

enum eEBrushModificationBlendMode {
eEBrushModificationBlendMode_Overlay = 3, // (default)
eEBrushModificationBlendMode_Multiply = 0,
eEBrushModificationBlendMode_Screen = 1,
eEBrushModificationBlendMode_Lighten = 2,
eEBrushModificationBlendMode_ColorDodge = 4,
eEBrushModificationBlendMode_ColorBurn = 5,
eEBrushModificationBlendMode_SoftLight = 6,
eEBrushModificationBlendMode_HardLight = 7,
eEBrushModificationBlendMode_LinearBurn = 8,
eEBrushModificationBlendMode_LinearLight = 9,
eEBrushModificationBlendMode_PinLight = 10,
};

enum gEItemSetup {
gEItemSetup_None = 0, // (default)
gEItemSetup_OneHanded = 1,
gEItemSetup_TwoHanded = 2,
gEItemSetup_OneHandedWithShield = 3,
gEItemSetup_Shield = 5,
gEItemSetup_RangedBlaster = 6,
gEItemSetup_RangedHeavy = 7,
gEItemSetup_RangedThrowable = 8,
gEItemSetup_Hybrid = 10,
gEItemSetup_Monster = 11,
gEItemSetup_Magic = 12,
gEItemSetup_Ranged = 0,
gEItemSetup_Throwing = 0,
};

enum gEInputBlocked {
gEInputBlocked_Any = 0, // (default)
gEInputBlocked_Move = 1,
gEInputBlocked_Jump = 2,
gEInputBlocked_Evade = 3,
gEInputBlocked_Aim = 4,
gEInputBlocked_Jetpack = 5,
gEInputBlocked_Attack = 6,
};

enum gECombatNavigation {
gECombatNavigation_Direct = 0, // (default)
gECombatNavigation_Navigation = 1,
gECombatNavigation_CannotGoTo = 2,
};

enum gECrimeBehavior {
gECrimeBehavior_None = 0, // (default)
gECrimeBehavior_ReportOnly = 1,
gECrimeBehavior_RefuseTalkLocal = 2,
gECrimeBehavior_RefuseTalkGlobal = 3,
};

enum eEDebugProbeLevel {
eEDebugProbeLevel_All = 255, // (default)
eEDebugProbeLevel_0 = 1,
eEDebugProbeLevel_1 = 2,
eEDebugProbeLevel_2 = 3,
eEDebugProbeLevel_3 = 4,
eEDebugProbeLevel_4 = 5,
eEDebugProbeLevel_5 = 6,
eEDebugProbeLevel_6 = 7,
eEDebugProbeLevel_7 = 8,
};

enum gEDamageType {
gEDamageType_None = 0, // (default)
gEDamageType_Fire = 1,
gEDamageType_Poison = 2,
gEDamageType_Ice = 3,
gEDamageType_Radiation = 4,
gEDamageType_Bleed = 5,
gEDamageType_Explosive = 6,
gEDamageType_Pierce = 7,
gEDamageType_Shrapnel = 8,
gEDamageType_Plasma = 9,
gEDamageType_Energy = 10,
gEDamageType_Lightning = 11,
gEDamageType_EMP = 12,
gEDamageType_PSI = 13,
gEDamageType_Stasis = 14,
gEDamageType_Frag = 15,
gEDamageType_FireballSmall = 16,
gEDamageType_FireballLarge = 17,
gEDamageType_Reality = 18,
gEDamageType_RealityLarge = 19,
gEDamageType_Acid = 20,
};

enum gEItemCategory {
gEItemCategory_None = 0, // (default)
gEItemCategory_Usable = 1,
gEItemCategory_Loot = 2,
gEItemCategory_Crafting = 3,
gEItemCategory_ToolsAndKeys = 4,
gEItemCategory_Equippable = 5,
gEItemCategory_LegendaryItem = 6,
gEItemCategory_Magic = 7,
gEItemCategory_Food = 8,
gEItemCategory_Potion = 9,
gEItemCategory_Spell = 10,
gEItemCategory_Plant = 11,
gEItemCategory_Drug = 12,
gEItemCategory_Trophy = 13,
gEItemCategory_Valuable = 14,
gEItemCategory_Key = 15,
gEItemCategory_Tool = 16,
gEItemCategory_Written = 17,
gEItemCategory_Misc = 18,
gEItemCategory_Audiologs = 19,
gEItemCategory_Recipe = 20,
gEItemCategory_Socket = 21,
gEItemCategory_Ammo = 22,
gEItemCategory_Jetpack = 23,
};

enum gEEquipSlot {
gEEquipSlot_None = 0, // (default)
gEEquipSlot_Right = 1,
gEEquipSlot_Left = 2,
gEEquipSlot_Amulet = 3,
gEEquipSlot_Ring = 4,
gEEquipSlot_EarRing = 5,
gEEquipSlot_Body = 6,
gEEquipSlot_Hat = 7,
gEEquipSlot_Legs = 8,
gEEquipSlot_Feet = 9,
gEEquipSlot_Head = 10,
gEEquipSlot_Jetpack = 11,
gEEquipSlot_Quiver = 12,
gEEquipSlot_Light = 13,
};

enum gESearchSpaceDirection {
gESearchSpaceDirection_ForwardCenter = 0, // (default)
gESearchSpaceDirection_BackwardCenter = 1,
gESearchSpaceDirection_UpCenter = 2,
gESearchSpaceDirection_DownCenter = 3,
gESearchSpaceDirection_LeftCenter = 4,
gESearchSpaceDirection_RightCenter = 5,
gESearchSpaceDirection_ForwardUpLeft = 6,
gESearchSpaceDirection_ForwardUpRight = 7,
gESearchSpaceDirection_ForwardDownLeft = 8,
gESearchSpaceDirection_ForwardDownRight = 9,
gESearchSpaceDirection_BackwardUpLeft = 10,
gESearchSpaceDirection_BackwardUpRight = 11,
gESearchSpaceDirection_BackwardDownLeft = 12,
gESearchSpaceDirection_BackwardDownRight = 13,
};

enum gEMovementSpeciesType {
gEMovementSpeciesType_Human = 0, // (default)
gEMovementSpeciesType_Beast = 1,
gEMovementSpeciesType_BigBeast = 2,
gEMovementSpeciesType_SmallBeast = 3,
gEMovementSpeciesType_Insect = 4,
gEMovementSpeciesType_BigInsect = 5,
};

enum gEBehaviorNodeConditionPolicy {
gEBehaviorNodeConditionPolicy_ImmediateMode = 0, // (default)
gEBehaviorNodeConditionPolicy_MonitoringMode = 1,
};

enum eEShaderQuality {
eEShaderQuality_Low = 0,
eEShaderQuality_Medium = 1, // (default)
eEShaderQuality_High = 2,
};

enum gEEffectModifier {
gEEffectModifier_None = 0, // (default)
gEEffectModifier_Damage = 1,
gEEffectModifier_Duration = 2,
};

enum gEQuestActor {
gEQuestActor_Client = 0, // (default)
gEQuestActor_Target = 1,
};

enum gETickSide {
gETickSide_None = 0, // (default)
gETickSide_Left = 1,
gETickSide_Right = 2,
};

enum gEConfigVisibility {
gEConfigVisibility_Hidden = 0,
gEConfigVisibility_Locked = 1,
gEConfigVisibility_CanBeModified = 2,
};

enum eEPntLightShape {
eEPntLightShape_Sphere = 0, // (default)
eEPntLightShape_Disc = 1,
eEPntLightShape_Tube = 2,
eEPntLightShape_Rect = 3,
};

enum gEWalkMode {
gEWalkMode_Walk = 0,
gEWalkMode_Run = 1, // (default)
gEWalkMode_Sprint = 2,
gEWalkMode_FlySlow = 3,
gEWalkMode_FlyFast = 4,
};

enum gEItemLevel {
gEItemLevel_Normal = 0, // (default)
gEItemLevel_Damaged = 1,
gEItemLevel_Enhanced = 2,
gEItemLevel_Legendary = 3,
gEItemLevel_None = 0,
gEItemLevel_1 = 0,
gEItemLevel_2 = 1,
gEItemLevel_3 = 2,
};

enum gEDifficultyMinigames {
gEDifficultyMinigames_Easy = 0,
gEDifficultyMinigames_Normal = 1, // (default)
gEDifficultyMinigames_Hard = 2,
};

enum bESaveGameMountType {
bESaveGameMountType_Default = 0, // (default)
bESaveGameMountType_TransferPS4 = 1,
};

enum gEStatusEffectType {
gEStatusEffectType_Normal = 0, // (default)
gEStatusEffectType_Area = 1,
};

enum gEReason {
gEReason_None = 0, // (default)
gEReason_PlayerTalk = 1,
gEReason_ImportantInfo = 2,
gEReason_PlayerSneaking = 3,
gEReason_PlayerWeapon = 4,
gEReason_PlayerRoom = 5,
gEReason_PlayerInteract = 6,
gEReason_Eat = 7,
gEReason_Ransack = 8,
gEReason_Nuisance = 9,
gEReason_Fighter = 10,
gEReason_DamageLivestock = 11,
gEReason_MurderLivestock = 12,
gEReason_Theft = 13,
gEReason_Defeat = 14,
gEReason_Murder = 15,
gEReason_Enemy = 16,
gEReason_Attacker = 17,
gEReason_Damage = 18,
gEReason_Magic = 19,
gEReason_Duel = 20,
gEReason_Kill = 21,
gEReason_Bloodrage = 22,
gEReason_Disturbed = 23,
gEReason_Ghost = 24,
};

enum gENavOffsetUser {
gENavOffsetUser_Any = 0, // (default)
gENavOffsetUser_Player = 1,
gENavOffsetUser_NPC = 2,
gENavOffsetUser_AdultNPC = 3,
gENavOffsetUser_Male = 4,
gENavOffsetUser_Female = 5,
gENavOffsetUser_Child = 6,
};

enum eENormalDistributionFunction {
eENormalDistributionFunction_Phong = 0,
eENormalDistributionFunction_Beckmann = 1,
eENormalDistributionFunction_GGX = 2, // (default)
};

enum eEGIHelperType {
eEGIHelperType_ForceHelperProbe = 0, // (default)
eEGIHelperType_ForceOutdoorProbe = 1,
};

enum eESoundChannel {
eESoundChannel_Master = 0,
eESoundChannel_Game = 1, // (default)
eESoundChannel_Cutscene = 2,
};

enum gECameraNoiseType {
gECameraNoiseType_Perlin = 0, // (default)
gECameraNoiseType_Ebert = 1,
gECameraNoiseType_Peachey = 2,
};

enum gEBlockStability {
gEBlockStability_None = 0, // (default)
gEBlockStability_Low = 1,
gEBlockStability_Medium = 2,
gEBlockStability_High = 3,
};

enum gESocketValue {
gESocketValue_None = 0, // (default)
gESocketValue_Small = 1,
gESocketValue_Medium = 2,
gESocketValue_Large = 3,
gESocketValue_Count = 4,
};

enum gESlotPositionType {
gESlotPositionType_None = 0, // (default)
gESlotPositionType_Front = 1,
gESlotPositionType_Side = 2,
gESlotPositionType_Back = 3,
};

enum gEAnchorType {
gEAnchorType_Local = 0, // (default)
gEAnchorType_Roam = 1,
gEAnchorType_Patrol = 2,
gEAnchorType_Event = 3,
gEAnchorType_Fight = 4,
gEAnchorType_LocalRoam = 5,
gEAnchorType_SVMSmalltalk = 6,
};

enum eEFinalBlend {
eEFinalBlend_Overwrite = 0,
eEFinalBlend_AlphaBlend = 1, // (default)
eEFinalBlend_AlphaModulate = 2,
eEFinalBlend_Modulate = 3,
eEFinalBlend_Translucent = 4,
eEFinalBlend_Darken = 5,
eEFinalBlend_Brighten = 6,
eEFinalBlend_Invisible = 7,
};

enum gEActionInput {
gEActionInput_Undefined = 0, // (default)
gEActionInput_MoveForward = 1,
gEActionInput_MoveBackward = 2,
gEActionInput_MoveLeft = 3,
gEActionInput_MoveRight = 4,
gEActionInput_LookLeft = 5,
gEActionInput_LookRight = 6,
gEActionInput_LookUp = 7,
gEActionInput_LookDown = 8,
gEActionInput_ZoomIn = 9,
gEActionInput_ZoomOut = 10,
gEActionInput_CameraDistance = 11,
gEActionInput_Walk = 12,
gEActionInput_Sprint = 13,
gEActionInput_SprintToggle = 14,
gEActionInput_Jump = 15,
gEActionInput_Jetpack = 16,
gEActionInput_Sneak = 17,
gEActionInput_JumpSneakCombi = 18,
gEActionInput_WeaponMode = 19,
gEActionInput_PrimaryAction = 20,
gEActionInput_SecondaryAction = 21,
gEActionInput_PowerAttack = 22,
gEActionInput_SpecialMove = 23,
gEActionInput_Reload = 31,
gEActionInput_PlayerLight = 32,
gEActionInput_Evade = 24,
gEActionInput_TargetLock = 25,
gEActionInput_TargetLockLeft = 26,
gEActionInput_TargetLockRight = 27,
gEActionInput_TargetLockDown = 28,
gEActionInput_TargetLockUp = 29,
gEActionInput_RangedWeaponMod = 30,
gEActionInput_QuickUse0 = 33,
gEActionInput_QuickUse1 = 34,
gEActionInput_QuickUse2 = 35,
gEActionInput_QuickUse3 = 36,
gEActionInput_QuickUse4 = 37,
gEActionInput_QuickUse5 = 38,
gEActionInput_QuickUse6 = 39,
gEActionInput_QuickUse7 = 40,
gEActionInput_QuickUse8 = 41,
gEActionInput_QuickUse9 = 42,
gEActionInput_GP_QuickUse = 43,
gEActionInput_GP_PauseMenu = 44,
gEActionInput_GP_QuickUse_Left = 45,
gEActionInput_GP_QuickUse_Right = 46,
gEActionInput_GP_QuickUse_Up = 47,
gEActionInput_GP_QuickUse_Down = 48,
gEActionInput_GP_Map_ZoomIn = 49,
gEActionInput_GP_Map_ZoomOut = 50,
gEActionInput_GP_MovementToggle = 51,
gEActionInput_GP_JetpackThrust = 52,
gEActionInput_GameMenu = 53,
gEActionInput_GameMenu_Attributes = 54,
gEActionInput_GameMenu_Perks = 55,
gEActionInput_GameMenu_Inventory = 56,
gEActionInput_GameMenu_Log = 57,
gEActionInput_GameMenu_Map = 58,
gEActionInput_Escape = 59,
gEActionInput_QuickSave = 60,
gEActionInput_QuickLoad = 61,
gEActionInput_Hud_A = 62,
gEActionInput_Hud_B = 63,
gEActionInput_Hud_Y = 64,
gEActionInput_Hud_X = 65,
gEActionInput_Hud_NextPage = 66,
gEActionInput_Hud_PrevPage = 67,
gEActionInput_Hud_SecStickLeft = 68,
gEActionInput_Hud_SecStickRight = 69,
gEActionInput_Hud_SecStickUp = 70,
gEActionInput_Hud_SecStickDown = 71,
gEActionInput_Hud_Accept = 72,
gEActionInput_Hud_Dismiss = 73,
gEActionInput_Hud_LeftStick = 74,
gEActionInput_Hud_RightStick = 75,
gEActionInput_Hud_NavigateUp = 76,
gEActionInput_Hud_NavigateDown = 77,
gEActionInput_Hud_NavigateLeft = 78,
gEActionInput_Hud_NavigateRight = 79,
gEActionInput_Hud_PageUp = 80,
gEActionInput_Hud_PageDown = 81,
gEActionInput_Hud_PageBegin = 82,
gEActionInput_Hud_PageEnd = 83,
gEActionInput_Hud_ScrollToggle = 84,
gEActionInput_Axis_LookLeftRight = 86,
gEActionInput_Axis_LookDownUp = 87,
gEActionInput_Axis_MoveBackwardForward = 88,
gEActionInput_Axis_MoveLeftRight = 89,
gEActionInput_Axis_TargetLockLeftRight = 91,
gEActionInput_Axis_TargetLockDownUp = 90,
gEActionInput_Axis_Hud_NavigateDownUp = 92,
gEActionInput_Axis_Hud_NavigateLeftRight = 93,
gEActionInput_Axis_Hud_SecStickLeftRight = 94,
gEActionInput_Axis_Hud_SecStickDownUp = 95,
};

enum eEAudioChannelFallOff {
eEAudioChannelFallOff_Logarithmic = 0, // (default)
eEAudioChannelFallOff_Linear = 1,
};

enum gEPerformanceMeasure {
gEPerformanceMeasure_SSE = 0, // (default)
gEPerformanceMeasure_MSE = 1,
};

enum eERefractionMode {
eERefractionMode_Normal = 0, // (default)
eERefractionMode_Solid = 1,
eERefractionMode_Shell = 2,
};

enum gEStateGraphEventType {
gEStateGraphEventType_None = 0, // (default)
gEStateGraphEventType_Trigger = 1,
gEStateGraphEventType_Untrigger = 2,
gEStateGraphEventType_Touch = 3,
gEStateGraphEventType_Untouch = 4,
gEStateGraphEventType_Damage = 5,
gEStateGraphEventType_FirstTrigger = 6,
gEStateGraphEventType_LastUntrigger = 7,
gEStateGraphEventType_FirstTouch = 8,
gEStateGraphEventType_LastUntouch = 9,
};

enum gESkill {
gESkill_None = 0, // (default)
gESkill_Attrib_Strength = 1,
gESkill_Attrib_Toughness = 2,
gESkill_Attrib_Dexterity = 3,
gESkill_Attrib_Intelligence = 4,
gESkill_Attrib_Cunning = 5,
gESkill_MaxHP = 136,
gESkill_Hitpoints = 137,
gESkill_MaxMana = 138,
gESkill_Mana = 139,
gESkill_MaxElex = 140,
gESkill_Elex = 141,
gESkill_MaxStamina = 142,
gESkill_XP = 6,
gESkill_Soul = 7,
gESkill_LearnPoints = 8,
gESkill_AttributePoints = 9,
gESkill_Level = 143,
gESkill_Bonus_MeleeWeapons = 10,
gESkill_Bonus_RangedWeapons = 11,
gESkill_Bonus_HeavyWeapons = 12,
gESkill_Bonus_Grenades = 13,
gESkill_Bonus_AttackPower = 14,
gESkill_Bonus_ParadePower = 15,
gESkill_Bonus_CritChance = 16,
gESkill_Bonus_ResistAll = 17,
gESkill_Bonus_ResistReality = 18,
gESkill_Bonus_Armor = 19,
gESkill_SocketItemsBonus_Damage = 20,
gESkill_SocketItemsBonus_CrewDamage = 21,
gESkill_SocketItemsBonus_HP = 22,
gESkill_SocketItemsBonus_CrewHP = 23,
gESkill_SocketItemsBonus_HPPerHit = 24,
gESkill_SocketItemsBonus_LowerResistOpponent = 25,
gESkill_SocketItemsBonus_ResistAll = 26,
gESkill_SocketItemsBonus_CritChance = 27,
gESkill_SocketItemsBonus_MonsterXP = 28,
gESkill_SocketItemsBonus_QuestXP = 29,
gESkill_Multiplier_XPBonus = 30,
gESkill_Perk_MeleeWeapons = 31,
gESkill_Perk_Kick = 32,
gESkill_Perk_Backstab = 33,
gESkill_Perk_MeleeWeaponHandling = 34,
gESkill_Perk_RangedWeapons = 35,
gESkill_Perk_ProjectileMaster = 36,
gESkill_Perk_EnergyMaster = 37,
gESkill_Perk_PowderMaster = 38,
gESkill_Perk_RangedWeaponHandling = 39,
gESkill_Perk_HeavyWeapons = 40,
gESkill_Perk_HeavyWeaponHandling = 41,
gESkill_Perk_Grenades = 42,
gESkill_Perk_ResistAll = 43,
gESkill_Perk_Armor = 44,
gESkill_Perk_ExtraHealth = 45,
gESkill_Perk_HealthRegeneration = 46,
gESkill_Perk_ExtraStamina = 47,
gESkill_Perk_StaminaRegeneration = 48,
gESkill_Perk_6thSense = 49,
gESkill_Perk_LoneWolf = 50,
gESkill_Perk_StrongerPotions = 51,
gESkill_Perk_Eater = 52,
gESkill_Perk_Lockpick = 53,
gESkill_Perk_LockpickBreak = 54,
gESkill_Perk_Pickpocket = 55,
gESkill_Perk_BuildWeapons = 56,
gESkill_Perk_Socketry = 57,
gESkill_Perk_BuildAmmo = 58,
gESkill_Perk_BuildGrenades = 59,
gESkill_Perk_Chemistry = 60,
gESkill_Perk_Hacking = 61,
gESkill_Perk_Mining = 62,
gESkill_Perk_Trophies = 63,
gESkill_Perk_AttributePoints = 64,
gESkill_Perk_ExtraAttribute = 65,
gESkill_Perk_MonsterXP = 66,
gESkill_Perk_BookXP = 67,
gESkill_Perk_QuestXP = 68,
gESkill_Perk_Barter = 69,
gESkill_Perk_CheapLearning = 70,
gESkill_Perk_Party = 71,
gESkill_Perk_ThiefSense = 72,
gESkill_Perk_Trusted = 73,
gESkill_Perk_Advocat = 74,
gESkill_Perk_Jetpack = 75,
gESkill_Perk_JetpackSprint = 76,
gESkill_Perk_JetpackEmergencyBooster = 77,
gESkill_Perk_JetpackHover = 78,
gESkill_Perk_JetpackEvade = 79,
gESkill_Perk_JetpackSpareFuelTank = 80,
gESkill_Perk_JetpackAdditionalFuel = 81,
gESkill_Perk_JetpackUltimate = 82,
gESkill_Perk_Mana = 83,
gESkill_Perk_RangedMagic = 84,
gESkill_Perk_RangedMagicAim = 85,
gESkill_Perk_RangedMagicHeavy = 86,
gESkill_Perk_BSKFirerain = 87,
gESkill_Perk_BSKFirewave = 88,
gESkill_Perk_MeleeMagic = 89,
gESkill_Perk_MeleeMagicAim = 90,
gESkill_Perk_MeleeMagicHeavy = 91,
gESkill_Perk_BSKManaAura = 92,
gESkill_Perk_Elex = 93,
gESkill_Perk_HarvestElex = 94,
gESkill_Perk_IceMagic = 95,
gESkill_Perk_IceMagicHeavy = 96,
gESkill_Perk_IceMagicLightning = 97,
gESkill_Perk_ALBBlizzard = 98,
gESkill_Perk_ALBHeal = 99,
gESkill_Perk_StimResistance = 100,
gESkill_Perk_StimRage = 101,
gESkill_Perk_StimRegeneration = 102,
gESkill_Perk_StimStamina = 103,
gESkill_Perk_StimSpeed = 104,
gESkill_Perk_LastChance = 105,
gESkill_Perk_Faithfull = 106,
gESkill_Perk_SelfHurt = 107,
gESkill_Perk_BloodCleansing = 108,
gESkill_Perk_IgnorePain = 109,
gESkill_Perk_Rage = 110,
gESkill_Perk_ThroneSlot = 111,
gESkill_Perk_ThroneDamage = 112,
gESkill_Perk_ThroneArmor = 113,
gESkill_Perk_ThroneAttackSpeed = 114,
gESkill_Perk_ThroneSprint = 115,
gESkill_Perk_ThroneHP = 116,
gESkill_Perk_ThroneStamina = 117,
gESkill_Perk_MutantKiller = 118,
gESkill_Perk_RobotKiller = 119,
gESkill_Perk_SkyandKiller = 120,
gESkill_Perk_ItemSight = 121,
gESkill_Perk_SenseLife = 122,
gESkill_Perk_Mutantproof = 123,
gESkill_Perk_SenseMachines = 124,
gESkill_Perk_Adventurer = 125,
gESkill_Perk_Cleric = 126,
gESkill_Perk_Outlaw = 127,
gESkill_Perk_Berserker = 128,
gESkill_Perk_Alb = 129,
gESkill_Perk_Morkon = 130,
gESkill_Skill_AttackAbility = 144,
gESkill_Skill_ParadeAbility = 145,
gESkill_Skill_StatusEffectThreshold = 146,
gESkill_Skill_Combat = 131,
gESkill_Skill_Survival = 132,
gESkill_Skill_Crafting = 133,
gESkill_Skill_Personality = 134,
gESkill_Skill_Jetpack = 135,
gESkill_Protection_Armor = 147,
gESkill_Protection_ResistFire = 148,
gESkill_Protection_ResistCold = 149,
gESkill_Protection_ResistPoison = 150,
gESkill_Protection_ResistRad = 151,
gESkill_Protection_ResistLightning = 152,
gESkill_Protection_ResistPSI = 153,
gESkill_Protection_ResistBleed = 154,
gESkill_Protection_ResistExplosive = 155,
gESkill_Protection_ResistReflection = 156,
gESkill_Protection_ResistEMP = 157,
gESkill_Protection_ResistPierce = 158,
gESkill_Protection_ResistReality = 159,
gESkill_NPC_Attack_Power = 160,
gESkill_NPC_Attack_Speed = 161,
gESkill_NPC_Ranged_Accuracy_Bonus = 162,
gESkill_NPC_Ranged_Critical_Base = 163,
gESkill_Attrib_Blood = 136,
gESkill_Stat_Blood = 137,
gESkill_Stat_Glory = 6,
gESkill_Bonus_RadResist = 17,
gESkill_Bonus_FireResist = 17,
gESkill_Bonus_ColdResist = 17,
gESkill_Bonus_PoisonResist = 17,
gESkill_Perk_AttackPower = 0,
gESkill_Perk_ParadePower = 0,
gESkill_Perk_CritChance = 0,
gESkill_Perk_JetPackAttack = 0,
gESkill_Perk_RadResist = 151,
gESkill_Perk_FireResist = 148,
gESkill_Perk_ColdResist = 149,
gESkill_Perk_PoisonResist = 150,
gESkill_Perk_Pickpocket2ndTry = 53,
gESkill_Perk_ModifyWeapons = 56,
gESkill_Perk_Jewelry = 0,
gESkill_Perk_SkillCombat = 131,
gESkill_Perk_SkillSurvival = 132,
gESkill_Perk_SkillCrafting = 133,
gESkill_Perk_SkillPersonality = 134,
gESkill_Perk_AnimalFriend = 0,
gESkill_Perk_Emotional = 0,
gESkill_Perk_Neutral = 0,
gESkill_Perk_Synthetic = 0,
gESkill_Perk_Magic = 0,
gESkill_Perk_EnchantWeapon = 0,
gESkill_Perk_ScatterShot = 0,
gESkill_Perk_SeekingShot = 0,
gESkill_Perk_Camouflage = 0,
gESkill_Perk_ArmorBuff = 0,
gESkill_Perk_MeleeBuff = 0,
gESkill_Perk_HPintoMana = 0,
gESkill_Perk_SummonGhostAnimal = 0,
gESkill_Perk_PoisonAura = 0,
gESkill_Perk_Heal = 0,
gESkill_Perk_PSI = 0,
gESkill_Perk_Battery = 0,
gESkill_Perk_BuildTechWeapon = 0,
gESkill_Perk_OneManArmy = 0,
gESkill_Perk_Suggestion = 0,
gESkill_Perk_Cleansing = 0,
gESkill_Perk_Shield = 0,
gESkill_Perk_RangedBuff = 0,
gESkill_Perk_Phasing = 0,
gESkill_Perk_ForceWave = 0,
gESkill_Perk_LastStand = 0,
gESkill_Perk_Projection = 0,
gESkill_Perk_Injector = 0,
gESkill_Perk_BuildMechWeapon = 0,
gESkill_Perk_DrugCapacity = 0,
gESkill_Perk_Regeneration = 0,
gESkill_Perk_Resistance = 0,
gESkill_Perk_RageMode = 0,
gESkill_Perk_ImmuneToStatuseffects = 0,
gESkill_Perk_HalfDamage = 0,
gESkill_Perk_DoubleDamage = 0,
gESkill_Perk_Animalinstinct = 0,
gESkill_Perk_GuildEnergyRegeneration = 0,
gESkill_Skill_Berserker = 0,
gESkill_Skill_Outlaw = 0,
gESkill_Skill_Cleric = 0,
gESkill_MaxGuildEnergy = 0,
gESkill_GuildEnergy = 0,
};

enum gECombatAimPosRelativeTo {
gECombatAimPosRelativeTo_Trajectory = 0, // (default)
gECombatAimPosRelativeTo_HeadBone = 1,
};

enum gEBehaviorClassPreset {
gEBehaviorClassPreset_None = 0, // (default)
gEBehaviorClassPreset_Normal = 1,
gEBehaviorClassPreset_Swift = 2,
gEBehaviorClassPreset_Blocker = 3,
gEBehaviorClassPreset_Blaster = 4,
};

enum eSSubMeshFlags {
eSSubMeshFlags_None = 0, // (default)
eSSubMeshFlags_HairDoubledSided = 1,
};

enum eEShaderSampleType {
eEShaderSampleType_Color = 0, // (default)
eEShaderSampleType_Normal_RGB = 1,
eEShaderSampleType_Normal_RG = 2,
eEShaderSampleType_Red = 3,
eEShaderSampleType_Green = 4,
eEShaderSampleType_Blue = 5,
eEShaderSampleType_Alpha = 6,
eEShaderSampleType_Normal_Signed_RG = 2,
};

enum gEFlightPathType {
gEFlightPathType_Ballistic = 0, // (default)
gEFlightPathType_Seeking = 1,
};

enum gEAttackPosition {
gEAttackPosition_None = 0, // (default)
gEAttackPosition_Fighting = 1,
gEAttackPosition_Following = 2,
gEAttackPosition_Waiting = 3,
};

enum gEUIDisplayDigitState {
gEUIDisplayDigitState_Normal = 0, // (default)
gEUIDisplayDigitState_RightPosition = 1,
gEUIDisplayDigitState_WrongPosition = 2,
gEUIDisplayDigitState_NotAvailable = 3,
};

enum eEIFOutputMode {
eEIFOutputMode_Texture = 0, // (default)
eEIFOutputMode_FrameBuffer = 1,
};

enum eEPropertySetType {
eEPropertySetType_Unknown = 0,
eEPropertySetType_Base = 1,
eEPropertySetType_MeshVisual = 2, // (default)
eEPropertySetType_DummyVisual = 3,
eEPropertySetType_ShaderParticleSystem = 4,
eEPropertySetType_Navigation = 5,
eEPropertySetType_DynamicCollisionCircle = 6,
eEPropertySetType_Radio = 7,
eEPropertySetType_Group = 8,
eEPropertySetType_Respawn = 9,
eEPropertySetType_EffectStatic = 10,
eEPropertySetType_CategoryTags = 11,
eEPropertySetType_NavHelper = 12,
eEPropertySetType_TileSet = 13,
eEPropertySetType_GIHelper = 14,
eEPropertySetType_PointLight = 15,
eEPropertySetType_ReflectionProbe = 16,
eEPropertySetType_MovementBase = 17,
eEPropertySetType_CameraAI = 18,
eEPropertySetType_UNUSEDREPLACEME00 = 19,
eEPropertySetType_AIHelper = 20,
eEPropertySetType_AIHelperFreePoint = 21,
eEPropertySetType_UNUSEDREPLACEME01 = 22,
eEPropertySetType_UNUSEDREPLACEME02 = 23,
eEPropertySetType_NPC = 24,
eEPropertySetType_Inventory = 106,
eEPropertySetType_Clock = 26,
eEPropertySetType_Skydome = 27,
eEPropertySetType_GIProbe = 28,
eEPropertySetType_UNUSEDREPLACEME03 = 29,
eEPropertySetType_ScriptRoutine = 30,
eEPropertySetType_Impostor = 31,
eEPropertySetType_Item = 32,
eEPropertySetType_UNUSEDREPLACEME04 = 33,
eEPropertySetType_FlockingField = 34,
eEPropertySetType_Quest = 35,
eEPropertySetType_InfoManager = 36,
eEPropertySetType_Info = 37,
eEPropertySetType_InfoScript = 38,
eEPropertySetType_InfoScriptLine = 39,
eEPropertySetType_Focus = 40,
eEPropertySetType_NavOffset = 41,
eEPropertySetType_Arena = 42,
eEPropertySetType_Area = 43,
eEPropertySetType_Vegetation = 44,
eEPropertySetType_VegetationBrush = 45,
eEPropertySetType_VegetationRubber = 46,
eEPropertySetType_Dialog = 47,
eEPropertySetType_Lock = 48,
eEPropertySetType_Door = 49,
eEPropertySetType_UNUSEDREPLACEME05 = 50,
eEPropertySetType_UNUSEDREPLACEME06 = 51,
eEPropertySetType_ScriptTrigger = 52,
eEPropertySetType_UNUSEDREPLACEME07 = 53,
eEPropertySetType_Ladder = 54,
eEPropertySetType_GIOcclusionMesh = 55,
eEPropertySetType_Party = 56,
eEPropertySetType_Anchor = 57,
eEPropertySetType_Letter = 58,
eEPropertySetType_Book = 59,
eEPropertySetType_MapMarker = 60,
eEPropertySetType_GIReceiver = 61,
eEPropertySetType_UNUSEDREPLACEME08 = 62,
eEPropertySetType_Projectile = 63,
eEPropertySetType_Sound = 64,
eEPropertySetType_Strip = 65,
eEPropertySetType_AIZone = 66,
eEPropertySetType_AudioEmitter = 67,
eEPropertySetType_Effect = 68,
eEPropertySetType_Barricade = 69,
eEPropertySetType_WeatherZone = 70,
eEPropertySetType_Precipitation = 71,
eEPropertySetType_StateGraph = 72,
eEPropertySetType_Mover = 73,
eEPropertySetType_Magic = 74,
eEPropertySetType_Tutorial = 75,
eEPropertySetType_UNUSEDREPLACEME09 = 76,
eEPropertySetType_Skills = 77,
eEPropertySetType_ArmorSet = 78,
eEPropertySetType_Crafting = 79,
eEPropertySetType_MapLocation = 80,
eEPropertySetType_Recipe = 81,
eEPropertySetType_RecipeBook = 82,
eEPropertySetType_Decal = 83,
eEPropertySetType_GenericEntityListener = 84,
eEPropertySetType_Billboard = 85,
eEPropertySetType_InfoSystem = 86,
eEPropertySetType_CombatSystem2 = 87,
eEPropertySetType_AreaStringProperty = 88,
eEPropertySetType_UNUSEDREPLACEME10 = 89,
eEPropertySetType_UNUSEDREPLACEME11 = 90,
eEPropertySetType_GameScript = 91,
eEPropertySetType_BodyPart = 92,
eEPropertySetType_ParticleSystem = 93,
eEPropertySetType_MapInfo = 94,
eEPropertySetType_AudioReverb = 95,
eEPropertySetType_ImpostorGenerator = 96,
eEPropertySetType_Terrain = 97,
eEPropertySetType_TerrainMapStreet = 98,
eEPropertySetType_TerrainRiver = 99,
eEPropertySetType_TerrainTools = 100,
eEPropertySetType_PhysicsActor = 101,
eEPropertySetType_CharacterMovement2 = 102,
eEPropertySetType_Animation3 = 103,
eEPropertySetType_Interaction = 104,
eEPropertySetType_Cutscene = 105,
eEPropertySetType_MeshPrefab = 25,
eEPropertySetType_LockPick = 107,
eEPropertySetType_DebugMeshVisual = 108,
eEPropertySetType_FixCamera = 109,
eEPropertySetType_MovingObject = 110,
eEPropertySetType_DebugBillboard = 111,
eEPropertySetType_Salvage = 112,
eEPropertySetType_UNUSEDREPLACEME12 = 113,
eEPropertySetType_PathFollowing = 114,
eEPropertySetType_Questmarker = 115,
eEPropertySetType_NavExclude = 116,
eEPropertySetType_NavFlexPath = 117,
eEPropertySetType_NavOffMeshConnector = 118,
eEPropertySetType_SeaMonsterSkills = 119,
eEPropertySetType_SplineMesh = 122,
eEPropertySetType_Description = 123,
eEPropertySetType_VegetationModifier = 124,
eEPropertySetType_Bomb = 126,
};

enum eEDynamicLightEffect {
eEDynamicLightEffect_Steady = 0, // (default)
eEDynamicLightEffect_Pulse = 1,
eEDynamicLightEffect_Blink = 2,
eEDynamicLightEffect_Flicker = 3,
eEDynamicLightEffect_Strobe = 4,
eEDynamicLightEffect_NoisePerlin = 5,
eEDynamicLightEffect_NoiseEbert = 6,
eEDynamicLightEffect_NoisePeachey = 7,
};

enum gEAimingBehavior {
gEAimingBehavior_AssistOff = 0, // (default)
gEAimingBehavior_AssistOn = 1,
};

enum gEPartyMemberType {
gEPartyMemberType_None = 0, // (default)
gEPartyMemberType_Party = 1,
gEPartyMemberType_PlayerGuide = 2,
gEPartyMemberType_PartySummoned = 3,
};

enum gEDamageValue {
gEDamageValue_None = 0, // (default)
gEDamageValue_Min = 1,
gEDamageValue_Max = 2,
gEDamageValue_Random = 3,
gEDamageValue_ParadeAttack = 4,
gEDamageValue_Critical = 5,
gEDamageValue_One = 6,
};

enum gECutsceneCommand {
gECutsceneCommand_Fill = 0, // (default)
gECutsceneCommand_InterpolatorFloat = 1,
gECutsceneCommand_InterpolatorVec2 = 2,
gECutsceneCommand_InterpolatorVec3 = 3,
gECutsceneCommand_InterpolatorVec4 = 4,
gECutsceneCommand_InterpolatorEuler = 5,
gECutsceneCommand_LookAtRotation = 6,
gECutsceneCommand_SetBool = 7,
gECutsceneCommand_PlayCamera = 8,
gECutsceneCommand_PlayAnimation = 10,
gECutsceneCommand_PlaySound = 11,
gECutsceneCommand_PlayVoice = 12,
gECutsceneCommand_PlayText = 13,
gECutsceneCommand_AutoFocus = 14,
gECutsceneCommand_Play2DSound = 15,
gECutsceneCommand_CamShakeInterpolatorVec3 = 16,
gECutsceneCommand_PlayVoiceArray = 17,
gECutsceneCommand_EntityShakeInterpolatorVec3 = 18,
gECutsceneCommand_PlayVideo = 19,
};

enum eEDebugImageEffect {
eEDebugImageEffect_None = -1, // (default)
eEDebugImageEffect_Depth = 0,
eEDebugImageEffect_Normal = 1,
eEDebugImageEffect_Albedo = 2,
eEDebugImageEffect_Roughness = 3,
eEDebugImageEffect_Reflectance = 4,
eEDebugImageEffect_Metalness = 5,
eEDebugImageEffect_SubSurfaceColor = 6,
eEDebugImageEffect_Ambientocclusion = 7,
eEDebugImageEffect_Specularocclusion = 8,
eEDebugImageEffect_Emissive = 9,
eEDebugImageEffect_ShadingModel = 10,
eEDebugImageEffect_PerPixelLightCount = 11,
eEDebugImageEffect_PerPixelProbeCount = 12,
eEDebugImageEffect_NaN = 13,
eEDebugImageEffect_StaticLight = 14,
eEDebugImageEffect_GI_Debug = 15,
eEDebugImageEffect_FogSlice = 16,
eEDebugImageEffect_RayTrace = 17,
eEDebugImageEffect_Shadows = 18,
eEDebugImageEffect_Shadows_SubSurface = 19,
eEDebugImageEffect_OverDraw_Alpha = 20,
eEDebugImageEffect_Velocity = 21,
eEDebugImageEffect_Texeldensity = 22,
eEDebugImageEffect_Reflections = 23,
eEDebugImageEffect_MaterialCalibration = 24,
eEDebugImageEffect_VertexColor = 25,
eEDebugImageEffect_MipLevel = 26,
eEDebugImageEffect_MipLevelMin = 27,
eEDebugImageEffect_MipLevelMax = 28,
eEDebugImageEffect_FrontFaceBackFace = 29,
};

enum eEShaderMaterialBlendMode {
eEShaderMaterialBlendMode_Normal = 0, // (default)
eEShaderMaterialBlendMode_Masked = 1,
eEShaderMaterialBlendMode_AlphaBlend = 2,
eEShaderMaterialBlendMode_Brighten = 3,
eEShaderMaterialBlendMode_Additive = 4,
eEShaderMaterialBlendMode_Modulate = 5,
eEShaderMaterialBlendMode_Glass = 7,
eEShaderMaterialBlendMode_Invisible = 6,
};

enum eESupportedNavigationTypes {
eESupportedNavigationTypes_Ground = 0, // (default)
eESupportedNavigationTypes_Flight = 1,
eESupportedNavigationTypes_GroundAndFlight = 2,
};

enum gELockStatus {
gELockStatus_Locked = 0,
gELockStatus_Unlocked = 1, // (default)
};

enum gEBehaviorNodeStatus {
gEBehaviorNodeStatus_Invalid = 0, // (default)
gEBehaviorNodeStatus_FailedInitialization = 1,
gEBehaviorNodeStatus_Initialized = 2,
gEBehaviorNodeStatus_Running = 3,
gEBehaviorNodeStatus_Success = 4,
gEBehaviorNodeStatus_Failure = 5,
gEBehaviorNodeStatus_Aborted = 6,
};

enum eEPhotometricUnit {
eEPhotometricUnit_Lumen = 0, // (default)
eEPhotometricUnit_Luminance = 1,
};

enum gEUISound {
gEUISound_None = 0, // (default)
gEUISound_Show = 1,
gEUISound_Hide = 2,
gEUISound_Activate = 3,
gEUISound_Deactivate = 4,
gEUISound_Focus = 5,
gEUISound_Invoke = 6,
gEUISound_GoBack = 7,
gEUISound_MoveNext = 8,
gEUISound_MovePrevious = 9,
gEUISound_MoveNextSub = 10,
gEUISound_MovePreviousSub = 11,
gEUISound_Deny = 12,
gEUISound_Count = 13,
};

enum gEThronePerk {
gEThronePerk_None = 0, // (default)
gEThronePerk_AttackPower = 1,
gEThronePerk_Damage = 2,
gEThronePerk_Armor = 3,
gEThronePerk_AttackSpeed = 4,
gEThronePerk_Sprint = 5,
gEThronePerk_HP = 6,
gEThronePerk_Stamina = 7,
gEThronePerk_Count = 8,
};

enum eEWeatherZoneShape {
eEWeatherZoneShape_3D_Sphere = 0,
eEWeatherZoneShape_3D_Box = 1,
};

enum eEShaderParticleDependencyType {
eEShaderParticleDependencyType_Predecessor = 0, // (default)
eEShaderParticleDependencyType_Successor = 1,
};

enum gEUIApplyConfiguration {
gEUIApplyConfiguration_None = 0, // (default)
gEUIApplyConfiguration_AudioModule = 1,
gEUIApplyConfiguration_ActionAdmin = 2,
gEUIApplyConfiguration_ResourceManager = 4,
gEUIApplyConfiguration_GraphicsModule = 8,
gEUIApplyConfiguration_ImageFilterAdmin = 16,
gEUIApplyConfiguration_IlluminationAdmin = 32,
gEUIApplyConfiguration_TerrainAdmin = 64,
gEUIApplyConfiguration_VegetationAdmin = 128,
gEUIApplyConfiguration_TutorialAdmin = 256,
gEUIApplyConfiguration_EffectSystem = 512,
gEUIApplyConfiguration_SceneAdmin = 1024,
gEUIApplyConfiguration_RenderSystemAdmin = 2048,
gEUIApplyConfiguration_UIModule = 4096,
gEUIApplyConfiguration_CombatAdmin = 8192,
gEUIApplyConfiguration_ShaderAdmin = 16384,
gEUIApplyConfiguration_ImageFilterShaderAdmin = 32768,
gEUIApplyConfiguration_SavegameHelper = 65536,
gEUIApplyConfiguration_FocusModule = 131072,
gEUIApplyConfiguration_Shadowplay = 262144,
gEUIApplyConfiguration_Localization = 524288,
};

enum eEBillboardTargetMode {
eEBillboardTargetMode_Self = 0, // (default)
eEBillboardTargetMode_Parent = 1,
eEBillboardTargetMode_Target = 2,
};

enum eEStripSpawning {
eEStripSpawning_Continuous = 0,
eEStripSpawning_Movement = 1, // (default)
eEStripSpawning_Timed = 2,
};

enum eEShaderParticleEmitterDecayMode {
eEShaderParticleEmitterDecayMode_Immediately = 0, // (default)
eEShaderParticleEmitterDecayMode_AfterCurrentLoop = 1,
eEShaderParticleEmitterDecayMode_AfterLastLoop = 2,
};

enum gEUIMapMarkerShowBorder {
gEUIMapMarkerShowBorder_Always = 0, // (default)
gEUIMapMarkerShowBorder_Never = 1,
gEUIMapMarkerShowBorder_HightlightedOnly = 2,
gEUIMapMarkerShowBorder_MinimapOnly = 3,
};

enum eEShaderElementDataType {
eEShaderElementDataType_Undifined = 0, // (default)
eEShaderElementDataType_Value = 1,
eEShaderElementDataType_Texture = 2,
eEShaderElementDataType_Sampler = 3,
eEShaderElementDataType_Material = 4,
eEShaderElementDataType_Particle_Curve = 5,
eEShaderElementDataType_Particle_Mesh = 6,
eEShaderElementDataType_Particle_EventBuffer = 7,
};

enum gENavOffMeshConnectorUserData {
gENavOffMeshConnectorUserData_Disabled = 0,
gENavOffMeshConnectorUserData_Climb = 1, // (default)
gENavOffMeshConnectorUserData_Ladder = 2,
gENavOffMeshConnectorUserData_JetPack = 3,
gENavOffMeshConnectorUserData_Door = 4,
gENavOffMeshConnectorUserData_Teleport = 5,
};

enum gEUIMiniMapPlacement {
gEUIMiniMapPlacement_SameHeight = 0, // (default)
gEUIMiniMapPlacement_AbovePlayer = 1,
gEUIMiniMapPlacement_BelowPlayer = 2,
};

enum gEInfoNPCStatus {
gEInfoNPCStatus_Alive = 0, // (default)
gEInfoNPCStatus_UnHarmed = 1,
gEInfoNPCStatus_Defeated = 2,
gEInfoNPCStatus_Dead = 3,
gEInfoNPCStatus_TalkedToPlayer = 4,
gEInfoNPCStatus_NotTalkedToPlayer = 5,
};

enum gESpeciesEffect {
gESpeciesEffect_Ambient = 0, // (default)
gESpeciesEffect_Attack = 1,
gESpeciesEffect_Defeat = 2,
gESpeciesEffect_Stumble = 3,
gESpeciesEffect_Threaten = 4,
};

enum gEAimModeType {
gEAimModeType_Off = 0, // (default)
gEAimModeType_Manual = 1,
gEAimModeType_Auto = 2,
};

enum gEStatusEffectStyle {
gEStatusEffectStyle_None = 0,
gEStatusEffectStyle_CoolDown = 1, // (default)
gEStatusEffectStyle_Damage = 2,
};

enum eEExecutionTimestampCompare {
eEExecutionTimestampCompare_None = 0,
eEExecutionTimestampCompare_Less = 1,
eEExecutionTimestampCompare_LessOrNone = 2,
eEExecutionTimestampCompare_Greater = 3, // (default)
eEExecutionTimestampCompare_GreaterOrNone = 4,
};

enum eEShaderParticleBillboardAlignment {
eEShaderParticleBillboardAlignment_Camera = 0, // (default)
eEShaderParticleBillboardAlignment_Binding = 1,
};

enum eEViewRange {
eEViewRange_Item_Small = 0, // (default)
eEViewRange_Item_Medium = 1,
eEViewRange_Item_Large = 2,
eEViewRange_NPC_Small = 3,
eEViewRange_NPC_Medium = 4,
eEViewRange_NPC_Large = 5,
eEViewRange_Level_Small = 6,
eEViewRange_Level_Medium = 7,
eEViewRange_Level_Large = 8,
eEViewRange_Object_Small = 9,
eEViewRange_Object_Medium = 10,
eEViewRange_Object_Large = 11,
eEViewRange_SpeedTree_Small = 12,
eEViewRange_SpeedTree_Medium = 13,
eEViewRange_SpeedTree_Large = 14,
eEViewRange_Events_Small = 15,
eEViewRange_Events_Medium = 16,
eEViewRange_Events_Large = 17,
eEViewRange_Terrain = 18,
eEViewRange_Effects_Small = 19,
eEViewRange_Effects_Medium = 20,
eEViewRange_Effects_Large = 21,
eEViewRange_Lights = 22,
eEViewRange_Infinity = 23,
eEViewRange_Sound_Small = 24,
eEViewRange_Sound_Medium = 25,
eEViewRange_Sound_Large = 26,
};

enum gEDamageCalculationType {
gEDamageCalculationType_Player = 0,
gEDamageCalculationType_Monster = 1, // (default)
gEDamageCalculationType_Immortal = 2,
gEDamageCalculationType_Invincible = 3,
};

enum gEAlignType {
gEAlignType_Left = 0, // (default)
gEAlignType_Right = 1,
gEAlignType_Center = 2,
gEAlignType_FillByScale = 3,
gEAlignType_FillByLoop = 4,
};

enum gEAimingAssist {
gEAimingAssist_None = 0, // (default)
gEAimingAssist_Initial = 1,
gEAimingAssist_Full = 2,
};

enum eEShaderTextureType {
eEShaderTextureType_1D = 0,
eEShaderTextureType_2D = 1, // (default)
eEShaderTextureType_3D = 2,
eEShaderTextureType_Cube = 3,
};

enum eEShaderCmpFunc {
eEShaderCmpFunc_Less = 0, // (default)
eEShaderCmpFunc_LessEqual = 1,
eEShaderCmpFunc_Greater = 2,
eEShaderCmpFunc_GreaterEqual = 3,
eEShaderCmpFunc_Equal = 4,
eEShaderCmpFunc_NotEqual = 5,
};

enum eEMaterialTessellationMode {
eEMaterialTessellationMode_None = 0, // (default)
eEMaterialTessellationMode_Flat = 1,
eEMaterialTessellationMode_PnTriangles = 2,
};

enum eEMouseAxis {
eEMouseAxis_None = 0, // (default)
eEMouseAxis_X = 1,
eEMouseAxis_Y = 2,
};

enum gESceneQuality {
gESceneQuality_Low = 0,
gESceneQuality_Medium = 1, // (default)
gESceneQuality_High = 2,
};

enum gEUISettingAnisotrophicFiltering {
gEUISettingAnisotrophicFiltering_Off = 0, // (default)
gEUISettingAnisotrophicFiltering_2 = 1,
gEUISettingAnisotrophicFiltering_4 = 2,
gEUISettingAnisotrophicFiltering_8 = 3,
gEUISettingAnisotrophicFiltering_16 = 4,
gEUISettingAnisotrophicFiltering_Count = 5,
};

enum gEStepMode {
gEStepMode_Walk = 0, // (default)
gEStepMode_Run = 1,
gEStepMode_Sprint = 2,
gEStepMode_Sneak = 3,
gEStepMode_Jump = 4,
gEStepMode_Land = 5,
gEStepMode_Turn = 6,
gEStepMode_BodyFall = 7,
gEStepMode_LandLight = 8,
gEStepMode_LandHeavy = 9,
};

enum gEItemEventTimerStartType {
gEItemEventTimerStartType_None = 0, // (default)
gEItemEventTimerStartType_StartOnHold = 1,
gEItemEventTimerStartType_StartOnHoldRight = 2,
gEItemEventTimerStartType_StartOnHoldLeft = 3,
};

enum gEStackType {
gEStackType_Normal = 0, // (default)
gEStackType_Trade = 1,
gEStackType_Hidden = 2,
gEStackType_ShoppingCart = 4,
};

enum gEEffectDecayMode {
gEEffectDecayMode_Decay = 0, // (default)
gEEffectDecayMode_Kill = 1,
};

enum eEPrefabForceMode {
eEPrefabForceMode_None = 0, // (default)
eEPrefabForceMode_Linear = 1,
eEPrefabForceMode_Explosion = 2,
};

enum eEGamepadTrigger {
eEGamepadTrigger_None = 0, // (default)
eEGamepadTrigger_Left = 1,
eEGamepadTrigger_Right = 2,
};

enum gEUISettingPostAATechnique {
gEUISettingPostAATechnique_Off = 0, // (default)
gEUISettingPostAATechnique_FXAA = 1,
gEUISettingPostAATechnique_SMAA = 2,
gEUISettingPostAATechnique_TFXAA = 3,
gEUISettingPostAATechnique_TSMAA = 4,
gEUISettingPostAATechnique_Count = 5,
};

enum gEUISettingQuality {
gEUISettingQuality_Off = 0, // (default)
gEUISettingQuality_Low = 1,
gEUISettingQuality_Medium = 2,
gEUISettingQuality_High = 3,
gEUISettingQuality_Ultra = 4,
gEUISettingQuality_Count = 5,
};

enum gEUIMapMarkerUserType {
gEUIMapMarkerUserType_Skull = 0,
gEUIMapMarkerUserType_Wolf = 1,
gEUIMapMarkerUserType_Chest = 2,
gEUIMapMarkerUserType_Cave = 3,
gEUIMapMarkerUserType_NPC = 4,
gEUIMapMarkerUserType_Inn = 5,
gEUIMapMarkerUserType_Campfire = 6,
gEUIMapMarkerUserType_Crafting = 7,
gEUIMapMarkerUserType_Star = 8,
gEUIMapMarkerUserType_Up = 9,
gEUIMapMarkerUserType_Down = 10,
gEUIMapMarkerUserType_QuestionMark = 11,
gEUIMapMarkerUserType_Count = 12,
};

enum gESkillModifier {
gESkillModifier_AddValue = 0, // (default)
gESkillModifier_SetToMax = 1,
gESkillModifier_SetToValue = 2,
gESkillModifier_AddPercentOfMax = 3,
gESkillModifier_AddPermanentValue = 4,
gESkillModifier_SetPermanentToValue = 5,
gESkillModifier_AddBaseValue = 6,
gESkillModifier_SetBaseToValue = 7,
};

enum gECutsceneSequence {
gECutsceneSequence_Supervisor = 0,
gECutsceneSequence_Director = 1, // (default)
gECutsceneSequence_Camera = 2,
gECutsceneSequence_Entity = 4,
gECutsceneSequence_Base = 5,
};

enum gECoverActionTest {
gECoverActionTest_SupportAnyOrNone = 15, // (default)
gECoverActionTest_SupportLowOrSide = 14,
gECoverActionTest_SupportLow = 2,
gECoverActionTest_SupportSide = 12,
};

enum eEShaderParticleNoiseType {
eEShaderParticleNoiseType_Value = 0,
eEShaderParticleNoiseType_Perlin = 1, // (default)
eEShaderParticleNoiseType_Cellular = 2,
};

enum eEMaterialShadingModel {
eEMaterialShadingModel_Default = 1, // (default)
eEMaterialShadingModel_Unlit = 0,
eEMaterialShadingModel_SubSurface = 2,
eEMaterialShadingModel_Translucent = 3,
eEMaterialShadingModel_Hair = 4,
eEMaterialShadingModel_Volume = 5,
eEMaterialShadingModel_Extraterrestrial = 6,
};

enum eEMouseButton {
eEMouseButton_None = 0, // (default)
eEMouseButton_LButton = 1,
eEMouseButton_RButton = 2,
eEMouseButton_MButton = 3,
eEMouseButton_XButton1 = 4,
eEMouseButton_XButton2 = 5,
eEMouseButton_Wheel_Up = 6,
eEMouseButton_Wheel_Down = 7,
};

enum eEAudioBankFormat {
eEAudioBankFormat_ADPCM = 0, // (default)
eEAudioBankFormat_VORBIS = 1,
eEAudioBankFormat_AT9 = 2,
eEAudioBankFormat_XMA = 3,
eEAudioBankFormat_PCM = 4,
};

enum gEFacialExpression {
gEFacialExpression_Neutral = 0, // (default)
gEFacialExpression_Angry = 1,
gEFacialExpression_Sad = 2,
gEFacialExpression_Happy = 3,
gEFacialExpression_Charmed = 4,
gEFacialExpression_None = 255,
};

enum gECoolDownType {
gECoolDownType_None = -1, // (default)
gECoolDownType_Ranged = 0,
gECoolDownType_Pistol = 1,
gECoolDownType_Crossbow = 2,
gECoolDownType_Dagger = 3,
gECoolDownType_Food = 4,
gECoolDownType_Spell_Barricade = 5,
gECoolDownType_Spell_Blizzard = 6,
gECoolDownType_Spell_BloodCleansing = 7,
gECoolDownType_Spell_Firerain = 8,
gECoolDownType_Spell_Firewave = 9,
gECoolDownType_Spell_Heal = 10,
gECoolDownType_Spell_IgnorePain = 11,
gECoolDownType_Spell_ManaAura = 12,
gECoolDownType_Spell_Rage = 13,
gECoolDownType_Spell_SelfHurt = 14,
gECoolDownType_Power_Shield = 15,
gECoolDownType_Power_RangedBuff = 16,
gECoolDownType_Power_Phasing = 17,
gECoolDownType_Power_SenseMachines = 18,
gECoolDownType_Power_Projection = 19,
gECoolDownType_Stim_Regeneration = 20,
gECoolDownType_Stim_Resistance = 21,
gECoolDownType_Stim_RageMode = 22,
gECoolDownType_Stim_SenseItems = 23,
gECoolDownType_Stim_ImmuneToStatuseffects = 24,
gECoolDownType_Stim_DoubleDamage = 25,
gECoolDownType_Stim_HalfDamage = 26,
gECoolDownType_Stim_AnimalInstinct = 27,
gECoolDownType_Potion_Healing = 28,
gECoolDownType_Spell_Icesplinter = -1,
gECoolDownType_Spell_Powerwave = -1,
gECoolDownType_Spell_Rust = -1,
gECoolDownType_Spell_Demonblade = -1,
gECoolDownType_Spell_Heroism = -1,
gECoolDownType_Spell_Reinforce = -1,
gECoolDownType_Spell_Runeskin = -1,
gECoolDownType_Spell_Shockwave = -1,
gECoolDownType_Spell_Stonefist = -1,
gECoolDownType_Spell_SummonHellhound = -1,
gECoolDownType_Spell_SummonWarrior = -1,
gECoolDownType_Spell_Bloodrage = -1,
gECoolDownType_Spell_Blowback = -1,
gECoolDownType_Spell_Creepingdeath = -1,
gECoolDownType_Spell_CurseOfWeakness = -1,
gECoolDownType_Spell_DeathOfBreath = -1,
gECoolDownType_Spell_Necromancy = -1,
gECoolDownType_Spell_Parrot = -1,
gECoolDownType_Spell_PestCloud = -1,
gECoolDownType_Spell_Cleansing = -1,
gECoolDownType_Power_LastStand = -1,
gECoolDownType_Power_Powerwave = -1,
gECoolDownType_Spell_Healing = -1,
gECoolDownType_Spell_Armor = -1,
gECoolDownType_Spell_MeleeBuff = -1,
gECoolDownType_Spell_Camouflage = -1,
gECoolDownType_Spell_HPToMana = -1,
gECoolDownType_Spell_SummonGhostAnimal = -1,
gECoolDownType_Spell_SenseLife = -1,
gECoolDownType_Spell_PoisonAura = -1,
gECoolDownType_Spell_Drone = -1,
gECoolDownType_Spell_Bodyshield = -1,
gECoolDownType_Spell_ForcePush = -1,
gECoolDownType_Spell_ForceWave = -1,
gECoolDownType_Spell_Itemscanner = -1,
gECoolDownType_Spell_Weakness = -1,
gECoolDownType_Spell_FireElemental = -1,
gECoolDownType_Spell_ManaElemental = -1,
gECoolDownType_Spell_DeflectionShield = -1,
gECoolDownType_Spell_FreezeHit = -1,
gECoolDownType_Spell_ManaPunch = -1,
};

enum eEGameVarCompare {
eEGameVarCompare_Equal = 0, // (default)
eEGameVarCompare_NotEqual = 1,
eEGameVarCompare_Less = 2,
eEGameVarCompare_LessEqual = 3,
eEGameVarCompare_Greater = 4,
eEGameVarCompare_GreaterEqual = 5,
};

enum gEScriptParamType {
gEScriptParamType_Unselected = 0, // (default)
gEScriptParamType_AutoSelect = 1,
gEScriptParamType_Int = 2,
gEScriptParamType_String = 3,
};

enum eEVegModifier {
eEVegModifier_None = 0, // (default)
eEVegModifier_Shadow = 1,
eEVegModifier_Sun = 2,
eEVegModifier_Water = 3,
eEVegModifier_Dry = 4,
eEVegModifier_CustomA = 5,
eEVegModifier_CustomB = 6,
};

enum gENavMeshUserDefFlag {
gENavMeshUserDefFlag_DEEPWATER = 16, // (default)
gENavMeshUserDefFlag_RIVER = 4,
gENavMeshUserDefFlag_LOWOCEAN = 8,
gENavMeshUserDefFlag_PREFERED = 2,
gENavMeshUserDefFlag_STANDARD = 1,
gENavMeshUserDefFlag_AVOIDED = 128,
gENavMeshUserDefFlag_NOBIGONES = 1024,
gENavMeshUserDefFlag_NOTRAVELERS = 8192,
};

enum eEDecalProjection {
eEDecalProjection_Prepective = 0, // (default)
eEDecalProjection_Paralel = 1,
};

enum gEFocusSource {
gEFocusSource_Camera = 0,
gEFocusSource_Player = 1,
gEFocusSource_PlayerPosCameraDir = 2,
gEFocusSource_CameraPosPlayerDir = 3,
gEFocusSource_CameraPosCurrentFocusDir = 4,
gEFocusSource_Auto = 5,
};

enum eEShadowQuality {
eEShadowQuality_Low = 0,
eEShadowQuality_Medium = 1,
eEShadowQuality_High = 2, // (default)
};

enum gEGender {
gEGender_Male = 0, // (default)
gEGender_Female = 1,
gEGender_Child = 2,
};

enum gEInfoType {
gEInfoType_Refuse = 0,
gEInfoType_VeryImportant = 1,
gEInfoType_Important = 2,
gEInfoType_News = 3,
gEInfoType_Info = 4, // (default)
gEInfoType_Parent = 5,
gEInfoType_Comment = 6,
gEInfoType_NPCSmalltalk = 7,
gEInfoType_Cutscene = 8,
gEInfoType_Audiolog = 9,
gEInfoType_Radio = 10,
gEInfoType_ForcedComment = 11,
};

enum gENavMeshCoverHeightTest {
gENavMeshCoverHeightTest_Failed = 0, // (default)
gENavMeshCoverHeightTest_High = 1,
gENavMeshCoverHeightTest_Low = 2,
gENavMeshCoverHeightTest_HighAndLow = 3,
};

enum eEPhysicsMaterialPermeabilityFlag {
eEPhysicsMaterialPermeabilityFlag_None = 0, // (default)
eEPhysicsMaterialPermeabilityFlag_LOS = 1,
eEPhysicsMaterialPermeabilityFlag_Projectile = 2,
eEPhysicsMaterialPermeabilityFlag_AudioOccluder = 4,
};

enum gEFlyHeight {
gEFlyHeight_All = 0, // (default)
gEFlyHeight_KeepHeight = 1,
gEFlyHeight_KeepHeightOrUp = 2,
};

enum eEControllerMoveType {
eEControllerMoveType_Physical = 0, // (default)
eEControllerMoveType_HeightCorrected = 1,
eEControllerMoveType_Free = 2,
eEControllerMoveType_Fall = 3,
eEControllerMoveType_PhysicalCtrl = 5,
eEControllerMoveType_PhysicalIgnoreControllers = 6,
};

enum eEInputDeviceTypes {
eEInputDeviceTypes_None = 0, // (default)
eEInputDeviceTypes_Keyboard = 1,
eEInputDeviceTypes_Mouse = 2,
eEInputDeviceTypes_MouseAxis = 3,
eEInputDeviceTypes_Gamepad = 4,
eEInputDeviceTypes_GamepadTrigger = 5,
eEInputDeviceTypes_GamepadAxis = 6,
eEInputDeviceTypes_Count = 7,
};

enum gEDifficultyFallDamage {
gEDifficultyFallDamage_None = 0,
gEDifficultyFallDamage_NotLethal = 1,
gEDifficultyFallDamage_Default = 2, // (default)
};

enum gETutorialState {
gETutorialState_NotRunning = 0, // (default)
gETutorialState_Running = 1,
gETutorialState_Completed = 2,
};

enum gEPickPocketDifficulty {
gEPickPocketDifficulty_Light = 0, // (default)
gEPickPocketDifficulty_Medium = 1,
gEPickPocketDifficulty_Hard = 2,
};

enum gEParticleSystemLink {
gEParticleSystemLink_Independent = 0,
gEParticleSystemLink_TargetEntity = 1, // (default)
gEParticleSystemLink_TargetBone = 2,
gEParticleSystemLink_NearestBone = 3,
};

enum gEStumbleFallBehavior {
gEStumbleFallBehavior_Never = 0, // (default)
gEStumbleFallBehavior_Always = 1,
gEStumbleFallBehavior_Dynamic = 2,
gEStumbleFallBehavior_Pull = 3,
gEStumbleFallBehavior_Overlay = 4,
};

enum gEConstraintAngle {
gEConstraintAngle_Free = -1, // (default)
gEConstraintAngle_AxisX = 0,
gEConstraintAngle_AxisY = 1,
gEConstraintAngle_AxisZ = 2,
};

enum eEPhysicsActorNavMeshBuild {
eEPhysicsActorNavMeshBuild_Standard = 0, // (default)
eEPhysicsActorNavMeshBuild_ForceEnabled = 1,
eEPhysicsActorNavMeshBuild_ForceDisabled = 2,
};

enum eENavigationFlightCostCalc {
eENavigationFlightCostCalc_2D = 0, // (default)
eENavigationFlightCostCalc_3DtoHalf2D = 1,
eENavigationFlightCostCalc_3D = 2,
};

enum gEPartyMemberMode {
gEPartyMemberMode_Following = 0, // (default)
gEPartyMemberMode_Waiting = 1,
gEPartyMemberMode_AutoRejoin = 2,
};

enum gEEffectCommandState {
gEEffectCommandState_Initalized = 0, // (default)
gEEffectCommandState_Running = 1,
gEEffectCommandState_Finished = 2,
};

enum gEBehaviorNodeType {
gEBehaviorNodeType_None = 0, // (default)
gEBehaviorNodeType_Action = 1,
gEBehaviorNodeType_Movement = 2,
gEBehaviorNodeType_ActiveSelector = 3,
gEBehaviorNodeType_Condition = 4,
gEBehaviorNodeType_Parallel = 5,
gEBehaviorNodeType_Repeat = 6,
gEBehaviorNodeType_Selector = 7,
gEBehaviorNodeType_Sequence = 8,
gEBehaviorNodeType_Monitor = 9,
gEBehaviorNodeType_Filter = 10,
gEBehaviorNodeType_AlterStatus = 11,
gEBehaviorNodeType_UtilitySelector = 12,
};

enum gEAniState {
gEAniState_Stand = 2, // (default)
gEAniState_Sneak = 3,
gEAniState_Attack = 4,
gEAniState_Parade = 5,
gEAniState_Kneel = 6,
gEAniState_SitGround = 7,
gEAniState_SitStool = 8,
gEAniState_SitBench = 9,
gEAniState_SitThrone = 10,
gEAniState_SleepBed = 11,
gEAniState_SleepGround = 12,
gEAniState_SitBathtub = 13,
gEAniState_Down = 14,
gEAniState_DownBack = 15,
gEAniState_Dead = 16,
gEAniState_DeadBack = 17,
gEAniState_Finished = 18,
gEAniState_FinishedBack = 19,
gEAniState_TalkStand = 20,
gEAniState_TalkSitGround = 21,
gEAniState_TalkSitStool = 22,
gEAniState_TalkSitBench = 23,
gEAniState_TalkSitThrone = 24,
gEAniState_Wade = 25,
gEAniState_Swim = 26,
gEAniState_Dive = 27,
gEAniState_Stumble = 28,
gEAniState_Levitate = 29,
};

enum gETextAlignment {
gETextAlignment_LeftTop = 0,
gETextAlignment_CenterTop = 1,
gETextAlignment_RightTop = 2,
gETextAlignment_LeftBottom = 3,
gETextAlignment_CenterBottom = 4,
gETextAlignment_RightBottom = 5,
gETextAlignment_LeftCenter = 6,
gETextAlignment_CenterCenter = 7, // (default)
gETextAlignment_RightCenter = 8,
};

enum gECombatDistanceArea {
gECombatDistanceArea_Unknown = 0, // (default)
gECombatDistanceArea_Close = 1,
gECombatDistanceArea_Far = 2,
gECombatDistanceArea_Outside = 3,
};

enum gEInvulnerableMode {
gEInvulnerableMode_None = 0, // (default)
gEInvulnerableMode_Stumble = 1,
gEInvulnerableMode_Damage = 2,
gEInvulnerableMode_All = 3,
};

enum gECrimeLocation {
gECrimeLocation_None = 0, // (default)
gECrimeLocation_Castle = 1,
gECrimeLocation_Crater = 2,
gECrimeLocation_Depot = 3,
gECrimeLocation_Fort = 4,
gECrimeLocation_Grotto = 5,
};

enum ESkyObjectOrbit {
ESkyObjectOrbit_Fix = 0, // (default)
ESkyObjectOrbit_Moon = 1,
ESkyObjectOrbit_Sun = 2,
ESkyObjectOrbit_Earth = 3,
};

enum gEItemSpellType {
gEItemSpellType_Area = 0, // (default)
gEItemSpellType_Aura = 1,
gEItemSpellType_Focus = 2,
gEItemSpellType_Telekinesis = 2,
};

enum gECameraTargetDistanceCurve {
gECameraTargetDistanceCurve_Sinus = 0, // (default)
gECameraTargetDistanceCurve_HalfSinus = 1,
gECameraTargetDistanceCurve_Linear = 2,
};

enum gEUISettingType {
gEUISettingType_Boolean = 0, // (default)
gEUISettingType_ValueList = 1,
gEUISettingType_SubMenu = 2,
};

enum gEEffectScriptOtherType {
gEEffectScriptOtherType_Entity = 0, // (default)
gEEffectScriptOtherType_TemplateEntity = 1,
};

enum gEConfigCategory {
gEConfigCategory_Game = 0,
gEConfigCategory_UI = 1,
gEConfigCategory_GameAndUI = 2,
};

enum eEFunction {
eEFunction_None = 0, // (default)
eEFunction_Zero = 1,
eEFunction_Const = 2,
eEFunction_Proportional = 3,
eEFunction_Linear = 4,
};

enum gEAttitude {
gEAttitude_None = 0, // (default)
gEAttitude_Friendly = 1,
gEAttitude_Neutral = 2,
gEAttitude_Angry = 3,
gEAttitude_Hostile = 4,
};

enum gEForcedDialogCam {
gEForcedDialogCam_None = 0, // (default)
gEForcedDialogCam_BlockSwitch = 1,
gEForcedDialogCam_ShowSpeaker = 2,
gEForcedDialogCam_ShowListener = 3,
gEForcedDialogCam_ShowSpeakerNearest = 4,
gEForcedDialogCam_ShowListenerNearest = 5,
gEForcedDialogCam_ShowSpeakerFarest = 6,
gEForcedDialogCam_ShowListenerFarest = 7,
gEForcedDialogCam_ShowSpeakerMedium = 8,
gEForcedDialogCam_ShowListenerMedium = 9,
gEForcedDialogCam_NoAutoMove_None = -268435456,
gEForcedDialogCam_NoAutoMove_BlockSwitch = -268435455,
gEForcedDialogCam_NoAutoMove_ShowSpeaker = -268435454,
gEForcedDialogCam_NoAutoMove_ShowListener = -268435453,
gEForcedDialogCam_NoAutoMove_ShowSpeakerNearest = -268435452,
gEForcedDialogCam_NoAutoMove_ShowListenerNearest = -268435451,
gEForcedDialogCam_NoAutoMove_ShowSpeakerFarest = -268435450,
gEForcedDialogCam_NoAutoMove_ShowListenerFarest = -268435449,
gEForcedDialogCam_NoAutoMove_ShowSpeakerMedium = -268435448,
gEForcedDialogCam_NoAutoMove_ShowListenerMedium = -268435447,
};

enum gECoverSearch {
gECoverSearch_NearestToSelf = 0, // (default)
gECoverSearch_NearestToTarget = 1,
gECoverSearch_NearestToSelfForwardToTarget = 2,
gECoverSearch_NearestToSelfBackwardToTarget = 3,
gECoverSearch_All_SortedByDistanceToSelf = 4,
gECoverSearch_All_SortedByDistanceToTarget = 5,
};

enum gERespawnMode {
gERespawnMode_Default = 0, // (default)
gERespawnMode_OnCondition = 1,
};

enum gECoverGotoTest {
gECoverGotoTest_None = 0, // (default)
gECoverGotoTest_CanMoveAlongSurface = 1,
gECoverGotoTest_CanDirectGoto = 2,
gECoverGotoTest_CanGoto_MaxTripleDistance = 3,
gECoverGotoTest_CanGoto = 4,
};

enum eEImposterGenerationType {
eEImposterGenerationType_CardMeshes_Cylinder = 1, // (default)
eEImposterGenerationType_CardMeshes_Hemisphere = 2,
eEImposterGenerationType_CardMeshes_Sphere = 3,
eEImposterGenerationType_Invalid = 0,
};

enum eEDynamicLightMovingEffect {
eEDynamicLightMovingEffect_Steady = 0, // (default)
eEDynamicLightMovingEffect_Smooth = 1,
eEDynamicLightMovingEffect_NoisePerlin = 2,
eEDynamicLightMovingEffect_NoiseEbert = 3,
eEDynamicLightMovingEffect_NoisePeachey = 4,
};

enum bENoiseTurbulence {
bETurbulence_FractalSum = 0, // (default)
bETurbulence_FractalAbsSum = 1,
};

enum gEFlyMoveType {
gEFlyMoveType_All = 0, // (default)
gEFlyMoveType_JetpackUpWalk = 1,
gEFlyMoveType_JetpackUpRun = 2,
gEFlyMoveType_JetpackHoverWalk = 3,
gEFlyMoveType_JetpackHoverRun = 4,
gEFlyMoveType_JetpackHoverCombatWalk = 5,
gEFlyMoveType_JetpackHoverCombatRun = 6,
gEFlyMoveType_JetpackForward = 7,
gEFlyMoveType_FlyIdle = 8,
gEFlyMoveType_FlySlow = 9,
gEFlyMoveType_FlyFast = 10,
gEFlyMoveType_FlySprint = 11,
};

enum eEGamepadButton {
eEGamepadButton_None = 0, // (default)
eEGamepadButton_Left = 1,
eEGamepadButton_Right = 2,
eEGamepadButton_Up = 3,
eEGamepadButton_Down = 4,
eEGamepadButton_A = 5,
eEGamepadButton_B = 6,
eEGamepadButton_X = 7,
eEGamepadButton_Y = 8,
eEGamepadButton_Start = 9,
eEGamepadButton_Back = 10,
eEGamepadButton_LB = 11,
eEGamepadButton_RB = 12,
eEGamepadButton_Left_Thumb = 13,
eEGamepadButton_Right_Thumb = 14,
eEGamepadButton_Left_Trigger = 15,
eEGamepadButton_Right_Trigger = 16,
};

enum gECombatHeight {
gECombatHeight_Normal = 0, // (default)
gECombatHeight_Low = 1,
gECombatHeight_High = 2,
};

enum gEDirection {
gEDirection_None = 0, // (default)
gEDirection_Fwd = 1,
gEDirection_Back = 2,
gEDirection_Left = 3,
gEDirection_Right = 4,
gEDirection_FwdLeft = 5,
gEDirection_FwdRight = 6,
gEDirection_BackLeft = 7,
gEDirection_BackRight = 8,
gEDirection_Count = 9,
};

enum gEBravery {
gEBravery_None = 0,
gEBravery_Brave = 1, // (default)
gEBravery_Guard = 2,
};

enum gECraftingType {
gECraftingType_None = 0,
gECraftingType_Weapons = 1,
gECraftingType_Potions = 2,
gECraftingType_Jewelry = 3,
gECraftingType_Campfire = 4,
};

enum gEUISettingFormat {
gEUISettingFormat_Default = 0, // (default)
gEUISettingFormat_Percent = 1,
gEUISettingFormat_Signed = 2,
gEUISettingFormat_Minutes = 3,
};

enum gEUIPlatform {
gEUIPlatform_Orbis = 0,
gEUIPlatform_XOne = 1,
gEUIPlatform_PC = 2,
gEUIPlatform_Prospero = 3,
gEUIPlatform_XSX = 4,
};

enum gEStatusEffect {
gEStatusEffect_None = 0, // (default)
gEStatusEffect_Combat_Heat = 1,
gEStatusEffect_Combat_Fire = 2,
gEStatusEffect_Combat_Cold = 3,
gEStatusEffect_Combat_Ice = 4,
gEStatusEffect_Combat_Poison = 5,
gEStatusEffect_Combat_Toxication = 6,
gEStatusEffect_Combat_Weak = 7,
gEStatusEffect_Combat_Bleed = 8,
gEStatusEffect_Combat_Bleeding = 9,
gEStatusEffect_Combat_Sparks = 10,
gEStatusEffect_Combat_Lightning = 11,
gEStatusEffect_Combat_EMP = 12,
gEStatusEffect_Combat_PowerGrip = 13,
gEStatusEffect_Combat_PSIForceFieldEmitter = 14,
gEStatusEffect_Combat_Wasps = 15,
gEStatusEffect_Combat_RealityHits = 16,
gEStatusEffect_Combat_RealityDeath = 17,
gEStatusEffect_Power_SenseMachines = 18,
gEStatusEffect_Power_Shield = 19,
gEStatusEffect_Power_RangedBuff = 20,
gEStatusEffect_Power_Phasing = 21,
gEStatusEffect_Power_Projection = 22,
gEStatusEffect_Spell_Camouflage = 23,
gEStatusEffect_Spell_Armor = 24,
gEStatusEffect_Spell_MeleeBuff = 25,
gEStatusEffect_Spell_SenseLife = 26,
gEStatusEffect_Spell_ManaAura = 27,
gEStatusEffect_Spell_Firerain = 28,
gEStatusEffect_Spell_Barricade = 29,
gEStatusEffect_Spell_Blizzard = 30,
gEStatusEffect_Spell_Drone = 31,
gEStatusEffect_Spell_Bodyshield = 32,
gEStatusEffect_Spell_Itemscanner = 33,
gEStatusEffect_Spell_Weakness = 34,
gEStatusEffect_Spell_IgnorePain = 35,
gEStatusEffect_Spell_Rage = 36,
gEStatusEffect_Spell_DealRealityDamage = 37,
gEStatusEffect_Stim_Regeneration = 38,
gEStatusEffect_Stim_Resistance = 39,
gEStatusEffect_Stim_RageMode = 40,
gEStatusEffect_Stim_SenseItems = 41,
gEStatusEffect_Stim_ImmuneToStatuseffects = 42,
gEStatusEffect_Stim_DoubleDamage = 43,
gEStatusEffect_Stim_HalfDamage = 44,
gEStatusEffect_Stim_AnimalInstinct = 45,
gEStatusEffect_PerkPartyBoost = 46,
gEStatusEffect_HealthRegeneration = 47,
gEStatusEffect_Lava = 48,
gEStatusEffect_Laser = 49,
gEStatusEffect_Attention = 50,
gEStatusEffect_DamageArea_Heat = 51,
gEStatusEffect_DamageArea_Fire = 52,
gEStatusEffect_DamageArea_Cold = 53,
gEStatusEffect_DamageArea_Ice = 54,
gEStatusEffect_DamageArea_Poison = 55,
gEStatusEffect_DamageArea_Toxication = 56,
gEStatusEffect_DamageArea_Rad = 57,
gEStatusEffect_DamageArea_RadSickness = 58,
gEStatusEffect_DamageMagicBarrier = 59,
gEStatusEffect_Food_RadResistance_Garlic = 60,
gEStatusEffect_Food_RadResistance_GarlicBread = 61,
gEStatusEffect_Food_ColdResistance_Chili = 62,
gEStatusEffect_Food_ColdResistance_ChiliConCarne = 63,
gEStatusEffect_Food_FireResistance_FrozenMushroom = 64,
gEStatusEffect_Food_FireResistance_StuffedMushroom = 65,
gEStatusEffect_Food_PoisonResistance_Honey = 66,
gEStatusEffect_Food_PoisonResistance_DetoxSalad = 67,
gEStatusEffect_Food_BleedResitance_Gum = 68,
gEStatusEffect_Food_BleedResitance_GumSoup = 69,
gEStatusEffect_Food_RealityResistance_CoffeeBeans = 70,
gEStatusEffect_Food_RealityResistance_StrongCoffee = 71,
gEStatusEffect_Stim_Resist_Bleed = 72,
gEStatusEffect_Stim_Resist_Fire = 73,
gEStatusEffect_Stim_Resist_Poison = 74,
gEStatusEffect_Stim_Resist_Rad = 75,
gEStatusEffect_Stim_Resist_Weaken = 76,
gEStatusEffect_Stim_Skill_Combat = 77,
gEStatusEffect_Stim_Skill_Craft = 78,
gEStatusEffect_Stim_Skill_Personality = 79,
gEStatusEffect_Stim_Skill_Survival = 80,
gEStatusEffect_Use_Elex = 81,
gEStatusEffect_Use_Mana = 82,
gEStatusEffect_Use_PurpleElex = 83,
gEStatusEffect_Plant_Fire = 84,
gEStatusEffect_Plant_Ice = 85,
gEStatusEffect_Plant_Poison = 86,
gEStatusEffect_Plant_Rad = 87,
gEStatusEffect_ManaRegeneration = 88,
gEStatusEffect_ElexRegeneration = 89,
gEStatusEffect_OnEquip_SenseMachines = 90,
gEStatusEffect_OnEquip_SenseLife = 91,
gEStatusEffect_OnEquip_Itemscanner = 92,
gEStatusEffect_Combat_Rad = 93,
gEStatusEffect_Combat_RadSickness = 94,
gEStatusEffect_Combat_Stasis = 95,
gEStatusEffect_Stim_MaxStamina = 96,
gEStatusEffect_Combat_PoisonCloud = 99,
gEStatusEffect_Combat_MagicPull = 100,
gEStatusEffect_PerkHealthRegeneration = 101,
gEStatusEffect_PerkLastChance = 102,
gEStatusEffect_PerkLastChanceBlocked = 103,
};

enum gEFight {
gEFight_None = 0, // (default)
gEFight_Lost = 1,
gEFight_Won = 2,
gEFight_Cancel = 3,
gEFight_Running = 4,
};

enum gEUISettingSSAOTechnique {
gEUISettingSSAOTechnique_Off = 0, // (default)
gEUISettingSSAOTechnique_HalfRes = 1,
gEUISettingSSAOTechnique_FullRes = 2,
gEUISettingSSAOTechnique_Count = 3,
};

enum gEMovementSpeedType {
gEMovementSpeedType_Walk = 0, // (default)
gEMovementSpeedType_Run = 1,
gEMovementSpeedType_Sprint = 2,
gEMovementSpeedType_Swim = 3,
gEMovementSpeedType_Stumble = 4,
};

enum gEAmountToApply {
gEAmountToApply_Amount = 0, // (default)
gEAmountToApply_Giver_AllInInventory = 1,
gEAmountToApply_Giver_AllInInventory_MinAmount = 2,
gEAmountToApply_Giver_AllInInventory_MaxAmount = 3,
gEAmountToApply_Receiver_FillUpInventory_ToAmount = 4,
gEAmountToApply_Receiver_FillUpInventory_ToAmount_MaxAllInGiverInventory = 5,
};

enum gEActionInputType {
gEActionInputType_Undefined = 0,
gEActionInputType_MouseKeyboard = 1,
gEActionInputType_Gamepad = 2,
};

enum gEBehaviorNodeParallelPolicy {
gEBehaviorNodeParallelPolicy_RequireOne = 0, // (default)
gEBehaviorNodeParallelPolicy_RequireAll = 1,
};

enum gEDamageSource {
gEDamageSource_None = 0, // (default)
gEDamageSource_MeleeWeapon = 1,
gEDamageSource_RangedWeapon = 2,
gEDamageSource_HeavyWeapon = 3,
gEDamageSource_MagicWeapon = 4,
gEDamageSource_PSIWeapon = 5,
gEDamageSource_GrenadeWeapon = 6,
};

enum eEShaderParticleEmitterState {
eEShaderParticleEmitterState_Delay = 0,
eEShaderParticleEmitterState_Active = 1, // (default)
eEShaderParticleEmitterState_Inactive = 2,
eEShaderParticleEmitterState_Completed = 3,
};

enum gEAutomaticMoveType {
gEAutomaticMoveType_ControlledOnly = 0, // (default)
gEAutomaticMoveType_AutoOnly = 1,
gEAutomaticMoveType_AutoAndControlled = 2,
};

enum eEViewRangeCategory {
eEViewRangeCategory_Decoration = 3, // (default)
eEViewRangeCategory_Item = 0,
eEViewRangeCategory_NPC = 1,
eEViewRangeCategory_Story = 2,
eEViewRangeCategory_Furniture = 4,
eEViewRangeCategory_Level = 5,
eEViewRangeCategory_Trees = 6,
eEViewRangeCategory_Terrain = 7,
eEViewRangeCategory_Events = 8,
eEViewRangeCategory_Effects = 9,
eEViewRangeCategory_Lights = 10,
eEViewRangeCategory_Sound = 11,
eEViewRangeCategory_Misc = 12,
eEViewRangeCategory_Infinity = 13,
};

enum eEInsertType {
eEInsertType_Floor = 1, // (default)
eEInsertType_Ground = 2,
eEInsertType_Wall = 3,
};

enum gENavFlexPathFlag {
gENavFlexPathFlag_Prefered = 0, // (default)
gENavFlexPathFlag_River = 1,
gENavFlexPathFlag_Exclude = 2,
gENavFlexPathFlag_Avoided = 3,
gENavFlexPathFlag_NoBigOnes = 4,
gENavFlexPathFlag_NoTravelers = 5,
};

enum gEInfoCondType {
gEInfoCondType_Fight = 1,
gEInfoCondType_Hello = 2,
gEInfoCondType_General = 3, // (default)
gEInfoCondType_Open = 5,
gEInfoCondType_Activator = 6,
gEInfoCondType_Ready = 7,
gEInfoCondType_Running = 8,
gEInfoCondType_Delivery = 9,
gEInfoCondType_Success = 11,
gEInfoCondType_DoCancel = 12,
gEInfoCondType_Failed = 13,
gEInfoCondType_Cancelled = 14,
gEInfoCondType_Join = 15,
gEInfoCondType_Dismiss = 16,
gEInfoCondType_Trade = 18,
gEInfoCondType_FirstWarn = 26,
gEInfoCondType_SecondWarn = 27,
gEInfoCondType_Wait = 34,
gEInfoCondType_NothingToSay = 50,
gEInfoCondType_End = 51,
gEInfoCondType_Back = 52,
gEInfoCondType_NotYetFinished = 53,
gEInfoCondType_Finished = 54,
};

enum gEEffectStopMode {
gEEffectStopMode_None = 0, // (default)
gEEffectStopMode_Decay = 1,
gEEffectStopMode_Disable = 2,
gEEffectStopMode_Kill = 3,
};

enum gERequestMoveResult {
gERequestMoveResult_OK = 0, // (default)
gERequestMoveResult_NotEnoughStamina = 1,
gERequestMoveResult_Failed = 2,
};

enum eEAudioEmitterMode {
eEAudioEmitterMode_Once = 0, // (default)
eEAudioEmitterMode_Loop = 1,
eEAudioEmitterMode_Repeat = 2,
};

enum gEUIMapMarkerType {
gEUIMapMarkerType_None = 0,
gEUIMapMarkerType_User = 1,
gEUIMapMarkerType_Location = 2,
gEUIMapMarkerType_LocationInactive = 3,
gEUIMapMarkerType_Player = 4,
gEUIMapMarkerType_Teacher = 5,
gEUIMapMarkerType_Trader = 6,
gEUIMapMarkerType_TeacherTrader = 7,
gEUIMapMarkerType_TeacherTraderFollowed = 8,
gEUIMapMarkerType_TeacherFollowed = 9,
gEUIMapMarkerType_QuestTarget = 10,
gEUIMapMarkerType_QuestClient = 11,
gEUIMapMarkerType_NpcParty = 12,
gEUIMapMarkerType_NpcFriendly = 13,
gEUIMapMarkerType_NpcHostile = 14,
gEUIMapMarkerType_Waypoint = 16,
gEUIMapMarkerType_Punisher = 17,
gEUIMapMarkerType_Count = 18,
};

enum gSUITextStyle {
gSUITextStyle_Text = 0, // (default)
gSUITextStyle_Title1 = 1,
gSUITextStyle_Title2 = 2,
gSUITextStyle_Title3 = 3,
gSUITextStyle_Image = 4,
gSUITextStyle_Separator = 5,
};

enum gEAttribBoostType {
gEAttribBoostType_None = 0, // (default)
gEAttribBoostType_DamageMelee = 1,
gEAttribBoostType_MaxHP = 2,
gEAttribBoostType_DamageRanged = 3,
gEAttribBoostType_DamageMagic = 4,
gEAttribBoostType_DamageCrit = 5,
gEAttribBoostType_Count = 6,
gEAttribBoostType_First = 1,
};

enum gEItemPistoleType {
gEItemPistoleType_Bullet = 0, // (default)
gEItemPistoleType_Buckshot = 1,
gEItemPistoleType_Bolt = 2,
};

enum gEInventorySort {
gEInventorySort_Category = 0, // (default)
gEInventorySort_Quality = 1,
gEInventorySort_Amount = 2,
gEInventorySort_Slot = 3,
gEInventorySort_QuickSlot = 4,
};

enum gEEffectQuality {
gEEffectQuality_Low = 0, // (default)
gEEffectQuality_Medium = 1,
gEEffectQuality_High = 2,
gEEffectQuality_Count = 3,
};

enum gEHitDirection {
gEHitDirection_None = 0, // (default)
gEHitDirection_LLToLR = 1,
gEHitDirection_LLToCR = 2,
gEHitDirection_LLToUR = 3,
gEHitDirection_CLToLR = 4,
gEHitDirection_CLToCR = 5,
gEHitDirection_CLToUR = 6,
gEHitDirection_ULToLR = 7,
gEHitDirection_ULToCR = 8,
gEHitDirection_ULToUR = 9,
gEHitDirection_LRToLL = 10,
gEHitDirection_LRToCL = 11,
gEHitDirection_LRToUL = 12,
gEHitDirection_CRToLL = 13,
gEHitDirection_CRToCL = 14,
gEHitDirection_CRToUL = 15,
gEHitDirection_URToLL = 16,
gEHitDirection_URToCL = 17,
gEHitDirection_URToUL = 18,
gEHitDirection_DToU = 19,
gEHitDirection_UToD = 20,
};

enum gETutorialType {
gETutorialType_Tut = 0, // (default)
gETutorialType_QuickTime = 1,
gETutorialType_Tip = 2,
gETutorialType_Popup = 3,
gETutorialType_TutFreeze = 4,
};

enum gEReactor {
gEReactor_Victim = 0, // (default)
gEReactor_Attacker = 1,
};





The above was extracted from a dump of the Elex internal runtime type system. Might also be helpful.

valakii
08.05.2022, 11:07
gESkillModifier_AddPermanentValue = 4,
gESkillModifier_SetPermanentToValue = 5,
gESkillModifier_AddBaseValue = 6,
gESkillModifier_SetBaseToValue = 7


When did those suddenly come up? I don't remember seeing them in any other hash list before, neither in ELEX 1 nor any Risen or Gothic game.

Might come in handy for my ELEX 1 modding approaches... Any chance they might work in ELEX 1 as well? Already tried to implement them into an ELEX 1 file, but at least ELEX 1 ResMan doesn't know how to handle these. Would hex-editing make any sense here to see if these hashes work for ELEX 1, too?

George
08.05.2022, 19:08
When did those suddenly come up? I don't remember seeing them in any other hash list before, neither in ELEX 1 nor any Risen or Gothic game.

Might come in handy for my ELEX 1 modding approaches... Any chance they might work in ELEX 1 as well? Already tried to implement them into an ELEX 1 file, but at least ELEX 1 ResMan doesn't know how to handle these. Would hex-editing make any sense here to see if these hashes work for ELEX 1, too?
Well, I would say the developers added these values for ELEX 2.
As far as I can tell these are not supported/present in ELEX 1, so editing such values into Elex 1 files won't do you any good.

LiveToWin
28.06.2022, 06:06
Tool for Elex 1 works strange. I can modded only 8 .elexdlg files with custom mp3 (320 kbps). If I change more than 8 files, the game gives an error.
If the bitrate of mp3 files is lower, then the game accepts even fewer modified files. About 2-3 files.
Is it possible to convert .wav to .elexdlg ? Most likely, when converting from .wav, the game will accept any number of modified files.

LiveToWin
23.08.2022, 15:25
Is there any chance that Elex 1 Resman will have an option to convert .wav to .elexdlg (not just .mp3)?

tombom81
11.09.2022, 18:35
edit: for some unknown reason MagusTheMagician seems to have deleted his posts
(Since I missed to quote his question I can only guess, he asked about the Freepoints.)

You'll need an expanded Navigation class classdata for such (or simply search for AC 80 7C 36 3F DC DE 92, last 8 bytes of the freepoint guid, in Car_NPCs):

ClassData {
[class gCNavigation_PS, Version 13] {
Routines = [
class gCRoutine {
Version = 1;
Properties {
class bCString Name = "Start";
bool IsOverlayRoutine = False;
}
ClassData {
[class gCRoutine, Version 1] = <01 00 00 00 47 45 43 32 ... 10 00 00 00
>>> 82 15 D2 DB 4C E4 74 41 AC 80 7C 36 3F DC DE 92 00 00 00 00>;
}
}
Compare GUID = {DBD21582-E44C-4174-AC80-7C363FDCDE92};
to >>> 8215D2DB, mirrored DWORD, intel convention little endian, btw.
Last 8 bytes of the guids are not reversed, so best to search for them.

I created a modified elex2resman, but the FMOD feature is broken (no time to fix it). Thus I didn't upload that version.
Maybe George or TinyHatastrophe will update the logging of Navigation class, classdata.


There is also no connection between the NPC and its Free Point in the info.hdr scripts, meaning the schedules of NPCs are not scripted (probably).There's the info command Setroutine to change an NPCs position. (The daily routines are switched by the engine, afaik.)

edit: seems, I bugged away what Baltram had already implemented to elexresman (ELEX 1).

Routines = [
class gCRoutine {
Version = 1;
Properties {
class bCString Name = "Start";
bool IsOverlayRoutine = False;
}
ClassData {
[class gCRoutine, Version 1] {
RoutinePoints = [
class gCRoutinePoint {
Version = 1;
Properties {
float Time = 0;
class eCEntityProxy Point = {DBD21582-E44C-4174-AC80-7C363FDCDE92};
}
ClassData {
}
}
];
}
}
},

tombom81
11.09.2022, 22:51
That mod will be super fun.I'm sure about this.:)
I really hope your work will inspire other modders to join ELEX 2.:gratz

CU in the World resting room! :D (well, I have no idea why the npcs there are invincible, other than in ELEX 1)

btw: the ELEX 2 docTosec conversion doesn't work for "expanded" Navigation; hope I can fix this.
edit: done.

tombom81
14.09.2022, 09:30
Hi, maybe it's a matter of "offset". I found the concerning post here (https://forum.worldofplayers.de/forum/threads/1512504-tool-Elex-Resource-Manager?p=26952520&viewfull=1#post26952520).
As of now I guess that 44 (at 0x2c in .elexdlg: "FSB5") has to be replaced by 400 (0x190) for ELEX 2.
edit: no, you can't simply replace 44. It's a little bit more complicated...

(Maybe this has been fixed already on Github; need to have a look at. edit: seems, no solution for elex2dlg so far.)

@MagusTheMagician: could you send me your fmod.dll (32 bit), if any? Just badly failing in compiling the resman project for 64 bits.

tombom81
14.09.2022, 15:02
Here they are (https://fastupload.io/en/1GOuU0iLKtLbXeR/file).Thank you very much!


Btw thanks to your tool I managed to get the Navigation Free Points working ingame. Great Stuff.That's cool! (Was too busy to try it out myself. Those daily routines need an overhaul/expanding, imho, but for existing NPCs their routine states are saved in the saves, so any changes would require starting the game from the very beginning. Which I really don't like...)


If you can fix the dialogues, the immersion levels will be infinite.Depends on. I fear there's more than the pointer at offset 4 to be cared for in the bytes up to offset 0x190.

But atm I'm stuck here:
Drag/drop of your elex2dlg ("FSB5" at offset 0x2C) -> .wav file
(conversion of .wav to .MP3, 320 kbps by "Wav To MP3")
Drag/drop .MP3 -> .elex2snd

How the h. did you manage to get an .elex2dlg file?:D (I have a renamed original .elex2dlg for injection but it's not changed.)

tombom81
14.09.2022, 16:10
The names of the .mp3 and the stock .elex2dlg must perfectly match.I know.;)
The problem was that I had the elex2dlg to be modified in the resman directory instead of the MP3 dir... (Thanks for explaning, though.)

Now for the coding, keep fingers crossed, please...


The Main thing I'm getting is that a dialogue will be played for its full duration while commandplayjingle will only display subtitles for a hard set of time (like 2s) and it also always cuts the music, even though there are false and true settings for that.Another toDo...?


Btw while the Navigation works as long as the npc is in its original area, if I kick him out of group far away somewhere even the class gCInfoCommandSetRoutine doesn't bring him back.You may have a look at Ivan's SetRoutine(s), RoutineName = "Camp"; or
"STWithMorkons" or "NewStartTavar" or "Prison". Maybe the template (and the entity in the secdoc) need a property change for such long journeys? You could compare your NPC's to Ivan's properties.

tombom81
14.09.2022, 17:09
but of 6 tries I managed to get it to work once and the NPC was still standing at the far away position and just had a ghost in the starting area.I remember of a similar problem using an existing NPC (ages ago in ELEX 1).


I just thought I would have it already released but there is always some small detail in every mod that drags it forever.Sounds familiar.:D

edit: well, I managed to move the FSB5 block to 0x190 (instead of 0x2C, as it was for ELEX (1)).

But it's muted in Elex2. Probably some other offsets to be handled? (Between the bold rectangle and the resource revision.)

(edit 2: the DWORD at 0x721B is the pointer from offset 4 (0x7224) - 0x24, which is 36 and appears in Baltrams code. 0x36A0+0190= 0x3830; 3830+39D0= 0x7200, the 0x10 at 0x721A is "magic":D)

Someone with more insight might figure it out (don't bother about the hash 0xADDB7E27 = "class eCDialogueResource2"):

https://upload.worldofplayers.de/files12/E2_dlg_FSB.jpg

For comparison, file with MP3 injected, some values patched manually, still muted ingame:

https://upload.worldofplayers.de/files12/elex2dlg_still_muted.jpg

Anker= anchor, haha. values shifted/patched. Still muted ingame. Maybe I get another idea. Later.

And "yes", "FSB5" starts at 0x190 now. You wouldn't think me to have missed that, would ye?:D
The bytes from offset 8 to 0x18F might contain some surprise (=required offsets), though.

In fact, it's a little bit naive to think you can leave them unpatched...

tombom81
15.09.2022, 21:23
Looks like the edit would have to be precise,The calculations should match now. Guess, there's another part in the elex2dlg to be patched. Yeah, start of file from offset 8 to 0x18F...

Using a debugger on loading the dlg file could help, but I'm always lost after the 100 th indirect jmp/call.§cry (It's only a matter of putting the correct breakpoints said my prof, haha.$§p4)


I should be able to release it tomorrow hopefully. It will be so much fun.Great! But no hurries. Seems the playing field is yours ...

LiveToWin
22.09.2022, 14:26
It's finally done. My best examples of what can be done with elexresmans
Wow! Music from Gothic series! Nice!:D

tombom81
11.11.2022, 16:27
(https://easyupload.io/g4fdu4)I also tried swapping a modded texture with any random DX12 one and that didn't seem to work either. So maybe DX12 doesn't load modded Image folder at all.Too bad.

Here's what I found about the parameters which need to be changed in the elex2img file for new textures
(thin line rectangled: hashes, for "width" and so on):

https://upload.worldofplayers.de/files12/KeLxC1PpE2_DX12_elex2img.jpg

(Don't have an idea about the pixelformat, though.)

edit: DXGI format of the contained dds is DXGI_FORMAT_BC1_UNORM (value: 0x47), if I'm not mistaken.
edit2: strange: that elex2img DX12 file contains the same texture data as the E1 It_Jetpack.dds which has a DX10 header.

DarthNihilus
14.11.2022, 16:02
Could it be that .elexdlg has the sounds' length inside it?

DarthNihilus
19.11.2022, 18:01
a small bug
actually a big one


class gCNumericLock_PS { Version = 2;
Properties {
int Code = 1922;
enum gELockDifficulty Difficulty = gELockDifficulty_CodeOnly;
enum gELockSecurityLevel SecurityLevel = gELockSecurityLevel_Easy;
class eCScriptProxyScript OnUnlockFailed = "";
class eCScriptProxyScript OnUnlockSucceeded = "";
enum gELockStatus Status = gELockStatus_Locked;
class eCScriptProxyScript OnLockStatusChanged = "";
}
ClassData {
[class gCNumericLock_PS, Version 2] = <01 09 08 01 00 00 00 00 00 00 00 00>;
}
}

when converting, the Code is not transfered into the hex data of the ClassData, needs to be done manually.:(

tombom81
19.11.2022, 20:24
class gCNumericLock_PS { Version = 2;
Properties {
int Code = 1922;
...
}
ClassData {
[class gCNumericLock_PS, Version 2] = <01 09 08 01 00 00 00 00 00 00 00 00>;
}
}

when converting, the Code is not transfered into the hex data of the ClassData, needs to be done manually.:(Thanks for reporting. Which game? E1 or E2? (Don' t expect a quick fix. But it's possible to write a simple tool, that logs the hex addresses of all classdata - NumericLock values of a worldsectorfile.)

DarthNihilus
19.11.2022, 21:54
Thanks for reporting. Which game? E1 or E2? (Don' t expect a quick fix. But it's possible to write a simple tool, that logs the hex addresses of all classdata - NumericLock values of a worldsectorfile.)
this is for e1

tombom81
20.11.2022, 12:01
This is the result (codes and their offset addresses) for the Elex 1 worldsectorfile ABE_Interacts:

0. 0xcbc5d af 1a (6831), cbcdb: 06 08 03 01 00 00 00 00 00 00 00 00
1. 0xce07f a3 10 (4259), ce0fd: 04 02 05 09 00 00 00 00 04 00 00 00 01 06 00 07
2. 0xcea5c ec 18 (6380), ceada: 06 03 08 00 00 00 00 00 00 00 00 00
3. 0x1323b8 ff 0c (3327), 132436: 03 03 02 07 00 00 00 00 00 00 00 00
4. 0x132d91 34 06 (1588), 132e0f: 01 05 08 08 00 00 00 00 00 00 00 00
5. 0x15328a fb 01 (507), 153308: 00 05 00 07 00 00 00 00 03 00 00 00 08 09 04
6. 0x68b9ca e4 25 (9700), 68ba48: 09 07 00 00 00 00 00 00 02 00 00 00 01 04
7. 0x69adbb d6 1c (7382), 69ae39: 07 03 08 02 00 00 00 00 04 00 00 00 00 01 09 06
8. 0x69b6fc 97 25 (9623), 69b77a: 09 06 02 03 00 00 00 00 02 00 00 00 04 08
9. 0x69c0d7 9c 14 (5276), 69c155: 05 02 07 06 00 00 00 00 00 00 00 00
10. 0x69ca14 99 1e (7833), 69ca92: 07 08 03 03 00 00 00 00 03 00 00 00 01 00 04
11. 0x69d354 0b 20 (8203), 69d3d2: 08 02 00 03 00 00 00 00 03 00 00 00 01 07 09
12. 0x69dd30 f9 21 (8697), 69ddae: 08 06 09 07 00 00 00 00 00 00 00 00
13. 0x69e709 f0 05 (1520), 69e787: 01 05 02 00 00 00 00 00 01 00 00 00 06
14. 0x69f047 0f 19 (6415), 69f0c5: 06 04 01 05 00 00 00 00 01 00 00 00 08
15. 0x76a98d 73 15 (5491), 76aa0b: 05 04 09 01 00 00 00 00 00 00 00 00
16. 0xd2a914 c7 07 (1991), d2a992: 01 09 09 01 00 00 00 00 01 00 00 00 07

Jobesky
14.02.2023, 20:42
Hi everyone,

Just had a quick question about editing Elex 2 templates. The template file extension is apparently .r3tpl, but the resource manager does not support it. How do we edit Elex 2 templates?

tombom81
15.02.2023, 08:48
Hi everyone,

Just had a quick question about editing Elex 2 templates. The template file extension is apparently .r3tpl, but the resource manager does not support it. How do we edit Elex 2 templates?Hi, it's elex2tpl now, use the latest version, elex2resman from George, 9th of March 2022, iirc.

Jobesky
17.02.2023, 13:11
Hi tombom, thanks for the info. I got it working. :)

I suppose this is tangentially related but I had a question about editing a particular mod, found here: https://www.nexusmods.com/elex2/mods/58/?tab=posts&jump_to_comment=121463040

In this mod, the author gives the player an XP bonus because of the harder difficulty. I want to reduce that. Under It_jetpack.elex2tpl, there is a string here:

class gCModifySkill {
Version = 1;
Properties {
enum gESkillModifier Modifier = gESkillModifier_AddValue;
int Amount = 10;
enum gESkill Skill = gESkill_Multiplier_XPBonus;
}
ClassData {

The author told me that if I wanted to have instead a *reduction* of XP, I could change it into -10. I wondered, however, if I could make it a multiplier. What are your thoughts on the feasibility of replacing the negative with an x or *? So I would then change it to x0.5 or *0.5. Do you think that would function as a halving mechanism?

tombom81
17.02.2023, 14:22
Hi tombom, thanks for the info. I got it working. :)

I suppose this is tangentially related but I had a question about editing a particular mod, found here: https://www.nexusmods.com/elex2/mods/58/?tab=posts&jump_to_comment=121463040

In this mod, the author gives the player an XP bonus because of the harder difficulty. I want to reduce that. Under It_jetpack.elex2tpl, there is a string here:

class gCModifySkill {
Version = 1;
Properties {
enum gESkillModifier Modifier = gESkillModifier_AddValue;
int Amount = 10;
enum gESkill Skill = gESkill_Multiplier_XPBonus;
}
ClassData {

The author told me that if I wanted to have instead a *reduction* of XP, I could change it into -10. I wondered, however, if I could make it a multiplier. What are your thoughts on the feasibility of replacing the negative with an x or *? So I would then change it to x0.5 or *0.5. Do you think that would function as a halving mechanism?Hi Jobesky,
the design is restricted. Guess like MagusTheMagician said " it's not really possible to attach more specific options".

"divide by 2" by simply subtracting, well, say, the value of a is 12
the only way I can think of to get a=6 is like so:
b= a;
//in a loop:
do {
b -= 1;
} while (b+b!=a)
a=b;

But how to put this into a elex2tpl?:dnuhr:
Instead you'll need to modify the game's binary code, I guess.

btw: in your example the Modifier is AddValue. It adds 10 to the Multiplier_XPBonus. I have no idea why it's called Multiplier; does it really multiply XPs? I can't believe it. (Did you check that out?)

edit: what about gESkillModifier_AddPercentOfMax? (Maybe use with it a negative value?:dnuhr:)

Jobesky
17.02.2023, 19:05
gESkill_Multiplier_XPBonus already works as % multiplier so you don't need to invent anything new. int Amount = 10; makes it 10% plus XP, int Amount = -10; makes it 10% minus XP. You can go sky high with it although I assume that with -100 you won't get any xp anymore. Last note is that it multiplies all xp gains from every source.

So if I complete a quest worth 100 XP and I kill a creature worth 10 XP and having set it to -50, the display should show that I gained 50 XP and 5 XP, correct?

That may seem like a silly question but I've seen too many games where the display doesn't match the numbers shown on screen due to some sort of disconnect.

Kros
27.03.2023, 19:16
Hi all
int NumSocketSlots = 3; - the number of weapon slots. The same line is in the armor, but when changed, the armor is not added to the bench. Maybe some other file is responsible for the appearance of the armor in the bench.
If you find a solution or know how to add armor to a workbench to set gems. I will be glad for any hints :)

tombom81
28.03.2023, 15:20
Hi all
int NumSocketSlots = 3; - the number of weapon slots. The same line is in the armor, but when changed, the armor is not added to the bench. Maybe some other file is responsible for the appearance of the armor in the bench.
If you find a solution or know how to add armor to a workbench to set gems. I will be glad for any hints :)Well, from a quick glance at the template "It_Bow_Bsk_02_Damaged" I'd assume it's a matter of perks (gESkill_Perk_BuildWeapons here).

Since there's no Perk gESkill_Perk_BuildArmors, afaik, you can't modify armors that way.

You could try addiing a modified Receipe_PS to an armor (change Item guids, etc), though and check whether it works. (If you don't, I'll try it, sooner or later...)
(gERecipeCategory_Gunsmith could cause problems for armors, dunno)

[from It_Bow_Bsk_02_Damaged]

class gCRecipe_PS {
Version = 1;
Properties {
enum gERecipeCategory Craft = gERecipeCategory_Gunsmith;
class bTSceneObjArray<class gCCraftIngredient> CraftIngredients = [
class gCCraftIngredient {
Version = 1;
Properties {
class eCTemplateEntityProxy ItemTemplate = {D5E6B2BF-64E8-4C86-9F08-359CA01C76CE};
unsigned int ItemAmount = 3;
}
ClassData {
}
}
];
class bTSceneObjArray<class gCSkillValue> RequiredSkills = [
class gCSkillValue {
Version = 1;
Properties {
int Amount = 1;
enum gESkill Skill = gESkill_Perk_BuildWeapons;
}
ClassData {
}
}
];
class eCTemplateEntityProxy ResultItem = {69EF48CC-EE44-4F5D-AB65-62CE3ED9AC35};
unsigned int ResultAmount = 1;
}
ClassData {
}
}

Kros
28.03.2023, 18:19
Well, from a quick glance at the template "It_Bow_Bsk_02_Damaged" I'd assume it's a matter of perks (gESkill_Perk_BuildWeapons here).

Since there's no Perk gESkill_Perk_BuildArmors, afaik, you can't modify armors that way.

You could try addiing a modified Receipe_PS to an armor (change Item guids, etc), though and check whether it works. (If you don't, I'll try it, sooner or later...)
(gERecipeCategory_Gunsmith could cause problems for armors, dunno)

[from It_Bow_Bsk_02_Damaged]

class gCRecipe_PS {
Version = 1;
Properties {
enum gERecipeCategory Craft = gERecipeCategory_Gunsmith;
class bTSceneObjArray<class gCCraftIngredient> CraftIngredients = [
class gCCraftIngredient {
Version = 1;
Properties {
class eCTemplateEntityProxy ItemTemplate = {D5E6B2BF-64E8-4C86-9F08-359CA01C76CE}; - (Upgradable Item It_Bow_Bsk_02_Damaged) item crafting ingredient
unsigned int ItemAmount = 3; - number of items
}
ClassData {
}
}
];
class bTSceneObjArray<class gCSkillValue> RequiredSkills = [
class gCSkillValue {
Version = 1;
Properties {
int Amount = 1;
enum gESkill Skill = gESkill_Perk_BuildWeapons; - Perk and workbench
}
ClassData {
}
}
];
class eCTemplateEntityProxy ResultItem = {69EF48CC-EE44-4F5D-AB65-62CE3ED9AC35}; - final item after production
unsigned int ResultAmount = 1;
}
ClassData {
}
}
Improved or legendary weapons do not have these lines. I have a feeling that the ability to insert stones into weapons is spelled out in the perk file. But I did not find files with perks.

Assumption.
How can you use it.
You can create a file where the armor will have statistics. Strength, enhanced strike, resistances, companion life and so on. And then through the recipe with the requirement of armor, plantain and a little elex. Get improved armor in the game through a workbench.
But I haven't tried.

"It_1h_Sword_Sky_01_Enhanced"
class gCEffectProxy HoldEffect = "eff_wpn_1h_sword_blade_sky_01_reality_loop"; - I'm also trying to find and edit the weapon effect so it stacks faster on the enemy. Because you kill the enemy faster than the effect begins to work.
And generally understand what the effects do. For example, lightning, in addition to causing damage, also slows down the enemy. If I don't confuse anything.

Raiyneday
16.12.2023, 17:29
It says in the file that itll put the unpacked pak file in a folder with the original but when i drag and drop the file into the manager it doesnt do anything except put the filepath up, help please!

tombom81
16.12.2023, 20:55
but when i drag and drop the file into the manager it doesnt do anything except put the filepath up, help please!What?

If you drag 'n drop a .pak file onto the elexresman a window with a message like this one pops up:


Packed directories:


1 | 1_na_sec (Sector) | 1 files | 511 KB


Please specify the numbers of the directories to be extracted, or * for 'all'.
Then a folder is being created containing the unpacked file(s).

Raiyneday
18.12.2023, 04:19
imgur.com/a/Mfvalpl
What?

If you drag 'n drop a .pak file onto the elexresman a window with a message like this one pops up:


Then a folder is being created containing the unpacked file(s).


all it does for me is pop up the file path, im trying to unpack the files for two mods so i can merge them

tombom81
18.12.2023, 07:39
I see. The problem is the blank in the folder name "...\Gog Games...".
edit: just tested it with a blank in folder name: works as expected

Raiyneday
18.12.2023, 12:17
I see. The problem is the blank in the folder name "...\Gog Games...".
(You may call it a bug in the resman, though it's a great tool.)

Simplest workaround would be to copy the pak file into a folder named "test" or similar (wiithout a blank in its name).


i moved it to a seperate folder and still no result, simply getting file path no message

tombom81
18.12.2023, 14:20
A picture please.
A, well, no picture, please. I'm a little bit tired of this.:rolleyes:

Try the pak file in this zip with the elexresman (as of Febr. 2018) for Elex (1):
https://upload.worldofplayers.de/files12/test.zip

Works as expected. Source folder (\Test) included. If you unzip the folder and drag 'n drop it onto the resman a pak file should be generated.

ZimGurd
30.01.2024, 00:08
Can someone post a trainer where there are coordinates of the player in Elex 2 I need to place objects.

tombom81
31.01.2024, 13:51
You can use this tool (https://www.nexusmods.com/elex2/mods/78) for such (ignore the "teleport" part).
(Please post your questions there, if any, to not spam this resman thread.)

ZimGurd
03.02.2024, 21:43
You can use this tool (https://www.nexusmods.com/elex2/mods/78) for such (ignore the "teleport" part).
(Please post your questions there, if any, to not spam this resman thread.)
Thank you

mxmod
04.02.2024, 08:17
Hello, when I unpack from .elexdlg to .wav or .mp3, I get the error “fmod64.dll missing or incompatible” and nothing is unpacked. How can I fix this?

tombom81
05.02.2024, 09:09
Copy that dll from the Elex\system directory into the folder where the elexresman is.

mxmod
05.02.2024, 12:48
Copy that dll from the Elex\system directory into the folder where the elexresman is. \

Thanks, I figured it out. I have another question for you: I managed to unpack the audio using the elex resource manager program and extract the wav format from the elexdlg files. As I understand it, this program cannot insert wav files back into elexdlg, but it does insert mp3. As a test, I packed the mp3 back into elexdlg, and then repacked the pak file back. But when I start the game, it hangs on the loading screen. Next, for the experiment, I swapped places and renamed the original elexdlg, without extracting the wav from them. Then I repacked it back into pak and the game worked. As I understand it, mp3 must be of a certain frequency and bitrate, there must be certain parameters?

tombom81
05.02.2024, 14:28
DarthNihilus wrote about m (https://forum.worldofplayers.de/forum/threads/1603149-Tutorials-ELEX-1-Modding-videotutorials?p=27092476&viewfull=1#post27092476)p3, afair. But I can't seem to find the parameters.

mxmod
06.02.2024, 06:39
DarthNihilus wrote about m (https://forum.worldofplayers.de/forum/threads/1603149-Tutorials-ELEX-1-Modding-videotutorials?p=27092476&viewfull=1#post27092476)p3, afair. But I can't seem to find the parameters.


The game still hangs on the loading screen. I do not know what the problem is...

Ajanna
06.02.2024, 09:02
The game still hangs on the loading screen. I do not know what the problem is...

Did you press any key?

mxmod
06.02.2024, 10:00
Did you press any key?

I tried this and that. It feels like the game doesn't want to accept MP3s. Although logically I am doing everything correctly: the folder contains an mp3 and elexdlg file. I drag the MP3 onto Eleksresman and the packaging begins. Then I pack it in pak file. During the loading screen, an error pops up and says that an error log has been created in the game folder, but it is not created.

tombom81
06.02.2024, 11:35
that an error log has been created in the game folder, but it is not created.Such a memory dump file wouldn't help you either, in my experience.

To get further I'd suggest to unpack an mp3 file from a mod (for example DarthNihilus_quests from August 2020) repack it and see what happens.
If it works compare that mp3 to yours, if it doesn't your packing process is faulty.

mxmod
06.02.2024, 18:27
Such a memory dump file wouldn't help you either, in my experience.

To get further I'd suggest to unpack an mp3 file from a mod (for example DarthNihilus_quests from August 2020) repack it and see what happens.
If it works compare that mp3 to yours, if it doesn't your packing process is faulty.

Thank you, I did it. But when replacing dialogue lines, the lip sync remains the same. Is there software that allows you to generate lip syncs for new audio?

tombom81
06.02.2024, 20:24
Thank you, I did it. But when replacing dialogue lines, the lip sync remains the same. Is there software that allows you to generate lip syncs for new audio?To be used in ELEX? I fear, no, and I don't think they used blender's facial animation and lip sync feature. I have a déjà vue that I knew the name of the software they used, but I completely forgot it.§cry

Your best bet would be to use a (renamed) lip sync of a dialogue with a similar length as the modded one.

DarthNihilus might know more. (Or MagusTheMagician, but the latter deleted all his posts for unknown reasons.)

LiveToWin
06.07.2024, 20:14
Не могу найти как конвертировать названия предметов/объектов из hash в str для Elex 1. Например, мне нужно конвертировать вот этот код - [b1abecee] в строку. Как в этом примере - [0xdd5bff34] = 'fo_it_1h_sword_sky_01_damaged'.
Может кто подскажет код (lua лучше всего) для этого?
Есть код для обратной процедуры, а вот для прямого преобразования найти не могу.

Translate:
I can’t find how to convert the names of items/objects from hash to str for Elex 1. For example, I need to convert this code - [b1abecee] into a string. As in this example - [0xdd5bff34] = 'fo_it_1h_sword_sky_01_damaged'.
Can anyone tell me the code (lua is best) for this?
There is code for the encode, but I can’t find it for decode.



Code:
local str = {
"fo_it_1h_sword_sky_01_damaged",
"item_it_1h_sword_sky_01_damaged",
"itemdesc_it_1h_sword_sky_01_damaged"
}
for i = 1, #str do
local s = str[i]
local h = 5381
for j = 1, #s do
local c = s:byte(j)
h = (((h << 5) + h) + c) & 0xffffffff
end
print(("[0x%08x] = '%s'"):format(h, s))
end

Result:
[0xdd5bff34] = 'fo_it_1h_sword_sky_01_damaged'
[0xc4fb2d4e] = 'item_it_1h_sword_sky_01_damaged'
[0x5f8bc2ad] = 'itemdesc_it_1h_sword_sky_01_damaged'

tombom81
06.07.2024, 22:13
Translate:
I can’t find how to convert the names of items/objects from hash to str for Elex 1. For example, I need to convert this code - [b1abecee] into a string. [...]
There is code for the encode, but I can’t find it for decode.Hi, afaik you can't do a "reverse hashing".
Thus there's no code to be found for it.

So the only way is like so: translate all strings being used in Elex into their hash numbers.
In the resulting list search for b1abecee. So you'll get the string it belongs to.

btw, try google. You'll find something like this: "A hash cannot be unhashed by definition except by brute-force."

edit: don't forget:
you need to put an "FO_" before your loc strings in focus.csv. (For items.csv use "ITEMDESC_".)

LiveToWin
07.07.2024, 12:50
Hi, afaik you can't do a "reverse hashing".
Thus there's no code to be found for it.

So the only way is like so: translate all strings being used in Elex into their hash numbers.
In the resulting list search for b1abecee. So you'll get the string it belongs to.

btw, try google. You'll find something like this: "A hash cannot be unhashed by definition except by brute-force."

edit: don't forget:

Да, я уже почитал по поводу djb хэша. Способа декодирования нет, да и смысла в нём тоже особого нет. Буду значит сам искать к какому строковому имени принадлежит этот код. В любом случае, спасибо за пояснение. :)

Translate:
Yes, I already read about the djb hash. There is no decoding method, and there is no particular meaning in it either. I will look for myself which string name this code belongs to. In any case, thanks for the tip. :)
Upd: Found it! [0xb1abecee] = 'fo_stonerunner_raudur'

zmrd7
17.08.2024, 18:01
A picture please.
A, well, no picture, please. I'm a little bit tired of this.:rolleyes:

Try the pak file in this zip with the elexresman (as of Febr. 2018) for Elex (1):
https://upload.worldofplayers.de/files12/test.zip

Works as expected. Source folder (\Test) included. If you unzip the folder and drag 'n drop it onto the resman a pak file should be generated.

Hello,


I guess I have the same problem as user "Raiyneday", namely that when I drag the .pak file into elex2resman.exe I get only the path to the file and no options or other information and when I try to press * the symbol just gets added to the path in the attachment I am sending screenshots. Any idea why my program is not working as it should? Thank you for any advice!

Screenshots:
https://ibb.co/vPH2J75
https://ibb.co/Nsh93KC

tombom81
17.08.2024, 23:09
edit: see, you're talking about Elex 2. Works as expected with elex2resman (version 0.2.1)

(My test pak is for E1, so it will not work for E2, btw)


(answer for Elex 1)
Hello,
works on my side for Windows 10 and just tested it with Windows 11.

(Used the .pak file from the zip in my post that you've quoted.)
exe file is elexresman (as of Febr. 2018) for Elex 1

https://upload.worldofplayers.de/files12/resman_for_Elex_1.png

zmrd7
18.08.2024, 01:43
edit: see, you're talking about Elex 2. Works as expected with elex2resman (version 0.2.1)

(My test pak is for E1, so it will not work for E2, btw)


(answer for Elex 1)
Hello,
works on my side for Windows 10 and just tested it with Windows 11.

(Used the .pak file from the zip in my post that you've quoted.)
exe file is elexresman (as of Febr. 2018) for Elex 1

https://upload.worldofplayers.de/files12/resman_for_Elex_1.png


Yep, that's right, I want to mod Elex 2. In the screenshot you can see that I'm using elex2resman (version 0.2.1) and I'm trying to open the .pak file for Elex 2 as well. However, the problem I have is exactly the same as the one you discussed for Elex 1 in the thread I responded to, I'm just looking for advice on how to make it work as it should and I thought you could know some solution.

https://i.ibb.co/Ntbb3SD/ELEX2-RESMAN-not-working-properly.png

tombom81
18.08.2024, 08:54
In the screenshot you can see that I'm using elex2resman (version 0.2.1) and I'm trying to open the .pak file for Elex 2 as well. Yeah, my bad. Sorry.
What happens when you drag'n drop the pak from this zip file (https://upload.worldofplayers.de/files12/m_2_test.zip) onto the E2 resman?

zmrd7
18.08.2024, 11:20
Yeah, my bad. Sorry.
What happens when you drag'n drop the pak from this zip file (https://upload.worldofplayers.de/files12/m_2_test.zip) onto the E2 resman?

No harm done, don't worry about it. ;)


But I'm afraid nothing's changed. It still just insert path to the file but doesn't show any options. :(

https://i.ibb.co/sFdb9jN/ELEX2-RESMAN-test.png

tombom81
18.08.2024, 12:15
Then there's one last option, I guess: execute the resman exe (with the pak file as a parameter) from a command prompt (console window (https://www.lifewire.com/how-to-open-command-prompt-2618089)).
(The console window opens for example if you execute cmd.exe.)

(You may execute cmd.exe as an administrator, but usually that's not required.)

zmrd7
18.08.2024, 13:07
Then there's one last option, I guess: execute the resman exe (with the pak file as a parameter) from a command prompt (console window (https://www.lifewire.com/how-to-open-command-prompt-2618089)).
(The console window opens for example if you execute cmd.exe.)

(You may execute cmd.exe as an administrator, but usually that's not required.)


That's a bit advanced for my IT skills. :D I searched Google but I guess I can't quite figure out how to add a parameter? I found something like %1 = "Path" but I guess that's not the correct syntax. Can you help me a bit with the correct syntax to do it as you mentioned?
https://i.ibb.co/F4Q4ypG/ELEX2-RESMAN-test-cmd.png

tombom81
18.08.2024, 13:41
Use ...\elex2resman.exe "D:\DOWNLOADS\ElexMOD\m_2_test\m_2_test.pak\"

(... means the path D:\ and so on, of course)

zmrd7
18.08.2024, 15:31
Use ...\elex2resman.exe "D:\DOWNLOADS\ElexMOD\m_2_test\m_2_test.pak\"

(... means the path D:\ and so on, of course)

Oh, it's that simple, no special command, I'm a dumb, thanks. :D


And finally it works as it should! Thanks a lot, you're my hero! :D

https://i.ibb.co/T2Sqt50/ELEX2-RESMAN-test-cmd2.png

LiveToWin
10.10.2024, 07:18
Всех приветствую. Подскажите, в w_effect.hdr есть команда "class bCMotion Offset", которая позволяет поворачивать, двигать и менять размер объекта/эффекта. Есть ли где-нибудь расшифровка этой команды? Например, какие переменные отвечают за поворот, а какие за смещение объекта/эффекта?
Полный вид "пустой" команды - class bCMotion Offset = <00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 3F>

Hello everyone. In w_effect.hdr there is a command "class bCMotion Offset", which allows you to rotate, move and change the size of an object/effect. Please tell me, is there a transcript of this command somewhere? For example, which variables are responsible for the rotation and which for the displacement of an object/effect?
Full "empty" command view - class bCMotion Offset = <00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 3F>
Sorry for bad english. :(

tombom81
10.10.2024, 12:00
Hello everyone. In w_effect.hdr there is a command "class bCMotion Offset", which allows you to rotate, move and change the size of an object/effect.Hello.

How do you know that you can rotate? Or change the size? Did you try it out?
If it worked why do you need


For example, which variables are responsible for the rotation and which for the displacement of an object/effect?

This should represent 7 floats assumedly (IEEE-754 notation).

Full "empty" command view - class bCMotion Offset = <00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 3F>

Usually offsets are defined like so
class bCMatrix LocalOffset = (mat 0.199999988 0 0 0 0 0.199999988 0 0 0 0 0.199999988 0 0 0 0 1);
Where the first 12 floats form a rotation matrix. Can be converted to 3 euler angels.
Last 4 floats are position (x y z w=1) where y is height for assets like a house for example.

00 00 80 3F is float 1.0. (See IEEE-754 Floating Point Converters)

My guess concerning the 7 floats:
3 euler angels (3 floats)
position (3 floats)
scale (1.0 here)

edit seems there's a separate scaling vector:
class bCVector Scaling = (vec 17 1 17);

LiveToWin
10.10.2024, 12:41
How do you know that you can rotate? Or change the size? Did you try it out?
If it worked why do you need

Я попробовал подставлять значения от других объектов/эффектов из того же w_effect.hdr и нужный мне объект менял свою позицию, вращался и даже менял размер.
I tried inserting values ​​from other objects/effects from w_effect.hdr and my object changed its position, rotated and even changed size.


Usually offsets are defined like so
class bCMatrix LocalOffset = (mat 0.199999988 0 0 0 0 0.199999988 0 0 0 0 0.199999988 0 0 0 0 1);
Where the first 12 floats form a rotation matrix. Can be converted to 3 euler angels.
Last 4 floats are position (x y z w=1) where y is height for assets like a house for example.


00 00 80 3F is float 1.0. (See IEEE-754 Floating Point Converters)

Если переменные для class bCMatrix LocalOffset такие же, как и для class bCMotion Offset, то похоже это как раз то, что мне и нужно. Огромное спасибо.
If the variables for class bCMatrix LocalOffset are the same as for class bCMotion Offset, then this seems to be exactly what I need. Thank you so much. ;)

LiveToWin
11.10.2024, 19:13
Experimentally revealed the purpose of command blocks. The first three blocks are responsible for displacement along the X, Y and Z axes. The next three are responsible for rotation along the X, Y, Z axes, but the rotation is somehow affected by the last block - “00 00 80 3F”.
For example, with the command line: Offset = <00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 80 3F>
The object (let it be a knife) in Jax's hands looks like this.
https://i.ibb.co/tzs0R5q/20241011205107-1.jpg (https://ibb.co/tzs0R5q)


Command line: Offset = <00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F3 04 35 3F 00 00 00 00 F3 04 35 3F> (found it in some .elextpl files)
The knife rotates along the Y axis approximately 90 degrees.
https://i.ibb.co/QN7GNpS/20241011205243-1.jpg (https://ibb.co/QN7GNpS)


Command line: Offset = <00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F3 04 35 3F 00 00 00 00 00 00 80 3F>
In this case knife rotates, but is also deformed.
https://i.ibb.co/1dVkvQw/20241011205430-1.jpg (https://ibb.co/1dVkvQw)


The question is how does the last block affect the rotation of the object and what values ​​​​need to be set so that the object does not deform? And the million-dollar question - how can I turn the knife in Jax’s hands so it’s blade facing outward? :)

tombom81
11.10.2024, 19:41
Experimentally revealed the purpose of command blocks.Cool!:cool:


Command line: Offset = <00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 F3 04 35 3F 00 00 00 00 00 00 80 3F>
In this case knife rotates, but is also deformed.
https://i.ibb.co/1dVkvQw/20241011205430-1.jpg (https://ibb.co/1dVkvQw)


The question is how does the last block affect the rotation of the object and what values ​​​​need to be set so that the object does not deform?Well, I'd say the knife is just bigger, not deformed? But if the last float where an overall scale it had to be bigger than 1.0 (0000803F).

To be more flexible on testing I'd suggest to use cheat engine (CE) to locate the seven floats in RAM. Using 112233445566773F as a search pattern. Once found you could change any of those floats "on the fly" in CE.
Say the found address were 0x1A000000 then the first rotation float starts at 0x1A00000C in RAM.
floats 0 to 6, 0xC= 3x4

(didn't test this but should work.)

(Did you change eff_weapons_sword_horn_...?)

LiveToWin
13.10.2024, 11:22
Do not know how I done it. But it just work fine for me. :D

https://youtu.be/IT4d7OktaSI

https://youtu.be/d4m8x63l7bg

tombom81
13.10.2024, 11:51
Do not know how I done it.Are you kidding me? If you don't answer my question don't expect any help further.

LiveToWin
13.10.2024, 12:15
(Did you change eff_weapons_sword_horn_...?)
Are you kidding me? If you don't answer my question don't expect any help further..

Okay... ;)
Just pasted "FX_Knife_Jax" in class gCEffectProxy Effect/EffectMedium/EffectHigh for my new knife .elextlp (I spotted this in the Legendary mod).
Created a new "FX_Knife_Jax" in w_effect:


"FX_Knife_Jax" { Timestamp = (time 131232709990000000 "Thu Nov 10 17:03:19 2016");
class gCEffectCommandSequence2 {
Version = 1;
Properties {
class bTRefPropertyArray<class gCEffectCommand *> Commands = [
class gCEffectCommandSpawnEntity {
Version = 1;
Properties {
class eCTemplateEntityProxy TemplateEntity = {C1CE4BCA-AD65-327B-17BA-13BAE325E6B8};
class bCString BoneName = "Slot_RightHand";
enum gEEffectLink CoordinateSystem = gEEffectLink_TargetBone;
class bCMotion Offset = <00 00 00 00 00 00 00 00 00 00 80 40 00 00 00 00 F3 04 35 3F 00 00 00 00 F3 04 35 BF>;
class bCVector Scaling = (vec 1 1 1);
bool Detachable = False;
float TimeOffset = 0;
}
ClassData {
}
}
];
class bTRefPropertyArray<class gCEffectCondition *> Conditions = [
];
}
ClassData {
[class gCEffectCommandSequence2, Version 1] = < >;
}
}
}

Euler angel and last float simple found in w_effect for some effect (I don't remember exactly for what effect.)
C1CE4BCA-AD65-327B-17BA-13BAE325E6B8 - new "empty" tpl. A dummy object that is used only in w_effect, since rotation for an object in the main knife tpl somehow does not work correctly (or I don’t understand how it works).

tombom81
13.10.2024, 12:33
Thanks.;)


Just paste "FX_Knife_Jax" in class gCEffectProxy Effect/EffectMedium/EffectHigh for my new knife .elextlp (I spotted this in the Legendary mod)."Legendary Mod". cool! (Seems, I've overseen that mod...)

LiveToWin
13.10.2024, 12:45
Thanks.;)
"Legendary Mod". cool! (Seems, I've overseen that mod...)
It adds a lot of new weapons to the game. Lightsabers for example.