<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://planeshift.top-ix.org//pswiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=IFire</id>
	<title>PSwiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://planeshift.top-ix.org//pswiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=IFire"/>
	<link rel="alternate" type="text/html" href="https://planeshift.top-ix.org//pswiki/index.php/Special:Contributions/IFire"/>
	<updated>2026-04-07T10:21:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://planeshift.top-ix.org//pswiki/index.php?title=PSUnreal&amp;diff=20961</id>
		<title>PSUnreal</title>
		<link rel="alternate" type="text/html" href="https://planeshift.top-ix.org//pswiki/index.php?title=PSUnreal&amp;diff=20961"/>
		<updated>2015-04-23T16:25:55Z</updated>

		<summary type="html">&lt;p&gt;IFire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Import a level ==&lt;br /&gt;
&lt;br /&gt;
In the FBX exporter set the Units to &amp;quot;Centimeters&amp;quot;, this will scale the model up 100 times, as in UE the units are 1 unit = 1cm, while in CS they are 1 unit = 1 meter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Import a char ==&lt;br /&gt;
&lt;br /&gt;
You cannot import a skeleton by itself, if you export only the skeleton from max with FBX, UE will import nothing, you need some geometry associated&lt;br /&gt;
&lt;br /&gt;
OLD (Bake Animations fixes this problem): FBX export seems to have issues if the controllers or bones have a &amp;quot;orientation constraint&amp;quot; on the Motion panel under assign controller. With that it doesn&#039;t export, without it does&lt;br /&gt;
&lt;br /&gt;
OLD (Bake Animations fixes this problem): UE doesn&#039;t import skeletons with multiple root bones, need to have one&lt;br /&gt;
&lt;br /&gt;
You cannot import DDS files, unless they are specific format. Better to just import PNGs.&lt;br /&gt;
&lt;br /&gt;
Only way I found to import a char is to hide all helpers, shapes, then select geometry and bones, and &amp;quot;Export Selected&amp;quot; to FBX with &amp;quot;Bake Animations&amp;quot; selected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine inner working ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;	MyProjectServer.exe!UIpNetDriver::InitListen(FNetworkNotify * InNotify, FURL &amp;amp; LocalURL, bool bReuseAddressAndPort, FString &amp;amp; Error) Line 152	C++&lt;br /&gt;
 	MyProjectServer.exe!UWorld::Listen(FURL &amp;amp; InURL) Line 3927	C++&lt;br /&gt;
 	MyProjectServer.exe!UEngine::LoadMap(FWorldContext &amp;amp; WorldContext, FURL URL, UPendingNetGame * Pending, FString &amp;amp; Error) Line 8983	C++&lt;br /&gt;
 	MyProjectServer.exe!UEngine::Browse(FWorldContext &amp;amp; WorldContext, FURL URL, FString &amp;amp; Error) Line 8144	C++&lt;br /&gt;
 	MyProjectServer.exe!UGameInstance::StartGameInstance() Line 262	C++&lt;br /&gt;
 	MyProjectServer.exe!UGameEngine::Init(IEngineLoop * InEngineLoop) Line 465	C++&lt;br /&gt;
 	MyProjectServer.exe!FEngineLoop::Init() Line 1967	C++&lt;br /&gt;
 	MyProjectServer.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 138	C++&lt;br /&gt;
 	MyProjectServer.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 191	C++&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code convertion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
csString -&amp;gt; psString or FString&lt;br /&gt;
&lt;br /&gt;
psStringArray with TArray&amp;lt;psString&amp;gt;&lt;br /&gt;
&lt;br /&gt;
uint -&amp;gt; uint32&lt;br /&gt;
&lt;br /&gt;
csHash&amp;lt;Value,Key&amp;gt; -&amp;gt; TMap&amp;lt;Key,Value&amp;gt; (notice the swap of Key and Value)&lt;br /&gt;
&lt;br /&gt;
csArray&amp;lt;&amp;gt; -&amp;gt; TArray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Types conversion ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FString to char*  -&amp;gt; const char *myData = TCHAR_TO_ANSI(*NameString);&lt;br /&gt;
&lt;br /&gt;
FString to TCHAR -&amp;gt; *myFString&lt;br /&gt;
&lt;br /&gt;
char* to FString  -&amp;gt; ANSI_TO_TCHAR(NameString);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Replace string.Format(&amp;quot;hey %s&amp;quot;, string) with string.Printf(TEXT(&amp;quot;hey %s&amp;quot;), string)&lt;br /&gt;
&lt;br /&gt;
csString.Truncate(5) -&amp;gt; FString.Left(5)&lt;br /&gt;
&lt;br /&gt;
csString.DeleteAt(start,count) -&amp;gt; FString.RemoveAt(start,count)&lt;br /&gt;
&lt;br /&gt;
csString.Downcase() -&amp;gt; FString.ToLower()&lt;br /&gt;
&lt;br /&gt;
output.Insert(0, time_buffer) -&amp;gt; output.InsertAt(0, time_buffer)&lt;br /&gt;
&lt;br /&gt;
output.GetAt(output.Length()-1) -&amp;gt; output [ output.Len()-1 ]&lt;br /&gt;
&lt;br /&gt;
Cross platform types are defined in Platform.h , like uint32. Those can be included with #include &amp;quot;EngineMinimal.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CS_ASSERT() -&amp;gt; check()&lt;br /&gt;
&lt;br /&gt;
strcasecmp and strcmp, I added those two defines, so the code can stay as it is&lt;br /&gt;
&lt;br /&gt;
  #define strcasecmp(expr1,expr2) FCString::Strcmp( ANSI_TO_TCHAR(expr1), ANSI_TO_TCHAR(expr2)) == 0&lt;br /&gt;
  #define strcmp(expr1,expr2) FCString::Stricmp( ANSI_TO_TCHAR(expr1), ANSI_TO_TCHAR(expr2)) == 0&lt;br /&gt;
&lt;br /&gt;
CPrintf(CON_CMDOUTPUT,str.GetDataSafe()); -&amp;gt; UE_LOG(LogTemp, Warning, TEXT(&amp;quot;%s&amp;quot;), str);&lt;br /&gt;
&lt;br /&gt;
time(NULL) -&amp;gt; FString buf = FDateTime().GetDate().ToString();&lt;br /&gt;
&lt;br /&gt;
=== FText and Localization ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FText is Unreal&#039;s class for user viewable strings. It is localizable. See https://docs.unrealengine.com/latest/INT/Programming/UnrealArchitecture/StringHandling/FText/index.html&lt;/div&gt;</summary>
		<author><name>IFire</name></author>
	</entry>
	<entry>
		<id>https://planeshift.top-ix.org//pswiki/index.php?title=PSUnreal&amp;diff=20960</id>
		<title>PSUnreal</title>
		<link rel="alternate" type="text/html" href="https://planeshift.top-ix.org//pswiki/index.php?title=PSUnreal&amp;diff=20960"/>
		<updated>2015-04-23T16:19:52Z</updated>

		<summary type="html">&lt;p&gt;IFire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Import a level ==&lt;br /&gt;
&lt;br /&gt;
In the FBX exporter set the Units to &amp;quot;Centimeters&amp;quot;, this will scale the model up 100 times, as in UE the units are 1 unit = 1cm, while in CS they are 1 unit = 1 meter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Import a char ==&lt;br /&gt;
&lt;br /&gt;
You cannot import a skeleton by itself, if you export only the skeleton from max with FBX, UE will import nothing, you need some geometry associated&lt;br /&gt;
&lt;br /&gt;
OLD (Bake Animations fixes this problem): FBX export seems to have issues if the controllers or bones have a &amp;quot;orientation constraint&amp;quot; on the Motion panel under assign controller. With that it doesn&#039;t export, without it does&lt;br /&gt;
&lt;br /&gt;
OLD (Bake Animations fixes this problem): UE doesn&#039;t import skeletons with multiple root bones, need to have one&lt;br /&gt;
&lt;br /&gt;
You cannot import DDS files, unless they are specific format. Better to just import PNGs.&lt;br /&gt;
&lt;br /&gt;
Only way I found to import a char is to hide all helpers, shapes, then select geometry and bones, and &amp;quot;Export Selected&amp;quot; to FBX with &amp;quot;Bake Animations&amp;quot; selected.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Engine inner working ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;gt;	MyProjectServer.exe!UIpNetDriver::InitListen(FNetworkNotify * InNotify, FURL &amp;amp; LocalURL, bool bReuseAddressAndPort, FString &amp;amp; Error) Line 152	C++&lt;br /&gt;
 	MyProjectServer.exe!UWorld::Listen(FURL &amp;amp; InURL) Line 3927	C++&lt;br /&gt;
 	MyProjectServer.exe!UEngine::LoadMap(FWorldContext &amp;amp; WorldContext, FURL URL, UPendingNetGame * Pending, FString &amp;amp; Error) Line 8983	C++&lt;br /&gt;
 	MyProjectServer.exe!UEngine::Browse(FWorldContext &amp;amp; WorldContext, FURL URL, FString &amp;amp; Error) Line 8144	C++&lt;br /&gt;
 	MyProjectServer.exe!UGameInstance::StartGameInstance() Line 262	C++&lt;br /&gt;
 	MyProjectServer.exe!UGameEngine::Init(IEngineLoop * InEngineLoop) Line 465	C++&lt;br /&gt;
 	MyProjectServer.exe!FEngineLoop::Init() Line 1967	C++&lt;br /&gt;
 	MyProjectServer.exe!GuardedMain(const wchar_t * CmdLine, HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, int nCmdShow) Line 138	C++&lt;br /&gt;
 	MyProjectServer.exe!WinMain(HINSTANCE__ * hInInstance, HINSTANCE__ * hPrevInstance, char * __formal, int nCmdShow) Line 191	C++&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Code convertion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
csString -&amp;gt; psString or FString&lt;br /&gt;
&lt;br /&gt;
psStringArray with TArray&amp;lt;psString&amp;gt;&lt;br /&gt;
&lt;br /&gt;
uint -&amp;gt; uint32&lt;br /&gt;
&lt;br /&gt;
csHash&amp;lt;Value,Key&amp;gt; -&amp;gt; TMap&amp;lt;Key,Value&amp;gt; (notice the swap of Key and Value)&lt;br /&gt;
&lt;br /&gt;
csArray&amp;lt;&amp;gt; -&amp;gt; TArray&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Types conversion ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
FString to char*  -&amp;gt; const char *myData = TCHAR_TO_ANSI(*NameString);&lt;br /&gt;
&lt;br /&gt;
FString to TCHAR -&amp;gt; *myFString&lt;br /&gt;
&lt;br /&gt;
char* to FString  -&amp;gt; ANSI_TO_TCHAR(NameString);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Functions ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Replace string.Format(&amp;quot;hey %s&amp;quot;, string) with string.Printf(TEXT(&amp;quot;hey %s&amp;quot;), string)&lt;br /&gt;
&lt;br /&gt;
csString.Truncate(5) -&amp;gt; FString.Left(5)&lt;br /&gt;
&lt;br /&gt;
csString.DeleteAt(start,count) -&amp;gt; FString.RemoveAt(start,count)&lt;br /&gt;
&lt;br /&gt;
csString.Downcase() -&amp;gt; FString.ToLower()&lt;br /&gt;
&lt;br /&gt;
output.Insert(0, time_buffer) -&amp;gt; output.InsertAt(0, time_buffer)&lt;br /&gt;
&lt;br /&gt;
output.GetAt(output.Length()-1) -&amp;gt; output [ output.Len()-1 ]&lt;br /&gt;
&lt;br /&gt;
Cross platform types are defined in Platform.h , like uint32. Those can be included with #include &amp;quot;EngineMinimal.h&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CS_ASSERT() -&amp;gt; check()&lt;br /&gt;
&lt;br /&gt;
strcasecmp and strcmp, I added those two defines, so the code can stay as it is&lt;br /&gt;
&lt;br /&gt;
  #define strcasecmp(expr1,expr2) FCString::Strcmp( ANSI_TO_TCHAR(expr1), ANSI_TO_TCHAR(expr2)) == 0&lt;br /&gt;
  #define strcmp(expr1,expr2) FCString::Stricmp( ANSI_TO_TCHAR(expr1), ANSI_TO_TCHAR(expr2)) == 0&lt;br /&gt;
&lt;br /&gt;
CPrintf(CON_CMDOUTPUT,str.GetDataSafe()); -&amp;gt; UE_LOG(LogTemp, Warning, TEXT(&amp;quot;%s&amp;quot;), str);&lt;br /&gt;
&lt;br /&gt;
time(NULL) -&amp;gt; FString buf = FDateTime().GetDate().ToString();&lt;br /&gt;
&lt;br /&gt;
=== FText and Localization ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Unreal API&amp;gt; FText represents a &amp;quot;display string&amp;quot;. Any text you want to display to the user should be handled with FText. The FText class has built-in support for localization, and can handle text content that is localized and stored in a lookup table, as well as text that is localized at runtime, such as numbers, dates, times, and formatted text.&lt;/div&gt;</summary>
		<author><name>IFire</name></author>
	</entry>
</feed>