<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Eliot's Forum - Unreal File Format]]></title>
		<link>https://eliotvu.com/forum/</link>
		<description><![CDATA[Eliot's Forum - https://eliotvu.com/forum]]></description>
		<pubDate>Mon, 04 May 2026 13:44:18 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Hi is it possible to get better names for obfuscated packages?]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=565</link>
			<pubDate>Tue, 18 Mar 2025 17:38:38 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=650">rubening87</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=565</guid>
			<description><![CDATA[im trying to make an obfuscator but i think uexplorer would be really nice for that. I know theres a dll to run ueexplorer as deobfuscator mode but i never managed to find it and get it working. if someone tells me exactly how to get it it will be really appreciated..<br />
<br />
but in that case will it handle this situation :<br />
<br />
Some obfuscated classes are tricky, because some variables of different type, are called the same way, so replacing words in a text editor is not a good idea (not even talking about local variables in different functions..) i talk about global vars .. for example a string being the same name as an int. and so on.. it can happen and it doesnt make it easier... <br />
<br />
i was wonder is there a way to differ those names in the data table or something making them read differently when i see the files as text?]]></description>
			<content:encoded><![CDATA[im trying to make an obfuscator but i think uexplorer would be really nice for that. I know theres a dll to run ueexplorer as deobfuscator mode but i never managed to find it and get it working. if someone tells me exactly how to get it it will be really appreciated..<br />
<br />
but in that case will it handle this situation :<br />
<br />
Some obfuscated classes are tricky, because some variables of different type, are called the same way, so replacing words in a text editor is not a good idea (not even talking about local variables in different functions..) i talk about global vars .. for example a string being the same name as an int. and so on.. it can happen and it doesnt make it easier... <br />
<br />
i was wonder is there a way to differ those names in the data table or something making them read differently when i see the files as text?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Arrays Data Structure]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=525</link>
			<pubDate>Sun, 04 Dec 2022 22:34:01 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=608">RadiantBastard</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=525</guid>
			<description><![CDATA[<span style="color: #000000;" class="mycode_color">Hey Eliot, do you have any information on the structure of arrays?<br />
<br />
I'm working on a project and need to modify an array to change the flight characteristics for an aircraft in this game. I used UE Explorer to view the actor class in the .u file, and pull the array from the default properties. </span><br />
<br />
Array<span style="color: #000000;" class="mycode_color">=(Points=/* Array type was not detected. */,InVal=0,OutVal=0,ArriveTangent=0,LeaveTangent=0,InterpMode=0)</span><br />
<br />
<span style="color: #000000;" class="mycode_color">I used UE Explorer's Default Properties table buffer </span><span style="color: #000000;" class="mycode_color">and Hex Workshop </span><span style="color: #000000;" class="mycode_color">to extract the raw binary for the array. </span><br />
<br />
<span style="color: #000000;" class="mycode_color">(Formatted in 32 bit chunks so it's</span><span style="color: #000000;" class="mycode_color"> readable. Almost certainly NOT the correct formatting.)</span><br />
<br />
<span style="color: #006400;" class="mycode_color">4F 3A 00 00    00 00 00 00    ED 40 00 00    00 00 00 00</span><br />
D7 01 00 00    00 00 00 00    E9 23 00 00    00 00 00 00  <br />
01 37 00 00    00 00 00 00    23 02 00 00    00 00 00 00    <br />
B7 01 00 00    00 00 00 00    03 00 00 00    F6 23 00 00    <br />
00 00 00 00    94 17 00 00    00 00 00 00    04 00 00 00    <br />
00 00 00 00    00 00 00 00    FC 34 00 00    00 00 00 00    <br />
94 17 00 00    00 00 00 00    04 00 00 00    00 00 00 00    <br />
00 00 00 00    24 02 00 00    00 00 00 00    94 17 00 00    <br />
00 00 00 00    04 00 00 00    00 00 00 00    00 00 00 00    <br />
BD 25 00 00    00 00 00 00    94 17 00 00    00 00 00 00    <br />
04 00 00 00    00 00 00 00    00 00 00 00    EB 23 00 00    <br />
00 00 00 00    C0 07 00 00    00 00 00 00    01 00 00 00    <br />
00 00 00 00    00 BC 32 00    00 00 00 00    00 F6 23 00    <br />
00 00 00 00    00 94 17 00    00 00 00 00    00 04 00 00    <br />
00 00 00 00    00 00 00 7A    44 FC 34 00    00 00 00 00    <br />
00 94 17 00    00 00 00 00    00 04 00 00    00 00 00 00    <br />
00 00 00 80    3E 24 02 00    00 00 00 00    00 94 17 00    <br />
00 00 00 00    00 04 00 00    00 00 00 00    00 00 00 00    <br />
00 BD 25 00    00 00 00 00    00 94 17 00    00 00 00 00    <br />
00 04 00 00    00 00 00 00    00 00 00 00    00 EB 23 00    <br />
00 00 00 00    00 C0 07 00    00 00 00 00    00 01 00 00    <br />
00 00 00 00    00 00 BC 32    00 00 00 00    00 00 F6 23    <br />
00 00 00 00    00 00 94 17    00 00 00 00    00 00 04 00    <br />
00 00 00 00    00 00 00 A0    8C 45 FC 34    00 00 00 00    <br />
00 00 94 17    00 00 00 00    00 00 04 00    00 00 00 00    <br />
00 00 00 00    80 3F 24 02    00 00 00 00    00 00 94 17    <br />
00 00 00 00    00 00 04 00    00 00 00 00    00 00 00 00    <br />
00 00 BD 25    00 00 00 00    00 00 94 17    00 00 00 00    <br />
00 00 04 00    00 00 00 00    00 00 00 00    00 00 EB 23    <br />
00 00 00 00    00 00 C0 07    00 00 00 00    00 00 01 00    <br />
00 00 00 00    00 00 00 BC    32 00 00 00    00 00 00 BC    <br />
<span style="color: #006400;" class="mycode_color">32 00 00 00    00 00 00 <br />
</span><br />
<br />
<br />
<span style="color: #006400;" class="mycode_color">My next step is just brute force it by searching for known values, and trying to put the pieces together. I figured I'd ask if you had any information on the structure of the compiled arrays to make the process of bashing my head into my keyboard a little bit less headachey. <img src="https://eliotvu.com/forum/images/smilies/biggrin.gif" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /> Any and all info on the matter is greatly appreciated. </span>]]></description>
			<content:encoded><![CDATA[<span style="color: #000000;" class="mycode_color">Hey Eliot, do you have any information on the structure of arrays?<br />
<br />
I'm working on a project and need to modify an array to change the flight characteristics for an aircraft in this game. I used UE Explorer to view the actor class in the .u file, and pull the array from the default properties. </span><br />
<br />
Array<span style="color: #000000;" class="mycode_color">=(Points=/* Array type was not detected. */,InVal=0,OutVal=0,ArriveTangent=0,LeaveTangent=0,InterpMode=0)</span><br />
<br />
<span style="color: #000000;" class="mycode_color">I used UE Explorer's Default Properties table buffer </span><span style="color: #000000;" class="mycode_color">and Hex Workshop </span><span style="color: #000000;" class="mycode_color">to extract the raw binary for the array. </span><br />
<br />
<span style="color: #000000;" class="mycode_color">(Formatted in 32 bit chunks so it's</span><span style="color: #000000;" class="mycode_color"> readable. Almost certainly NOT the correct formatting.)</span><br />
<br />
<span style="color: #006400;" class="mycode_color">4F 3A 00 00    00 00 00 00    ED 40 00 00    00 00 00 00</span><br />
D7 01 00 00    00 00 00 00    E9 23 00 00    00 00 00 00  <br />
01 37 00 00    00 00 00 00    23 02 00 00    00 00 00 00    <br />
B7 01 00 00    00 00 00 00    03 00 00 00    F6 23 00 00    <br />
00 00 00 00    94 17 00 00    00 00 00 00    04 00 00 00    <br />
00 00 00 00    00 00 00 00    FC 34 00 00    00 00 00 00    <br />
94 17 00 00    00 00 00 00    04 00 00 00    00 00 00 00    <br />
00 00 00 00    24 02 00 00    00 00 00 00    94 17 00 00    <br />
00 00 00 00    04 00 00 00    00 00 00 00    00 00 00 00    <br />
BD 25 00 00    00 00 00 00    94 17 00 00    00 00 00 00    <br />
04 00 00 00    00 00 00 00    00 00 00 00    EB 23 00 00    <br />
00 00 00 00    C0 07 00 00    00 00 00 00    01 00 00 00    <br />
00 00 00 00    00 BC 32 00    00 00 00 00    00 F6 23 00    <br />
00 00 00 00    00 94 17 00    00 00 00 00    00 04 00 00    <br />
00 00 00 00    00 00 00 7A    44 FC 34 00    00 00 00 00    <br />
00 94 17 00    00 00 00 00    00 04 00 00    00 00 00 00    <br />
00 00 00 80    3E 24 02 00    00 00 00 00    00 94 17 00    <br />
00 00 00 00    00 04 00 00    00 00 00 00    00 00 00 00    <br />
00 BD 25 00    00 00 00 00    00 94 17 00    00 00 00 00    <br />
00 04 00 00    00 00 00 00    00 00 00 00    00 EB 23 00    <br />
00 00 00 00    00 C0 07 00    00 00 00 00    00 01 00 00    <br />
00 00 00 00    00 00 BC 32    00 00 00 00    00 00 F6 23    <br />
00 00 00 00    00 00 94 17    00 00 00 00    00 00 04 00    <br />
00 00 00 00    00 00 00 A0    8C 45 FC 34    00 00 00 00    <br />
00 00 94 17    00 00 00 00    00 00 04 00    00 00 00 00    <br />
00 00 00 00    80 3F 24 02    00 00 00 00    00 00 94 17    <br />
00 00 00 00    00 00 04 00    00 00 00 00    00 00 00 00    <br />
00 00 BD 25    00 00 00 00    00 00 94 17    00 00 00 00    <br />
00 00 04 00    00 00 00 00    00 00 00 00    00 00 EB 23    <br />
00 00 00 00    00 00 C0 07    00 00 00 00    00 00 01 00    <br />
00 00 00 00    00 00 00 BC    32 00 00 00    00 00 00 BC    <br />
<span style="color: #006400;" class="mycode_color">32 00 00 00    00 00 00 <br />
</span><br />
<br />
<br />
<span style="color: #006400;" class="mycode_color">My next step is just brute force it by searching for known values, and trying to put the pieces together. I figured I'd ask if you had any information on the structure of the compiled arrays to make the process of bashing my head into my keyboard a little bit less headachey. <img src="https://eliotvu.com/forum/images/smilies/biggrin.gif" alt="Big Grin" title="Big Grin" class="smilie smilie_4" /> Any and all info on the matter is greatly appreciated. </span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Decompiling Switch statments]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=107</link>
			<pubDate>Sat, 21 Mar 2015 15:46:22 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=137">ELiZ</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=107</guid>
			<description><![CDATA[Hi.<br />
<br />
I'm trying to decompiling some switchstatments, and are hitting a brick wall, most of them are decompiled correctly, but some don't.<br />
<br />
I'm using UTPT and UE Explorer to check my results.<br />
I also has an almost complete original source of the game as well.<br />
<br />
<br />
<br />
The original Code:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>static event string GetDescriptionText(string PropName)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch (PropName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "ServerName":&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return default.GRIPropDescText[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "AdminName":&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return default.GRIPropDescText[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "AdminEmail":&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return default.GRIPropDescText[2];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MessageOfTheDay":&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return default.GRIPropDescText[3];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return Super.GetDescriptionText(PropName);<br />
}</code></div></div><br />
UE Explorer<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>static event string GetDescriptionText(string PropName)<br />
{<br />
    switch(PropName)<br />
    {<br />
        case "ServerName":<br />
            return default.GRIPropDescText[0];<br />
        case "AdminName":<br />
            return default.GRIPropDescText[1];<br />
        case "AdminEmail":<br />
            return default.GRIPropDescText[2];<br />
        case "MessageOfTheDay":<br />
            return default.GRIPropDescText[3];<br />
        default:<br />
            return super(Info).GetDescriptionText(PropName);<br />
    }<br />
    //return;    <br />
}</code></div></div><br />
UTPT<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>function string GetDescriptionText(string PropName)<br />
{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch (PropName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "ServerName":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Default.GRIPropDescText[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "AdminName":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Default.GRIPropDescText[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "AdminEmail":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Default.GRIPropDescText[2];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MessageOfTheDay":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Default.GRIPropDescText[3];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return Super.GetDescriptionText(PropName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
}</code></div></div><br />
<br />
The problem is "return Super.GetDescriptionText(PropName);" witch in the original code is after the switch code, UTPT places it correctly, but UE explorer places it in default:<br />
My code is even worse, and that is why I was looking into why.<br />
<br />
Here is the raw hex:<br />
<img src="http://i60.tinypic.com/j60vhs.png" loading="lazy"  alt="[Image: j60vhs.png]" class="mycode_img" /><br />
<br />
I suspect that the problem occurs because the default: is empty in the switch<br />
<br />
This is from Unreal Tournament Package File Format(v1.6).pdf by Antonio Cordero.<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Size is the size of the Condition<br />
<br />
expression. The end of the switch<br />
is unknown except maybe for<br />
some hints inside it.</blockquote>
<br />
<br />
It might also be just this game that has the issue(America's Army 2.5), but I hope that you have an idea how to detect the end of the switch in this cases.]]></description>
			<content:encoded><![CDATA[Hi.<br />
<br />
I'm trying to decompiling some switchstatments, and are hitting a brick wall, most of them are decompiled correctly, but some don't.<br />
<br />
I'm using UTPT and UE Explorer to check my results.<br />
I also has an almost complete original source of the game as well.<br />
<br />
<br />
<br />
The original Code:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>static event string GetDescriptionText(string PropName)<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch (PropName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "ServerName":&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return default.GRIPropDescText[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "AdminName":&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return default.GRIPropDescText[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "AdminEmail":&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return default.GRIPropDescText[2];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MessageOfTheDay":&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return default.GRIPropDescText[3];<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;return Super.GetDescriptionText(PropName);<br />
}</code></div></div><br />
UE Explorer<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>static event string GetDescriptionText(string PropName)<br />
{<br />
    switch(PropName)<br />
    {<br />
        case "ServerName":<br />
            return default.GRIPropDescText[0];<br />
        case "AdminName":<br />
            return default.GRIPropDescText[1];<br />
        case "AdminEmail":<br />
            return default.GRIPropDescText[2];<br />
        case "MessageOfTheDay":<br />
            return default.GRIPropDescText[3];<br />
        default:<br />
            return super(Info).GetDescriptionText(PropName);<br />
    }<br />
    //return;    <br />
}</code></div></div><br />
UTPT<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>function string GetDescriptionText(string PropName)<br />
{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;switch (PropName)<br />
&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "ServerName":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Default.GRIPropDescText[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "AdminName":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Default.GRIPropDescText[1];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "AdminEmail":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Default.GRIPropDescText[2];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case "MessageOfTheDay":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return Default.GRIPropDescText[3];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return Super.GetDescriptionText(PropName);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return;<br />
}</code></div></div><br />
<br />
The problem is "return Super.GetDescriptionText(PropName);" witch in the original code is after the switch code, UTPT places it correctly, but UE explorer places it in default:<br />
My code is even worse, and that is why I was looking into why.<br />
<br />
Here is the raw hex:<br />
<img src="http://i60.tinypic.com/j60vhs.png" loading="lazy"  alt="[Image: j60vhs.png]" class="mycode_img" /><br />
<br />
I suspect that the problem occurs because the default: is empty in the switch<br />
<br />
This is from Unreal Tournament Package File Format(v1.6).pdf by Antonio Cordero.<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Size is the size of the Condition<br />
<br />
expression. The end of the switch<br />
is unknown except maybe for<br />
some hints inside it.</blockquote>
<br />
<br />
It might also be just this game that has the issue(America's Army 2.5), but I hope that you have an idea how to detect the end of the switch in this cases.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[[INFO] Structures]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=85</link>
			<pubDate>Sat, 31 Aug 2013 06:51:29 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=150">sh!ft</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=85</guid>
			<description><![CDATA[Because I have no idea why Eliot chose to make a de-compiler for a multi-platform system like Unreal in a platform dependent virtual machine like dotNet... (No offense) Here are the basic C Structures to get you started. Decompiler basics use heuristics based on a Control Flow Graph (CFG) in which you attempt to deconstruct an assembly of some sort into something similar to the languages Abstract Syntax Tree (AST). So read the UnrealScript API and model a tree before you bother with actual deconstruction. It's foolish to start with deconstruction and work up to an AST. If you need help understanding such things and how you should model it, I suggest you try something like: Backus–Naur Form? Maybe? It's really up to you. Personally I use a linked list/tree format. I'm super lazy so I try not to bother with anything overly unnecessary like making helper functions, etc. For the most part my deserialize function just casts the structures to the data, and then lazy links the pointers. (Please, if you don't understand lazy linking, you shouldn't be writing a decompiler.)<br />
<br />
This is just something to get you started. I personally wrote mine in C.. Cause I really find C++ becomes far too extravagant for absolutely no reason except programmer preference half the time. <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#pragma pack(push, 1)<br />
<br />
/**<br />
 * If you really wanna bother going around and writing your own stream processor like Eliot just to ensure your endianness is correct, do it.<br />
 * Otherwise, let's use this compiler/preprocessor trick to so we can literally cast a block of memory to our structure and not have to write parsing code ourselves.<br />
 */<br />
#ifdef __INTEL__<br />
#undef __INTEL__<br />
#endif <br />
#define __INTEL__ 1<br />
#define __INTEL_BYTE_ORDER__ 1<br />
<br />
typedef void* VPTR;<br />
typedef unsigned __int32 DWORD, NAME_INDEX;<br />
typedef signed __int32 INT, UBOOL;<br />
typedef unsigned __int8 TCHAR;<br />
<br />
struct FPair<br />
{<br />
&nbsp;&nbsp;VPTR Key;<br />
&nbsp;&nbsp;VPTR Value;<br />
};<br />
<br />
struct FMap<br />
{<br />
&nbsp;&nbsp;FPair *Data;<br />
&nbsp;&nbsp;DWORD ArrayNum;<br />
&nbsp;&nbsp;DWORD ArrayMax;<br />
&nbsp;&nbsp;DWORD *Hashes;<br />
&nbsp;&nbsp;DWORD HashCount;<br />
};<br />
<br />
struct FArray<br />
{<br />
&nbsp;&nbsp;void *Data;<br />
&nbsp;&nbsp;DWORD ArrayNum;<br />
&nbsp;&nbsp;DWORD ArrayMax;<br />
};<br />
<br />
struct FGuid<br />
{<br />
&nbsp;&nbsp;DWORD A;<br />
&nbsp;&nbsp;DWORD B;<br />
&nbsp;&nbsp;DWORD C;<br />
&nbsp;&nbsp;DWORD D;<br />
};<br />
<br />
struct FString<br />
{<br />
&nbsp;&nbsp;TCHAR *Data;<br />
&nbsp;&nbsp;INT Length;<br />
&nbsp;&nbsp;INT Limit;<br />
};<br />
<br />
struct FName<br />
{<br />
&nbsp;&nbsp;NAME_INDEX Index;<br />
&nbsp;&nbsp;WORD Number;<br />
&nbsp;&nbsp;WORD Size;<br />
};<br />
<br />
struct FPackageFileSummary<br />
{<br />
&nbsp;&nbsp;INT Tag;<br />
&nbsp;&nbsp;INT FileVersion;<br />
&nbsp;&nbsp;DWORD PackageFlags;<br />
&nbsp;&nbsp;INT NameCount;<br />
&nbsp;&nbsp;INT NameOffset;<br />
&nbsp;&nbsp;INT ExportCount;<br />
&nbsp;&nbsp;INT ExportOffset;<br />
&nbsp;&nbsp;INT ImportCount;<br />
&nbsp;&nbsp;INT ImportOffset;<br />
&nbsp;&nbsp;FGuid Guid;<br />
&nbsp;&nbsp;FArray Generations;<br />
};<br />
<br />
struct FArchiveItem<br />
{<br />
&nbsp;&nbsp;FString _Filename_;<br />
&nbsp;&nbsp;DWORD Offset;<br />
&nbsp;&nbsp;DWORD Size;<br />
&nbsp;&nbsp;DWORD Flags;<br />
};<br />
<br />
struct FArchiveHeader<br />
{<br />
&nbsp;&nbsp;INT Magic;<br />
&nbsp;&nbsp;INT TableOffset;<br />
&nbsp;&nbsp;INT FileSize;<br />
&nbsp;&nbsp;INT Ver;<br />
&nbsp;&nbsp;INT CRC;<br />
&nbsp;&nbsp;FArray _Items_;<br />
};<br />
<br />
struct FArchive<br />
{<br />
&nbsp;&nbsp;INT ArVer;<br />
&nbsp;&nbsp;INT ArNetVer;<br />
&nbsp;&nbsp;INT ArLicenseeVer;<br />
&nbsp;&nbsp;UBOOL ArIsLoading;<br />
&nbsp;&nbsp;UBOOL ArIsSaving;<br />
&nbsp;&nbsp;UBOOL ArIsTrans;<br />
&nbsp;&nbsp;UBOOL ArIsPersistent;<br />
&nbsp;&nbsp;UBOOL ArForEdit;<br />
&nbsp;&nbsp;UBOOL ArForClient;<br />
&nbsp;&nbsp;UBOOL ArForServer;<br />
&nbsp;&nbsp;UBOOL ArIsError;<br />
&nbsp;&nbsp;UBOOL ArIsCriticalError;<br />
&nbsp;&nbsp;UBOOL ArContainsCode;<br />
&nbsp;&nbsp;INT ArMaxSerializeSize;<br />
&nbsp;&nbsp;INT Stopper;<br />
};<br />
<br />
#pragma pop</code></div></div>]]></description>
			<content:encoded><![CDATA[Because I have no idea why Eliot chose to make a de-compiler for a multi-platform system like Unreal in a platform dependent virtual machine like dotNet... (No offense) Here are the basic C Structures to get you started. Decompiler basics use heuristics based on a Control Flow Graph (CFG) in which you attempt to deconstruct an assembly of some sort into something similar to the languages Abstract Syntax Tree (AST). So read the UnrealScript API and model a tree before you bother with actual deconstruction. It's foolish to start with deconstruction and work up to an AST. If you need help understanding such things and how you should model it, I suggest you try something like: Backus–Naur Form? Maybe? It's really up to you. Personally I use a linked list/tree format. I'm super lazy so I try not to bother with anything overly unnecessary like making helper functions, etc. For the most part my deserialize function just casts the structures to the data, and then lazy links the pointers. (Please, if you don't understand lazy linking, you shouldn't be writing a decompiler.)<br />
<br />
This is just something to get you started. I personally wrote mine in C.. Cause I really find C++ becomes far too extravagant for absolutely no reason except programmer preference half the time. <br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>#pragma pack(push, 1)<br />
<br />
/**<br />
 * If you really wanna bother going around and writing your own stream processor like Eliot just to ensure your endianness is correct, do it.<br />
 * Otherwise, let's use this compiler/preprocessor trick to so we can literally cast a block of memory to our structure and not have to write parsing code ourselves.<br />
 */<br />
#ifdef __INTEL__<br />
#undef __INTEL__<br />
#endif <br />
#define __INTEL__ 1<br />
#define __INTEL_BYTE_ORDER__ 1<br />
<br />
typedef void* VPTR;<br />
typedef unsigned __int32 DWORD, NAME_INDEX;<br />
typedef signed __int32 INT, UBOOL;<br />
typedef unsigned __int8 TCHAR;<br />
<br />
struct FPair<br />
{<br />
&nbsp;&nbsp;VPTR Key;<br />
&nbsp;&nbsp;VPTR Value;<br />
};<br />
<br />
struct FMap<br />
{<br />
&nbsp;&nbsp;FPair *Data;<br />
&nbsp;&nbsp;DWORD ArrayNum;<br />
&nbsp;&nbsp;DWORD ArrayMax;<br />
&nbsp;&nbsp;DWORD *Hashes;<br />
&nbsp;&nbsp;DWORD HashCount;<br />
};<br />
<br />
struct FArray<br />
{<br />
&nbsp;&nbsp;void *Data;<br />
&nbsp;&nbsp;DWORD ArrayNum;<br />
&nbsp;&nbsp;DWORD ArrayMax;<br />
};<br />
<br />
struct FGuid<br />
{<br />
&nbsp;&nbsp;DWORD A;<br />
&nbsp;&nbsp;DWORD B;<br />
&nbsp;&nbsp;DWORD C;<br />
&nbsp;&nbsp;DWORD D;<br />
};<br />
<br />
struct FString<br />
{<br />
&nbsp;&nbsp;TCHAR *Data;<br />
&nbsp;&nbsp;INT Length;<br />
&nbsp;&nbsp;INT Limit;<br />
};<br />
<br />
struct FName<br />
{<br />
&nbsp;&nbsp;NAME_INDEX Index;<br />
&nbsp;&nbsp;WORD Number;<br />
&nbsp;&nbsp;WORD Size;<br />
};<br />
<br />
struct FPackageFileSummary<br />
{<br />
&nbsp;&nbsp;INT Tag;<br />
&nbsp;&nbsp;INT FileVersion;<br />
&nbsp;&nbsp;DWORD PackageFlags;<br />
&nbsp;&nbsp;INT NameCount;<br />
&nbsp;&nbsp;INT NameOffset;<br />
&nbsp;&nbsp;INT ExportCount;<br />
&nbsp;&nbsp;INT ExportOffset;<br />
&nbsp;&nbsp;INT ImportCount;<br />
&nbsp;&nbsp;INT ImportOffset;<br />
&nbsp;&nbsp;FGuid Guid;<br />
&nbsp;&nbsp;FArray Generations;<br />
};<br />
<br />
struct FArchiveItem<br />
{<br />
&nbsp;&nbsp;FString _Filename_;<br />
&nbsp;&nbsp;DWORD Offset;<br />
&nbsp;&nbsp;DWORD Size;<br />
&nbsp;&nbsp;DWORD Flags;<br />
};<br />
<br />
struct FArchiveHeader<br />
{<br />
&nbsp;&nbsp;INT Magic;<br />
&nbsp;&nbsp;INT TableOffset;<br />
&nbsp;&nbsp;INT FileSize;<br />
&nbsp;&nbsp;INT Ver;<br />
&nbsp;&nbsp;INT CRC;<br />
&nbsp;&nbsp;FArray _Items_;<br />
};<br />
<br />
struct FArchive<br />
{<br />
&nbsp;&nbsp;INT ArVer;<br />
&nbsp;&nbsp;INT ArNetVer;<br />
&nbsp;&nbsp;INT ArLicenseeVer;<br />
&nbsp;&nbsp;UBOOL ArIsLoading;<br />
&nbsp;&nbsp;UBOOL ArIsSaving;<br />
&nbsp;&nbsp;UBOOL ArIsTrans;<br />
&nbsp;&nbsp;UBOOL ArIsPersistent;<br />
&nbsp;&nbsp;UBOOL ArForEdit;<br />
&nbsp;&nbsp;UBOOL ArForClient;<br />
&nbsp;&nbsp;UBOOL ArForServer;<br />
&nbsp;&nbsp;UBOOL ArIsError;<br />
&nbsp;&nbsp;UBOOL ArIsCriticalError;<br />
&nbsp;&nbsp;UBOOL ArContainsCode;<br />
&nbsp;&nbsp;INT ArMaxSerializeSize;<br />
&nbsp;&nbsp;INT Stopper;<br />
};<br />
<br />
#pragma pop</code></div></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Function Object Precedence]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=77</link>
			<pubDate>Sat, 15 Jun 2013 09:02:32 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=137">ELiZ</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=77</guid>
			<description><![CDATA[Hi <br />
<br />
I'm writing a decompiler for an old game called America's Army 2.8.5<br />
I'm coming along well, but have gotten a bit stuck on operator Precedence. <br />
<br />
I see in the release notes for 1.2.2.1 that you have solved this<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Function precedences are now decompiled for example prior update “(4 + 5) * 4” was decompiled as “4 + 5 * 4”</blockquote>
<br />
What information do I need?<br />
<br />
I have precedence on the native operators defenitions in Core.Object.<br />
<br />
native(173) static final operator(<span style="font-weight: bold;" class="mycode_b">18</span>) Float % (float A, float B);<br />
native(174) static final operator(<span style="font-weight: bold;" class="mycode_b">20</span>) Float + (float A, float B);<br />
native(175) static final operator(<span style="font-weight: bold;" class="mycode_b">20</span>) Float - (float A, float B);<br />
native(176) static final operator(<span style="font-weight: bold;" class="mycode_b">24</span>) Bool < (float A, float B);<br />
<br />
There is also a property in the function definitions, witch is called OperatorPrecedence(After iNative)<br />
<br />
Have I missed any input needed?<br />
<br />
The lower the Precedence, the higher the importance of keeping it together?<br />
<br />
As I understand it the compiler moves around the operators in a statement so the "rules" will produce a correct output<br />
<br />
Can you provide any information on this subject(OperatorPrecedence)?]]></description>
			<content:encoded><![CDATA[Hi <br />
<br />
I'm writing a decompiler for an old game called America's Army 2.8.5<br />
I'm coming along well, but have gotten a bit stuck on operator Precedence. <br />
<br />
I see in the release notes for 1.2.2.1 that you have solved this<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Function precedences are now decompiled for example prior update “(4 + 5) * 4” was decompiled as “4 + 5 * 4”</blockquote>
<br />
What information do I need?<br />
<br />
I have precedence on the native operators defenitions in Core.Object.<br />
<br />
native(173) static final operator(<span style="font-weight: bold;" class="mycode_b">18</span>) Float % (float A, float B);<br />
native(174) static final operator(<span style="font-weight: bold;" class="mycode_b">20</span>) Float + (float A, float B);<br />
native(175) static final operator(<span style="font-weight: bold;" class="mycode_b">20</span>) Float - (float A, float B);<br />
native(176) static final operator(<span style="font-weight: bold;" class="mycode_b">24</span>) Bool < (float A, float B);<br />
<br />
There is also a property in the function definitions, witch is called OperatorPrecedence(After iNative)<br />
<br />
Have I missed any input needed?<br />
<br />
The lower the Precedence, the higher the importance of keeping it together?<br />
<br />
As I understand it the compiler moves around the operators in a statement so the "rules" will produce a correct output<br />
<br />
Can you provide any information on this subject(OperatorPrecedence)?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Hex Editing UPK Files]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=73</link>
			<pubDate>Thu, 02 May 2013 15:33:41 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=1">eliot</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=73</guid>
			<description><![CDATA[The XCOM: Enemy Unknown modding community has written an article on how to mod the game. Even though this is aimed towards XCOM it's still very general and should work for any game that's proven to be moddable.<br />
<br />
Link: <a href="http://wiki.tesnexus.com/index.php/Hex_editing_UPK_files" target="_blank" rel="noopener" class="mycode_url">Hex Editing UPK Files</a>]]></description>
			<content:encoded><![CDATA[The XCOM: Enemy Unknown modding community has written an article on how to mod the game. Even though this is aimed towards XCOM it's still very general and should work for any game that's proven to be moddable.<br />
<br />
Link: <a href="http://wiki.tesnexus.com/index.php/Hex_editing_UPK_files" target="_blank" rel="noopener" class="mycode_url">Hex Editing UPK Files</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Function Headers]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=53</link>
			<pubDate>Sat, 22 Dec 2012 05:07:13 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=70">twinj</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=53</guid>
			<description><![CDATA[I am attempting to understand the function header so as to determine if anything in it needs to be updated if I re-write bytes. In my function I have used an instance variable to act as a loop count and guard. This modifies the amount of index's that are read.<br />
<br />
Now I understand that the last 16 bytes in the 48 byte header have size and position information.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>DWORD LineNumber 'in class'. In UE Explorer this can be confirmed lines however do not match perfectly.. <br />
<br />
DWORD unknown<br />
<br />
DWORD TextPos ??? I am assuming 'text' to be data loaded in memory. In my short analysis this always seems to be higher than EndOffset and the cave size (endoffset - TextPos) seems to always be a multiple of 4. So I am thinking this has something to do with scripts virtual size. I believe that if you rewrite a script and change the amount of index reads that you must recalculate this..<br />
<br />
DWORD EndOffset This is the 'size' of the script from the end of the header to the start of the End of Script token 0x53. Note this size does not include actual load size. Some tokens get expanded to 8 bytes rather than 4. <br />
<br />
BYTEs Script Script Code<br />
<br />
BYTES 0x53 plus 15 more. There seems to be some flags in this part. I do not understand the bytes at the end of a function</code></div></div><br />
The reason I am asking is because I have re written bytes to do a while loop instead of adding an item manually one by one so I can edit the amount added to a dynamic array rather than get stuck with the hardcoded size.<br />
<br />
I am still getting a little stuck on which INDEX objects get 8 bytes and when to add e.g: in jump code.<br />
<br />
Anyway, so what is this header and footer information and do I need to adjust anything when Index reads change?[/code][/quote]]]></description>
			<content:encoded><![CDATA[I am attempting to understand the function header so as to determine if anything in it needs to be updated if I re-write bytes. In my function I have used an instance variable to act as a loop count and guard. This modifies the amount of index's that are read.<br />
<br />
Now I understand that the last 16 bytes in the 48 byte header have size and position information.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>DWORD LineNumber 'in class'. In UE Explorer this can be confirmed lines however do not match perfectly.. <br />
<br />
DWORD unknown<br />
<br />
DWORD TextPos ??? I am assuming 'text' to be data loaded in memory. In my short analysis this always seems to be higher than EndOffset and the cave size (endoffset - TextPos) seems to always be a multiple of 4. So I am thinking this has something to do with scripts virtual size. I believe that if you rewrite a script and change the amount of index reads that you must recalculate this..<br />
<br />
DWORD EndOffset This is the 'size' of the script from the end of the header to the start of the End of Script token 0x53. Note this size does not include actual load size. Some tokens get expanded to 8 bytes rather than 4. <br />
<br />
BYTEs Script Script Code<br />
<br />
BYTES 0x53 plus 15 more. There seems to be some flags in this part. I do not understand the bytes at the end of a function</code></div></div><br />
The reason I am asking is because I have re written bytes to do a while loop instead of adding an item manually one by one so I can edit the amount added to a dynamic array rather than get stuck with the hardcoded size.<br />
<br />
I am still getting a little stuck on which INDEX objects get 8 bytes and when to add e.g: in jump code.<br />
<br />
Anyway, so what is this header and footer information and do I need to adjust anything when Index reads change?[/code][/quote]]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Deserializing Unreal Packages - Tables]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=44</link>
			<pubDate>Tue, 06 Nov 2012 11:05:43 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=1">eliot</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=44</guid>
			<description><![CDATA[Today's article is about deserializing tables:<br />
<a href="http://eliotvu.com/news/view/35/deserializing-unreal-packages-tables" target="_blank" rel="noopener" class="mycode_url">http://eliotvu.com/news/view/35/deserial...ges-tables</a><br />
<br />
Any feedback is welcome!]]></description>
			<content:encoded><![CDATA[Today's article is about deserializing tables:<br />
<a href="http://eliotvu.com/news/view/35/deserializing-unreal-packages-tables" target="_blank" rel="noopener" class="mycode_url">http://eliotvu.com/news/view/35/deserial...ges-tables</a><br />
<br />
Any feedback is welcome!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Deserializing Unreal Packages - Data Structures]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=43</link>
			<pubDate>Sat, 03 Nov 2012 19:00:03 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=1">eliot</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=43</guid>
			<description><![CDATA[I have decided to make a small series of tutorials explaining the structure of Unreal Engine packages, though beware this will not be a full guide on the whole package structure data, there is no point in that as UE Explorer can understand most of this. The whole point is to help people understand the structures when modding the packages using hex-editing tools.<br />
<br />
Here's the link =)<br />
<a href="http://eliotvu.com/news/view/34/deserializing-unreal-packages-data-structures" target="_blank" rel="noopener" class="mycode_url">http://eliotvu.com/news/view/34/deserial...structures</a>]]></description>
			<content:encoded><![CDATA[I have decided to make a small series of tutorials explaining the structure of Unreal Engine packages, though beware this will not be a full guide on the whole package structure data, there is no point in that as UE Explorer can understand most of this. The whole point is to help people understand the structures when modding the packages using hex-editing tools.<br />
<br />
Here's the link =)<br />
<a href="http://eliotvu.com/news/view/34/deserializing-unreal-packages-data-structures" target="_blank" rel="noopener" class="mycode_url">http://eliotvu.com/news/view/34/deserial...structures</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Any chance of publishing your findings?]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=42</link>
			<pubDate>Fri, 02 Nov 2012 15:37:57 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=52">ahnold11</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=42</guid>
			<description><![CDATA[UE Explorer is quite the lovely, and useful piece of software.  Must have been quite the undertaking to develop the thorough understanding of upks, UnrealScript bytecode and all that.<br />
<br />
Have you ever given any thought into collecting all that info into a document or forum post or whatnot? For those interested in games modding it could be some incredibly useful information.<br />
<br />
Or is this information that is proprietary and can not be shared, or maybe it just took a lot of hard work to figure out and learn and you'd rather not share it? (or take too long to write all down <img src="https://eliotvu.com/forum/images/smilies/wink.gif" alt="Wink" title="Wink" class="smilie smilie_2" /> ).<br />
<br />
Personally myself, I have a very minor modification I'd like to do to an Unreal Engine game. Specifically there is a single UE Script I'd like to change, however no mod tools have been released, so changing a Script would require changing the bytecode, which requires rather intimate knowledge of the bytecode structure itself and the upk organization.  Something that for such a small mod is probably not worth spending all the time to learn the whole thing.  (Quite literally it's modifying a single line: duplicating a function call, an addition, and division).<br />
<br />
Having some form of documentation I could study to learn what I needed to accomplish the task, would actually make the small change a viable thing to try.<br />
<br />
No worries if there is any thing preventing you from doing it, I was just curious myself if this was something you might do (or have already done, and I've just missed it).  <br />
<br />
Either way, thanks for all the work making such a useful and interesting tool.]]></description>
			<content:encoded><![CDATA[UE Explorer is quite the lovely, and useful piece of software.  Must have been quite the undertaking to develop the thorough understanding of upks, UnrealScript bytecode and all that.<br />
<br />
Have you ever given any thought into collecting all that info into a document or forum post or whatnot? For those interested in games modding it could be some incredibly useful information.<br />
<br />
Or is this information that is proprietary and can not be shared, or maybe it just took a lot of hard work to figure out and learn and you'd rather not share it? (or take too long to write all down <img src="https://eliotvu.com/forum/images/smilies/wink.gif" alt="Wink" title="Wink" class="smilie smilie_2" /> ).<br />
<br />
Personally myself, I have a very minor modification I'd like to do to an Unreal Engine game. Specifically there is a single UE Script I'd like to change, however no mod tools have been released, so changing a Script would require changing the bytecode, which requires rather intimate knowledge of the bytecode structure itself and the upk organization.  Something that for such a small mod is probably not worth spending all the time to learn the whole thing.  (Quite literally it's modifying a single line: duplicating a function call, an addition, and division).<br />
<br />
Having some form of documentation I could study to learn what I needed to accomplish the task, would actually make the small change a viable thing to try.<br />
<br />
No worries if there is any thing preventing you from doing it, I was just curious myself if this was something you might do (or have already done, and I've just missed it).  <br />
<br />
Either way, thanks for all the work making such a useful and interesting tool.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Feel free to ask any questions regarding .upk files etc]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=37</link>
			<pubDate>Fri, 26 Oct 2012 19:01:10 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=1">eliot</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=37</guid>
			<description><![CDATA[Seeing this being empty and well finding a lot discussions on google about the .upk structure and people trying to reverse-engineer my .NTL files <img src="https://eliotvu.com/forum/images/smilies/lightbulb.gif" alt="Idea" title="Idea" class="smilie smilie_18" /> I'm surprised to not see any questions here regarding the structure of .NTL, .u, and .upk files.<br />
<br />
So yeah feel free to make a new thread asking anything related to bytecodes, structures of files, and whatever else there might be.]]></description>
			<content:encoded><![CDATA[Seeing this being empty and well finding a lot discussions on google about the .upk structure and people trying to reverse-engineer my .NTL files <img src="https://eliotvu.com/forum/images/smilies/lightbulb.gif" alt="Idea" title="Idea" class="smilie smilie_18" /> I'm surprised to not see any questions here regarding the structure of .NTL, .u, and .upk files.<br />
<br />
So yeah feel free to make a new thread asking anything related to bytecodes, structures of files, and whatever else there might be.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Help modifying a packge code]]></title>
			<link>https://eliotvu.com/forum/showthread.php?tid=33</link>
			<pubDate>Fri, 17 Aug 2012 23:16:59 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://eliotvu.com/forum/member.php?action=profile&uid=39">sskillz</a>]]></dc:creator>
			<guid isPermaLink="false">https://eliotvu.com/forum/showthread.php?tid=33</guid>
			<description><![CDATA[Hello,<br />
I've decompressed a Unreal Engine 3 package using this tool from gildor.org (Unreal Package Decompressor). And I found the address of the variable I wanted to to modify using your great UE Explorer. I than changed it using a <br />
hex editor (Was just a single byte). But now I need to compress the package back so the game won't notice it changed, right now<br />
as uncompressed the game crushes.<br />
Do you know how I go about recompressing it?<br />
<br />
Thanks ahead.]]></description>
			<content:encoded><![CDATA[Hello,<br />
I've decompressed a Unreal Engine 3 package using this tool from gildor.org (Unreal Package Decompressor). And I found the address of the variable I wanted to to modify using your great UE Explorer. I than changed it using a <br />
hex editor (Was just a single byte). But now I need to compress the package back so the game won't notice it changed, right now<br />
as uncompressed the game crushes.<br />
Do you know how I go about recompressing it?<br />
<br />
Thanks ahead.]]></content:encoded>
		</item>
	</channel>
</rss>